DPDK  22.11.0
Typedefs | Enumerations | Functions
rte_launch.h File Reference

Go to the source code of this file.


typedef int() lcore_function_t(void *)


enum  rte_lcore_state_t { WAIT, RUNNING }
enum  rte_rmt_call_main_t { SKIP_MAIN = 0, CALL_MAIN }


int rte_eal_remote_launch (lcore_function_t *f, void *arg, unsigned worker_id)
int rte_eal_mp_remote_launch (lcore_function_t *f, void *arg, enum rte_rmt_call_main_t call_main)
enum rte_lcore_state_t rte_eal_get_lcore_state (unsigned int worker_id)
int rte_eal_wait_lcore (unsigned worker_id)
void rte_eal_mp_wait_lcore (void)

Detailed Description

Launch tasks on other lcores

Definition in file rte_launch.h.

Typedef Documentation

◆ lcore_function_t

typedef int() lcore_function_t(void *)

Definition of a remote launch function.

examples/bond/main.c, examples/distributor/main.c, examples/dma/dmafwd.c, and examples/packet_ordering/main.c.

Definition at line 31 of file rte_launch.h.

Enumeration Type Documentation

◆ rte_lcore_state_t

State of an lcore.


waiting for new command


executing command

Definition at line 21 of file rte_launch.h.

◆ rte_rmt_call_main_t

This enum indicates whether the main core must execute the handler launched on all logical cores.


lcore handler not executed by main core.


lcore handler executed by main core.

Definition at line 73 of file rte_launch.h.

Function Documentation

◆ rte_eal_remote_launch()

int rte_eal_remote_launch ( lcore_function_t f,
void *  arg,
unsigned  worker_id 

Launch a function on another lcore.

To be executed on the MAIN lcore only.

Sends a message to a worker lcore (identified by the worker_id) that is in the WAIT state (this is true after the first call to rte_eal_init()). This can be checked by first calling rte_eal_wait_lcore(worker_id).

When the remote lcore receives the message, it switches to the RUNNING state, then calls the function f with argument arg. Once the execution is done, the remote lcore switches to WAIT state and the return value of f is stored in a local variable to be read using rte_eal_wait_lcore().

The MAIN lcore returns as soon as the message is sent and knows nothing about the completion of f.

Note: This function is not designed to offer optimum performance. It is just a practical way to launch a function on another lcore at initialization time.

fThe function to be called.
argThe argument for the function.
worker_idThe identifier of the lcore on which the function should be executed.
  • 0: Success. Execution of function f started on the remote lcore.
  • (-EBUSY): The remote lcore is not in a WAIT state.
  • (-EPIPE): Error reading or writing pipe to worker thread
examples/bbdev_app/main.c, examples/bond/main.c, examples/distributor/main.c, examples/dma/dmafwd.c, examples/ethtool/ethtool-app/main.c, examples/eventdev_pipeline/main.c, examples/helloworld/main.c, examples/l2fwd-keepalive/main.c, examples/multi_process/simple_mp/main.c, examples/ntb/ntb_fwd.c, examples/packet_ordering/main.c, examples/timer/main.c, examples/vhost/main.c, examples/vhost_crypto/main.c, examples/vm_power_manager/main.c, and examples/vmdq_dcb/main.c.

◆ rte_eal_mp_remote_launch()

int rte_eal_mp_remote_launch ( lcore_function_t f,
void *  arg,
enum rte_rmt_call_main_t  call_main 

Launch a function on all lcores.

Check that each WORKER lcore is in a WAIT state, then call rte_eal_remote_launch() for each lcore.

fThe function to be called.
argThe argument for the function.
call_mainIf call_main set to SKIP_MAIN, the MAIN lcore does not call the function. If call_main is set to CALL_MAIN, the function is also called on main before returning. In any case, the main lcore returns as soon as it finished its job and knows nothing about the completion of f on the other lcores.
  • 0: Success. Execution of function f started on all remote lcores.
  • (-EBUSY): At least one remote lcore is not in a WAIT state. In this case, no message is sent to any of the lcores.
examples/ip_fragmentation/main.c, examples/ip_pipeline/main.c, examples/ip_reassembly/main.c, examples/ipsec-secgw/ipsec-secgw.c, examples/ipv4_multicast/main.c, examples/l2fwd-crypto/main.c, examples/l2fwd-event/main.c, examples/l2fwd-jobstats/main.c, examples/l2fwd/main.c, examples/l3fwd-graph/main.c, examples/l3fwd-power/main.c, examples/l3fwd/main.c, examples/link_status_interrupt/main.c, examples/multi_process/client_server_mp/mp_server/main.c, examples/multi_process/symmetric_mp/main.c, examples/pipeline/main.c, examples/qos_meter/main.c, examples/qos_sched/main.c, examples/server_node_efd/server/main.c, and examples/vmdq/main.c.

◆ rte_eal_get_lcore_state()

enum rte_lcore_state_t rte_eal_get_lcore_state ( unsigned int  worker_id)

Get the state of the lcore identified by worker_id.

To be executed on the MAIN lcore only.

worker_idThe identifier of the lcore.
The state of the lcore.
examples/bond/main.c, examples/ip_pipeline/thread.c, examples/l2fwd-keepalive/main.c, and examples/pipeline/thread.c.

◆ rte_eal_wait_lcore()

int rte_eal_wait_lcore ( unsigned  worker_id)

Wait until an lcore finishes its job.

To be executed on the MAIN lcore only.

If the lcore identified by the worker_id is in RUNNING state, wait until the lcore finishes its job and moves to the WAIT state.

worker_idThe identifier of the lcore.
  • 0: If the remote launch function was never called on the lcore identified by the worker_id.
  • The value that was returned by the previous remote launch function call.
examples/bbdev_app/main.c, examples/bond/main.c, examples/distributor/main.c, examples/ethtool/ethtool-app/main.c, examples/ip_fragmentation/main.c, examples/ip_reassembly/main.c, examples/ipsec-secgw/ipsec-secgw.c, examples/ipv4_multicast/main.c, examples/l2fwd-crypto/main.c, examples/l2fwd-jobstats/main.c, examples/l2fwd-keepalive/main.c, examples/l2fwd/main.c, examples/l3fwd-graph/main.c, examples/l3fwd-power/main.c, examples/link_status_interrupt/main.c, examples/packet_ordering/main.c, examples/qos_meter/main.c, examples/vhost/main.c, examples/vhost_crypto/main.c, and examples/vmdq/main.c.

◆ rte_eal_mp_wait_lcore()

void rte_eal_mp_wait_lcore ( void  )

Wait until all lcores finish their jobs.

To be executed on the MAIN lcore only. Issue an rte_eal_wait_lcore() for every lcore. The return values are ignored.

After a call to rte_eal_mp_wait_lcore(), the caller can assume that all worker lcores are in a WAIT state.

examples/dma/dmafwd.c, examples/eventdev_pipeline/main.c, examples/helloworld/main.c, examples/l2fwd-event/main.c, examples/l3fwd/main.c, examples/multi_process/simple_mp/main.c, examples/ntb/ntb_fwd.c, and examples/vm_power_manager/main.c.