linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] PCI: endpoint: Fix alignment fault error in copy tests
@ 2021-12-17  9:47 Zhiqiang Hou
  2022-01-04  9:00 ` Kishon Vijay Abraham I
  2022-02-09 16:38 ` Lorenzo Pieralisi
  0 siblings, 2 replies; 4+ messages in thread
From: Zhiqiang Hou @ 2021-12-17  9:47 UTC (permalink / raw)
  To: linux-pci, linux-kernel, kishon, lorenzo.pieralisi; +Cc: Hou Zhiqiang

From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

In the copy tests, it uses the memcpy() to copy data between
IO memory space. This can cause the alignment fualt error
(pasted the error logs below) due to the memcpy() may use
unaligned accesses.

Alignment fault error logs:
   Unable to handle kernel paging request at virtual address ffff8000101cd3c1
   Mem abort info:
     ESR = 0x96000021
     EC = 0x25: DABT (current EL), IL = 32 bits
     SET = 0, FnV = 0
     EA = 0, S1PTW = 0
     FSC = 0x21: alignment fault
   Data abort info:
     ISV = 0, ISS = 0x00000021
     CM = 0, WnR = 0
   swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000081773000
   [ffff8000101cd3c1] pgd=1000000082410003, p4d=1000000082410003, pud=1000000082411003, pmd=1000000082412003, pte=0068004000001f13
   Internal error: Oops: 96000021 [#1] PREEMPT SMP
   Modules linked in:
   CPU: 0 PID: 6 Comm: kworker/0:0H Not tainted 5.15.0-rc1-next-20210914-dirty #2
   Hardware name: LS1012A RDB Board (DT)
   Workqueue: kpcitest pci_epf_test_cmd_handler
   pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
   pc : __memcpy+0x168/0x230
   lr : pci_epf_test_cmd_handler+0x6f0/0xa68
   sp : ffff80001003bce0
   x29: ffff80001003bce0 x28: ffff800010135000 x27: ffff8000101e5000
   x26: ffff8000101cd000 x25: ffff6cda941cf6c8 x24: 0000000000000000
   x23: ffff6cda863f2000 x22: ffff6cda9096c800 x21: ffff800010135000
   x20: ffff6cda941cf680 x19: ffffaf39fd999000 x18: 0000000000000000
   x17: 0000000000000000 x16: 0000000000000000 x15: ffffaf39fd2b6000
   x14: 0000000000000000 x13: 15f5c8fa2f984d57 x12: 604d132b60275454
   x11: 065cee5e5fb428b6 x10: aae662eb17d0cf3e x9 : 1d97c9a1b4ddef37
   x8 : 7541b65edebf928c x7 : e71937c4fc595de0 x6 : b8a0e09562430d1c
   x5 : ffff8000101e5401 x4 : ffff8000101cd401 x3 : ffff8000101e5380
   x2 : fffffffffffffff1 x1 : ffff8000101cd3c0 x0 : ffff8000101e5000
   Call trace:
    __memcpy+0x168/0x230
    process_one_work+0x1ec/0x370
    worker_thread+0x44/0x478
    kthread+0x154/0x160
    ret_from_fork+0x10/0x20
   Code: a984346c a9c4342c f1010042 54fffee8 (a97c3c8e)
   ---[ end trace 568c28c7b6336335 ]---

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
---
 drivers/pci/endpoint/functions/pci-epf-test.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c
index 90d84d3bc868..c7e45633beaf 100644
--- a/drivers/pci/endpoint/functions/pci-epf-test.c
+++ b/drivers/pci/endpoint/functions/pci-epf-test.c
@@ -285,7 +285,17 @@ static int pci_epf_test_copy(struct pci_epf_test *epf_test)
 		if (ret)
 			dev_err(dev, "Data transfer failed\n");
 	} else {
-		memcpy(dst_addr, src_addr, reg->size);
+		void *buf;
+
+		buf = kzalloc(reg->size, GFP_KERNEL);
+		if (!buf) {
+			ret = -ENOMEM;
+			goto err_map_addr;
+		}
+
+		memcpy_fromio(buf, src_addr, reg->size);
+		memcpy_toio(dst_addr, buf, reg->size);
+		kfree(buf);
 	}
 	ktime_get_ts64(&end);
 	pci_epf_test_print_rate("COPY", reg->size, &start, &end, use_dma);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] PCI: endpoint: Fix alignment fault error in copy tests
  2021-12-17  9:47 [PATCH] PCI: endpoint: Fix alignment fault error in copy tests Zhiqiang Hou
@ 2022-01-04  9:00 ` Kishon Vijay Abraham I
  2022-02-09 16:38 ` Lorenzo Pieralisi
  1 sibling, 0 replies; 4+ messages in thread
From: Kishon Vijay Abraham I @ 2022-01-04  9:00 UTC (permalink / raw)
  To: Zhiqiang Hou, linux-pci, linux-kernel, lorenzo.pieralisi



