[ofa-general] Re: [PATCH] core: check optional verbs before using them
Dotan Barak
dotanb at dev.mellanox.co.il
Tue Apr 1 23:11:53 PDT 2008
I would like to protect buggy SW as well, but you are right - kernel
coding is for people who knows
what they are doing...
thanks
Dotan
Roland Dreier wrote:
> > Check that all optional verbs are implemented in the device
> > before using them.
>
> Some parts make sense, eg:
>
> > @@ -248,7 +248,9 @@ int ib_modify_srq(struct ib_srq *srq,
> > struct ib_srq_attr *srq_attr,
> > enum ib_srq_attr_mask srq_attr_mask)
> > {
> > - return srq->device->modify_srq(srq, srq_attr, srq_attr_mask, NULL);
> > + return srq->device->modify_srq ?
> > + srq->device->modify_srq(srq, srq_attr, srq_attr_mask, NULL) :
> > + -ENOSYS;
>
> on the other hand:
>
> > @@ -265,6 +267,9 @@ int ib_destroy_srq(struct ib_srq *srq)
> > struct ib_pd *pd;
> > int ret;
> >
> > + if (!srq->device->destroy_srq)
> > + return -ENOSYS;
> > +
>
> I think it's safe to assume that a driver that allows SRQs to be created
> will allow them to be destroyed, and code that destroys a non-existent
> SRQ is buggy. So I don't think this is worth it. Same for dealloc MW
> and dealloc FMR.
>
> The reg_phys_mr change is sane too. So I applied this:
>
> commit 3926318b1e52568b10a9275b34e0a1fdef6c10e8
> Author: Dotan Barak <dotanb at dev.mellanox.co.il>
> Date: Mon Mar 31 17:50:02 2008 +0300
>
> IB/core: Check optional verbs before using them
>
> Make sure that a device implements the modify_srq and reg_phys_mr
> optional methods before calling them.
>
> Signed-off-by: Dotan Barak <dotanb at dev.mellanox.co.il>
> Signed-off-by: Roland Dreier <rolandd at cisco.com>
>
> diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
> index 86ed8af..8ffb5f2 100644
> --- a/drivers/infiniband/core/verbs.c
> +++ b/drivers/infiniband/core/verbs.c
> @@ -248,7 +248,9 @@ int ib_modify_srq(struct ib_srq *srq,
> struct ib_srq_attr *srq_attr,
> enum ib_srq_attr_mask srq_attr_mask)
> {
> - return srq->device->modify_srq(srq, srq_attr, srq_attr_mask, NULL);
> + return srq->device->modify_srq ?
> + srq->device->modify_srq(srq, srq_attr, srq_attr_mask, NULL) :
> + -ENOSYS;
> }
> EXPORT_SYMBOL(ib_modify_srq);
>
> @@ -672,6 +674,9 @@ struct ib_mr *ib_reg_phys_mr(struct ib_pd *pd,
> {
> struct ib_mr *mr;
>
> + if (!pd->device->reg_phys_mr)
> + return ERR_PTR(-ENOSYS);
> +
> mr = pd->device->reg_phys_mr(pd, phys_buf_array, num_phys_buf,
> mr_access_flags, iova_start);
>
>
>
More information about the general
mailing list