net/ena/base: destroy multiple wait events
Although the ENA DPDK PMD doesn't have to perform any actions for destroying the wait event, some other platforms have to. The macro "ENA_WAIT_EVENT_DESTROY" was renamed to "ENA_WAIT_EVENTS_DESTROY" and also whole implementation responsible for that was moved to a separate function for better readability. Fixes: 3adcba9a8987 ("net/ena: update HAL to the newer version") Cc: stable@dpdk.org Signed-off-by: Michal Krawczyk <mk@semihalf.com> Reviewed-by: Igor Chauskin <igorch@amazon.com> Reviewed-by: Guy Tzalik <gtzalik@amazon.com>
This commit is contained in:
parent
83e8d5378d
commit
04a6a3e63a
@ -1671,6 +1671,22 @@ int ena_com_validate_version(struct ena_com_dev *ena_dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ena_com_free_ena_admin_queue_comp_ctx(struct ena_com_dev *ena_dev,
|
||||||
|
struct ena_com_admin_queue *admin_queue)
|
||||||
|
|
||||||
|
{
|
||||||
|
if (!admin_queue->comp_ctx)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ENA_WAIT_EVENTS_DESTROY(admin_queue);
|
||||||
|
ENA_MEM_FREE(ena_dev->dmadev,
|
||||||
|
admin_queue->comp_ctx,
|
||||||
|
(admin_queue->q_depth * sizeof(struct ena_comp_ctx)));
|
||||||
|
|
||||||
|
admin_queue->comp_ctx = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void ena_com_admin_destroy(struct ena_com_dev *ena_dev)
|
void ena_com_admin_destroy(struct ena_com_dev *ena_dev)
|
||||||
{
|
{
|
||||||
struct ena_com_admin_queue *admin_queue = &ena_dev->admin_queue;
|
struct ena_com_admin_queue *admin_queue = &ena_dev->admin_queue;
|
||||||
@ -1679,14 +1695,8 @@ void ena_com_admin_destroy(struct ena_com_dev *ena_dev)
|
|||||||
struct ena_com_aenq *aenq = &ena_dev->aenq;
|
struct ena_com_aenq *aenq = &ena_dev->aenq;
|
||||||
u16 size;
|
u16 size;
|
||||||
|
|
||||||
if (admin_queue->comp_ctx) {
|
ena_com_free_ena_admin_queue_comp_ctx(ena_dev, admin_queue);
|
||||||
ENA_WAIT_EVENT_DESTROY(admin_queue->comp_ctx->wait_event);
|
|
||||||
ENA_MEM_FREE(ena_dev->dmadev,
|
|
||||||
admin_queue->comp_ctx,
|
|
||||||
(admin_queue->q_depth * sizeof(struct ena_comp_ctx)));
|
|
||||||
}
|
|
||||||
|
|
||||||
admin_queue->comp_ctx = NULL;
|
|
||||||
size = ADMIN_SQ_SIZE(admin_queue->q_depth);
|
size = ADMIN_SQ_SIZE(admin_queue->q_depth);
|
||||||
if (sq->entries)
|
if (sq->entries)
|
||||||
ENA_MEM_FREE_COHERENT(ena_dev->dmadev, size, sq->entries,
|
ENA_MEM_FREE_COHERENT(ena_dev->dmadev, size, sq->entries,
|
||||||
|
@ -299,7 +299,7 @@ extern rte_atomic32_t ena_alloc_cnt;
|
|||||||
#define ENA_TIME_EXPIRE(timeout) (timeout < rte_get_timer_cycles())
|
#define ENA_TIME_EXPIRE(timeout) (timeout < rte_get_timer_cycles())
|
||||||
#define ENA_GET_SYSTEM_TIMEOUT(timeout_us) \
|
#define ENA_GET_SYSTEM_TIMEOUT(timeout_us) \
|
||||||
(timeout_us * rte_get_timer_hz() / 1000000 + rte_get_timer_cycles())
|
(timeout_us * rte_get_timer_hz() / 1000000 + rte_get_timer_cycles())
|
||||||
#define ENA_WAIT_EVENT_DESTROY(waitqueue) ((void)(waitqueue))
|
#define ENA_WAIT_EVENTS_DESTROY(admin_queue) ((void)(admin_queue))
|
||||||
|
|
||||||
#ifndef READ_ONCE
|
#ifndef READ_ONCE
|
||||||
#define READ_ONCE(var) (*((volatile typeof(var) *)(&(var))))
|
#define READ_ONCE(var) (*((volatile typeof(var) *)(&(var))))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user