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:
Ivan Grokhotkov 2018-09-18 15:10:17 +08:00
commit 91f7a9a9e7
5 changed files with 42 additions and 5 deletions

View File

@ -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"

View File

@ -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
/**

View File

@ -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

View File

@ -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

View File

@ -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;
}
/*-----------------------------------------------------------------------------------*/