dev: _with_ptr process node calls

Type: improvement
Change-Id: Ib392d74e7629cef5d335e4320a71ceec25ddb020
Signed-off-by: Damjan Marion <damjan.marion@gmail.com>
This commit is contained in:
Damjan Marion
2024-10-23 18:38:18 +02:00
committed by Florin Coras
parent d794af6771
commit 46beb0d48b
2 changed files with 60 additions and 0 deletions
+11
View File
@@ -104,6 +104,11 @@ typedef void (vnet_dev_rx_queue_op_no_rv_t) (vlib_main_t *,
vnet_dev_rx_queue_t *);
typedef void (vnet_dev_tx_queue_op_no_rv_t) (vlib_main_t *,
vnet_dev_tx_queue_t *);
typedef vnet_dev_rv_t (vnet_dev_op_with_ptr_t) (vlib_main_t *, vnet_dev_t *,
void *);
typedef vnet_dev_rv_t (vnet_dev_port_op_with_ptr_t) (vlib_main_t *,
vnet_dev_port_t *,
void *);
typedef u16 vnet_dev_queue_id_t;
typedef u16 vnet_dev_bus_index_t;
@@ -612,6 +617,9 @@ vnet_dev_rv_t vnet_dev_process_call_op (vlib_main_t *, vnet_dev_t *,
vnet_dev_op_t *);
vnet_dev_rv_t vnet_dev_process_call_op_no_rv (vlib_main_t *, vnet_dev_t *,
vnet_dev_op_no_rv_t *);
vnet_dev_rv_t vnet_dev_process_call_op_with_ptr (vlib_main_t *, vnet_dev_t *,
vnet_dev_op_with_ptr_t *,
void *);
void vnet_dev_process_call_op_no_wait (vlib_main_t *, vnet_dev_t *,
vnet_dev_op_no_rv_t *);
vnet_dev_rv_t vnet_dev_process_call_port_op (vlib_main_t *, vnet_dev_port_t *,
@@ -619,6 +627,9 @@ vnet_dev_rv_t vnet_dev_process_call_port_op (vlib_main_t *, vnet_dev_port_t *,
vnet_dev_rv_t vnet_dev_process_call_port_op_no_rv (vlib_main_t *vm,
vnet_dev_port_t *,
vnet_dev_port_op_no_rv_t *);
vnet_dev_rv_t
vnet_dev_process_call_port_op_with_ptr (vlib_main_t *, vnet_dev_port_t *,
vnet_dev_port_op_with_ptr_t *, void *);
void vnet_dev_process_call_port_op_no_wait (vlib_main_t *, vnet_dev_port_t *,
vnet_dev_port_op_no_rv_t *);
vnet_dev_rv_t
+49
View File
@@ -20,9 +20,11 @@ typedef enum
VNET_DEV_EVENT_PROCESS_QUIT,
VNET_DEV_EVENT_CALL_OP,
VNET_DEV_EVENT_CALL_OP_NO_RV,
VNET_DEV_EVENT_CALL_OP_WITH_PTR,
VNET_DEV_EVENT_CALL_OP_NO_WAIT,
VNET_DEV_EVENT_CALL_PORT_OP,
VNET_DEV_EVENT_CALL_PORT_OP_NO_RV,
VNET_DEV_EVENT_CALL_PORT_OP_WITH_PTR,
VNET_DEV_EVENT_CALL_PORT_OP_NO_WAIT,
VNET_DEV_EVENT_CLOCK = ~0
} __clib_packed vnet_dev_event_t;
@@ -50,6 +52,11 @@ typedef struct
vnet_dev_op_no_rv_t *op;
} call_op_no_rv;
struct
{
vnet_dev_op_with_ptr_t *op;
void *ptr;
} call_op_with_ptr;
struct
{
vnet_dev_op_no_rv_t *op;
} call_op_no_wait;
@@ -64,6 +71,12 @@ typedef struct
vnet_dev_port_t *port;
} call_port_op_no_rv;
struct
{
vnet_dev_port_op_with_ptr_t *op;
vnet_dev_port_t *port;
void *ptr;
} call_port_op_with_ptr;
struct
{
vnet_dev_port_op_no_rv_t *op;
vnet_dev_port_t *port;
@@ -132,6 +145,10 @@ vnet_dev_process_one_event (vlib_main_t *vm, vnet_dev_t *dev,
ev_log_debug (vm, dev, ed, "call op no rv");
ed->call_op_no_rv.op (vm, dev);
break;
case VNET_DEV_EVENT_CALL_OP_WITH_PTR:
ev_log_debug (vm, dev, ed, "call op woth ptr");
rv = ed->call_op_with_ptr.op (vm, dev, ed->call_op_with_ptr.ptr);
break;
case VNET_DEV_EVENT_CALL_OP_NO_WAIT:
ev_log_debug (vm, dev, ed, "call op no wait");
ed->call_op_no_wait.op (vm, dev);
@@ -144,6 +161,11 @@ vnet_dev_process_one_event (vlib_main_t *vm, vnet_dev_t *dev,
ev_log_debug (vm, dev, ed, "call port op no rv");
ed->call_port_op_no_rv.op (vm, ed->call_port_op_no_rv.port);
break;
case VNET_DEV_EVENT_CALL_PORT_OP_WITH_PTR:
ev_log_debug (vm, dev, ed, "call port op woth ptr");
rv = ed->call_port_op_with_ptr.op (vm, ed->call_port_op_with_ptr.port,
ed->call_port_op_with_ptr.ptr);
break;
case VNET_DEV_EVENT_CALL_PORT_OP_NO_WAIT:
ev_log_debug (vm, dev, ed, "call port op no wait");
ed->call_port_op_no_wait.op (vm, ed->call_port_op_no_wait.port);
@@ -477,6 +499,19 @@ vnet_dev_process_call_op_no_rv (vlib_main_t *vm, vnet_dev_t *dev,
return vnet_dev_process_event_send_and_wait (vm, dev, ed);
}
vnet_dev_rv_t
vnet_dev_process_call_op_with_ptr (vlib_main_t *vm, vnet_dev_t *dev,
vnet_dev_op_with_ptr_t *op, void *p)
{
vnet_dev_event_data_t *ed = vnet_dev_event_data_alloc (vm, dev);
*ed = (vnet_dev_event_data_t){
.event = VNET_DEV_EVENT_CALL_OP_WITH_PTR,
.call_op_with_ptr = { .op = op, .ptr = p },
};
return vnet_dev_process_event_send_and_wait (vm, dev, ed);
}
void
vnet_dev_process_call_op_no_wait (vlib_main_t *vm, vnet_dev_t *dev,
vnet_dev_op_no_rv_t *op)
@@ -516,6 +551,20 @@ vnet_dev_process_call_port_op_no_rv (vlib_main_t *vm, vnet_dev_port_t *port,
return vnet_dev_process_event_send_and_wait (vm, port->dev, ed);
}
vnet_dev_rv_t
vnet_dev_process_call_port_op_with_ptr (vlib_main_t *vm, vnet_dev_port_t *port,
vnet_dev_port_op_with_ptr_t *op,
void *p)
{
vnet_dev_event_data_t *ed = vnet_dev_event_data_alloc (vm, port->dev);
*ed = (vnet_dev_event_data_t){
.event = VNET_DEV_EVENT_CALL_PORT_OP_WITH_PTR,
.call_port_op_with_ptr = { .op = op, .port = port, .ptr = p },
};
return vnet_dev_process_event_send_and_wait (vm, port->dev, ed);
}
void
vnet_dev_process_call_port_op_no_wait (vlib_main_t *vm, vnet_dev_port_t *port,
vnet_dev_port_op_no_rv_t *op)