From: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>
To: 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: Wed, 01 Oct 2014 18:34:43 +0200 [thread overview]
Message-ID: <542C2D23.30508@acm.org> (raw)
In-Reply-To: <1412176717-11979-2-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
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.
> +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.
> +#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 ?
> + 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().
> +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.
> +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,
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
next prev parent reply other threads:[~2014-10-01 16:34 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 [this message]
[not found] ` <542C2D23.30508-HInyCGIudOg@public.gmane.org>
2014-10-02 14:37 ` Yishai Hadas
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=542C2D23.30508@acm.org \
--to=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