All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederic Barrat <fbarrat@linux.ibm.com>
To: "Alastair D'Silva" <alastair@au1.ibm.com>, alastair@d-silva.org
Cc: Andrew Donnellan <andrew.donnellan@au1.ibm.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v3 6/7] ocxl: move event_fd handling to frontend
Date: Mon, 25 Mar 2019 16:41:34 +0100	[thread overview]
Message-ID: <f990a76d-76e4-32ac-e618-5bfe2a267cb6@linux.ibm.com> (raw)
In-Reply-To: <20190325054438.15022-7-alastair@au1.ibm.com>



Le 25/03/2019 à 06:44, Alastair D'Silva a écrit :
> From: Alastair D'Silva <alastair@d-silva.org>
> 
> Event_fd is only used in the driver frontend, so it does not
> need to exist in the backend code. Relocate it to the frontend
> and provide an opaque mechanism for consumers instead.
> 
> Signed-off-by: Alastair D'Silva <alastair@d-silva.org>
> ---
>   drivers/misc/ocxl/afu_irq.c       | 76 ++++++++++++++++++-------------
>   drivers/misc/ocxl/file.c          | 22 ++++++++-
>   drivers/misc/ocxl/ocxl_internal.h |  5 --
>   include/misc/ocxl.h               | 46 +++++++++++++++++++
>   4 files changed, 111 insertions(+), 38 deletions(-)
> 
> diff --git a/drivers/misc/ocxl/afu_irq.c b/drivers/misc/ocxl/afu_irq.c
> index 2d410cd6f817..d71e62df7d31 100644
> --- a/drivers/misc/ocxl/afu_irq.c
> +++ b/drivers/misc/ocxl/afu_irq.c
> @@ -1,7 +1,7 @@
>   // SPDX-License-Identifier: GPL-2.0+
>   // Copyright 2017 IBM Corp.
>   #include <linux/interrupt.h>
> -#include <linux/eventfd.h>
> +#include <asm/pnv-ocxl.h>
>   #include "ocxl_internal.h"
>   #include "trace.h"
>   
> @@ -11,7 +11,9 @@ struct afu_irq {
>   	unsigned int virq;
>   	char *name;
>   	u64 trigger_page;
> -	struct eventfd_ctx *ev_ctx;
> +	irqreturn_t (*handler)(void *private);
> +	void (*free_private)(void *private);
> +	void *private;
>   };
>   
>   int ocxl_irq_offset_to_id(struct ocxl_context *ctx, u64 offset)
> @@ -24,14 +26,43 @@ u64 ocxl_irq_id_to_offset(struct ocxl_context *ctx, int irq_id)
>   	return ctx->afu->irq_base_offset + (irq_id << PAGE_SHIFT);
>   }
>   
> +int ocxl_irq_set_handler(struct ocxl_context *ctx, int irq_id,
> +		irqreturn_t (*handler)(void *private),
> +		void (*free_private)(void *private),
> +		void *private)
> +{
> +	struct afu_irq *irq;
> +	int rc;
> +
> +	mutex_lock(&ctx->irq_lock);
> +	irq = idr_find(&ctx->irq_idr, irq_id);
> +	if (!irq) {
> +		rc = -EINVAL;
> +		goto unlock;
> +	}
> +
> +	irq->handler = handler;
> +	irq->private = private;
> +
> +	rc = 0;
> +	goto unlock;


That goto is too much.


> +
> +unlock:
> +	mutex_unlock(&ctx->irq_lock);
> +	return rc;
> +}
> +EXPORT_SYMBOL_GPL(ocxl_irq_set_handler);
> +
>   static irqreturn_t afu_irq_handler(int virq, void *data)
>   {
>   	struct afu_irq *irq = (struct afu_irq *) data;
>   
>   	trace_ocxl_afu_irq_receive(virq);
> -	if (irq->ev_ctx)
> -		eventfd_signal(irq->ev_ctx, 1);
> -	return IRQ_HANDLED;
> +
> +	if (irq->handler)
> +		return irq->handler(irq->private);
> +
> +	return IRQ_HANDLED; // Just drop it on the ground
>   }
>   
>   static int setup_afu_irq(struct ocxl_context *ctx, struct afu_irq *irq)
> @@ -118,6 +149,8 @@ int ocxl_afu_irq_alloc(struct ocxl_context *ctx, int *irq_id)
>   	return rc;
>   }
>   
> +EXPORT_SYMBOL_GPL(ocxl_afu_irq_alloc);


nit: checkpatch doesn't like the empty line between the function and its 
symbol export. Also true for a few other symbols in that file.



> diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h
> index a8fe0ce4ea67..1b48e9d63abb 100644
> --- a/include/misc/ocxl.h
> +++ b/include/misc/ocxl.h
> @@ -161,6 +161,52 @@ int ocxl_context_attach(struct ocxl_context *ctx, u64 amr,
>    */
>   int ocxl_context_detach(struct ocxl_context *ctx);
>   
> +// AFU IRQs
> +
> +/**
> + * Allocate an IRQ associated with an AFU context
> + * @ctx: the AFU context
> + * @irq_id: out, the IRQ ID
> + *
> + * Returns 0 on success, negative on failure
> + */
> +extern int ocxl_afu_irq_alloc(struct ocxl_context *ctx, int *irq_id);
> +
> +/**
> + * Frees an IRQ associated with an AFU context
> + * @ctx: the AFU context
> + * @irq_id: the IRQ ID
> + *
> + * Returns 0 on success, negative on failure
> + */
> +extern int ocxl_afu_irq_free(struct ocxl_context *ctx, int irq_id);
> +
> +/**
> + * Gets the address of the trigger page for an IRQ
> + * This can then be provided to an AFU which will write to that
> + * page to trigger the IRQ.
> + * @ctx: The AFU context that the IRQ is associated with
> + * @irq_id: The IRQ ID
> + *
> + * returns the trigger page address, or 0 if the IRQ is not valid
> + */
> +extern u64 ocxl_afu_irq_get_addr(struct ocxl_context *ctx, int irq_id);
> +
> +/**
> + * Provide a callback to be called when an IRQ is triggered
> + * @ctx: The AFU context that the IRQ is associated with
> + * @irq_id: The IRQ ID
> + * @handler: the callback to be called when the IRQ is triggered
> + * @free_private: the callback to be called when the IRQ is freed

We should mention free_private can be NULL, in which case it is ignored.

   Fred


WARNING: multiple messages have this Message-ID (diff)
From: Frederic Barrat <fbarrat@linux.ibm.com>
To: "Alastair D'Silva" <alastair@au1.ibm.com>, alastair@d-silva.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linuxppc-dev@lists.ozlabs.org, Arnd Bergmann <arnd@arndb.de>,
	Andrew Donnellan <andrew.donnellan@au1.ibm.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 6/7] ocxl: move event_fd handling to frontend
Date: Mon, 25 Mar 2019 16:41:34 +0100	[thread overview]
Message-ID: <f990a76d-76e4-32ac-e618-5bfe2a267cb6@linux.ibm.com> (raw)
In-Reply-To: <20190325054438.15022-7-alastair@au1.ibm.com>



Le 25/03/2019 à 06:44, Alastair D'Silva a écrit :
> From: Alastair D'Silva <alastair@d-silva.org>
> 
> Event_fd is only used in the driver frontend, so it does not
> need to exist in the backend code. Relocate it to the frontend
> and provide an opaque mechanism for consumers instead.
> 
> Signed-off-by: Alastair D'Silva <alastair@d-silva.org>
> ---
>   drivers/misc/ocxl/afu_irq.c       | 76 ++++++++++++++++++-------------
>   drivers/misc/ocxl/file.c          | 22 ++++++++-
>   drivers/misc/ocxl/ocxl_internal.h |  5 --
>   include/misc/ocxl.h               | 46 +++++++++++++++++++
>   4 files changed, 111 insertions(+), 38 deletions(-)
> 
> diff --git a/drivers/misc/ocxl/afu_irq.c b/drivers/misc/ocxl/afu_irq.c
> index 2d410cd6f817..d71e62df7d31 100644
> --- a/drivers/misc/ocxl/afu_irq.c
> +++ b/drivers/misc/ocxl/afu_irq.c
> @@ -1,7 +1,7 @@
>   // SPDX-License-Identifier: GPL-2.0+
>   // Copyright 2017 IBM Corp.
>   #include <linux/interrupt.h>
> -#include <linux/eventfd.h>
> +#include <asm/pnv-ocxl.h>
>   #include "ocxl_internal.h"
>   #include "trace.h"
>   
> @@ -11,7 +11,9 @@ struct afu_irq {
>   	unsigned int virq;
>   	char *name;
>   	u64 trigger_page;
> -	struct eventfd_ctx *ev_ctx;
> +	irqreturn_t (*handler)(void *private);
> +	void (*free_private)(void *private);
> +	void *private;
>   };
>   
>   int ocxl_irq_offset_to_id(struct ocxl_context *ctx, u64 offset)
> @@ -24,14 +26,43 @@ u64 ocxl_irq_id_to_offset(struct ocxl_context *ctx, int irq_id)
>   	return ctx->afu->irq_base_offset + (irq_id << PAGE_SHIFT);
>   }
>   
> +int ocxl_irq_set_handler(struct ocxl_context *ctx, int irq_id,
> +		irqreturn_t (*handler)(void *private),
> +		void (*free_private)(void *private),
> +		void *private)
> +{
> +	struct afu_irq *irq;
> +	int rc;
> +
> +	mutex_lock(&ctx->irq_lock);
> +	irq = idr_find(&ctx->irq_idr, irq_id);
> +	if (!irq) {
> +		rc = -EINVAL;
> +		goto unlock;
> +	}
> +
> +	irq->handler = handler;
> +	irq->private = private;
> +
> +	rc = 0;
> +	goto unlock;


That goto is too much.


> +
> +unlock:
> +	mutex_unlock(&ctx->irq_lock);
> +	return rc;
> +}
> +EXPORT_SYMBOL_GPL(ocxl_irq_set_handler);
> +
>   static irqreturn_t afu_irq_handler(int virq, void *data)
>   {
>   	struct afu_irq *irq = (struct afu_irq *) data;
>   
>   	trace_ocxl_afu_irq_receive(virq);
> -	if (irq->ev_ctx)
> -		eventfd_signal(irq->ev_ctx, 1);
> -	return IRQ_HANDLED;
> +
> +	if (irq->handler)
> +		return irq->handler(irq->private);
> +
> +	return IRQ_HANDLED; // Just drop it on the ground
>   }
>   
>   static int setup_afu_irq(struct ocxl_context *ctx, struct afu_irq *irq)
> @@ -118,6 +149,8 @@ int ocxl_afu_irq_alloc(struct ocxl_context *ctx, int *irq_id)
>   	return rc;
>   }
>   
> +EXPORT_SYMBOL_GPL(ocxl_afu_irq_alloc);


nit: checkpatch doesn't like the empty line between the function and its 
symbol export. Also true for a few other symbols in that file.



> diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h
> index a8fe0ce4ea67..1b48e9d63abb 100644
> --- a/include/misc/ocxl.h
> +++ b/include/misc/ocxl.h
> @@ -161,6 +161,52 @@ int ocxl_context_attach(struct ocxl_context *ctx, u64 amr,
>    */
>   int ocxl_context_detach(struct ocxl_context *ctx);
>   
> +// AFU IRQs
> +
> +/**
> + * Allocate an IRQ associated with an AFU context
> + * @ctx: the AFU context
> + * @irq_id: out, the IRQ ID
> + *
> + * Returns 0 on success, negative on failure
> + */
> +extern int ocxl_afu_irq_alloc(struct ocxl_context *ctx, int *irq_id);
> +
> +/**
> + * Frees an IRQ associated with an AFU context
> + * @ctx: the AFU context
> + * @irq_id: the IRQ ID
> + *
> + * Returns 0 on success, negative on failure
> + */
> +extern int ocxl_afu_irq_free(struct ocxl_context *ctx, int irq_id);
> +
> +/**
> + * Gets the address of the trigger page for an IRQ
> + * This can then be provided to an AFU which will write to that
> + * page to trigger the IRQ.
> + * @ctx: The AFU context that the IRQ is associated with
> + * @irq_id: The IRQ ID
> + *
> + * returns the trigger page address, or 0 if the IRQ is not valid
> + */
> +extern u64 ocxl_afu_irq_get_addr(struct ocxl_context *ctx, int irq_id);
> +
> +/**
> + * Provide a callback to be called when an IRQ is triggered
> + * @ctx: The AFU context that the IRQ is associated with
> + * @irq_id: The IRQ ID
> + * @handler: the callback to be called when the IRQ is triggered
> + * @free_private: the callback to be called when the IRQ is freed

We should mention free_private can be NULL, in which case it is ignored.

   Fred


  reply	other threads:[~2019-03-25 15:41 UTC|newest]

Thread overview: 156+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-27  4:57 [PATCH 0/5] ocxl: OpenCAPI Cleanup Alastair D'Silva
2019-02-27  4:57 ` Alastair D'Silva
2019-02-27  4:57 ` [PATCH 1/5] ocxl: Rename struct link to ocxl_link Alastair D'Silva
2019-02-27  4:57   ` Alastair D'Silva
2019-02-27  7:15   ` Andrew Donnellan
2019-02-27  7:15     ` Andrew Donnellan
2019-02-27  7:34     ` Alastair D'Silva
2019-02-27  7:34       ` Alastair D'Silva
2019-02-27  7:54       ` Andrew Donnellan
2019-02-27  7:54         ` Andrew Donnellan
2019-02-27  8:04         ` Alastair D'Silva
2019-02-27  8:04           ` Alastair D'Silva
2019-02-27  8:18           ` Andrew Donnellan
2019-02-27  8:18             ` Andrew Donnellan
2019-02-27 13:45             ` Frederic Barrat
2019-02-27 13:45               ` Frederic Barrat
2019-02-27 13:59               ` Greg Kurz
2019-02-27 13:59                 ` Greg Kurz
2019-02-27 13:53   ` Greg Kurz
2019-02-27 13:53     ` Greg Kurz
2019-02-27  4:57 ` [PATCH 2/5] ocxl: Clean up printf formats Alastair D'Silva
2019-02-27  4:57   ` Alastair D'Silva
2019-02-27 13:40   ` Frederic Barrat
2019-02-27 13:40     ` Frederic Barrat
2019-02-28  5:02   ` Andrew Donnellan
2019-02-28  5:02     ` Andrew Donnellan
2019-03-02  1:13   ` Joe Perches
2019-03-02  1:13     ` Joe Perches
2019-02-27  4:57 ` [PATCH 3/5] ocxl: read_pasid never returns an error, so make it void Alastair D'Silva
2019-02-27  4:57   ` Alastair D'Silva
2019-02-27 13:25   ` Frederic Barrat
2019-02-27 13:25     ` Frederic Barrat
2019-02-28  5:03   ` Andrew Donnellan
2019-02-28  5:03     ` Andrew Donnellan
2019-02-27  4:57 ` [PATCH 4/5] ocxl: Remove superfluous 'extern' from headers Alastair D'Silva
2019-02-27  4:57   ` Alastair D'Silva
2019-02-27 13:36   ` Frederic Barrat
2019-02-27 13:36     ` Frederic Barrat
2019-02-28  5:05   ` Andrew Donnellan
2019-02-28  5:05     ` Andrew Donnellan
2019-02-27  4:57 ` [PATCH 5/5] ocxl: Remove some unused exported symbols Alastair D'Silva
2019-02-27  4:57   ` Alastair D'Silva
2019-02-27 13:39   ` Frederic Barrat
2019-02-27 13:39     ` Frederic Barrat
2019-02-28  5:23   ` Andrew Donnellan
2019-02-28  5:23     ` Andrew Donnellan
2019-03-13  4:06 ` [PATCH v2 0/5] ocxl: OpenCAPI Cleanup Alastair D'Silva
2019-03-13  4:06   ` Alastair D'Silva
2019-03-13  4:06   ` [PATCH 1/5] ocxl: Rename struct link to ocxl_link Alastair D'Silva
2019-03-13  4:06     ` Alastair D'Silva
2019-03-15  6:58     ` Andrew Donnellan
2019-03-15  6:58       ` Andrew Donnellan
2019-03-13  4:06   ` [PATCH 2/5] ocxl: Clean up printf formats Alastair D'Silva
2019-03-13  4:06     ` Alastair D'Silva
2019-03-13  8:24     ` Greg Kurz
2019-03-14  4:58     ` Andrew Donnellan
2019-03-14  4:58       ` Andrew Donnellan
2019-03-13  4:06   ` [PATCH 3/5] ocxl: read_pasid never returns an error, so make it void Alastair D'Silva
2019-03-13  4:06     ` Alastair D'Silva
2019-03-14  4:59     ` Andrew Donnellan
2019-03-14  4:59       ` Andrew Donnellan
2019-03-13  4:07   ` [PATCH 4/5] ocxl: Remove superfluous 'extern' from headers Alastair D'Silva
2019-03-13  4:07     ` Alastair D'Silva
2019-03-13  8:28     ` Greg Kurz
2019-03-14  5:08     ` Andrew Donnellan
2019-03-14  5:08       ` Andrew Donnellan
2019-03-13  4:07   ` [PATCH 5/5] ocxl: Remove some unused exported symbols Alastair D'Silva
2019-03-13  4:07     ` Alastair D'Silva
2019-03-13  9:10     ` Greg Kurz
2019-03-14  2:23       ` Alastair D'Silva
2019-03-14  6:50         ` Greg Kurz
2019-03-15  4:49     ` Andrew Donnellan
2019-03-15  4:49       ` Andrew Donnellan
2019-03-15  5:07       ` Andrew Donnellan
2019-03-15  5:07         ` Andrew Donnellan
2019-03-20  5:34   ` [PATCH v3 0/5] ocxl: OpenCAPI Cleanup Alastair D'Silva
2019-03-20  5:34     ` Alastair D'Silva
2019-03-20  5:34     ` [PATCH v3 1/5] ocxl: Rename struct link to ocxl_link Alastair D'Silva
2019-03-20  5:34       ` Alastair D'Silva
2019-03-20  5:34     ` [PATCH v3 2/5] ocxl: Clean up printf formats Alastair D'Silva
2019-03-20  5:34       ` Alastair D'Silva
2019-03-20 17:24       ` Joe Perches
2019-03-20 17:24         ` Joe Perches
2019-03-20  5:34     ` [PATCH v3 3/5] ocxl: read_pasid never returns an error, so make it void Alastair D'Silva
2019-03-20  5:34       ` Alastair D'Silva
2019-03-20  5:34     ` [PATCH v3 4/5] ocxl: Remove superfluous 'extern' from headers Alastair D'Silva
2019-03-20  5:34       ` Alastair D'Silva
2019-03-20  5:34     ` [PATCH v3 5/5] ocxl: Remove some unused exported symbols Alastair D'Silva
2019-03-20  5:34       ` Alastair D'Silva
2019-03-25  5:34     ` [PATCH v4 0/4] ocxl: OpenCAPI Cleanup Alastair D'Silva
2019-03-25  5:34       ` Alastair D'Silva
2019-03-25  5:34       ` [PATCH v4 1/4] ocxl: Rename struct link to ocxl_link Alastair D'Silva
2019-03-25  5:34         ` Alastair D'Silva
2019-04-03 14:18         ` Frederic Barrat
2019-04-03 14:18           ` Frederic Barrat
2019-04-05  7:05         ` Andrew Donnellan
2019-04-05  7:05           ` Andrew Donnellan
2019-05-03  6:59         ` Michael Ellerman
2019-03-25  5:34       ` [PATCH v4 2/4] ocxl: read_pasid never returns an error, so make it void Alastair D'Silva
2019-03-25  5:34         ` Alastair D'Silva
2019-04-03 14:20         ` Frederic Barrat
2019-04-03 14:20           ` Frederic Barrat
2019-04-05  7:05         ` Andrew Donnellan
2019-04-05  7:05           ` Andrew Donnellan
2019-03-25  5:34       ` [PATCH v4 3/4] ocxl: Remove superfluous 'extern' from headers Alastair D'Silva
2019-03-25  5:34         ` Alastair D'Silva
2019-03-25 16:55         ` Greg Kurz
2019-03-25 16:55           ` Greg Kurz
2019-04-03 14:20         ` Frederic Barrat
2019-04-03 14:20           ` Frederic Barrat
2019-04-05  7:09         ` Andrew Donnellan
2019-04-05  7:09           ` Andrew Donnellan
2019-03-25  5:34       ` [PATCH v4 4/4] ocxl: Remove some unused exported symbols Alastair D'Silva
2019-03-25  5:34         ` Alastair D'Silva
2019-03-25 16:57         ` Greg Kurz
2019-03-25 16:57           ` Greg Kurz
2019-04-03 14:23         ` Frederic Barrat
2019-04-03 14:23           ` Frederic Barrat
2019-04-05  7:28         ` Andrew Donnellan
2019-04-05  7:28           ` Andrew Donnellan
2019-03-25 16:49       ` [PATCH v4 0/4] ocxl: OpenCAPI Cleanup Greg Kurz
2019-03-25 16:49         ` Greg Kurz
2019-03-25 17:34         ` Frederic Barrat
2019-03-25 17:34           ` Frederic Barrat
2019-03-25 21:45           ` Alastair D'Silva
2019-03-25 21:45             ` Alastair D'Silva
2019-03-25  5:44     ` [PATCH v3 0/7] Refactor OCXL driver to allow external drivers to use it Alastair D'Silva
2019-03-25  5:44       ` Alastair D'Silva
2019-03-25  5:44       ` [PATCH v3 1/7] ocxl: Split pci.c Alastair D'Silva
2019-03-25  5:44         ` Alastair D'Silva
2019-03-25 10:01         ` Frederic Barrat
2019-03-25 10:01           ` Frederic Barrat
2019-03-25  5:44       ` [PATCH v3 2/7] ocxl: Don't pass pci_dev around Alastair D'Silva
2019-03-25  5:44         ` Alastair D'Silva
2019-03-25 10:04         ` Frederic Barrat
2019-03-25 10:04           ` Frederic Barrat
2019-03-25  5:44       ` [PATCH v3 3/7] ocxl: Create a clear delineation between ocxl backend & frontend Alastair D'Silva
2019-03-25  5:44         ` Alastair D'Silva
2019-03-25 15:11         ` Frederic Barrat
2019-03-25 15:11           ` Frederic Barrat
2019-03-25  5:44       ` [PATCH v3 4/7] ocxl: Allow external drivers to use OpenCAPI contexts Alastair D'Silva
2019-03-25  5:44         ` Alastair D'Silva
2019-03-25 15:13         ` Frederic Barrat
2019-03-25 15:13           ` Frederic Barrat
2019-03-25  5:44       ` [PATCH v3 5/7] ocxl: afu_irq only deals with IRQ IDs, not offsets Alastair D'Silva
2019-03-25  5:44         ` Alastair D'Silva
2019-03-25 15:24         ` Frederic Barrat
2019-03-25 15:24           ` Frederic Barrat
2019-03-25  5:44       ` [PATCH v3 6/7] ocxl: move event_fd handling to frontend Alastair D'Silva
2019-03-25  5:44         ` Alastair D'Silva
2019-03-25 15:41         ` Frederic Barrat [this message]
2019-03-25 15:41           ` Frederic Barrat
2019-03-25  5:44       ` [PATCH v3 7/7] ocxl: Provide global MMIO accessors for external drivers Alastair D'Silva
2019-03-25  5:44         ` Alastair D'Silva
2019-03-25 15:49         ` Frederic Barrat
2019-03-25 15:49           ` Frederic Barrat

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=f990a76d-76e4-32ac-e618-5bfe2a267cb6@linux.ibm.com \
    --to=fbarrat@linux.ibm.com \
    --cc=alastair@au1.ibm.com \
    --cc=alastair@d-silva.org \
    --cc=andrew.donnellan@au1.ibm.com \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.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.