-
-
Notifications
You must be signed in to change notification settings - Fork 8.5k
Description
Before MP_REGISTER_ROOT_POINTER was added, a port could define additional root pointers in its mpconfigport.h. It made sense to refer to them via a distinct macro, hence MP_STATE_PORT, even though all ports alias that to MP_STATE_VM.
Now the MP_REGISTER_ROOT_POINTER feature can be used to implement root pointers for modules that mpstate.h does not know about, such as modules in extmod, or user c module. We could also consider moving some config-optional stuff that's currently in mpstate.h to use MP_REGISTER_ROOT_POINTER. But things defined with MP_REGISTER_ROOT_POINTER are no longer "port". So for example, in modbluetooth_nimble.c we use MP_STATE_PORT(bluetooth_nimble_root_pointers), but the only thing that's "port" about them is that bluetooth can be enabled by the port/board.
So I see three options:
- Remove
MP_STATE_PORTand just change everything to useMP_STATE_MEM. - Replace
MP_STATE_PORTwithMP_STATE_ROOT_POINTERand have that aliased toMP_STATE_VMin a common location (i.e. not ports'mpconfigport.h). - Same as (2) but move the generated root pointers into their own struct, and add a fourth field (between
threadandvm) onmp_state_ctx_t, and haveMP_STATE_ROOT_POINTERaccess that specifically.
(My vote is for (3), these variables are no more "vm" than they are "port", and should find a new home )
FWIW, This came up as a question on Discord because the embed port does not define MP_STATE_PORT.