All of lore.kernel.org
 help / color / mirror / Atom feed
From: Erez Shitrit <erezsh-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
To: Hal Rosenstock <hal-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
Cc: Erez Shitrit <erezsh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Or Gerlitz <ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	"linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH for-next 2/4] IB/sa: Add support for sa get ClassPortInfo
Date: Wed, 20 Apr 2016 17:24:45 +0300	[thread overview]
Message-ID: <CAAk-MO-RzN825+Or4KLtboOyjxbutH5gFFcz3AbreqH1HYfz0A@mail.gmail.com> (raw)
In-Reply-To: <57177181.7090408-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>

On Wed, Apr 20, 2016 at 3:09 PM, Hal Rosenstock <hal-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org> wrote:
> On 4/19/2016 8:51 AM, Erez Shitrit wrote:
>> New sa query function to return the ClassPortInfo struct from the sa.
>> If the SM supports FullMemberSendOnly mode for MCG's, it sets a
>> capability bit in the capability_mask2 field of the response.
>>
>> Signed-off-by: Erez Shitrit <erezsh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
>> Reviewed-by: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
>> ---
>>  drivers/infiniband/core/sa_query.c | 174 +++++++++++++++++++++++++++++++++++++
>>  include/rdma/ib_sa.h               |  12 +++
>>  2 files changed, 186 insertions(+)
>>
>> diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
>> index 8a09c0f..66535bf 100644
>> --- a/drivers/infiniband/core/sa_query.c
>> +++ b/drivers/infiniband/core/sa_query.c
>> @@ -119,6 +119,12 @@ struct ib_sa_guidinfo_query {
>>       struct ib_sa_query sa_query;
>>  };
>>
>> +struct ib_sa_classport_info_query {
>> +     void (*callback)(int, struct ib_class_port_info *, void *);
>> +     void *context;
>> +     struct ib_sa_query sa_query;
>> +};
>> +
>>  struct ib_sa_mcmember_query {
>>       void (*callback)(int, struct ib_sa_mcmember_rec *, void *);
>>       void *context;
>> @@ -392,6 +398,83 @@ static const struct ib_field service_rec_table[] = {
>>         .size_bits    = 2*64 },
>>  };
>>
>> +#define PORTCLASSINFO_REC_FIELD(field) \
>
> Would CLASSPORTINFO_REC_FIELD be more consistent in terms of naming ?

Agree. will fix that. thanks.

>
>> +     .struct_offset_bytes = offsetof(struct ib_class_port_info, field),      \
>> +     .struct_size_bytes   = sizeof((struct ib_class_port_info *)0)->field,   \
>> +     .field_name          = "ib_class_port_info:" #field
>> +
>> +static const struct ib_field classport_info_rec_table[] = {
>> +     { PORTCLASSINFO_REC_FIELD(base_version),
>> +       .offset_words = 0,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 8 },
>> +     { PORTCLASSINFO_REC_FIELD(class_version),
>> +       .offset_words = 0,
>> +       .offset_bits  = 8,
>> +       .size_bits    = 8 },
>> +     { PORTCLASSINFO_REC_FIELD(capability_mask),
>> +       .offset_words = 0,
>> +       .offset_bits  = 16,
>> +       .size_bits    = 16 },
>> +     { PORTCLASSINFO_REC_FIELD(cap_mask2_resp_time),
>> +       .offset_words = 1,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 32 },
>
> Why combine fields ? Syntax is rich enough to deal with bit fields.
> This is what was done for other SA attributes in this file.
>
> -- Hal
>
>> +     { PORTCLASSINFO_REC_FIELD(redirect_gid),
>> +       .offset_words = 2,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 128 },
>> +     { PORTCLASSINFO_REC_FIELD(redirect_tcslfl),
>> +       .offset_words = 6,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 32 },
>> +
>> +     { PORTCLASSINFO_REC_FIELD(redirect_lid),
>> +       .offset_words = 7,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 16 },
>> +     { PORTCLASSINFO_REC_FIELD(redirect_pkey),
>> +       .offset_words = 7,
>> +       .offset_bits  = 16,
>> +       .size_bits    = 16 },
>> +
>> +     { PORTCLASSINFO_REC_FIELD(redirect_qp),
>> +       .offset_words = 8,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 32 },
>> +     { PORTCLASSINFO_REC_FIELD(redirect_qkey),
>> +       .offset_words = 9,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 32 },
>> +
>> +     { PORTCLASSINFO_REC_FIELD(trap_gid),
>> +       .offset_words = 10,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 128 },
>> +     { PORTCLASSINFO_REC_FIELD(trap_tcslfl),
>> +       .offset_words = 14,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 32 },
>> +
>> +     { PORTCLASSINFO_REC_FIELD(trap_lid),
>> +       .offset_words = 15,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 16 },
>> +     { PORTCLASSINFO_REC_FIELD(trap_pkey),
>> +       .offset_words = 15,
>> +       .offset_bits  = 16,
>> +       .size_bits    = 16 },
>> +
>> +     { PORTCLASSINFO_REC_FIELD(trap_hlqp),
>> +       .offset_words = 16,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 32 },
>> +     { PORTCLASSINFO_REC_FIELD(trap_qkey),
>> +       .offset_words = 17,
>> +       .offset_bits  = 0,
>> +       .size_bits    = 32 },
>> +};
>> +
>>  #define GUIDINFO_REC_FIELD(field) \
>>       .struct_offset_bytes = offsetof(struct ib_sa_guidinfo_rec, field),      \
>>       .struct_size_bytes   = sizeof((struct ib_sa_guidinfo_rec *) 0)->field,  \
>> @@ -1645,6 +1728,97 @@ err1:
>>  }
>>  EXPORT_SYMBOL(ib_sa_guid_info_rec_query);
>>
>> +/* Support get SA ClassPortInfo */
>> +static void ib_sa_classport_info_rec_callback(struct ib_sa_query *sa_query,
>> +                                           int status,
>> +                                           struct ib_sa_mad *mad)
>> +{
>> +     struct ib_sa_classport_info_query *query =
>> +             container_of(sa_query, struct ib_sa_classport_info_query, sa_query);
>> +
>> +     if (mad) {
>> +             struct ib_class_port_info rec;
>> +
>> +             ib_unpack(classport_info_rec_table,
>> +                       ARRAY_SIZE(classport_info_rec_table),
>> +                       mad->data, &rec);
>> +             query->callback(status, &rec, query->context);
>> +     } else {
>> +             query->callback(status, NULL, query->context);
>> +     }
>> +}
>> +
>> +static void ib_sa_portclass_info_rec_release(struct ib_sa_query *sa_query)
>> +{
>> +     kfree(container_of(sa_query, struct ib_sa_classport_info_query,
>> +                        sa_query));
>> +}
>> +
>> +int ib_sa_classport_info_rec_query(struct ib_sa_client *client,
>> +                                struct ib_device *device, u8 port_num,
>> +                                int timeout_ms, gfp_t gfp_mask,
>> +                                void (*callback)(int status,
>> +                                                 struct ib_class_port_info *resp,
>> +                                                 void *context),
>> +                                void *context,
>> +                                struct ib_sa_query **sa_query)
>> +{
>> +     struct ib_sa_classport_info_query *query;
>> +     struct ib_sa_device *sa_dev = ib_get_client_data(device, &sa_client);
>> +     struct ib_sa_port *port;
>> +     struct ib_mad_agent *agent;
>> +     struct ib_sa_mad *mad;
>> +     int ret;
>> +
>> +     if (!sa_dev)
>> +             return -ENODEV;
>> +
>> +     port  = &sa_dev->port[port_num - sa_dev->start_port];
>> +     agent = port->agent;
>> +
>> +     query = kzalloc(sizeof(*query), gfp_mask);
>> +     if (!query)
>> +             return -ENOMEM;
>> +
>> +     query->sa_query.port = port;
>> +     ret = alloc_mad(&query->sa_query, gfp_mask);
>> +     if (ret)
>> +             goto err1;
>> +
>> +     ib_sa_client_get(client);
>> +     query->sa_query.client = client;
>> +     query->callback        = callback;
>> +     query->context         = context;
>> +
>> +     mad = query->sa_query.mad_buf->mad;
>> +     init_mad(mad, agent);
>> +
>> +     query->sa_query.callback = callback ? ib_sa_classport_info_rec_callback : NULL;
>> +
>> +     query->sa_query.release  = ib_sa_portclass_info_rec_release;
>> +     /* support GET only */
>> +     mad->mad_hdr.method      = IB_MGMT_METHOD_GET;
>> +     mad->mad_hdr.attr_id     = cpu_to_be16(IB_SA_ATTR_CLASS_PORTINFO);
>> +     mad->sa_hdr.comp_mask    = 0;
>> +     *sa_query = &query->sa_query;
>> +
>> +     ret = send_mad(&query->sa_query, timeout_ms, gfp_mask);
>> +     if (ret < 0)
>> +             goto err2;
>> +
>> +     return ret;
>> +
>> +err2:
>> +     *sa_query = NULL;
>> +     ib_sa_client_put(query->sa_query.client);
>> +     free_mad(&query->sa_query);
>> +
>> +err1:
>> +     kfree(query);
>> +     return ret;
>> +}
>> +EXPORT_SYMBOL(ib_sa_classport_info_rec_query);
>> +
>>  static void send_handler(struct ib_mad_agent *agent,
>>                        struct ib_mad_send_wc *mad_send_wc)
>>  {
>> diff --git a/include/rdma/ib_sa.h b/include/rdma/ib_sa.h
>> index cdc1c81..3840416 100644
>> --- a/include/rdma/ib_sa.h
>> +++ b/include/rdma/ib_sa.h
>> @@ -94,6 +94,8 @@ enum ib_sa_selector {
>>       IB_SA_BEST = 3
>>  };
>>
>> +#define IB_SA_CAP_MASK2_SENDONLY_FULL_MEM_SUPPORT    BIT(12)
>> +
>>  /*
>>   * Structures for SA records are named "struct ib_sa_xxx_rec."  No
>>   * attempt is made to pack structures to match the physical layout of
>> @@ -439,4 +441,14 @@ int ib_sa_guid_info_rec_query(struct ib_sa_client *client,
>>                             void *context,
>>                             struct ib_sa_query **sa_query);
>>
>> +/* Support get SA ClassPortInfo */
>> +int ib_sa_classport_info_rec_query(struct ib_sa_client *client,
>> +                                struct ib_device *device, u8 port_num,
>> +                                int timeout_ms, gfp_t gfp_mask,
>> +                                void (*callback)(int status,
>> +                                                 struct ib_class_port_info *resp,
>> +                                                 void *context),
>> +                                void *context,
>> +                                struct ib_sa_query **sa_query);
>> +
>>  #endif /* IB_SA_H */
>>
> --
> 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
--
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:[~2016-04-20 14:24 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-19 12:51 [PATCH for-next 0/4] Support SendOnlyFullMember join Erez Shitrit
     [not found] ` <1461070287-13469-1-git-send-email-erezsh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-04-19 12:51   ` [PATCH for-next 1/4] IB/core: Add support for get ClassPortInfo from the SA Erez Shitrit
     [not found]     ` <1461070287-13469-2-git-send-email-erezsh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-05-12 23:17       ` Ira Weiny
2016-04-19 12:51   ` [PATCH for-next 2/4] IB/sa: Add support for sa get ClassPortInfo Erez Shitrit
     [not found]     ` <1461070287-13469-3-git-send-email-erezsh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-04-20 12:09       ` Hal Rosenstock
     [not found]         ` <57177181.7090408-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-04-20 14:24           ` Erez Shitrit [this message]
2016-04-21 12:12           ` Erez Shitrit
2016-04-20 13:12       ` Or Gerlitz
     [not found]         ` <CAJ3xEMihe-54UExbp3ptqH5yqg7dc6a6tKcJw0gNytTECce5TQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-04-20 13:19           ` Erez Shitrit
2016-04-19 12:51   ` [PATCH for-next 3/4] IB/core: Support new type of join-state for multicast Erez Shitrit
     [not found]     ` <1461070287-13469-4-git-send-email-erezsh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-04-26 20:16       ` Christoph Lameter
     [not found]         ` <alpine.DEB.2.20.1604261514590.2663-wcBtFHqTun5QOdAKl3ChDw@public.gmane.org>
2016-04-26 20:57           ` Hefty, Sean
     [not found]             ` <1828884A29C6694DAF28B7E6B8A82373AB045BD0-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-04-27  6:42               ` Leon Romanovsky
     [not found]                 ` <20160427064239.GO7974-2ukJVAZIZ/Y@public.gmane.org>
2016-04-29  2:34                   ` Doug Ledford
     [not found]                     ` <5722C839.2070704-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-29 15:50                       ` Hefty, Sean
     [not found]                         ` <1828884A29C6694DAF28B7E6B8A82373AB0475AC-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-04-29 16:10                           ` Doug Ledford
2016-04-29 16:27                       ` Hal Rosenstock
     [not found]                         ` <c99ef08a-77d8-1524-042a-0f269a52028d-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-04-29 17:12                           ` Jason Gunthorpe
     [not found]                             ` <20160429171246.GA4893-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-04-29 17:58                               ` Hal Rosenstock
     [not found]                                 ` <c1bc7c93-53c9-8b71-16eb-2bb92df93b76-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-04-30  1:37                                   ` Christoph Lameter
2016-05-02  7:26               ` Erez Shitrit
     [not found]                 ` <CAAk-MO8Zo2cHo8hiyYdbiSoRG2tgdxcSZPhCDWRUm6KrHCE8EQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-05-02 17:02                   ` Hefty, Sean
2016-04-19 12:51   ` [PATCH for-next 4/4] IB/ipoib: Support SendOnlyFullMember MCG for SendOnly join Erez Shitrit
     [not found]     ` <1461070287-13469-5-git-send-email-erezsh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2016-04-20 12:11       ` Hal Rosenstock
     [not found]         ` <571771FB.90908-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-04-20 13:12           ` Erez Shitrit
     [not found]             ` <CAAk-MO_24actZ4FJqOjk0ztR=Z6toSfB-xuyFKeUvtZ8h0Xv3A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-04-20 13:29               ` Hal Rosenstock
     [not found]                 ` <5717843B.7020501-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-04-21 12:52                   ` Erez Shitrit
     [not found]                     ` <CAAk-MO9sie_pFH7wSDhhuEd2uApnz5dMF6E9u6Vgkyimc+1xWA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-04-21 13:24                       ` Hal Rosenstock
     [not found]                         ` <5718D497.70306-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2016-04-21 14:11                           ` Erez Shitrit
     [not found]                             ` <CAAk-MO9W-sdi4D+xT6C_TB7uWNMPV8++RRtyoLmJ23HFq11+iw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-04-21 17:32                               ` Jason Gunthorpe
     [not found]                                 ` <20160421173219.GA5814-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2016-05-02  8:00                                   ` Erez Shitrit

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=CAAk-MO-RzN825+Or4KLtboOyjxbutH5gFFcz3AbreqH1HYfz0A@mail.gmail.com \
    --to=erezsh-ldsdmyg8hgv8yrgs2mwiifqbs+8scbdb@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=erezsh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=hal-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=ogerlitz-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.