From: Alastair D'Silva <redacted>
The Power 9 as_notify/wait feature provides a lower latency way to
signal a thread that work is complete. This series enables the use of
this feature from OpenCAPI adapters, as well as addressing a potential
starvation issue when allocating thread IDs.
Changelog:
v5:
Remove stray brace
Fix bad rename of ocxl_ioctl_platform to ocxl_ioctl_features
v4:
Remove the "unique" statement from the set_thread_tidr function and
move the text explaining why it is safe from the commit message
to the function description
v3:
Fix references to POWER9
Remove stray whitespace edit from docs
Add more details to commit message for "use task_pid_nr()"
Retitle patch 6 to indicate OCXL rather than CPU features
v2:
Rename get_platform IOCTL to get_features
Move stray edit from patch 1 to patch 3
Alastair D'Silva (7):
powerpc: Add TIDR CPU feature for POWER9
powerpc: Use TIDR CPU feature to control TIDR allocation
powerpc: use task_pid_nr() for TID allocation
ocxl: Rename pnv_ocxl_spa_remove_pe to clarify it's action
ocxl: Expose the thread_id needed for wait on POWER9
ocxl: Add an IOCTL so userspace knows what OCXL features are available
ocxl: Document new OCXL IOCTLs
Documentation/accelerators/ocxl.rst | 11 ++++
arch/powerpc/include/asm/cputable.h | 3 +-
arch/powerpc/include/asm/pnv-ocxl.h | 2 +-
arch/powerpc/include/asm/switch_to.h | 1 -
arch/powerpc/kernel/dt_cpu_ftrs.c | 1 +
arch/powerpc/kernel/process.c | 101 +---------------------------------
arch/powerpc/platforms/powernv/ocxl.c | 4 +-
drivers/misc/ocxl/context.c | 5 +-
drivers/misc/ocxl/file.c | 78 ++++++++++++++++++++++++++
drivers/misc/ocxl/link.c | 38 ++++++++++++-
drivers/misc/ocxl/ocxl_internal.h | 1 +
include/misc/ocxl.h | 9 +++
include/uapi/misc/ocxl.h | 14 +++++
13 files changed, 163 insertions(+), 105 deletions(-)
--
2.14.3
From: Alastair D'Silva <redacted>
Switch the use of TIDR on it's CPU feature, rather than assuming it
is available based on architecture.
Signed-off-by: Alastair D'Silva <redacted>
---
arch/powerpc/kernel/process.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
From: Alastair D'Silva <redacted>
Switch the use of TIDR on it's CPU feature, rather than assuming it
is available based on architecture.
Signed-off-by: Alastair D'Silva <redacted>
---
From: Andrew Donnellan <hidden> Date: 2018-05-31 04:20:38
On 11/05/18 16:12, Alastair D'Silva wrote:
From: Alastair D'Silva <redacted>
Switch the use of TIDR on it's CPU feature, rather than assuming it
is available based on architecture.
Signed-off-by: Alastair D'Silva <redacted>
Reviewed-by: Andrew Donnellan <redacted>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan@au1.ibm.com IBM Australia Limited
@@ -157,6 +157,17 @@ OCXL_IOCTL_GET_METADATA: Obtains configuration information from the card, such at the size of MMIO areas, the AFU version, and the PASID for the current context.+OCXL_IOCTL_ENABLE_P9_WAIT:++ Allows the AFU to wake a userspace thread executing 'wait'. Returns+ information to userspace to allow it to configure the AFU. Note that+ this is only available on POWER9.++OCXL_IOCTL_GET_FEATURES:++ Reports on which CPU features that affect OpenCAPI are usable from+ userspace.+ mmap ----
@@ -157,6 +157,17 @@ OCXL_IOCTL_GET_METADATA: Obtains configuration information from the card, such at the size of MMIO areas, the AFU version, and the PASID for the current context.+OCXL_IOCTL_ENABLE_P9_WAIT:++ Allows the AFU to wake a userspace thread executing 'wait'. Returns+ information to userspace to allow it to configure the AFU. Note that+ this is only available on POWER9.++OCXL_IOCTL_GET_FEATURES:++ Reports on which CPU features that affect OpenCAPI are usable from+ userspace.+ mmap ----
From: Alastair D'Silva <redacted>
In order for a userspace AFU driver to call the POWER9 specific
OCXL_IOCTL_ENABLE_P9_WAIT, it needs to verify that it can actually
make that call.
Signed-off-by: Alastair D'Silva <redacted>
---
drivers/misc/ocxl/file.c | 25 +++++++++++++++++++++++++
include/uapi/misc/ocxl.h | 6 ++++++
2 files changed, 31 insertions(+)
From: Alastair D'Silva <redacted>
In order for a userspace AFU driver to call the POWER9 specific
OCXL_IOCTL_ENABLE_P9_WAIT, it needs to verify that it can actually
make that call.
Signed-off-by: Alastair D'Silva <redacted>
---
From: Andrew Donnellan <hidden> Date: 2018-05-31 04:46:40
On 11/05/18 16:13, Alastair D'Silva wrote:
From: Alastair D'Silva <redacted>
In order for a userspace AFU driver to call the POWER9 specific
OCXL_IOCTL_ENABLE_P9_WAIT, it needs to verify that it can actually
make that call.
Signed-off-by: Alastair D'Silva <redacted>
Acked-by: Andrew Donnellan <redacted>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan@au1.ibm.com IBM Australia Limited
From: Alastair D'Silva <redacted>
The current implementation of TID allocation, using a global IDR, may
result in an errant process starving the system of available TIDs.
Instead, use task_pid_nr(), as mentioned by the original author. The
scenario described which prevented it's use is not applicable, as
set_thread_tidr can only be called after the task struct has been
populated.
In the unlikely event that 2 threads share the TID and are waiting,
all potential outcomes have been determined safe.
Signed-off-by: Alastair D'Silva <redacted>
---
arch/powerpc/include/asm/switch_to.h | 1 -
arch/powerpc/kernel/process.c | 122 ++++++---------------------
2 files changed, 28 insertions(+), 95 deletions(-)
From: Alastair D'Silva <redacted>
The current implementation of TID allocation, using a global IDR, may
result in an errant process starving the system of available TIDs.
Instead, use task_pid_nr(), as mentioned by the original author. The
scenario described which prevented it's use is not applicable, as
set_thread_tidr can only be called after the task struct has been
populated.
In the unlikely event that 2 threads share the TID and are waiting,
all potential outcomes have been determined safe.
Signed-off-by: Alastair D'Silva <redacted>
---
Thanks for adding the comment. It assumes the reader is aware that the
TIDR value is only used for the notification using the 'wait'
instruction, but that's likely to be the case.
Reviewed-by: Frederic Barrat <redacted>
From: Andrew Donnellan <hidden> Date: 2018-05-31 04:30:55
On 11/05/18 16:12, Alastair D'Silva wrote:
From: Alastair D'Silva <redacted>
The current implementation of TID allocation, using a global IDR, may
result in an errant process starving the system of available TIDs.
Instead, use task_pid_nr(), as mentioned by the original author. The
scenario described which prevented it's use is not applicable, as
set_thread_tidr can only be called after the task struct has been
populated.
In the unlikely event that 2 threads share the TID and are waiting,
all potential outcomes have been determined safe.
Signed-off-by: Alastair D'Silva <redacted>
Thanks for the clarifying comment. The diff is painful to read but I
think it makes sense :)
Reviewed-by: Andrew Donnellan <redacted>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan@au1.ibm.com IBM Australia Limited
@@ -483,7 +483,7 @@ int pnv_ocxl_spa_remove_pe(void *platform_data, int pe_handle)rc=opal_npu_spa_clear_cache(data->phb_opal_id,data->bdfn,pe_handle);returnrc;}-EXPORT_SYMBOL_GPL(pnv_ocxl_spa_remove_pe);+EXPORT_SYMBOL_GPL(pnv_ocxl_spa_remove_pe_from_cache);intpnv_ocxl_alloc_xive_irq(u32*irq,u64*trigger_addr){
@@ -599,7 +599,7 @@ int ocxl_link_remove_pe(void *link_handle, int pasid)*Onpowerpc,theentryneedstobeclearedfromthecontext*cacheoftheNPU.*/-rc=pnv_ocxl_spa_remove_pe(link->platform_data,pe_handle);+rc=pnv_ocxl_spa_remove_pe_from_cache(link->platform_data,pe_handle);WARN_ON(rc);pe_data=radix_tree_delete(&spa->pe_tree,pe_handle);
@@ -483,7 +483,7 @@ int pnv_ocxl_spa_remove_pe(void *platform_data, int pe_handle)rc=opal_npu_spa_clear_cache(data->phb_opal_id,data->bdfn,pe_handle);returnrc;}-EXPORT_SYMBOL_GPL(pnv_ocxl_spa_remove_pe);+EXPORT_SYMBOL_GPL(pnv_ocxl_spa_remove_pe_from_cache);intpnv_ocxl_alloc_xive_irq(u32*irq,u64*trigger_addr){
@@ -599,7 +599,7 @@ int ocxl_link_remove_pe(void *link_handle, int pasid)*Onpowerpc,theentryneedstobeclearedfromthecontext*cacheoftheNPU.*/-rc=pnv_ocxl_spa_remove_pe(link->platform_data,pe_handle);+rc=pnv_ocxl_spa_remove_pe_from_cache(link->platform_data,pe_handle);WARN_ON(rc);pe_data=radix_tree_delete(&spa->pe_tree,pe_handle);
From: Alastair D'Silva <redacted>
In order to successfully issue as_notify, an AFU needs to know the TID
to notify, which in turn means that this information should be
available in userspace so it can be communicated to the AFU.
Signed-off-by: Alastair D'Silva <redacted>
---
drivers/misc/ocxl/context.c | 5 ++-
drivers/misc/ocxl/file.c | 53 +++++++++++++++++++++++++++++++
drivers/misc/ocxl/link.c | 36 +++++++++++++++++++++
drivers/misc/ocxl/ocxl_internal.h | 1 +
include/misc/ocxl.h | 9 ++++++
include/uapi/misc/ocxl.h | 8 +++++
6 files changed, 111 insertions(+), 1 deletion(-)
@@ -65,6 +67,7 @@ int ocxl_context_attach(struct ocxl_context *ctx, u64 amr){intrc;+// Locks both status & tidrmutex_lock(&ctx->status_mutex);if(ctx->status!=OPENED){rc=-EIO;
@@ -72,7 +75,7 @@ int ocxl_context_attach(struct ocxl_context *ctx, u64 amr)}rc=ocxl_link_add_pe(ctx->afu->fn->link,ctx->pasid,-current->mm->context.id,0,amr,current->mm,+current->mm->context.id,ctx->tidr,amr,current->mm,xsl_fault_error,ctx);if(rc)gotoout;
@@ -77,6 +77,7 @@ struct ocxl_context {structocxl_xsl_errorxsl_error;structmutexirq_lock;structidrirq_idr;+u16tidr;// Thread ID used for P9 wait implementation};structocxl_process_element{
@@ -48,6 +48,13 @@ struct ocxl_ioctl_metadata {__u64reserved[13];// Total of 16*u64};+structocxl_ioctl_p9_wait{+__u16thread_id;// The thread ID required to wake this thread+__u16reserved1;+__u32reserved2;+__u64reserved3[3];+};+structocxl_ioctl_irq_fd{__u64irq_offset;__s32eventfd;
From: Alastair D'Silva <redacted>
In order to successfully issue as_notify, an AFU needs to know the TID
to notify, which in turn means that this information should be
available in userspace so it can be communicated to the AFU.
Signed-off-by: Alastair D'Silva <redacted>
---
Ok, so we keep the limitation of having only one thread per context able
to call 'wait', even though we don't have to worry about depleting the
pool of TIDs any more. I think that's acceptable, though we don't really
have a reason to justify it any more. Any reason you want to keep it
that way?
Fred
@@ -65,6 +67,7 @@ int ocxl_context_attach(struct ocxl_context *ctx, u64 amr){intrc;+// Locks both status & tidrmutex_lock(&ctx->status_mutex);if(ctx->status!=OPENED){rc=-EIO;
@@ -72,7 +75,7 @@ int ocxl_context_attach(struct ocxl_context *ctx, u64 amr)}rc=ocxl_link_add_pe(ctx->afu->fn->link,ctx->pasid,-current->mm->context.id,0,amr,current->mm,+current->mm->context.id,ctx->tidr,amr,current->mm,xsl_fault_error,ctx);if(rc)gotoout;
@@ -77,6 +77,7 @@ struct ocxl_context {structocxl_xsl_errorxsl_error;structmutexirq_lock;structidrirq_idr;+u16tidr;// Thread ID used for P9 wait implementation};structocxl_process_element{
@@ -48,6 +48,13 @@ struct ocxl_ioctl_metadata {__u64reserved[13];// Total of 16*u64};+structocxl_ioctl_p9_wait{+__u16thread_id;// The thread ID required to wake this thread+__u16reserved1;+__u32reserved2;+__u64reserved3[3];+};+structocxl_ioctl_irq_fd{__u64irq_offset;__s32eventfd;
POWER9
=20
=20
=20
Le 11/05/2018 =C3=A0 08:13, Alastair D'Silva a =C3=A9crit :
quoted
From: Alastair D'Silva <redacted>
In order to successfully issue as_notify, an AFU needs to know the =
TID
quoted
to notify, which in turn means that this information should be
available in userspace so it can be communicated to the AFU.
Signed-off-by: Alastair D'Silva <redacted>
---
=20
Ok, so we keep the limitation of having only one thread per context =
able to
call 'wait', even though we don't have to worry about depleting the =
pool of
TIDs any more. I think that's acceptable, though we don't really have =
a reason
to justify it any more. Any reason you want to keep it that way?
=20
No strong reason, just trying to minimise the amount of changes. We can =
always expand the scope later, if we have a use-case for it.
@@ -34,6 +34,8 @@ int ocxl_context_init(struct ocxl_context *ctx, =
struct
ocxl_afu *afu,
quoted
mutex_init(&ctx->xsl_error_lock);
mutex_init(&ctx->irq_lock);
idr_init(&ctx->irq_idr);
+ ctx->tidr =3D 0;
+
/*
* Keep a reference on the AFU to make sure it's valid for the
* duration of the life of the context @@ -65,6 +67,7 @@ int
ocxl_context_attach(struct ocxl_context *ctx, u64 amr)
{
int rc;
+ // Locks both status & tidr
mutex_lock(&ctx->status_mutex);
if (ctx->status !=3D OPENED) {
rc =3D -EIO;
@@ -72,7 +75,7 @@ int ocxl_context_attach(struct ocxl_context *ctx, =
@@ -544,6 +544,42 @@ int ocxl_link_add_pe(void *link_handle, int =
pasid,
u32 pidr, u32 tidr,
quoted
}
EXPORT_SYMBOL_GPL(ocxl_link_add_pe);
+int ocxl_link_update_pe(void *link_handle, int pasid, __u16 tid) {
+ struct link *link =3D (struct link *) link_handle;
+ struct spa *spa =3D link->spa;
+ struct ocxl_process_element *pe;
+ int pe_handle, rc;
+
+ if (pasid > SPA_PASID_MAX)
+ return -EINVAL;
+
+ pe_handle =3D pasid & SPA_PE_MASK;
+ pe =3D spa->spa_mem + pe_handle;
+
+ mutex_lock(&spa->spa_lock);
+
+ pe->tid =3D tid;
+
+ /*
+ * The barrier makes sure the PE is updated
+ * before we clear the NPU context cache below, so that the
+ * old PE cannot be reloaded erroneously.
+ */
+ mb();
+
+ /*
+ * hook to platform code
+ * On powerpc, the entry needs to be cleared from the context
+ * cache of the NPU.
+ */
+ rc =3D pnv_ocxl_spa_remove_pe_from_cache(link->platform_data,
pe_handle);
quoted
+ WARN_ON(rc);
+
+ mutex_unlock(&spa->spa_lock);
+ return rc;
+}
+
int ocxl_link_remove_pe(void *link_handle, int pasid)
{
struct link *link =3D (struct link *) link_handle; diff --git
a/drivers/misc/ocxl/ocxl_internal.h
b/drivers/misc/ocxl/ocxl_internal.h
index 5d421824afd9..a32f2151029f 100644
@@ -77,6 +77,7 @@ struct ocxl_context {structocxl_xsl_errorxsl_error;structmutexirq_lock;structidrirq_idr;+u16tidr;// Thread ID used for P9 wait implementation};structocxl_process_element{
diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h index
@@ -188,6 +188,15 @@ extern int ocxl_link_add_pe(void *link_handle, =
int
pasid, u32 pidr, u32 tidr,
quoted
void (*xsl_err_cb)(void *data, u64 addr, u64 dsisr),
void *xsl_err_data);
+/**
+ * Update values within a Process Element
+ *
+ * link_handle: the link handle associated with the process element
+ * pasid: the PASID for the AFU context
+ * tid: the new thread id for the process element */ extern int
+ocxl_link_update_pe(void *link_handle, int pasid, __u16 tid);
+
/*
* Remove a Process Element from the Shared Process Area for a =
@@ -48,6 +48,13 @@ struct ocxl_ioctl_metadata {__u64reserved[13];// Total of 16*u64};+structocxl_ioctl_p9_wait{+__u16thread_id;// The thread ID required to wake this thread+__u16reserved1;+__u32reserved2;+__u64reserved3[3];+};+structocxl_ioctl_irq_fd{__u64irq_offset;__s32eventfd;
-----Original Message-----
From: Frederic Barrat <redacted>
Sent: Friday, 11 May 2018 7:25 PM
To: Alastair D'Silva <redacted>; linuxppc-dev@lists.ozlabs.org
Cc: linux-kernel@vger.kernel.org; linux-doc@vger.kernel.org;
mikey@neuling.org; vaibhav@linux.vnet.ibm.com;
aneesh.kumar@linux.vnet.ibm.com; malat@debian.org;
felix@linux.vnet.ibm.com; pombredanne@nexb.com;
sukadev@linux.vnet.ibm.com; npiggin@gmail.com;
gregkh@linuxfoundation.org; arnd@arndb.de;
andrew.donnellan@au1.ibm.com; fbarrat@linux.vnet.ibm.com;
corbet@lwn.net; Alastair D'Silva [off-list ref]
Subject: Re: [PATCH v5 5/7] ocxl: Expose the thread_id needed for wait on
POWER9
Le 11/05/2018 à 08:13, Alastair D'Silva a écrit :
quoted
From: Alastair D'Silva <redacted>
In order to successfully issue as_notify, an AFU needs to know the TID
to notify, which in turn means that this information should be
available in userspace so it can be communicated to the AFU.
Signed-off-by: Alastair D'Silva <redacted>
---
Ok, so we keep the limitation of having only one thread per context able to
call 'wait', even though we don't have to worry about depleting the pool of
TIDs any more. I think that's acceptable, though we don't really have a reason
to justify it any more. Any reason you want to keep it that way?
No strong reason, just trying to minimise the amount of changes. We can always expand the scope later, if we have a use-case for it.
ok. Agreed, it's not worth holding up this series, we can send a follow
up patch.
Fred
@@ -34,6 +34,8 @@ int ocxl_context_init(struct ocxl_context *ctx, struct
ocxl_afu *afu,
quoted
mutex_init(&ctx->xsl_error_lock);
mutex_init(&ctx->irq_lock);
idr_init(&ctx->irq_idr);
+ ctx->tidr = 0;
+
/*
* Keep a reference on the AFU to make sure it's valid for the
* duration of the life of the context @@ -65,6 +67,7 @@ int
ocxl_context_attach(struct ocxl_context *ctx, u64 amr)
{
int rc;
+ // Locks both status & tidr
mutex_lock(&ctx->status_mutex);
if (ctx->status != OPENED) {
rc = -EIO;
@@ -72,7 +75,7 @@ int ocxl_context_attach(struct ocxl_context *ctx, u64
@@ -544,6 +544,42 @@ int ocxl_link_add_pe(void *link_handle, int pasid,
u32 pidr, u32 tidr,
quoted
}
EXPORT_SYMBOL_GPL(ocxl_link_add_pe);
+int ocxl_link_update_pe(void *link_handle, int pasid, __u16 tid) {
+ struct link *link = (struct link *) link_handle;
+ struct spa *spa = link->spa;
+ struct ocxl_process_element *pe;
+ int pe_handle, rc;
+
+ if (pasid > SPA_PASID_MAX)
+ return -EINVAL;
+
+ pe_handle = pasid & SPA_PE_MASK;
+ pe = spa->spa_mem + pe_handle;
+
+ mutex_lock(&spa->spa_lock);
+
+ pe->tid = tid;
+
+ /*
+ * The barrier makes sure the PE is updated
+ * before we clear the NPU context cache below, so that the
+ * old PE cannot be reloaded erroneously.
+ */
+ mb();
+
+ /*
+ * hook to platform code
+ * On powerpc, the entry needs to be cleared from the context
+ * cache of the NPU.
+ */
+ rc = pnv_ocxl_spa_remove_pe_from_cache(link->platform_data,
pe_handle);
quoted
+ WARN_ON(rc);
+
+ mutex_unlock(&spa->spa_lock);
+ return rc;
+}
+
int ocxl_link_remove_pe(void *link_handle, int pasid)
{
struct link *link = (struct link *) link_handle; diff --git
a/drivers/misc/ocxl/ocxl_internal.h
b/drivers/misc/ocxl/ocxl_internal.h
index 5d421824afd9..a32f2151029f 100644
@@ -77,6 +77,7 @@ struct ocxl_context {structocxl_xsl_errorxsl_error;structmutexirq_lock;structidrirq_idr;+u16tidr;// Thread ID used for P9 wait implementation};structocxl_process_element{
diff --git a/include/misc/ocxl.h b/include/misc/ocxl.h index
@@ -188,6 +188,15 @@ extern int ocxl_link_add_pe(void *link_handle, int
pasid, u32 pidr, u32 tidr,
quoted
void (*xsl_err_cb)(void *data, u64 addr, u64 dsisr),
void *xsl_err_data);
+/**
+ * Update values within a Process Element
+ *
+ * link_handle: the link handle associated with the process element
+ * pasid: the PASID for the AFU context
+ * tid: the new thread id for the process element */ extern int
+ocxl_link_update_pe(void *link_handle, int pasid, __u16 tid);
+
/*
* Remove a Process Element from the Shared Process Area for a link
*/
diff --git a/include/uapi/misc/ocxl.h b/include/uapi/misc/ocxl.h index
@@ -48,6 +48,13 @@ struct ocxl_ioctl_metadata {__u64reserved[13];// Total of 16*u64};+structocxl_ioctl_p9_wait{+__u16thread_id;// The thread ID required to wake this thread+__u16reserved1;+__u32reserved2;+__u64reserved3[3];+};+structocxl_ioctl_irq_fd{__u64irq_offset;__s32eventfd;
From: Andrew Donnellan <hidden> Date: 2018-05-31 04:42:39
On 11/05/18 16:13, Alastair D'Silva wrote:
From: Alastair D'Silva <redacted>
In order to successfully issue as_notify, an AFU needs to know the TID
to notify, which in turn means that this information should be
available in userspace so it can be communicated to the AFU.
Signed-off-by: Alastair D'Silva <redacted>
Acked-by: Andrew Donnellan <redacted>
Comments below.
+#ifdef CONFIG_PPC64
+static long afu_ioctl_enable_p9_wait(struct ocxl_context *ctx,
+ struct ocxl_ioctl_p9_wait __user *uarg)
+{
+ struct ocxl_ioctl_p9_wait arg;
+
+ memset(&arg, 0, sizeof(arg));
+
+ if (cpu_has_feature(CPU_FTR_P9_TIDR)) {
+ enum ocxl_context_status status;
+
+ // Locks both status & tidr
+ mutex_lock(&ctx->status_mutex);
+ if (!ctx->tidr) {
+ if (set_thread_tidr(current))
+ return -ENOENT;
+
+ ctx->tidr = current->thread.tidr;
+ }
+
+ status = ctx->status;
+ mutex_unlock(&ctx->status_mutex);
+
+ if (status == ATTACHED) {
+ int rc;
+ struct link *link = ctx->afu->fn->link;
+
+ rc = ocxl_link_update_pe(link, ctx->pasid, ctx->tidr);
+ if (rc)
+ return rc;
+ }
+
+ arg.thread_id = ctx->tidr;
+ } else
+ return -ENOENT;
I didn't pick this up before - please please please use braces on both
sides of the if here.
@@ -188,6 +188,15 @@ extern int ocxl_link_add_pe(void *link_handle, int pasid, u32 pidr, u32 tidr,void(*xsl_err_cb)(void*data,u64addr,u64dsisr),void*xsl_err_data);+/**+*UpdatevalueswithinaProcessElement+*+*link_handle:thelinkhandleassociatedwiththeprocesselement+*pasid:thePASIDfortheAFUcontext+*tid:thenewthreadidfortheprocesselement+*/+externintocxl_link_update_pe(void*link_handle,intpasid,__u16tid);
My earlier comment about __u16 vs u16 applies for this declaration (and
the body declaration) as well
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan@au1.ibm.com IBM Australia Limited
From: Alastair D'Silva <redacted>
This patch adds a CPU feature bit to show whether the CPU has
the TIDR register available, enabling as_notify/wait in userspace.
Signed-off-by: Alastair D'Silva <redacted>
---
arch/powerpc/include/asm/cputable.h | 3 ++-
arch/powerpc/kernel/dt_cpu_ftrs.c | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
From: Alastair D'Silva <redacted>
This patch adds a CPU feature bit to show whether the CPU has
the TIDR register available, enabling as_notify/wait in userspace.
Signed-off-by: Alastair D'Silva <redacted>
---
From: Andrew Donnellan <hidden> Date: 2018-05-31 04:19:23
On 11/05/18 16:12, Alastair D'Silva wrote:
From: Alastair D'Silva <redacted>
This patch adds a CPU feature bit to show whether the CPU has
the TIDR register available, enabling as_notify/wait in userspace.
Signed-off-by: Alastair D'Silva <redacted>
Reviewed-by: Andrew Donnellan <redacted>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan@au1.ibm.com IBM Australia Limited
From: Michael Ellerman <hidden> Date: 2018-06-04 14:10:59
On Fri, 2018-05-11 at 06:12:57 UTC, "Alastair D'Silva" wrote:
From: Alastair D'Silva <redacted>
This patch adds a CPU feature bit to show whether the CPU has
the TIDR register available, enabling as_notify/wait in userspace.
Signed-off-by: Alastair D'Silva <redacted>
Reviewed-by: Frederic Barrat <redacted>
Reviewed-by: Andrew Donnellan <redacted>