Message ID | 20170830101550.16821-2-fbarrat@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 197267d0356004a31c4d6b6336598f5dff3301e1 |
Headers | show |
Series | [v2,1/3] powerpc/mm: Export flush_all_mm() | expand |
Frederic Barrat <fbarrat@linux.vnet.ibm.com> writes: > cxl keeps a driver use count, which is used with the hash memory model > on p8 to know when to upgrade local TLBIs to global and to trigger > callbacks to manage the MMU for PSL8. > > If a process opens a context and closes without attaching or fails the > attachment, the driver use count is never decremented. As a > consequence, TLB invalidations remain global, even if there are no > active cxl contexts. > > We should increment the driver use count when the process is attaching > to the cxl adapter, and not on open. It's not needed before the > adapter starts using the context and the use count is decremented on > the detach path, so it makes more sense. > > It affects only the user api. The kernel api is already doing The > Right Thing. > > Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com> > Cc: stable@vger.kernel.org # v4.2+ > Fixes: 7bb5d91a4dda ("cxl: Rework context lifetimes") > Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com> I'll pick this up straight away, because it's a fix. So you can drop this from the series. cheers
On Wed, 2017-08-30 at 10:15:49 UTC, Frederic Barrat wrote: > cxl keeps a driver use count, which is used with the hash memory model > on p8 to know when to upgrade local TLBIs to global and to trigger > callbacks to manage the MMU for PSL8. > > If a process opens a context and closes without attaching or fails the > attachment, the driver use count is never decremented. As a > consequence, TLB invalidations remain global, even if there are no > active cxl contexts. > > We should increment the driver use count when the process is attaching > to the cxl adapter, and not on open. It's not needed before the > adapter starts using the context and the use count is decremented on > the detach path, so it makes more sense. > > It affects only the user api. The kernel api is already doing The > Right Thing. > > Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com> > Cc: stable@vger.kernel.org # v4.2+ > Fixes: 7bb5d91a4dda ("cxl: Rework context lifetimes") > Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com> Applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/197267d0356004a31c4d6b6336598f cheers
diff --git a/drivers/misc/cxl/api.c b/drivers/misc/cxl/api.c index 1a138c83f877..a0c44d16bf30 100644 --- a/drivers/misc/cxl/api.c +++ b/drivers/misc/cxl/api.c @@ -336,6 +336,10 @@ int cxl_start_context(struct cxl_context *ctx, u64 wed, mmput(ctx->mm); } + /* + * Increment driver use count. Enables global TLBIs for hash + * and callbacks to handle the segment table + */ cxl_ctx_get(); if ((rc = cxl_ops->attach_process(ctx, kernel, wed, 0))) { diff --git a/drivers/misc/cxl/file.c b/drivers/misc/cxl/file.c index 0761271d68c5..4bfad9f6dc9f 100644 --- a/drivers/misc/cxl/file.c +++ b/drivers/misc/cxl/file.c @@ -95,7 +95,6 @@ static int __afu_open(struct inode *inode, struct file *file, bool master) pr_devel("afu_open pe: %i\n", ctx->pe); file->private_data = ctx; - cxl_ctx_get(); /* indicate success */ rc = 0; @@ -225,6 +224,12 @@ static long afu_ioctl_start_work(struct cxl_context *ctx, if (ctx->mm) mmput(ctx->mm); + /* + * Increment driver use count. Enables global TLBIs for hash + * and callbacks to handle the segment table + */ + cxl_ctx_get(); + trace_cxl_attach(ctx, work.work_element_descriptor, work.num_interrupts, amr); if ((rc = cxl_ops->attach_process(ctx, false, work.work_element_descriptor, @@ -233,6 +238,7 @@ static long afu_ioctl_start_work(struct cxl_context *ctx, cxl_adapter_context_put(ctx->afu->adapter); put_pid(ctx->pid); ctx->pid = NULL; + cxl_ctx_put(); cxl_context_mm_count_put(ctx); goto out; }