Hi Akhil,

> -----Original Message-----
> From: Akhil Goyal <gak...@marvell.com>
> Sent: Wednesday, October 20, 2021 7:05 PM
> To: Power, Ciara <ciara.po...@intel.com>; dev@dpdk.org; Ananyev,
> Konstantin <konstantin.anan...@intel.com>; tho...@monjalon.net; Zhang,
> Roy Fan <roy.fan.zh...@intel.com>; De Lara Guarch, Pablo
> <pablo.de.lara.gua...@intel.com>
> Cc: david.march...@redhat.com; hemant.agra...@nxp.com; Anoob Joseph
> <ano...@marvell.com>; Trahe, Fiona <fiona.tr...@intel.com>; Doherty,
> Declan <declan.dohe...@intel.com>; ma...@nvidia.com; g.si...@nxp.com;
> jianjay.z...@huawei.com; asoma...@amd.com; ruifeng.w...@arm.com;
> Nicolau, Radu <radu.nico...@intel.com>; ajit.khapa...@broadcom.com;
> Nagadheeraj Rottela <rnagadhee...@marvell.com>; Ankur Dwivedi
> <adwiv...@marvell.com>; Wang, Haiyue <haiyue.w...@intel.com>;
> jiawe...@trustnetic.com; jianw...@trustnetic.com; Jerin Jacob
> Kollanukkaran <jer...@marvell.com>; Nithin Kumar Dabilpuram
> <ndabilpu...@marvell.com>
> Subject: RE: [PATCH v3 0/8] crypto/security session framework rework
> 
> > > > I am seeing test failures for cryptodev_scheduler_autotest:
> > > > + Tests Total :       638
> > > >  + Tests Skipped :     280
> > > >  + Tests Executed :    638
> > > >  + Tests Unsupported:   0
> > > >  + Tests Passed :      18
> > > >  + Tests Failed :      340
> > > >
> > > > The error showing for each testcase:
> > > > scheduler_pmd_sym_session_configure() line 487: unable to config
> sym
> > > > session
> > > > CRYPTODEV: rte_cryptodev_sym_session_init() line 1743: dev_id 2
> failed
> > to
> > > > configure session details
> > > >
> > > > I believe the problem happens in
> > scheduler_pmd_sym_session_configure.
> > > > The full sess object is no longer accessible in here, but it is 
> > > > required to
> be
> > > > passed to rte_cryptodev_sym_session_init.
> > > > The init function expects access to sess rather than the private data,
> and
> > > now
> > > > fails as a result.
> > > >
> > > > static int
> > > > scheduler_pmd_sym_session_configure(struct rte_cryptodev *dev,
> > > >         struct rte_crypto_sym_xform *xform, void *sess,
> > > >         rte_iova_t sess_iova __rte_unused)
> > > > {
> > > >         struct scheduler_ctx *sched_ctx = dev->data->dev_private;
> > > >         uint32_t i;
> > > >         int ret;
> > > >         for (i = 0; i < sched_ctx->nb_workers; i++) {
> > > >                 struct scheduler_worker *worker = 
> > > > &sched_ctx->workers[i];
> > > >                 ret = rte_cryptodev_sym_session_init(worker->dev_id, 
> > > > sess,
> > > >                                         xform);
> > > >                 if (ret < 0) {
> > > >                         CR_SCHED_LOG(ERR, "unable to config sym 
> > > > session");
> > > >                         return ret;
> > > >                 }
> > > >         }
> > > >         return 0;
> > > > }
> > > >
> > > It looks like scheduler PMD is managing the stuff on its own for other
> > PMDs.
> > > The APIs are designed such that the app can call session_init multiple
> times
> > > With different dev_id on same sess.
> > > But here scheduler PMD internally want to configure other PMDs
> sess_priv
> > > By calling session_init.
> > >
> > > I wonder, why we have this 2 step session_create and session_init?
> > > Why can't we have it similar to security session create and let the
> scheduler
> > > PMD have its big session private data which can hold priv_data of as many
> > > PMDs
> > > as it want to schedule.
> > >
> > > Konstantin/Fan/Pablo what are your thoughts on this issue?
> > > Can we resolve this issue at priority in RC1(or probably RC2) for this
> release
> > > or
> > > else we defer it for next ABI break release?
> > >
> > > Thomas,
> > > Can we defer this for RC2? It does not seem to be fixed in 1 day.
> >
> > On another thought, this can be fixed with current patch also by having a
> big
> > session
> > Private data for scheduler PMD which is big enough to hold all other PMDs
> > data which
> > it want to schedule and then call the sess_configure function pointer of dev
> > directly.
> > What say? And this PMD change can be done in RC2. And this patchset go
> as
> > is in RC1.
> Here is the diff in scheduler PMD which should fix this issue in current
> patchset.
> 
> diff --git a/drivers/crypto/scheduler/scheduler_pmd_ops.c
> b/drivers/crypto/scheduler/scheduler_pmd_ops.c
> index b92ffd6026..0611ea2c6a 100644
> --- a/drivers/crypto/scheduler/scheduler_pmd_ops.c
> +++ b/drivers/crypto/scheduler/scheduler_pmd_ops.c
> @@ -450,9 +450,8 @@ scheduler_pmd_qp_setup(struct rte_cryptodev *dev,
> uint16_t qp_id,
>  }
> 
>  static uint32_t
> -scheduler_pmd_sym_session_get_size(struct rte_cryptodev *dev
> __rte_unused)
> +get_max_session_priv_size(struct scheduler_ctx *sched_ctx)
>  {
> -       struct scheduler_ctx *sched_ctx = dev->data->dev_private;
>         uint8_t i = 0;
>         uint32_t max_priv_sess_size = 0;
> 
> @@ -469,20 +468,35 @@ scheduler_pmd_sym_session_get_size(struct
> rte_cryptodev *dev __rte_unused)
>         return max_priv_sess_size;
>  }
> 
> +static uint32_t
> +scheduler_pmd_sym_session_get_size(struct rte_cryptodev *dev)
> +{
> +       struct scheduler_ctx *sched_ctx = dev->data->dev_private;
> +
> +       return get_max_session_priv_size(sched_ctx) * sched_ctx-
> >nb_workers;
> +}
> +
>  static int
>  scheduler_pmd_sym_session_configure(struct rte_cryptodev *dev,
>         struct rte_crypto_sym_xform *xform, void *sess,
>         rte_iova_t sess_iova __rte_unused)
>  {
>         struct scheduler_ctx *sched_ctx = dev->data->dev_private;
> +       uint32_t worker_sess_priv_sz = get_max_session_priv_size(sched_ctx);
>         uint32_t i;
>         int ret;
> 
>         for (i = 0; i < sched_ctx->nb_workers; i++) {
>                 struct scheduler_worker *worker = &sched_ctx->workers[i];
> +               struct rte_cryptodev *worker_dev =
> +                               rte_cryptodev_pmd_get_dev(worker->dev_id);
> +               uint8_t index = worker_dev->driver_id;
> 
> -               ret = rte_cryptodev_sym_session_init(worker->dev_id, sess,
> -                                       xform);
> +               ret = worker_dev->dev_ops->sym_session_configure(
> +                               worker_dev,
> +                               xform,
> +                               (uint8_t *)sess + (index * 
> worker_sess_priv_sz),
> +                               sess_iova + (index * worker_sess_priv_sz));

This won't work. This will make the session configuration finish successfully
 but  the private data the worker initialized is not the private data the worker
will use during enqueue/dequeue (workers only uses the session private
data based on its driver id).

>                 if (ret < 0) {
>                         CR_SCHED_LOG(ERR, "unable to config sym session");
>                         return ret;

Reply via email to