public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
From: Yishai Hadas <yishaih-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
To: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>,
	Yishai Hadas <yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	raindel-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org
Subject: Re: [PATCH for-next 1/9] IB/core: Introduce peer client interface
Date: Thu, 02 Oct 2014 17:37:33 +0300	[thread overview]
Message-ID: <542D632D.407@dev.mellanox.co.il> (raw)
In-Reply-To: <542C2D23.30508-HInyCGIudOg@public.gmane.org>

On 10/1/2014 7:34 PM, Bart Van Assche wrote:
> On 10/01/14 17:18, Yishai Hadas wrote:
>> +static int num_registered_peers;
>
> Is the only purpose of this variable to check whether or not 
> peer_memory_list is empty ? In that case please drop this variable and 
> use list_empty() instead.
     Agree.
>
>> +static int ib_invalidate_peer_memory(void *reg_handle, void 
>> *core_context)
>> +
>> +{
>> +    return -ENOSYS;
>> +}
> Please follow the Linux kernel coding style which means no empty line 
> above the function body.
     OK
>
>> +#define PEER_MEM_MANDATORY_FUNC(x) {\
>> +    offsetof(struct peer_memory_client, x), #x }
>
> Shouldn't the opening brace have been placed on the same line as the 
> offsetof() macro to improve readability ?
>
     OK
>> +    if (invalidate_callback) {
>> +        *invalidate_callback = ib_invalidate_peer_memory;
>> +        ib_peer_client->invalidation_required = 1;
>> +    }
>> +    mutex_lock(&peer_memory_mutex);
>> +    list_add_tail(&ib_peer_client->core_peer_list, &peer_memory_list);
>> +    num_registered_peers++;
>> +    mutex_unlock(&peer_memory_mutex);
>> +    return ib_peer_client;
>
> Please insert an empty line before mutex_lock() and after mutex_unlock().
>
     OK