On 17/12/21 3:17 pm, Zhiqiang Hou wrote:
> From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> 
> In the copy tests, it uses the memcpy() to copy data between
> IO memory space. This can cause the alignment fualt error
> (pasted the error logs below) due to the memcpy() may use
> unaligned accesses.
> 
> Alignment fault error logs:
>    Unable to handle kernel paging request at virtual address ffff8000101cd3c1
>    Mem abort info:
>      ESR = 0x96000021
>      EC = 0x25: DABT (current EL), IL = 32 bits
>      SET = 0, FnV = 0
>      EA = 0, S1PTW = 0
>      FSC = 0x21: alignment fault
>    Data abort info:
>      ISV = 0, ISS = 0x00000021
>      CM = 0, WnR = 0
>    swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000081773000
>    [ffff8000101cd3c1] pgd=1000000082410003, p4d=1000000082410003, pud=1000000082411003, pmd=1000000082412003, pte=0068004000001f13
>    Internal error: Oops: 96000021 [#1] PREEMPT SMP
>    Modules linked in:
>    CPU: 0 PID: 6 Comm: kworker/0:0H Not tainted 5.15.0-rc1-next-20210914-dirty #2
>    Hardware name: LS1012A RDB Board (DT)
>    Workqueue: kpcitest pci_epf_test_cmd_handler
>    pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
>    pc : __memcpy+0x168/0x230
>    lr : pci_epf_test_cmd_handler+0x6f0/0xa68
>    sp : ffff80001003bce0
>    x29: ffff80001003bce0 x28: ffff800010135000 x27: ffff8000101e5000
>    x26: ffff8000101cd000 x25: ffff6cda941cf6c8 x24: 0000000000000000
>    x23: ffff6cda863f2000 x22: ffff6cda9096c800 x21: ffff800010135000
>    x20: ffff6cda941cf680 x19: ffffaf39fd999000 x18: 0000000000000000
>    x17: 0000000000000000 x16: 0000000000000000 x15: ffffaf39fd2b6000
>    x14: 0000000000000000 x13: 15f5c8fa2f984d57 x12: 604d132b60275454
>    x11: 065cee5e5fb428b6 x10: aae662eb17d0cf3e x9 : 1d97c9a1b4ddef37
>    x8 : 7541b65edebf928c x7 : e71937c4fc595de0 x6 : b8a0e09562430d1c
>    x5 : ffff8000101e5401 x4 : ffff8000101cd401 x3 : ffff8000101e5380
>    x2 : fffffffffffffff1 x1 : ffff8000101cd3c0 x0 : ffff8000101e5000
>    Call trace:
>     __memcpy+0x168/0x230
>     process_one_work+0x1ec/0x370
>     worker_thread+0x44/0x478
>     kthread+0x154/0x160
>     ret_from_fork+0x10/0x20
>    Code: a984346c a9c4342c f1010042 54fffee8 (a97c3c8e)
>    ---[ end trace 568c28c7b6336335 ]---
> 
> Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

Reviewed-by: Kishon Vijay Abraham I <kishon@ti.com>
> ---
>  drivers/pci/endpoint/functions/pci-epf-test.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c
> index 90d84d3bc868..c7e45633beaf 100644
> --- a/drivers/pci/endpoint/functions/pci-epf-test.c
> +++ b/drivers/pci/endpoint/functions/pci-epf-test.c
> @@ -285,7 +285,17 @@ static int pci_epf_test_copy(struct pci_epf_test *epf_test)
>  		if (ret)
>  			dev_err(dev, "Data transfer failed\n");
>  	} else {
> -		memcpy(dst_addr, src_addr, reg->size);
> +		void *buf;
> +
> +		buf = kzalloc(reg->size, GFP_KERNEL);
> +		if (!buf) {
> +			ret = -ENOMEM;
> +			goto err_map_addr;
> +		}
> +
> +		memcpy_fromio(buf, src_addr, reg->size);
> +		memcpy_toio(dst_addr, buf, reg->size);
> +		kfree(buf);
>  	}
>  	ktime_get_ts64(&end);
>  	pci_epf_test_print_rate("COPY", reg->size, &start, &end, use_dma);
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] PCI: endpoint: Fix alignment fault error in copy tests
  2021-12-17  9:47 [PATCH] PCI: endpoint: Fix alignment fault error in copy tests Zhiqiang Hou
  2022-01-04  9:00 ` Kishon Vijay Abraham I
@ 2022-02-09 16:38 ` Lorenzo Pieralisi
  1 sibling, 0 replies; 4+ messages in thread
From: Lorenzo Pieralisi @ 2022-02-09 16:38 UTC (permalink / raw)
  To: Zhiqiang Hou, kishon, linux-pci, linux-kernel; +Cc: Lorenzo Pieralisi

On Fri, 17 Dec 2021 17:47:08 +0800, Zhiqiang Hou wrote:
> From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
> 
> In the copy tests, it uses the memcpy() to copy data between
> IO memory space. This can cause the alignment fualt error
> (pasted the error logs below) due to the memcpy() may use
> unaligned accesses.
> 
> [...]

