On Tue, 19 Aug 2025 03:22:24 -0700 Dimon Zhao <dimon.z...@nebula-matrix.com> wrote:
> +static int nbl_chan_setup_ops(struct nbl_channel_ops_tbl **chan_ops_tbl, > + struct nbl_channel_mgt_leonis *chan_mgt_leonis) > +{ > + *chan_ops_tbl = rte_zmalloc("nbl_chan_ops_tbl", sizeof(struct > nbl_channel_ops_tbl), 0); > + if (!*chan_ops_tbl) > + return -ENOMEM; > + > + NBL_CHAN_OPS_TBL_TO_OPS(*chan_ops_tbl) = &chan_ops; > + NBL_CHAN_OPS_TBL_TO_PRIV(*chan_ops_tbl) = chan_mgt_leonis; > + > + chan_mgt_leonis->chan_mgt.msg_handler[NBL_CHAN_MSG_ACK].func = > nbl_chan_recv_ack_msg; > + chan_mgt_leonis->chan_mgt.msg_handler[NBL_CHAN_MSG_ACK].priv = > chan_mgt_leonis; > + > + return 0; > +} I don't see the point of the ops table here? You are allocating it in shared huge page memory; but it contains pointer to ops table values that are function pointers. And due to ASLR function pointers are not valid when using primary/secondary process.