>> +void ib_unregister_peer_memory_client(void *reg_handle)
>> +{
>> +    struct ib_peer_memory_client *ib_peer_client =
>> +        (struct ib_peer_memory_client *)reg_handle;
>
> No cast is needed when assigning a void pointer to a non-void pointer.
>
     Agree.
>> +struct peer_memory_client {
>> +    char    name[IB_PEER_MEMORY_NAME_MAX];
>> +    char    version[IB_PEER_MEMORY_VER_MAX];
>> +    /* The peer-direct controller (IB CORE) uses this callback to 
>> detect if a virtual address is under
>> +     * the responsibility of a specific peer direct client. If the 
>> answer is positive further calls
>> +     * for memory management will be directed to the callback of 
>> this peer driver.
>> +     * Any peer internal error should resulted in a zero answer, in 
>> case address range
>> +     * really belongs to the peer, no owner will be found and 
>> application will get an error
>> +     * from IB CORE as expected.
>> +     * Parameters:
>> +        addr                  [IN]  - virtual address to be checked 
>> whether belongs to.
>> +        size                  [IN]  - size of memory area starting 
>> at addr.
>> +        peer_mem_private_data [IN]  - The contents of ib_ucontext-> 
>> peer_mem_private_data.
>> +                          This parameter allows usage of the 
>> peer-direct
>> +                          API in implementations where it is impossible
>> +                          to detect if the memory belongs to the device
>> +                          based upon the virtual address alone. In such
>> +                          cases, the peer device can create a special
>> +                          ib_ucontext, which will be associated with 
>> the
>> +                          relevant peer memory.
>> +        peer_mem_name         [IN]  - The contents of ib_ucontext-> 
>> peer_mem_name.
>> +                          Used to identify the peer memory client that
>> +                          initialized the ib_ucontext.
>> +                          This parameter is normally used along with
>> +                          peer_mem_private_data.
>> +        client_context        [OUT] - peer opaque data which holds a 
>> peer context for
>> +                          the acquired address range, will be provided
>> +                          back to the peer memory in subsequent
>> +                          calls for that given memory.
>> +
>> +    * Return value:
>> +    *    1 - virtual address belongs to the peer device, otherwise 0
>> +    */
>> +    int (*acquire)(unsigned long addr, size_t size, void 
>> *peer_mem_private_data,
>> +               char *peer_mem_name, void **client_context);
>> +    /* The peer memory client is expected to pin the physical pages 
>> of the given address range
>> +     * and to fill sg_table with the information of the
>> +     * physical pages associated with the given address range. This 
>> function is
>> +     * equivalent to the kernel API of get_user_pages(), but targets 
>> peer memory.
>> +     * Parameters:
>> +        addr           [IN] - start virtual address of that given 
>> allocation.
>> +        size           [IN] - size of memory area starting at addr.
>> +        write          [IN] - indicates whether the pages will be 
>> written to by the caller.
>> +                      Same meaning as of kernel API get_user_pages, 
>> can be
>> +                      ignored if not relevant.
>> +        force          [IN] - indicates whether to force write 
>> access even if user
>> +                      mapping is readonly. Same meaning as of kernel 
>> API
>> +                      get_user_pages, can be ignored if not relevant.
>> +        sg_head        [IN/OUT] - pointer to head of struct sg_table.
>> +                      The peer client should allocate a table big
>> +                      enough to store all of the required entries. This
>> +                      function should fill the table with physical 
>> addresses
>> +                      and sizes of the memory segments composing this
>> +                      memory mapping.
>> +                      The table allocation can be done using 
>> sg_alloc_table.
>> +                      Filling in the physical memory addresses and 
>> size can
>> +                      be done using sg_set_page.
>> +        client_context [IN] - peer context for the given allocation, 
>> as received from
>> +                      the acquire call.
>> +        core_context   [IN] - opaque IB core context. If the peer 
>> client wishes to
>> +                      invalidate any of the pages pinned through 
>> this API,
>> +                      it must provide this context as an argument to 
>> the
>> +                      invalidate callback.
>> +
>> +    * Return value:
>> +    *    0 success, otherwise errno error code.
>> +    */
>> +    int (*get_pages)(unsigned long addr,
>> +             size_t size, int write, int force,
>> +             struct sg_table *sg_head,
>> +             void *client_context, void *core_context);
>> +    /* The peer-direct controller (IB CORE) calls this function to 
>> request from the
>> +     * peer driver to fill the sg_table with dma address mapping for 
>> the peer memory exposed.
>> +     * The parameters provided have the parameters for calling 
>> dma_map_sg.
>> +     * Parameters:
>> +        sg_head        [IN/OUT] - pointer to head of struct 
>> sg_table. The peer memory
>> +                      should fill the dma_address & dma_length for
>> +                      each scatter gather entry in the table.
>> +        client_context [IN] - peer context for the allocation mapped.
>> +        dma_device     [IN] - the RDMA capable device which requires 
>> access to the
>> +                      peer memory.
>> +        dmasync        [IN] - flush in-flight DMA when the memory 
>> region is written.
>> +                      Same meaning as with host memory mapping, can 
>> be ignored if not relevant.
>> +        nmap           [OUT] - number of mapped/set entries.
>> +
>> +    * Return value:
>> +    *        0 success, otherwise errno error code.
>> +    */
>> +    int (*dma_map)(struct sg_table *sg_head, void *client_context,
>> +               struct device *dma_device, int dmasync, int *nmap);
>> +    /* This callback is the opposite of the dma map API, it should 
>> take relevant actions
>> +     * to unmap the memory.
>> +    * Parameters:
>> +        sg_head        [IN/OUT] - pointer to head of struct 
>> sg_table. The peer memory
>> +                      should fill the dma_address & dma_length for
>> +                      each scatter gather entry in the table.
>> +        client_context [IN] - peer context for the allocation mapped.
>> +        dma_device     [IN] - the RDMA capable device which requires 
>> access to the
>> +                      peer memory.
>> +        dmasync        [IN] - flush in-flight DMA when the memory 
>> region is written.
>> +                      Same meaning as with host memory mapping, can 
>> be ignored if not relevant.
>> +        nmap           [OUT] - number of mapped/set entries.
>> +
>> +    * Return value:
>> +    *    0 success, otherwise errno error code.
>> +    */
>> +    int (*dma_unmap)(struct sg_table *sg_head, void *client_context,
>> +             struct device  *dma_device);
>> +    /* This callback is the opposite of the get_pages API, it should 
>> remove the pinning
>> +     * from the pages, it's the peer-direct equivalent of the kernel 
>> API put_page.
>> +     * Parameters:
>> +        sg_head        [IN] - pointer to head of struct sg_table.
>> +        client_context [IN] - peer context for that given allocation.
>> +    */
>> +    void (*put_pages)(struct sg_table *sg_head, void *client_context);
>> +    /* This callback returns page size for the given allocation
>> +     * Parameters:
>> +        sg_head        [IN] - pointer to head of struct sg_table.
>> +        client_context [IN] - peer context for that given allocation.
>> +    * Return value:
>> +    *    Page size in bytes
>> +    */
>> +    unsigned long (*get_page_size)(void *client_context);
>> +    /* This callback is the opposite of the acquire call, let peer 
>> release all resources associated
>> +     * with the acquired context. The call will be performed only 
>> for contexts that have been
>> +     * successfully acquired (i.e. acquire returned a non-zero value).
>> +     * Parameters:
>> +     *    client_context [IN] - peer context for the given allocation.
>> +    */
>> +    void (*release)(void *client_context);
>> +
>> +};
>
> All these comments inside a struct make a struct definition hard to 
> read. Please use kernel-doc style instead. See also 
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/kernel-doc-nano-HOWTO.txt.
>
     Thanks, will fix in next series to match the kernel-doc style.
> Thanks,
>
> Bart.
>
> -- 
> 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:[~2014-10-02 14:37 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-01 15:18 [PATCH for-next 0/9] Peer-Direct support Yishai Hadas
     [not found] ` <1412176717-11979-1-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2014-10-01 15:18   ` [PATCH for-next 1/9] IB/core: Introduce peer client interface Yishai Hadas
     [not found]     ` <1412176717-11979-2-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2014-10-01 16:34       ` Bart Van Assche
     [not found]         ` <542C2D23.30508-HInyCGIudOg@public.gmane.org>
2014-10-02 14:37           ` Yishai Hadas [this message]
2014-10-01 15:18   ` [PATCH for-next 2/9] IB/core: Get/put peer memory client Yishai Hadas
2014-10-01 15:18   ` [PATCH for-next 3/9] IB/core: Umem tunneling peer memory APIs Yishai Hadas
2014-10-01 15:18   ` [PATCH for-next 4/9] IB/core: Infrastructure to manage peer core context Yishai Hadas
     [not found]     ` <1412176717-11979-5-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2014-10-01 22:24       ` Yann Droneaud
     [not found]         ` <1412202261.28184.0.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2014-10-02 15:02           ` Shachar Raindel
2014-10-01 15:18   ` [PATCH for-next 5/9] IB/core: Invalidation support for peer memory Yishai Hadas
     [not found]     ` <1412176717-11979-6-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2014-10-01 16:25       ` Yann Droneaud
     [not found]         ` <1412180704.4380.40.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2014-10-02 15:05           ` Shachar Raindel
2014-10-01 15:18   ` [PATCH for-next 6/9] IB/core: Sysfs " Yishai Hadas
     [not found]     ` <1412176717-11979-7-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2014-10-02 16:41       ` Jason Gunthorpe
2014-10-01 15:18   ` [PATCH for-next 7/9] IB/mlx4: Invalidation support for MR over " Yishai Hadas
2014-10-01 15:18   ` [PATCH for-next 8/9] IB/mlx5: " Yishai Hadas
2014-10-01 15:18   ` [PATCH for-next 9/9] Samples: Peer memory client example Yishai Hadas
     [not found]     ` <1412176717-11979-10-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2014-10-01 17:16       ` Hefty, Sean
     [not found]         ` <1828884A29C6694DAF28B7E6B8A8237399DE5096-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-10-02  3:14           ` Jason Gunthorpe
     [not found]             ` <20141002031441.GA10386-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-10-02 13:35               ` Shachar Raindel
2014-10-07 16:57           ` Davis, Arlin R
     [not found]             ` <54347E5A035A054EAE9D05927FB467F977CC9244-P5GAC/sN6hmkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-10-07 17:09               ` Hefty, Sean

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=542D632D.407@dev.mellanox.co.il \
    --to=yishaih-ldsdmyg8hgv8yrgs2mwiifqbs+8scbdb@public.gmane.org \
    --cc=bvanassche-HInyCGIudOg@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=raindel-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=roland-DgEjT+Ai2ygdnm+yROfE0A@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox