All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yishai Hadas <yishaih-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
To: Jason Gunthorpe
	<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Cc: Yishai Hadas <yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	roland-BHEL68pLQRGGvPXPguhicg@public.gmane.org,
	ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org,
	tzahio-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org,
	Sean Hefty <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Subject: Re: [PATCH V8 libibverbs 1/7] Infrastructure to support verbs extensions
Date: Wed, 31 Jul 2013 10:27:06 +0300	[thread overview]
Message-ID: <51F8BC4A.5010102@dev.mellanox.co.il> (raw)
In-Reply-To: <20130730221548.GA14439-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

On 7/31/2013 1:15 AM, Jason Gunthorpe wrote:
> On Tue, Jul 30, 2013 at 11:27:15PM +0300, Yishai Hadas wrote:
>
>> Can accept it, however as it's a const pointer may need some casting later
>> which is not fully clean.
> Drop the const from the definition then.
>
>>      Your suggestion for verbs_set_ctx_op can't not work as it calls internally
>> to verbs_get_ctx_op and will may fail as
>>      at that step function pointer was not set and *(void **)((uint8_t *)vctx +
>> off) will be NULL.
> Yes, that is too bad in that case, but the old macro is still flawed:
>
> +#define verbs_set_ctx_op(vctx, op, ptr) ({ \
> +       if (vctx && (vctx->sz >= sizeof(*vctx) - offsetof(struct verbs_context, op))) \
> +               vctx->op = ptr; })
>
> - Missing () on all vctx usages
> - Missing type enforcement on vctx
>
> Something like this:
>
> #define verbs_set_ctx_op(_vctx, op, ptr) ({ \
>         struct verbs_context *vctx = _vctx; \
>         if (vctx && (vctx->sz >= sizeof(*vctx) - offsetof(struct verbs_context, op))) \
>                 vctx->op = ptr; })
>
>>      In addition changing to use const as part of returning from
>> __verbs_get_ctx_op causes some necessary casting to non const in some places
>> which
>>      is not fully clean. (e.g. free((void *)context_ex); as part of
>> __ibv_close_device, verbs_ctx->has_comp_mask = VERBS_CONTEXT_XRCD |
>> VERBS_CONTEXT_SRQ |
>>                      VERBS_CONTEXT_QP; as part of mlx4_init_context)
> It is virtually impossible to do const-correctness fully and
> transparently in C, since the language has no feature to silently
> propogate the const.
>
> If you want to be 100% clean then provide a non-const version --
> verbs_get_ctx_nc that takes non-const input.
     Looking around ibv_context usage, it's used as non const input, in 
that case we can have only one version which takes non-const input and 
return
     non-const one, preventing any silent casting as below, can we agree 
on ?

static inline struct verbs_context *verbs_get_ctx(
                     struct ibv_context *ctx)
     {
     return (!ctx || (ctx->abi_compat != ((uint8_t *)NULL) - 1)) ?
         NULL : container_of(ctx, struct verbs_context, context);
     }

#define verbs_get_ctx_op(ctx, op) ({ \
     struct verbs_context *vctx = verbs_get_ctx(ctx); \
     (!vctx || (vctx->sz < sizeof(*vctx) - offsetof(struct 
verbs_context, op)) || \
     !vctx->op) ? NULL : vctx; })
>
> Functions that silently discard const are bad since it silently
> defeats static analysis around const.
>
>>      I recommend staying with V8 suggestion for both macros, in case
>> you think there is any problem with missing () for the set operation
>> please point on and may handle.
> Using the inline to help the -Os case is definitely desirable, and the
> fix to the () at least.
>   
     Will stay with the macro, improved to your suggestion above.
     Are you fine with below definition ? any other () needed ?

   #define verbs_set_ctx_op(_vctx, op, ptr) ({ \
        struct verbs_context *vctx = _vctx; \
        if (vctx && (vctx->sz >= sizeof(*vctx) - offsetof(struct verbs_context, op))) \
                vctx->op = ptr; })

> Jason

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2013-07-31  7:27 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-25  8:38 [PATCH V8 libibverbs 0/7] Add extension and XRC QP support Yishai Hadas
     [not found] ` <1374741488-30895-1-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-07-25  8:38   ` [PATCH V8 libibverbs 1/7] Infrastructure to support verbs extensions Yishai Hadas
     [not found]     ` <1374741488-30895-2-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-07-25 17:14       ` Jason Gunthorpe
     [not found]         ` <20130725171408.GA17616-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2013-07-26 12:16           ` Yishai Hadas
     [not found]             ` <51F268B1.9040003-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2013-07-29 23:30               ` Jason Gunthorpe
     [not found]                 ` <51F821A3.1010507@dev.mellanox.co.il>
     [not found]                   ` <51F821A3.1010507-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2013-07-30 22:15                     ` Jason Gunthorpe
     [not found]                       ` <20130730221548.GA14439-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2013-07-31  7:27                         ` Yishai Hadas [this message]
     [not found]                           ` <51F8BC4A.5010102-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2013-07-31 16:52                             ` Jason Gunthorpe
     [not found]                               ` <20130731165205.GC27845-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2013-08-01 16:01                                 ` Yishai Hadas
2013-07-25  8:38   ` [PATCH V8 libibverbs 2/7] Introduce XRC domains Yishai Hadas
2013-07-25  8:38   ` [PATCH V8 libibverbs 3/7] Add support for XRC SRQs Yishai Hadas
2013-07-25  8:38   ` [PATCH V8 libibverbs 4/7] Add support for XRC QPs Yishai Hadas
2013-07-25  8:38   ` [PATCH V8 libibverbs 5/7] Add ibv_open_qp Yishai Hadas
2013-07-25  8:38   ` [PATCH V8 libibverbs 6/7] XRC man pages Yishai Hadas
2013-07-25  8:38   ` [PATCH V8 libibverbs 7/7] Add XRC sample application Yishai Hadas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51F8BC4A.5010102@dev.mellanox.co.il \
    --to=yishaih-ldsdmyg8hgv8yrgs2mwiifqbs+8scbdb@public.gmane.org \
    --cc=jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=roland-BHEL68pLQRGGvPXPguhicg@public.gmane.org \
    --cc=sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=tzahio-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.