From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:45678 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751458AbeERMnR (ORCPT ); Fri, 18 May 2018 08:43:17 -0400 Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w4ICcf7c021049 for ; Fri, 18 May 2018 08:43:16 -0400 Received: from e06smtp15.uk.ibm.com (e06smtp15.uk.ibm.com [195.75.94.111]) by mx0a-001b2d01.pphosted.com with ESMTP id 2j1xba26v4-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 18 May 2018 08:43:16 -0400 Received: from localhost by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 18 May 2018 13:43:15 +0100 Subject: Re: [PATCH-RESEND] cxl: Disable prefault_mode in Radix mode To: Vaibhav Jain , linuxppc-dev@lists.ozlabs.org, Frederic Barrat Cc: Vaibhav Jain , Andrew Donnellan , Christophe Lombard , Philippe Bergheaud , "Alastair D'Silva" , stable@vger.kernel.org References: <20180518094223.786-1-vaibhav@linux.vnet.ibm.com> From: Frederic Barrat Date: Fri, 18 May 2018 14:43:10 +0200 MIME-Version: 1.0 In-Reply-To: <20180518094223.786-1-vaibhav@linux.vnet.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Message-Id: <61370112-fcc5-830f-6f64-53e5d1bd2040@linux.ibm.com> Sender: stable-owner@vger.kernel.org List-ID: Le 18/05/2018 à 11:42, Vaibhav Jain a écrit : > From: Vaibhav Jain > > Currently we see a kernel-oops reported on Power-9 while attaching a > context to an AFU, with radix-mode and sysfs attr 'prefault_mode' set > to anything other than 'none'. The backtrace of the oops is of this > form: > > Unable to handle kernel paging request for data at address 0x00000080 > Faulting instruction address: 0xc00800000bcf3b20 > cpu 0x1: Vector: 300 (Data Access) at [c00000037f003800] > pc: c00800000bcf3b20: cxl_load_segment+0x178/0x290 [cxl] > lr: c00800000bcf39f0: cxl_load_segment+0x48/0x290 [cxl] > sp: c00000037f003a80 > msr: 9000000000009033 > dar: 80 > dsisr: 40000000 > current = 0xc00000037f280000 > paca = 0xc0000003ffffe600 softe: 3 irq_happened: 0x01 > pid = 3529, comm = afp_no_int > > [c00000037f003af0] c00800000bcf4424 cxl_prefault+0xfc/0x248 [cxl] > [c00000037f003b50] c00800000bcf8a40 process_element_entry_psl9+0xd8/0x1a0 [cxl] > [c00000037f003b90] c00800000bcf944c cxl_attach_dedicated_process_psl9+0x44/0x130 [cxl] > [c00000037f003bd0] c00800000bcf5448 native_attach_process+0xc0/0x130 [cxl] > [c00000037f003c50] c00800000bcf16cc afu_ioctl+0x3f4/0x5e0 [cxl] > [c00000037f003d00] c00000000039d98c do_vfs_ioctl+0xdc/0x890 > [c00000037f003da0] c00000000039e1a8 ksys_ioctl+0x68/0xf0 > [c00000037f003df0] c00000000039e270 sys_ioctl+0x40/0xa0 > [c00000037f003e30] c00000000000b320 system_call+0x58/0x6c > --- Exception: c01 (System Call) at 0000000010053bb0 > > The issue is caused as on Power-8 the AFU attr 'prefault_mode' was > used to improve initial storage fault performance by prefaulting > process segments. However on Power-9 with radix mode we don't have > Storage-Segments that we can prefault. Also prefaulting process Pages > will be too costly and fine-grained. > > Hence, since the prefaulting mechanism doesn't makes sense of > radix-mode, this patch updates prefault_mode_store() to not allow any > other value apart from CXL_PREFAULT_NONE when radix mode is enabled. > > Cc: > Fixes: f24be42aab37 ("cxl: Add psl9 specific code") > Signed-off-by: Vaibhav Jain > --- Thanks! Acked-by: Frederic Barrat > Change-log: > > Resend -> Updated the commit description to add more info on the > issue seen [Andrew] > --- > Documentation/ABI/testing/sysfs-class-cxl | 4 +++- > drivers/misc/cxl/sysfs.c | 16 ++++++++++++---- > 2 files changed, 15 insertions(+), 5 deletions(-) > > diff --git a/Documentation/ABI/testing/sysfs-class-cxl b/Documentation/ABI/testing/sysfs-class-cxl > index 640f65e79ef1..267920a1874b 100644 > --- a/Documentation/ABI/testing/sysfs-class-cxl > +++ b/Documentation/ABI/testing/sysfs-class-cxl > @@ -69,7 +69,9 @@ Date: September 2014 > Contact: linuxppc-dev@lists.ozlabs.org > Description: read/write > Set the mode for prefaulting in segments into the segment table > - when performing the START_WORK ioctl. Possible values: > + when performing the START_WORK ioctl. Only applicable when > + running under hashed page table mmu. > + Possible values: > none: No prefaulting (default) > work_element_descriptor: Treat the work element > descriptor as an effective address and > diff --git a/drivers/misc/cxl/sysfs.c b/drivers/misc/cxl/sysfs.c > index 4b5a4c5d3c01..629e2e156412 100644 > --- a/drivers/misc/cxl/sysfs.c > +++ b/drivers/misc/cxl/sysfs.c > @@ -353,12 +353,20 @@ static ssize_t prefault_mode_store(struct device *device, > struct cxl_afu *afu = to_cxl_afu(device); > enum prefault_modes mode = -1; > > - if (!strncmp(buf, "work_element_descriptor", 23)) > - mode = CXL_PREFAULT_WED; > - if (!strncmp(buf, "all", 3)) > - mode = CXL_PREFAULT_ALL; > if (!strncmp(buf, "none", 4)) > mode = CXL_PREFAULT_NONE; > + else { > + if (!radix_enabled()) { > + > + /* only allowed when not in radix mode */ > + if (!strncmp(buf, "work_element_descriptor", 23)) > + mode = CXL_PREFAULT_WED; > + if (!strncmp(buf, "all", 3)) > + mode = CXL_PREFAULT_ALL; > + } else { > + dev_err(device, "Cannot prefault with radix enabled\n"); > + } > + } > > if (mode == -1) > return -EINVAL; >