On Mon, Apr 5, 2021 at 9:54 PM Harman Kalra <hka...@marvell.com> wrote: > > When device is re-configured, memory allocated for work slot is freed > and new memory is allocated. Due to this we may loose some important > configurations/mappings done with initial work slot memory. > > For example, whenever rte_event_eth_tx_adapter_queue_add is called > some important meta i.e. txq handle is stored in work slot structure. > If device gets reconfigured after this tx adaptor add, txq to work > slot mapping will be lost resulting in seg fault during packet > processing, as txq handle could not be retrieved from work slot. > > Fixes: 67b5f4686459 ("event/octeontx2: add port config functions") > Cc: sta...@dpdk.org > > Signed-off-by: Harman Kalra <hka...@marvell.com>
Applied to dpdk-next-eventdev/for-main. Thanks. > --- > drivers/event/octeontx2/otx2_evdev.c | 34 +++++++++++++--------------- > 1 file changed, 16 insertions(+), 18 deletions(-) > > diff --git a/drivers/event/octeontx2/otx2_evdev.c > b/drivers/event/octeontx2/otx2_evdev.c > index 7e2343599..a6beed069 100644 > --- a/drivers/event/octeontx2/otx2_evdev.c > +++ b/drivers/event/octeontx2/otx2_evdev.c > @@ -885,29 +885,27 @@ sso_configure_ports(const struct rte_eventdev > *event_dev) > struct otx2_ssogws *ws; > uintptr_t base; > > - /* Free memory prior to re-allocation if needed */ > if (event_dev->data->ports[i] != NULL) { > ws = event_dev->data->ports[i]; > - rte_free(ssogws_get_cookie(ws)); > - ws = NULL; > - } > + } else { > + /* Allocate event port memory */ > + ws = rte_zmalloc_socket("otx2_sso_ws", > + sizeof(struct otx2_ssogws) + > + RTE_CACHE_LINE_SIZE, > + RTE_CACHE_LINE_SIZE, > + event_dev->data->socket_id); > + if (ws == NULL) { > + otx2_err("Failed to alloc memory for port=%d", > + i); > + rc = -ENOMEM; > + break; > + } > > - /* Allocate event port memory */ > - ws = rte_zmalloc_socket("otx2_sso_ws", > - sizeof(struct otx2_ssogws) + > - RTE_CACHE_LINE_SIZE, > - RTE_CACHE_LINE_SIZE, > - event_dev->data->socket_id); > - if (ws == NULL) { > - otx2_err("Failed to alloc memory for port=%d", i); > - rc = -ENOMEM; > - break; > + /* First cache line is reserved for cookie */ > + ws = (struct otx2_ssogws *) > + ((uint8_t *)ws + RTE_CACHE_LINE_SIZE); > } > > - /* First cache line is reserved for cookie */ > - ws = (struct otx2_ssogws *) > - ((uint8_t *)ws + RTE_CACHE_LINE_SIZE); > - > ws->port = i; > base = dev->bar2 + (RVU_BLOCK_ADDR_SSOW << 20 | i << 12); > sso_set_port_ops(ws, base); > -- > 2.18.0 >