micropython/extmod
Damien George ef71028f77 extmod/modselect: Add optimisation to use system poll when possible.
A previous commit removed the unix-specific select module implementation
and made unix use the common one.

This commit adds an optimisation so that the system poll function is used
when polling objects that have a file descriptor.  With this optimisation
enabled, if code registers both file-descriptor-based objects, and non-
file-descriptor-based objects with select.poll() then the following occurs:

- the system poll is called for all file-descriptor-based objects with a
  timeout of 1ms

- then the bare-metal polling implementation is used for remaining objects,
  which calls into their ioctl method (which can be in C or Python)

In the case where all objects have file descriptors, the system poll is
called with the full timeout requested by the caller.  That makes it as
efficient as possible in the case everything has a file descriptor.

Benefits of this approach:

- all ports use the same select module implementation

- the unix port now supports polling of all objects and matches bare metal
  implementations

- it's still efficient for existing cases where only files and sockets are
  polled (on unix)

- the bare metal implementation does not change

- polling of SSL objects will now work on unix by calling in to the ioctl
  method on SSL objects (this is required for asyncio ssl support)

Note that extmod/vfs_posix_file.c has poll disable when the optimisation is
enabled, because the code is not reachable when the optimisation is used.

Signed-off-by: Damien George <damien@micropython.org>
2023-08-07 12:11:40 +10:00
..
asyncio extmod/asyncio/uasyncio.py: Add backwards-compatible uasyncio alias. 2023-06-19 18:37:34 +10:00
axtls-include extmod/axtls-include: Add back needed header files for building axTLS. 2023-01-12 16:04:57 +11:00
btstack extmod/btstack: Fix marking of static addresses in set_random_address. 2023-06-14 22:20:20 +10:00
lwip-include all: Unify header guard usage. 2017-07-18 11:57:39 +10:00
mbedtls extmod/mbedtls: Remove brainpool curves from config. 2022-10-22 19:12:46 +11:00
nimble all: Fix spelling mistakes based on codespell check. 2023-04-27 18:03:06 +10:00
extmod.cmake extmod/moddeflate: Add deflate module providing the DeflateIO class. 2023-07-21 19:32:40 +10:00
extmod.mk extmod/moddeflate: Add deflate module providing the DeflateIO class. 2023-07-21 19:32:40 +10:00
font_petme128_8x8.h extmod: Move font_petme128_8x8.h from ports/stm32 to extmod. 2022-05-05 13:30:40 +10:00
machine_bitstream.c extmod: Add machine.bitstream. 2021-08-19 22:50:11 +10:00
machine_bitstream.h extmod: Add machine.bitstream. 2021-08-19 22:50:11 +10:00
machine_i2c.c py/obj: Convert make_new into a mp_obj_type_t slot. 2022-09-19 19:06:15 +10:00
machine_i2c.h py/obj: Convert make_new into a mp_obj_type_t slot. 2022-09-19 19:06:15 +10:00
machine_mem.c py/obj: Convert make_new into a mp_obj_type_t slot. 2022-09-19 19:06:15 +10:00
machine_mem.h all: Use the name MicroPython consistently in comments 2017-07-31 18:35:40 +10:00
machine_pinbase.c py/obj: Convert make_new into a mp_obj_type_t slot. 2022-09-19 19:06:15 +10:00
machine_pinbase.h all: Unify header guard usage. 2017-07-18 11:57:39 +10:00
machine_pulse.c esp8266: Provide custom machine_time_pulse_us that feeds soft WDT. 2019-07-01 22:53:00 +10:00
machine_pulse.h all: Unify header guard usage. 2017-07-18 11:57:39 +10:00
machine_pwm.c extmod/machine_pwm: Remove PWM_INIT and PWM_DUTY_U16_NS config options. 2023-05-04 13:19:19 +10:00
machine_pwm.h extmod/machine_pwm: Factor out machine.PWM bindings to common code. 2021-09-04 16:31:17 +10:00
machine_signal.c py/obj: Convert make_new into a mp_obj_type_t slot. 2022-09-19 19:06:15 +10:00
machine_signal.h all: Unify header guard usage. 2017-07-18 11:57:39 +10:00
machine_spi.c extmod: Add and reorganise compilation guards and includes. 2022-11-11 16:24:32 +11:00
machine_spi.h py/obj: Convert make_new into a mp_obj_type_t slot. 2022-09-19 19:06:15 +10:00
machine_timer.c extmod: Add and reorganise compilation guards and includes. 2022-11-11 16:24:32 +11:00
misc.h all: Rename mp_umodule*, mp_module_umodule* to remove the "u" prefix. 2023-06-08 17:54:04 +10:00
modasyncio.c extmod/asyncio: Rename uasyncio to asyncio. 2023-06-19 17:33:03 +10:00
modbinascii.c extmod/moddeflate: Add deflate module providing the DeflateIO class. 2023-07-21 19:32:40 +10:00
modbluetooth.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modbluetooth.h extmod/btstack: Add support for CCCD to allow client subscriptions. 2023-04-26 11:37:20 +10:00
modbtree.c extmod/modbtree: Undefine queue macros before including berkeley-db. 2023-06-23 15:34:22 +10:00
modcryptolib.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
moddeflate.c extmod/moddeflate: Add deflate module providing the DeflateIO class. 2023-07-21 19:32:40 +10:00
modframebuf.c extmod/modframebuf: Fix crash in FrameBuffer scrolling beyond extents. 2022-12-09 16:47:23 +11:00
modhashlib.c extmod: Update to support mbedtls 3.x. 2023-06-23 15:22:27 +10:00
modheapq.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modjson.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modlwip.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modnetwork.c stm32: Update to use the open-source lib version of cyw43-driver. 2023-03-01 01:27:12 +11:00
modnetwork.h all: Rename UMODULE to MODULE in preprocessor/Makefile vars. 2023-06-08 17:54:11 +10:00
modonewire.c all: Remove third argument to MP_REGISTER_MODULE. 2022-06-02 16:31:37 +10:00
modos.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modplatform.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modplatform.h extmod/modplatform: Set MICROPY_PLATFORM_ARCH on riscv platforms. 2023-06-23 15:34:22 +10:00
modrandom.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modre.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modselect.c extmod/modselect: Add optimisation to use system poll when possible. 2023-08-07 12:11:40 +10:00
modsocket.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modssl_axtls.c extmod/modssl: Add SSLContext class. 2023-06-26 16:34:41 +10:00
modssl_mbedtls.c extmod/modssl_mbedtls: Reference SSLContext from SSLSocket. 2023-08-01 15:12:33 +10:00
modtime.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modtime.h all: Rename *umodule*.h to remove the "u" prefix. 2023-06-08 17:54:14 +10:00
moductypes.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modwebrepl.c all: Rename *umodule*.h to remove the "u" prefix. 2023-06-08 17:54:14 +10:00
modwebsocket.c all: Use MP_REGISTER_EXTENSIBLE_MODULE for overrideable built-ins. 2023-06-08 17:54:21 +10:00
modwebsocket.h all: Rename *umodule*.h to remove the "u" prefix. 2023-06-08 17:54:14 +10:00
mpbthci.c extmod/modbluetooth: Refactor stack/hci/driver/port bindings. 2020-09-08 11:41:31 +10:00
mpbthci.h extmod/nimble: Add support for reading whole HCI UART packets. 2022-06-03 11:53:28 +10:00
network_cyw43.c extmod/network_cyw43: Add power management constants. 2023-05-08 11:56:31 +10:00
network_cyw43.h extmod: Add network-level class binding to cyw43 driver. 2019-06-03 16:47:35 +10:00
network_lwip.c extmod/modnetwork: Allow more extensive port-specific customisation. 2023-03-01 01:26:44 +11:00
network_ninaw10.c extmod/network_ninaw10: Add missing raw socket type to socket(). 2023-04-05 09:46:46 +10:00
network_wiznet5k.c extmod/modnetwork: Use a type protocol to implement NIC functions. 2022-12-15 17:40:06 +11:00
os_dupterm.c all: Rename *umodule*.c to remove the "u" prefix. 2023-06-08 17:54:17 +10:00
utime_mphal.h all: Rename *umodule*.h to remove the "u" prefix. 2023-06-08 17:54:14 +10:00
vfs.c py/obj: Convert make_new into a mp_obj_type_t slot. 2022-09-19 19:06:15 +10:00
vfs.h py/builtin: Clean up and simplify import_stat and builtin_open config. 2022-05-25 13:04:45 +10:00
vfs_blockdev.c all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
vfs_fat.c py/obj: Convert make_new into a mp_obj_type_t slot. 2022-09-19 19:06:15 +10:00
vfs_fat.h extmod: Factor out block-device struct to make independent of fatfs. 2019-10-29 12:12:37 +11:00
vfs_fat_diskio.c tools/uncrustify: Enable more opts to remove space between func and '('. 2020-06-19 22:07:32 +10:00
vfs_fat_file.c py/stream: Add mp_stream___exit___obj that calls mp_stream_close. 2023-07-21 18:49:03 +10:00
vfs_lfs.c extmod: Add and reorganise compilation guards and includes. 2022-11-11 16:24:32 +11:00
vfs_lfs.h extmod: Add VFS littlefs bindings. 2019-10-29 14:17:29 +11:00
vfs_lfsx.c extmod/vfs_lfsx: Fix offset used before range check. 2023-05-19 22:01:10 +10:00
vfs_lfsx_file.c py/stream: Add mp_stream___exit___obj that calls mp_stream_close. 2023-07-21 18:49:03 +10:00
vfs_posix.c all: Rename UMODULE to MODULE in preprocessor/Makefile vars. 2023-06-08 17:54:11 +10:00
vfs_posix.h extmod/vfs: Introduce a C-level VFS protocol, with fast import_stat. 2018-06-06 14:33:42 +10:00
vfs_posix_file.c extmod/modselect: Add optimisation to use system poll when possible. 2023-08-07 12:11:40 +10:00
vfs_reader.c extmod/vfs_reader: Fix mp_reader_new_file to open file in "rb" mode. 2020-08-12 23:40:50 +10:00
virtpin.c py/obj: Add accessors for type slots and use everywhere. 2022-09-19 19:06:07 +10:00
virtpin.h all: Unify header guard usage. 2017-07-18 11:57:39 +10:00