Applied to pci/endpoint, thanks!

[1/1] PCI: endpoint: Fix alignment fault error in copy tests
      https://git.kernel.org/lpieralisi/pci/c/829cc0e2ea

Thanks,
Lorenzo

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] PCI: endpoint: Fix alignment fault error in copy tests
@ 2021-10-19 11:12 Zhiqiang Hou
  0 siblings, 0 replies; 4+ messages in thread
From: Zhiqiang Hou @ 2021-10-19 11:12 UTC (permalink / raw)
  To: linux-pci, kishon, lorenzo.pieralisi; +Cc: Hou Zhiqiang

From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

In the copy tests, it uses the memcpy() to copy data between
IO memory space. This can cause the alignment fualt error
(pasted the error logs below) due to the memcpy() may use
unaligned accesses.

Alignment fault error:
	Unable to handle kernel paging request at virtual address ffff8000101cd3c1
	Mem abort info:
	  ESR = 0x96000021
	  EC = 0x25: DABT (current EL), IL = 32 bits
	  SET = 0, FnV = 0
	  EA = 0, S1PTW = 0
	  FSC = 0x21: alignment fault
	Data abort info:
	  ISV = 0, ISS = 0x00000021
	  CM = 0, WnR = 0
	swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000081773000
	[ffff8000101cd3c1] pgd=1000000082410003, p4d=1000000082410003, pud=1000000082411003, pmd=1000000082412003, pte=0068004000001f13
	Internal error: Oops: 96000021 [#1] PREEMPT SMP
	Modules linked in:
	CPU: 0 PID: 6 Comm: kworker/0:0H Not tainted 5.15.0-rc1-next-20210914-dirty #2
	Hardware name: LS1012A RDB Board (DT)
	Workqueue: kpcitest pci_epf_test_cmd_handler
	pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
	pc : __memcpy+0x168/0x230
	lr : pci_epf_test_cmd_handler+0x6f0/0xa68
	sp : ffff80001003bce0
	x29: ffff80001003bce0 x28: ffff800010135000 x27: ffff8000101e5000
	x26: ffff8000101cd000 x25: ffff6cda941cf6c8 x24: 0000000000000000
	x23: ffff6cda863f2000 x22: ffff6cda9096c800 x21: ffff800010135000
	x20: ffff6cda941cf680 x19: ffffaf39fd999000 x18: 0000000000000000
	x17: 0000000000000000 x16: 0000000000000000 x15: ffffaf39fd2b6000
	x14: 0000000000000000 x13: 15f5c8fa2f984d57 x12: 604d132b60275454
	x11: 065cee5e5fb428b6 x10: aae662eb17d0cf3e x9 : 1d97c9a1b4ddef37
	x8 : 7541b65edebf928c x7 : e71937c4fc595de0 x6 : b8a0e09562430d1c
	x5 : ffff8000101e5401 x4 : ffff8000101cd401 x3 : ffff8000101e5380
	x2 : fffffffffffffff1 x1 : ffff8000101cd3c0 x0 : ffff8000101e5000
	Call trace:
	 __memcpy+0x168/0x230
	 process_one_work+0x1ec/0x370
	 worker_thread+0x44/0x478
	 kthread+0x154/0x160
	 ret_from_fork+0x10/0x20
	Code: a984346c a9c4342c f1010042 54fffee8 (a97c3c8e)
	---[ end trace 568c28c7b6336335 ]---

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
---
 drivers/pci/endpoint/functions/pci-epf-test.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c
index 90d84d3bc868..c7e45633beaf 100644
--- a/drivers/pci/endpoint/functions/pci-epf-test.c
+++ b/drivers/pci/endpoint/functions/pci-epf-test.c
@@ -285,7 +285,17 @@ static int pci_epf_test_copy(struct pci_epf_test *epf_test)
 		if (ret)
 			dev_err(dev, "Data transfer failed\n");
 	} else {
-		memcpy(dst_addr, src_addr, reg->size);
+		void *buf;
+
+		buf = kzalloc(reg->size, GFP_KERNEL);
+		if (!buf) {
+			ret = -ENOMEM;
+			goto err_map_addr;
+		}
+
+		memcpy_fromio(buf, src_addr, reg->size);
+		memcpy_toio(dst_addr, buf, reg->size);
+		kfree(buf);
 	}
 	ktime_get_ts64(&end);
 	pci_epf_test_print_rate("COPY", reg->size, &start, &end, use_dma);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-02-09 16:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-17  9:47 [PATCH] PCI: endpoint: Fix alignment fault error in copy tests Zhiqiang Hou
2022-01-04  9:00 ` Kishon Vijay Abraham I
2022-02-09 16:38 ` Lorenzo Pieralisi
  -- strict thread matches above, loose matches on Subject: below --
2021-10-19 11:12 Zhiqiang Hou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).