mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'feature/lwip_task_affinity' into 'master'
lwip: allow setting LwIP tasks affinity via sdkconfig See merge request idf/esp-idf!2913
This commit is contained in:
commit
91f7a9a9e7
@ -10,6 +10,12 @@ config FREERTOS_UNICORE
|
||||
This is needed when e.g. another process needs complete control
|
||||
over the second core.
|
||||
|
||||
# This invisible config value sets the value of tskNO_AFFINITY in task.h.
|
||||
# Intended to be used as a constant from other Kconfig files.
|
||||
# Value is (32-bit) INT_MAX.
|
||||
config FREERTOS_NO_AFFINITY
|
||||
hex
|
||||
default 0x7FFFFFFF
|
||||
|
||||
choice FREERTOS_CORETIMER
|
||||
prompt "Xtensa timer to use as the FreeRTOS tick source"
|
||||
|
@ -93,6 +93,9 @@ extern "C" {
|
||||
#define tskKERNEL_VERSION_MINOR 2
|
||||
#define tskKERNEL_VERSION_BUILD 0
|
||||
|
||||
/**
|
||||
* @brief Argument of xTaskCreatePinnedToCore indicating that task has no affinity
|
||||
*/
|
||||
#define tskNO_AFFINITY INT_MAX
|
||||
|
||||
/**
|
||||
|
@ -124,6 +124,8 @@ extern void _xt_coproc_init(void);
|
||||
#define SYSTICK_INTR_ID (ETS_INTERNAL_TIMER1_INTR_SOURCE+ETS_INTERNAL_INTR_SOURCE_OFF)
|
||||
#endif
|
||||
|
||||
_Static_assert(tskNO_AFFINITY == CONFIG_FREERTOS_NO_AFFINITY, "incorrect tskNO_AFFINITY value");
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
unsigned port_xSchedulerRunning[portNUM_PROCESSORS] = {0}; // Duplicate of inaccessible xSchedulerRunning; needed at startup to avoid counting nesting
|
||||
|
@ -443,6 +443,31 @@ config TCPIP_TASK_STACK_SIZE
|
||||
Configure TCP/IP task stack size, used by LWIP to process multi-threaded TCP/IP operations.
|
||||
Setting this stack too small will result in stack overflow crashes.
|
||||
|
||||
choice TCPIP_TASK_AFFINITY
|
||||
prompt "TCP/IP task affinity"
|
||||
default TCPIP_TASK_AFFINITY_NO_AFFINITY
|
||||
help
|
||||
Allows setting LwIP tasks affinity, i.e. whether the task is pinned to
|
||||
CPU0, pinned to CPU1, or allowed to run on any CPU.
|
||||
Currently this applies to "TCP/IP" task and "Ping" task.
|
||||
|
||||
config TCPIP_TASK_AFFINITY_NO_AFFINITY
|
||||
bool "No affinity"
|
||||
config TCPIP_TASK_AFFINITY_CPU0
|
||||
bool "CPU0"
|
||||
config TCPIP_TASK_AFFINITY_CPU1
|
||||
bool "CPU1"
|
||||
depends on !FREERTOS_UNICORE
|
||||
|
||||
endchoice
|
||||
|
||||
config TCPIP_TASK_AFFINITY
|
||||
hex
|
||||
default FREERTOS_NO_AFFINITY if TCPIP_TASK_AFFINITY_NO_AFFINITY
|
||||
default 0x0 if TCPIP_TASK_AFFINITY_CPU0
|
||||
default 0x1 if TCPIP_TASK_AFFINITY_CPU1
|
||||
|
||||
|
||||
menuconfig PPP_SUPPORT
|
||||
bool "Enable PPP support (new/experimental)"
|
||||
default n
|
||||
|
@ -426,16 +426,17 @@ sys_mbox_free(sys_mbox_t *mbox)
|
||||
sys_thread_t
|
||||
sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
|
||||
{
|
||||
xTaskHandle CreatedTask;
|
||||
xTaskHandle created_task;
|
||||
portBASE_TYPE result;
|
||||
|
||||
result = xTaskCreate(thread, name, stacksize, arg, prio, &CreatedTask);
|
||||
result = xTaskCreatePinnedToCore(thread, name, stacksize, arg, prio, &created_task,
|
||||
CONFIG_TCPIP_TASK_AFFINITY);
|
||||
|
||||
if (result == pdPASS) {
|
||||
return CreatedTask;
|
||||
} else {
|
||||
if (result != pdPASS) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return created_task;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
Loading…
Reference in New Issue
Block a user