All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/15] Kernel 5.19 adjustments
@ 2022-07-04 13:08 Jan Kiszka
  2022-07-04 13:08 ` [PATCH 01/15] Account for switch to pde_data in 5.17 Jan Kiszka
                   ` (15 more replies)
  0 siblings, 16 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai; +Cc: Gunter Grau, Philippe Gerum

This allows to compile and run Xenomai against latest 5.19-dovetail. The
kernel deprecated a number of APIs that forces us to move on. Luckily,
we can do that unconditionally in many cases as our lower limit is now
5.10.

Philippe, could you have a look at the SPI changes, specifically at
"drivers/spi: Convert to GPIO descriptor API"? I'm unable to test and
unsure if the conversion of find_cs_gpio is correct.

Gunter, please review/test the fec driver conversion, it wasn't fully
mechanic.

Finally, this adds a CI job to identify the latest dovetail branch and
automatically try to build against it. Let's see how well this works,
but it should allow to catch porting needs earlier. A similar change is
pending for xenomai-images.

The tests look good, except for some likely Dovetail/Xenomai-unrelated
mainline regressions [1][2].

Jan

[1] https://source.denx.de/Xenomai/xenomai-images/-/jobs/459629#L534
[2] https://source.denx.de/Xenomai/xenomai-images/-/jobs/459713#L738


CC: Gunter Grau <gunter.grau@philips.com>
CC: Philippe Gerum <rpm@xenomai.org>

Jan Kiszka (15):
  Account for switch to pde_data in 5.17
  Use linux/stddef.h instead of toolchain header
  drivers/switchtest: Remove unused local vars
  drivers/serial/16550A: Account for privatized defines in 5.17
  drivers/net: Switch to dev_addr_set
  drivers: Convert pci_set_*dma_mask to DMA API
  drivers: Convert pci_alloc/free_consistent to DMA API
  drivers: Convert pci_map/unmap_single/page to DMA API
  drivers: Convert pci_dma_sync_single_for_cpu/device to DMA API
  cobalt: Resolve cast-function-type warnings
  drivers/net/experimental/e1000: Use fallthrough
  drivers/spi: Convert to GPIO descriptor API
  drivers/spi: Switch to spi_controller API
  drivers/spi: Account for dropped return value of spi_driver.remove
  ci: Add targets for latest dovetail queue

 .gitlab-ci.yml                                |  26 +++-
 .../arch/x86/include/asm/xenomai/syscall32.h  |   3 +-
 .../include/asm-generic/xenomai/wrappers.h    |   8 ++
 kernel/cobalt/posix/sem.c                     |   2 +-
 kernel/cobalt/posix/syscall.c                 |   3 +-
 kernel/cobalt/rtdm/device.c                   |  10 +-
 kernel/cobalt/rtdm/fd.c                       |   2 +-
 kernel/cobalt/vfile.c                         |   8 +-
 kernel/drivers/analogy/device.c               |   2 +-
 .../analogy/national_instruments/mite.c       |  12 +-
 .../analogy/national_instruments/mite.h       |   4 +-
 kernel/drivers/can/rtcan_module.c             |   4 +-
 .../drivers/can/sja1000/rtcan_sja1000_proc.c  |   2 +-
 kernel/drivers/net/addons/cap.c               |   5 +-
 kernel/drivers/net/addons/proxy.c             |   2 +-
 kernel/drivers/net/drivers/8139too.c          |  18 ++-
 kernel/drivers/net/drivers/e1000/e1000_main.c |  84 ++++++------
 kernel/drivers/net/drivers/eepro100.c         |  75 ++++++-----
 .../drivers/net/drivers/experimental/3c59x.c  |  21 +--
 .../drivers/experimental/e1000/e1000_82540.c  |   2 +-
 .../drivers/experimental/e1000/e1000_82571.c  |   2 +-
 .../experimental/e1000/e1000_ethtool.c        |  14 +-
 .../drivers/experimental/e1000/e1000_main.c   | 122 +++++++++---------
 .../drivers/experimental/rt2500/rt2500pci.c   |   4 +-
 .../drivers/net/drivers/freescale/fec_main.c  |  11 +-
 kernel/drivers/net/drivers/natsemi.c          |  35 ++---
 kernel/drivers/net/drivers/pcnet32.c          |  52 ++++----
 kernel/drivers/net/drivers/r8169.c            |  36 +++---
 kernel/drivers/net/drivers/tulip/interrupt.c  |  18 +--
 kernel/drivers/net/drivers/tulip/tulip_core.c |  51 ++++----
 kernel/drivers/net/drivers/via-rhine.c        |  71 +++++-----
 .../drivers/net/stack/rtmac/nomac/nomac_dev.c |   4 +-
 kernel/drivers/net/stack/rtmac/rtmac_vnic.c   |   5 +-
 kernel/drivers/serial/16550A_pci.h            |  19 ++-
 kernel/drivers/spi/spi-bcm2835.c              |  41 +++---
 kernel/drivers/spi/spi-device.c               |  34 ++---
 kernel/drivers/spi/spi-device.h               |   1 -
 kernel/drivers/spi/spi-master.c               |  29 +++--
 kernel/drivers/spi/spi-master.h               |   2 +-
 kernel/drivers/spi/spi-omap2-mcspi-rt.c       |  20 +--
 kernel/drivers/spi/spi-sun6i.c                |  24 ++--
 kernel/drivers/testing/switchtest.c           |   2 +-
 42 files changed, 493 insertions(+), 397 deletions(-)

-- 
2.35.3


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

* [PATCH 01/15] Account for switch to pde_data in 5.17
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 02/15] Use linux/stddef.h instead of toolchain header Jan Kiszka
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/include/asm-generic/xenomai/wrappers.h | 4 ++++
 kernel/cobalt/vfile.c                                | 8 ++++----
 kernel/drivers/analogy/device.c                      | 2 +-
 kernel/drivers/can/rtcan_module.c                    | 4 ++--
 kernel/drivers/can/sja1000/rtcan_sja1000_proc.c      | 2 +-
 5 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
index ff9f2c37cc..88152a25e1 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
@@ -54,4 +54,8 @@
 #define close_fd(__ufd)	__close_fd(current->files, __ufd)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
+#define pde_data(i)	PDE_DATA(i)
+#endif
+
 #endif /* _COBALT_ASM_GENERIC_WRAPPERS_H */
diff --git a/kernel/cobalt/vfile.c b/kernel/cobalt/vfile.c
index a0ec5cad1c..05fa48a091 100644
--- a/kernel/cobalt/vfile.c
+++ b/kernel/cobalt/vfile.c
@@ -146,7 +146,7 @@ static void vfile_snapshot_free(struct xnvfile_snapshot_iterator *it, void *buf)
 
 static int vfile_snapshot_open(struct inode *inode, struct file *file)
 {
-	struct xnvfile_snapshot *vfile = PDE_DATA(inode);
+	struct xnvfile_snapshot *vfile = pde_data(inode);
 	struct xnvfile_snapshot_ops *ops = vfile->ops;
 	struct xnvfile_snapshot_iterator *it;
 	int revtag, ret, nrdata;
@@ -318,7 +318,7 @@ ssize_t vfile_snapshot_write(struct file *file, const char __user *buf,
 			     size_t size, loff_t *ppos)
 {
 	struct xnvfile_snapshot *vfile =
-		PDE_DATA(file->f_path.dentry->d_inode);
+		pde_data(file->f_path.dentry->d_inode);
 	struct xnvfile_input input;
 	ssize_t ret;
 
@@ -497,7 +497,7 @@ static struct seq_operations vfile_regular_ops = {
 
 static int vfile_regular_open(struct inode *inode, struct file *file)
 {
-	struct xnvfile_regular *vfile = PDE_DATA(inode);
+	struct xnvfile_regular *vfile = pde_data(inode);
 	struct xnvfile_regular_ops *ops = vfile->ops;
 	struct xnvfile_regular_iterator *it;
 	struct seq_file *seq;
@@ -566,7 +566,7 @@ ssize_t vfile_regular_write(struct file *file, const char __user *buf,
 			    size_t size, loff_t *ppos)
 {
 	struct xnvfile_regular *vfile =
-		PDE_DATA(file->f_path.dentry->d_inode);
+		pde_data(file->f_path.dentry->d_inode);
 	struct xnvfile_input input;
 	ssize_t ret;
 
diff --git a/kernel/drivers/analogy/device.c b/kernel/drivers/analogy/device.c
index 5033c5d663..69492b96b6 100644
--- a/kernel/drivers/analogy/device.c
+++ b/kernel/drivers/analogy/device.c
@@ -92,7 +92,7 @@ int a4l_rdproc_devs(struct seq_file *p, void *data)
 
 static int a4l_proc_transfer_open(struct inode *inode, struct file *file)
 {
-	return single_open(file, a4l_rdproc_transfer, PDE_DATA(inode));
+	return single_open(file, a4l_rdproc_transfer, pde_data(inode));
 }
 
 static const DEFINE_PROC_OPS(a4l_proc_transfer_ops,
diff --git a/kernel/drivers/can/rtcan_module.c b/kernel/drivers/can/rtcan_module.c
index 94b8c64122..632c01bed2 100644
--- a/kernel/drivers/can/rtcan_module.c
+++ b/kernel/drivers/can/rtcan_module.c
@@ -267,7 +267,7 @@ static int rtcan_read_proc_info(struct seq_file *p, void *data)
 
 static int rtcan_proc_info_open(struct inode *inode, struct file *file)
 {
-	return single_open(file, rtcan_read_proc_info, PDE_DATA(inode));
+	return single_open(file, rtcan_read_proc_info, pde_data(inode));
 }
 
 static const DEFINE_PROC_OPS(rtcan_proc_info_ops,
@@ -312,7 +312,7 @@ static int rtcan_read_proc_filter(struct seq_file *p, void *data)
 
 static int rtcan_proc_filter_open(struct inode *inode, struct file *file)
 {
-	return single_open(file, rtcan_read_proc_filter, PDE_DATA(inode));
+	return single_open(file, rtcan_read_proc_filter, pde_data(inode));
 }
 
 static const DEFINE_PROC_OPS(rtcan_proc_filter_ops,
diff --git a/kernel/drivers/can/sja1000/rtcan_sja1000_proc.c b/kernel/drivers/can/sja1000/rtcan_sja1000_proc.c
index 4813c50092..57fd80704b 100644
--- a/kernel/drivers/can/sja1000/rtcan_sja1000_proc.c
+++ b/kernel/drivers/can/sja1000/rtcan_sja1000_proc.c
@@ -47,7 +47,7 @@ static int rtcan_sja_proc_regs(struct seq_file *p, void *data)
 
 static int rtcan_sja_proc_regs_open(struct inode *inode, struct file *file)
 {
-	return single_open(file, rtcan_sja_proc_regs, PDE_DATA(inode));
+	return single_open(file, rtcan_sja_proc_regs, pde_data(inode));
 }
 
 static const DEFINE_PROC_OPS(rtcan_sja_proc_regs_ops,
-- 
2.35.3


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

* [PATCH 02/15] Use linux/stddef.h instead of toolchain header
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
  2022-07-04 13:08 ` [PATCH 01/15] Account for switch to pde_data in 5.17 Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 03/15] drivers/switchtest: Remove unused local vars Jan Kiszka
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/posix/sem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/cobalt/posix/sem.c b/kernel/cobalt/posix/sem.c
index 6fb4dc2c2a..71b8c52f5b 100644
--- a/kernel/cobalt/posix/sem.c
+++ b/kernel/cobalt/posix/sem.c
@@ -17,7 +17,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#include <stddef.h>
+#include <linux/stddef.h>
 #include <linux/err.h>
 #include <cobalt/kernel/time.h>
 #include "internal.h"
-- 
2.35.3


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

* [PATCH 03/15] drivers/switchtest: Remove unused local vars
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
  2022-07-04 13:08 ` [PATCH 01/15] Account for switch to pde_data in 5.17 Jan Kiszka
  2022-07-04 13:08 ` [PATCH 02/15] Use linux/stddef.h instead of toolchain header Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 04/15] drivers/serial/16550A: Account for privatized defines in 5.17 Jan Kiszka
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Was forgotten in a50b60de8520.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/testing/switchtest.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/drivers/testing/switchtest.c b/kernel/drivers/testing/switchtest.c
index 9072717d52..b6d0242de7 100644
--- a/kernel/drivers/testing/switchtest.c
+++ b/kernel/drivers/testing/switchtest.c
@@ -407,7 +407,7 @@ struct taskarg {
 static void rtswitch_ktask(void *cookie)
 {
 	struct taskarg *arg = (struct taskarg *) cookie;
-	unsigned int fp_val, expected, to, i = 0;
+	unsigned int to, i = 0;
 	struct rtswitch_context *ctx = arg->ctx;
 	struct rtswitch_task *task = arg->task;
 
-- 
2.35.3


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

* [PATCH 04/15] drivers/serial/16550A: Account for privatized defines in 5.17
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (2 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 03/15] drivers/switchtest: Remove unused local vars Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 05/15] drivers/net: Switch to dev_addr_set Jan Kiszka
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Those moved from the central header into the upstream driver code. We
have to do the same.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/serial/16550A_pci.h | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/kernel/drivers/serial/16550A_pci.h b/kernel/drivers/serial/16550A_pci.h
index 91b0390ff4..161874d1cc 100644
--- a/kernel/drivers/serial/16550A_pci.h
+++ b/kernel/drivers/serial/16550A_pci.h
@@ -33,9 +33,22 @@ struct rt_16550_pci_board {
 
 #if defined(CONFIG_XENO_DRIVERS_16550A_PCI_MOXA)
 
-#define PCI_DEVICE_ID_CP112UL	0x1120
-#define PCI_DEVICE_ID_CP114UL	0x1143
-#define PCI_DEVICE_ID_CP138U	0x1380
+#define PCI_DEVICE_ID_CP112UL		0x1120
+#define PCI_DEVICE_ID_CP114UL		0x1143
+#define PCI_DEVICE_ID_CP138U		0x1380
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0)
+#define PCI_DEVICE_ID_MOXA_CP102UL	0x1021
+#define PCI_DEVICE_ID_MOXA_CP102U	0x1022
+#define PCI_DEVICE_ID_MOXA_C104		0x1040
+#define PCI_DEVICE_ID_MOXA_CP104U	0x1041
+#define PCI_DEVICE_ID_MOXA_CP114	0x1141
+#define PCI_DEVICE_ID_MOXA_CP118U	0x1180
+#define PCI_DEVICE_ID_MOXA_CP132	0x1320
+#define PCI_DEVICE_ID_MOXA_CP132U	0x1321
+#define PCI_DEVICE_ID_MOXA_CP134U	0x1340
+#define PCI_DEVICE_ID_MOXA_C168		0x1680
+#define PCI_DEVICE_ID_MOXA_CP168U	0x1681
+#endif
 
 static const struct rt_16550_pci_board rt_16550_moxa_c104 = {
 	.name = "Moxa C104H/PCI",
-- 
2.35.3


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

* [PATCH 05/15] drivers/net: Switch to dev_addr_set
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (3 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 04/15] drivers/serial/16550A: Account for privatized defines in 5.17 Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:57   ` Bezdeka, Florian
                     ` (2 more replies)
  2022-07-04 13:08 ` [PATCH 06/15] drivers: Convert pci_set_*dma_mask to DMA API Jan Kiszka
                   ` (10 subsequent siblings)
  15 siblings, 3 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai; +Cc: Gunter Grau

From: Jan Kiszka <jan.kiszka@siemens.com>

Latest kernel complain about accessing dev_addr directly and push us
toward the accessor functions. Use that and provide a wrapper for
kernels prior to 5.15.

CC: Gunter Grau <gunter.grau@philips.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/include/asm-generic/xenomai/wrappers.h |  4 ++++
 kernel/drivers/net/addons/cap.c                      |  5 ++---
 kernel/drivers/net/addons/proxy.c                    |  2 +-
 kernel/drivers/net/drivers/freescale/fec_main.c      | 11 +++++++----
 kernel/drivers/net/stack/rtmac/rtmac_vnic.c          |  5 ++---
 5 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
index 88152a25e1..6489c82c8c 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
@@ -54,6 +54,10 @@
 #define close_fd(__ufd)	__close_fd(current->files, __ufd)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,15,0)
+#define dev_addr_set(dev, addr)	memcpy((dev)->dev_addr, addr, MAX_ADDR_LEN)
+#endif
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
 #define pde_data(i)	PDE_DATA(i)
 #endif
diff --git a/kernel/drivers/net/addons/cap.c b/kernel/drivers/net/addons/cap.c
index 1e86440699..3784b65226 100644
--- a/kernel/drivers/net/addons/cap.c
+++ b/kernel/drivers/net/addons/cap.c
@@ -263,9 +263,8 @@ static int tap_dev_open(struct net_device *dev)
 	if (err == 0)
 		return -EIDRM;
 
-	memcpy(dev->dev_addr,
-	       (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
-	       MAX_ADDR_LEN);
+	dev_addr_set(dev,
+		     (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
 
 	return 0;
 }
diff --git a/kernel/drivers/net/addons/proxy.c b/kernel/drivers/net/addons/proxy.c
index f70587678a..b37b42c9de 100644
--- a/kernel/drivers/net/addons/proxy.c
+++ b/kernel/drivers/net/addons/proxy.c
@@ -321,7 +321,7 @@ static void __init rtnetproxy_init(struct net_device *dev)
 
 	dev->tx_queue_len = 0;
 #ifdef CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
-	memcpy(dev->dev_addr, rtnetproxy_rtdev->dev_addr, MAX_ADDR_LEN);
+	dev_addr_set(dev, rtnetproxy_rtdev->dev_addr);
 #else
 	dev->flags |= IFF_NOARP;
 #endif
diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
index be0ed0c51e..72ee4de738 100644
--- a/kernel/drivers/net/drivers/freescale/fec_main.c
+++ b/kernel/drivers/net/drivers/freescale/fec_main.c
@@ -1315,11 +1315,14 @@ static void fec_get_mac(struct net_device *ndev)
 		return;
 	}
 
-	memcpy(ndev->dev_addr, iap, ETH_ALEN);
-
 	/* Adjust MAC if using macaddr */
-	if (iap == macaddr)
-		 ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id;
+	if (iap == macaddr) {
+		memcpy(tmpaddr, macaddr, ETH_ALEN);
+		tmpaddr[ETH_ALEN-1] += fep->dev_id;
+		dev_addr_set(ndev, tmpaddr);
+	} else {
+		dev_addr_set(ndev, iap);
+	}
 }
 
 /* ------------------------------------------------------------------------- */
diff --git a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
index 138e276ad9..4b41785db8 100644
--- a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
+++ b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
@@ -114,9 +114,8 @@ static void rtmac_vnic_signal_handler(rtdm_nrtsig_t *nrtsig, void *arg)
 
 static int rtmac_vnic_copy_mac(struct net_device *dev)
 {
-	memcpy(dev->dev_addr,
-	       (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
-	       MAX_ADDR_LEN);
+	dev_addr_set(dev,
+		     (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
 
 	return 0;
 }
-- 
2.35.3


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

* [PATCH 06/15] drivers: Convert pci_set_*dma_mask to DMA API
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (4 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 05/15] drivers/net: Switch to dev_addr_set Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 07/15] drivers: Convert pci_alloc/free_consistent " Jan Kiszka
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

The legacy API has been finally dropped, and the new one was "already"
available with 5.10.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/net/drivers/e1000/e1000_main.c             | 8 ++++----
 .../drivers/net/drivers/experimental/e1000/e1000_main.c   | 8 ++++----
 .../drivers/net/drivers/experimental/rt2500/rt2500pci.c   | 4 ++--
 kernel/drivers/net/drivers/via-rhine.c                    | 2 +-
 4 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/kernel/drivers/net/drivers/e1000/e1000_main.c b/kernel/drivers/net/drivers/e1000/e1000_main.c
index 222709a48f..e2141313d9 100644
--- a/kernel/drivers/net/drivers/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/e1000/e1000_main.c
@@ -705,10 +705,10 @@ static int e1000_probe(struct pci_dev *pdev,
 	if ((err = pci_enable_device(pdev)))
 		return err;
 
-	if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) ||
-	    (err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))) {
-		if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) &&
-		    (err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)))) {
+	if ((err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) ||
+	    (err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)))) {
+		if ((err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) &&
+		    (err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)))) {
 			E1000_ERR("No usable DMA configuration, aborting\n");
 			return err;
 		}
diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
index db16cff11a..50493cff72 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
@@ -1061,12 +1061,12 @@ static int e1000_probe(struct pci_dev *pdev,
 	if ((err = pci_enable_device(pdev)))
 		return err;
 
-	if (!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK)) &&
-	    !(err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK))) {
+	if (!(err = dma_set_mask(&pdev->dev, DMA_64BIT_MASK)) &&
+	    !(err = dma_set_coherent_mask(&pdev->dev, DMA_64BIT_MASK))) {
 		pci_using_dac = 1;
 	} else {
-		if ((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) &&
-		    (err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK))) {
+		if ((err = dma_set_mask(&pdev->dev, DMA_32BIT_MASK)) &&
+		    (err = dma_set_coherent_mask(&pdev->dev, DMA_32BIT_MASK))) {
 			E1000_ERR("No usable DMA configuration, aborting\n");
 			goto err_dma;
 		}
diff --git a/kernel/drivers/net/drivers/experimental/rt2500/rt2500pci.c b/kernel/drivers/net/drivers/experimental/rt2500/rt2500pci.c
index f6f9a2597f..9bbdce7fde 100644
--- a/kernel/drivers/net/drivers/experimental/rt2500/rt2500pci.c
+++ b/kernel/drivers/net/drivers/experimental/rt2500/rt2500pci.c
@@ -1184,8 +1184,8 @@ int rt2x00_pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
 
 	pci_set_master(pci_dev);
 
-	if (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(64)) &&
-	    pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32))) {
+	if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(64)) &&
+	    dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32))) {
 		ERROR("PCI DMA not supported\n");
 		status = -EIO;
 		goto exit_disable_device;
diff --git a/kernel/drivers/net/drivers/via-rhine.c b/kernel/drivers/net/drivers/via-rhine.c
index 9618d23e37..122e41d302 100644
--- a/kernel/drivers/net/drivers/via-rhine.c
+++ b/kernel/drivers/net/drivers/via-rhine.c
@@ -662,7 +662,7 @@ static int via_rhine_init_one (struct pci_dev *pdev,
 		goto err_out;
 
 	/* this should always be supported */
-	if (pci_set_dma_mask(pdev, 0xffffffff)) {
+	if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
 		printk(KERN_ERR "32-bit PCI DMA addresses not supported by the card!?\n");
 		goto err_out;
 	}
-- 
2.35.3


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

* [PATCH 07/15] drivers: Convert pci_alloc/free_consistent to DMA API
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (5 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 06/15] drivers: Convert pci_set_*dma_mask to DMA API Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 08/15] drivers: Convert pci_map/unmap_single/page " Jan Kiszka
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

The legacy API has been finally dropped, and the new one was "already"
available with 5.10.

We keep the GFP_ATOMIC allocation type of the original wrapper, even if
some caller likely do not need them - safer and simpler than checking
them all.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 .../analogy/national_instruments/mite.c       | 12 ++---
 .../analogy/national_instruments/mite.h       |  4 +-
 kernel/drivers/net/drivers/8139too.c          | 18 ++++---
 kernel/drivers/net/drivers/e1000/e1000_main.c | 44 +++++++++------
 kernel/drivers/net/drivers/eepro100.c         | 14 ++---
 .../drivers/net/drivers/experimental/3c59x.c  | 21 ++++----
 .../experimental/e1000/e1000_ethtool.c        | 14 ++---
 .../drivers/experimental/e1000/e1000_main.c   | 54 ++++++++++---------
 kernel/drivers/net/drivers/natsemi.c          |  6 +--
 kernel/drivers/net/drivers/pcnet32.c          | 18 ++++---
 kernel/drivers/net/drivers/r8169.c            | 14 ++---
 kernel/drivers/net/drivers/tulip/tulip_core.c | 24 ++++-----
 kernel/drivers/net/drivers/via-rhine.c        | 33 ++++++------
 13 files changed, 155 insertions(+), 121 deletions(-)

diff --git a/kernel/drivers/analogy/national_instruments/mite.c b/kernel/drivers/analogy/national_instruments/mite.c
index 655cda91d3..ad1a8dded6 100644
--- a/kernel/drivers/analogy/national_instruments/mite.c
+++ b/kernel/drivers/analogy/national_instruments/mite.c
@@ -379,9 +379,9 @@ int a4l_mite_buf_change(struct mite_dma_descriptor_ring *ring, struct a4l_subdev
 	int i;
 
 	if (ring->descriptors) {
-		pci_free_consistent(ring->pcidev,
-				    ring->n_links * sizeof(struct mite_dma_descriptor),
-				    ring->descriptors, ring->descriptors_dma_addr);
+		dma_free_coherent(&ring->pcidev->dev,
+				  ring->n_links * sizeof(struct mite_dma_descriptor),
+				  ring->descriptors, ring->descriptors_dma_addr);
 	}
 	ring->descriptors = NULL;
 	ring->descriptors_dma_addr = 0;
@@ -395,9 +395,9 @@ int a4l_mite_buf_change(struct mite_dma_descriptor_ring *ring, struct a4l_subdev
 	MDPRINTK("ring->pcidev=%p, n_links=0x%04x\n", ring->pcidev, n_links);
 
 	ring->descriptors =
-		pci_alloc_consistent(ring->pcidev,
-				     n_links * sizeof(struct mite_dma_descriptor),
-				     &ring->descriptors_dma_addr);
+		dma_alloc_coherent(&ring->pcidev->dev,
+				   n_links * sizeof(struct mite_dma_descriptor),
+				   &ring->descriptors_dma_addr, GFP_ATOMIC);
 	if (!ring->descriptors) {
 		printk("MITE: ring buffer allocation failed\n");
 		return -ENOMEM;
diff --git a/kernel/drivers/analogy/national_instruments/mite.h b/kernel/drivers/analogy/national_instruments/mite.h
index 93eff4dec4..3b9aaba01b 100644
--- a/kernel/drivers/analogy/national_instruments/mite.h
+++ b/kernel/drivers/analogy/national_instruments/mite.h
@@ -94,8 +94,8 @@ static inline void mite_free_ring(struct mite_dma_descriptor_ring *ring)
 {
 	if (ring) {
 		if (ring->descriptors) {
-			pci_free_consistent(
-				ring->pcidev,
+			dma_free_coherent(
+				&ring->pcidev->dev,
 				ring->n_links *
 				sizeof(struct mite_dma_descriptor),
 				ring->descriptors, ring->descriptors_dma_addr);
diff --git a/kernel/drivers/net/drivers/8139too.c b/kernel/drivers/net/drivers/8139too.c
index 05a4042f46..c335b300b2 100644
--- a/kernel/drivers/net/drivers/8139too.c
+++ b/kernel/drivers/net/drivers/8139too.c
@@ -1114,15 +1114,19 @@ static int rtl8139_open (struct rtnet_device *rtdev)
 	if (retval)
 		return retval;
 
-	tp->tx_bufs = pci_alloc_consistent(tp->pci_dev, TX_BUF_TOT_LEN, &tp->tx_bufs_dma);
-	tp->rx_ring = pci_alloc_consistent(tp->pci_dev, RX_BUF_TOT_LEN, &tp->rx_ring_dma);
+	tp->tx_bufs = dma_alloc_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
+					 &tp->tx_bufs_dma, GFP_ATOMIC);
+	tp->rx_ring = dma_alloc_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
+					 &tp->rx_ring_dma, GFP_ATOMIC);
 
 	if (tp->tx_bufs == NULL || tp->rx_ring == NULL) {
 		rtdm_irq_free(&tp->irq_handle);
 		if (tp->tx_bufs)
-			pci_free_consistent(tp->pci_dev, TX_BUF_TOT_LEN, tp->tx_bufs, tp->tx_bufs_dma);
+			dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN,
+					  tp->tx_bufs, tp->tx_bufs_dma);
 		if (tp->rx_ring)
-			pci_free_consistent(tp->pci_dev, RX_BUF_TOT_LEN, tp->rx_ring, tp->rx_ring_dma);
+			dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN,
+					  tp->rx_ring, tp->rx_ring_dma);
 
 		return -ENOMEM;
 	}
@@ -1627,8 +1631,10 @@ static int rtl8139_close (struct rtnet_device *rtdev)
 
 	rtl8139_tx_clear (tp);
 
-	pci_free_consistent(tp->pci_dev, RX_BUF_TOT_LEN, tp->rx_ring, tp->rx_ring_dma);
-	pci_free_consistent(tp->pci_dev, TX_BUF_TOT_LEN, tp->tx_bufs, tp->tx_bufs_dma);
+	dma_free_coherent(&tp->pci_dev->dev, RX_BUF_TOT_LEN, tp->rx_ring,
+			  tp->rx_ring_dma);
+	dma_free_coherent(&tp->pci_dev->dev, TX_BUF_TOT_LEN, tp->tx_bufs,
+			  tp->tx_bufs_dma);
 	tp->rx_ring = NULL;
 	tp->tx_bufs = NULL;
 
diff --git a/kernel/drivers/net/drivers/e1000/e1000_main.c b/kernel/drivers/net/drivers/e1000/e1000_main.c
index e2141313d9..7c34e2f00f 100644
--- a/kernel/drivers/net/drivers/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/e1000/e1000_main.c
@@ -1266,7 +1266,8 @@ e1000_setup_tx_resources(struct e1000_adapter *adapter,
 	txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
 	E1000_ROUNDUP(txdr->size, 4096);
 
-	txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma);
+	txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size, &txdr->dma,
+					GFP_ATOMIC);
 	if (!txdr->desc) {
 setup_tx_desc_die:
 		vfree(txdr->buffer_info);
@@ -1282,18 +1283,21 @@ setup_tx_desc_die:
 		DPRINTK(TX_ERR, ERR, "txdr align check failed: %u bytes "
 				     "at %p\n", txdr->size, txdr->desc);
 		/* Try again, without freeing the previous */
-		txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma);
+		txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size,
+						&txdr->dma, GFP_ATOMIC);
 		/* Failed allocation, critical failure */
 		if (!txdr->desc) {
-			pci_free_consistent(pdev, txdr->size, olddesc, olddma);
+			dma_free_coherent(&pdev->dev, txdr->size, olddesc,
+					  olddma);
 			goto setup_tx_desc_die;
 		}
 
 		if (!e1000_check_64k_bound(adapter, txdr->desc, txdr->size)) {
 			/* give up */
-			pci_free_consistent(pdev, txdr->size, txdr->desc,
-					    txdr->dma);
-			pci_free_consistent(pdev, txdr->size, olddesc, olddma);
+			dma_free_coherent(&pdev->dev, txdr->size, txdr->desc,
+					  txdr->dma);
+			dma_free_coherent(&pdev->dev, txdr->size, olddesc,
+					  olddma);
 			DPRINTK(PROBE, ERR,
 				"Unable to allocate aligned memory "
 				"for the transmit descriptor ring\n");
@@ -1301,7 +1305,8 @@ setup_tx_desc_die:
 			return -ENOMEM;
 		} else {
 			/* Free old allocation, new allocation was successful */
-			pci_free_consistent(pdev, txdr->size, olddesc, olddma);
+			dma_free_coherent(&pdev->dev, txdr->size, olddesc,
+					  olddma);
 		}
 	}
 	memset(txdr->desc, 0, txdr->size);
@@ -1520,7 +1525,8 @@ e1000_setup_rx_resources(struct e1000_adapter *adapter,
 	rxdr->size = rxdr->count * desc_len;
 	E1000_ROUNDUP(rxdr->size, 4096);
 
-	rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma);
+	rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size, &rxdr->dma,
+					GFP_ATOMIC);
 
 	if (!rxdr->desc) {
 		DPRINTK(PROBE, ERR,
@@ -1539,10 +1545,12 @@ setup_rx_desc_die:
 		DPRINTK(RX_ERR, ERR, "rxdr align check failed: %u bytes "
 				     "at %p\n", rxdr->size, rxdr->desc);
 		/* Try again, without freeing the previous */
-		rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma);
+		rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size,
+						&rxdr->dma, GFP_ATOMIC);
 		/* Failed allocation, critical failure */
 		if (!rxdr->desc) {
-			pci_free_consistent(pdev, rxdr->size, olddesc, olddma);
+			dma_free_coherent(&pdev->dev, rxdr->size, olddesc,
+					  olddma);
 			DPRINTK(PROBE, ERR,
 				"Unable to allocate memory "
 				"for the receive descriptor ring\n");
@@ -1551,16 +1559,18 @@ setup_rx_desc_die:
 
 		if (!e1000_check_64k_bound(adapter, rxdr->desc, rxdr->size)) {
 			/* give up */
-			pci_free_consistent(pdev, rxdr->size, rxdr->desc,
-					    rxdr->dma);
-			pci_free_consistent(pdev, rxdr->size, olddesc, olddma);
+			dma_free_coherent(&pdev->dev, rxdr->size, rxdr->desc,
+					   rxdr->dma);
+			dma_free_coherent(&pdev->dev, rxdr->size, olddesc,
+					  olddma);
 			DPRINTK(PROBE, ERR,
 				"Unable to allocate aligned memory "
 				"for the receive descriptor ring\n");
 			goto setup_rx_desc_die;
 		} else {
 			/* Free old allocation, new allocation was successful */
-			pci_free_consistent(pdev, rxdr->size, olddesc, olddma);
+			dma_free_coherent(&pdev->dev, rxdr->size, olddesc,
+					  olddma);
 		}
 	}
 	memset(rxdr->desc, 0, rxdr->size);
@@ -1772,7 +1782,8 @@ e1000_free_tx_resources(struct e1000_adapter *adapter,
 	vfree(tx_ring->buffer_info);
 	tx_ring->buffer_info = NULL;
 
-	pci_free_consistent(pdev, tx_ring->size, tx_ring->desc, tx_ring->dma);
+	dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc,
+			  tx_ring->dma);
 
 	tx_ring->desc = NULL;
 }
@@ -1881,7 +1892,8 @@ e1000_free_rx_resources(struct e1000_adapter *adapter,
 	kfree(rx_ring->ps_page_dma);
 	rx_ring->ps_page_dma = NULL;
 
-	pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma);
+	dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc,
+			  rx_ring->dma);
 
 	rx_ring->desc = NULL;
 }
diff --git a/kernel/drivers/net/drivers/eepro100.c b/kernel/drivers/net/drivers/eepro100.c
index 414eb7a45a..64507756c3 100644
--- a/kernel/drivers/net/drivers/eepro100.c
+++ b/kernel/drivers/net/drivers/eepro100.c
@@ -665,7 +665,8 @@ static int speedo_found1(struct pci_dev *pdev,
 	dma_addr_t tx_ring_dma;
 
 	size = TX_RING_SIZE * sizeof(struct TxFD) + sizeof(struct speedo_stats);
-	tx_ring_space = pci_alloc_consistent(pdev, size, &tx_ring_dma);
+	tx_ring_space = dma_alloc_coherent(&pdev->dev, size, &tx_ring_dma,
+					   GFP_ATOMIC);
 	if (tx_ring_space == NULL)
 		return -1;
 
@@ -674,7 +675,7 @@ static int speedo_found1(struct pci_dev *pdev,
 				RX_RING_SIZE * 2 + TX_RING_SIZE);
 	if (rtdev == NULL) {
 		printk(KERN_ERR "eepro100: Could not allocate ethernet device.\n");
-		pci_free_consistent(pdev, size, tx_ring_space, tx_ring_dma);
+		dma_free_coherent(&pdev->dev, size, tx_ring_space, tx_ring_dma);
 		return -1;
 	}
 	rtdev_alloc_name(rtdev, "rteth%d");
@@ -802,7 +803,7 @@ static int speedo_found1(struct pci_dev *pdev,
 
 	if ( (i=rt_register_rtnetdev(rtdev)) )
 	{
-		pci_free_consistent(pdev, size, tx_ring_space, tx_ring_dma);
+		dma_free_coherent(&pdev->dev, size, tx_ring_space, tx_ring_dma);
 		rtdev_free(rtdev);
 		return i;
 	}
@@ -1771,9 +1772,10 @@ static void eepro100_remove_one (struct pci_dev *pdev)
 	iounmap((char *)rtdev->base_addr);
 #endif
 
-	pci_free_consistent(pdev, TX_RING_SIZE * sizeof(struct TxFD)
-								+ sizeof(struct speedo_stats),
-						sp->tx_ring, sp->tx_ring_dma);
+	dma_free_coherent(
+		&pdev->dev,
+		TX_RING_SIZE * sizeof(struct TxFD) + sizeof(struct speedo_stats),
+		sp->tx_ring, sp->tx_ring_dma);
 	pci_disable_device(pdev);
 
 	// *** RTnet ***
diff --git a/kernel/drivers/net/drivers/experimental/3c59x.c b/kernel/drivers/net/drivers/experimental/3c59x.c
index c2cf4786c2..94e0c93438 100644
--- a/kernel/drivers/net/drivers/experimental/3c59x.c
+++ b/kernel/drivers/net/drivers/experimental/3c59x.c
@@ -1070,9 +1070,12 @@ static int vortex_probe1(struct pci_dev *pdev,
 	vp->pdev = pdev;
 
 	/* Makes sure rings are at least 16 byte aligned. */
-	vp->rx_ring = pci_alloc_consistent(pdev, sizeof(struct boom_rx_desc) * RX_RING_SIZE
-					+ sizeof(struct boom_tx_desc) * TX_RING_SIZE,
-					&vp->rx_ring_dma);
+	vp->rx_ring = dma_alloc_coherent(
+			&pdev->dev,
+			sizeof(struct boom_rx_desc) * RX_RING_SIZE
+			+ sizeof(struct boom_tx_desc) * TX_RING_SIZE,
+			&vp->rx_ring_dma,
+			GFP_ATOMIC);
 	retval = -ENOMEM;
 	if (vp->rx_ring == 0)
 		goto free_region;
@@ -1329,11 +1332,11 @@ static int vortex_probe1(struct pci_dev *pdev,
 	// *** RTnet ***
 
   free_ring:
-	pci_free_consistent(pdev,
-			sizeof(struct boom_rx_desc) * RX_RING_SIZE
-			+ sizeof(struct boom_tx_desc) * TX_RING_SIZE,
-			vp->rx_ring,
-			vp->rx_ring_dma);
+	dma_free_coherent(&pdev->dev,
+		    sizeof(struct boom_rx_desc) * RX_RING_SIZE
+		    + sizeof(struct boom_tx_desc) * TX_RING_SIZE,
+		    vp->rx_ring,
+		    vp->rx_ring_dma);
   free_region:
 	if (vp->must_free_region)
 		release_region(ioaddr, vci->io_size);
@@ -2698,7 +2701,7 @@ static void vortex_remove_one (struct pci_dev *pdev)
 			pci_restore_state(vp->pdev, vp->power_state);
 	}
 
-	pci_free_consistent(pdev,
+	dma_free_coherent(&pdev->dev,
 			sizeof(struct boom_rx_desc) * RX_RING_SIZE
 			+ sizeof(struct boom_tx_desc) * TX_RING_SIZE,
 			vp->rx_ring,
diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_ethtool.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_ethtool.c
index 1911673af9..a249f1719e 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_ethtool.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_ethtool.c
@@ -1081,11 +1081,13 @@ static void e1000_free_desc_rings(struct e1000_adapter *adapter)
 	}
 
 	if (tx_ring->desc) {
-		pci_free_consistent(pdev, tx_ring->size, tx_ring->desc, tx_ring->dma);
+		dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc,
+				  tx_ring->dma);
 		tx_ring->desc = NULL;
 	}
 	if (rx_ring->desc) {
-		pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma);
+		dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc,
+				  rx_ring->dma);
 		rx_ring->desc = NULL;
 	}
 
@@ -1119,8 +1121,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 
 	tx_ring->size = tx_ring->count * sizeof(struct e1000_tx_desc);
 	tx_ring->size = ALIGN(tx_ring->size, 4096);
-	if (!(tx_ring->desc = pci_alloc_consistent(pdev, tx_ring->size,
-	                                           &tx_ring->dma))) {
+	if (!(tx_ring->desc = dma_alloc_coherent(&pdev->dev, tx_ring->size,
+	                                         &tx_ring->dma, GFP_ATOMIC))) {
 		ret_val = 2;
 		goto err_nomem;
 	}
@@ -1179,8 +1181,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 	}
 
 	rx_ring->size = rx_ring->count * sizeof(struct e1000_rx_desc);
-	if (!(rx_ring->desc = pci_alloc_consistent(pdev, rx_ring->size,
-	                                           &rx_ring->dma))) {
+	if (!(rx_ring->desc = dma_alloc_coherent(&pdev->dev, rx_ring->size,
+	                                         &rx_ring->dma, GFP_ATOMIC))) {
 		ret_val = 5;
 		goto err_nomem;
 	}
diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
index 50493cff72..0098d8c2af 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
@@ -1961,8 +1961,8 @@ static int e1000_setup_tx_resources(struct e1000_adapter *adapter,
 	tx_ring->size = tx_ring->count * sizeof(struct e1000_tx_desc);
 	tx_ring->size = ALIGN(tx_ring->size, 4096);
 
-	tx_ring->desc = pci_alloc_consistent(pdev, tx_ring->size,
-					     &tx_ring->dma);
+	tx_ring->desc = dma_alloc_coherent(&pdev->dev, tx_ring->size,
+					   &tx_ring->dma, GFP_ATOMIC);
 	if (!tx_ring->desc) {
 setup_tx_desc_die:
 		vfree(tx_ring->buffer_info);
@@ -1978,22 +1978,22 @@ setup_tx_desc_die:
 		DPRINTK(TX_ERR, ERR, "tx_ring align check failed: %u bytes "
 				     "at %p\n", tx_ring->size, tx_ring->desc);
 		/* Try again, without freeing the previous */
-		tx_ring->desc = pci_alloc_consistent(pdev, tx_ring->size,
-						     &tx_ring->dma);
+		tx_ring->desc = dma_alloc_coherent(&pdev->dev, tx_ring->size,
+						   &tx_ring->dma, GFP_ATOMIC);
 		/* Failed allocation, critical failure */
 		if (!tx_ring->desc) {
-			pci_free_consistent(pdev, tx_ring->size, olddesc,
-					    olddma);
+			dma_free_coherent(&pdev->dev, tx_ring->size, olddesc,
+					  olddma);
 			goto setup_tx_desc_die;
 		}
 
 		if (!e1000_check_64k_bound(adapter, tx_ring->desc,
 					   tx_ring->size)) {
 			/* give up */
-			pci_free_consistent(pdev, tx_ring->size, tx_ring->desc,
-					    tx_ring->dma);
-			pci_free_consistent(pdev, tx_ring->size, olddesc,
-					    olddma);
+			dma_free_coherent(&pdev->dev, tx_ring->size,
+					  tx_ring->desc, tx_ring->dma);
+			dma_free_coherent(&pdev->dev, tx_ring->size, olddesc,
+					  olddma);
 			DPRINTK(PROBE, ERR,
 				"Unable to allocate aligned memory "
 				"for the transmit descriptor ring\n");
@@ -2001,8 +2001,8 @@ setup_tx_desc_die:
 			return -ENOMEM;
 		} else {
 			/* Free old allocation, new allocation was successful */
-			pci_free_consistent(pdev, tx_ring->size, olddesc,
-					    olddma);
+			dma_free_coherent(&pdev->dev, tx_ring->size, olddesc,
+					  olddma);
 		}
 	}
 	memset(tx_ring->desc, 0, tx_ring->size);
@@ -2200,8 +2200,8 @@ static int e1000_setup_rx_resources(struct e1000_adapter *adapter,
 	rx_ring->size = rx_ring->count * desc_len;
 	rx_ring->size = ALIGN(rx_ring->size, 4096);
 
-	rx_ring->desc = pci_alloc_consistent(pdev, rx_ring->size,
-					     &rx_ring->dma);
+	rx_ring->desc = dma_alloc_coherent(&pdev->dev, rx_ring->size,
+					   &rx_ring->dma, GFP_ATOMIC);
 
 	if (!rx_ring->desc) {
 		DPRINTK(PROBE, ERR,
@@ -2220,12 +2220,12 @@ setup_rx_desc_die:
 		DPRINTK(RX_ERR, ERR, "rx_ring align check failed: %u bytes "
 				     "at %p\n", rx_ring->size, rx_ring->desc);
 		/* Try again, without freeing the previous */
-		rx_ring->desc = pci_alloc_consistent(pdev, rx_ring->size,
-						     &rx_ring->dma);
+		rx_ring->desc = dma_alloc_coherent(&pdev->dev, rx_ring->size,
+						   &rx_ring->dma, GFP_ATOMIC);
 		/* Failed allocation, critical failure */
 		if (!rx_ring->desc) {
-			pci_free_consistent(pdev, rx_ring->size, olddesc,
-					    olddma);
+			dma_free_coherent(&pdev->dev, rx_ring->size, olddesc,
+					  olddma);
 			DPRINTK(PROBE, ERR,
 				"Unable to allocate memory "
 				"for the receive descriptor ring\n");
@@ -2235,18 +2235,18 @@ setup_rx_desc_die:
 		if (!e1000_check_64k_bound(adapter, rx_ring->desc,
 					   rx_ring->size)) {
 			/* give up */
-			pci_free_consistent(pdev, rx_ring->size, rx_ring->desc,
-					    rx_ring->dma);
-			pci_free_consistent(pdev, rx_ring->size, olddesc,
-					    olddma);
+			dma_free_coherent(&pdev->dev, rx_ring->size,
+					  rx_ring->desc, rx_ring->dma);
+			dma_free_coherent(&pdev->dev, rx_ring->size, olddesc,
+					  olddma);
 			DPRINTK(PROBE, ERR,
 				"Unable to allocate aligned memory "
 				"for the receive descriptor ring\n");
 			goto setup_rx_desc_die;
 		} else {
 			/* Free old allocation, new allocation was successful */
-			pci_free_consistent(pdev, rx_ring->size, olddesc,
-					    olddma);
+			dma_free_coherent(&pdev->dev, rx_ring->size, olddesc,
+					  olddma);
 		}
 	}
 	memset(rx_ring->desc, 0, rx_ring->size);
@@ -2570,7 +2570,8 @@ static void e1000_free_tx_resources(struct e1000_adapter *adapter,
 	vfree(tx_ring->buffer_info);
 	tx_ring->buffer_info = NULL;
 
-	pci_free_consistent(pdev, tx_ring->size, tx_ring->desc, tx_ring->dma);
+	dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc,
+			  tx_ring->dma);
 
 	tx_ring->desc = NULL;
 }
@@ -2673,7 +2674,8 @@ static void e1000_free_rx_resources(struct e1000_adapter *adapter,
 	kfree(rx_ring->ps_page_dma);
 	rx_ring->ps_page_dma = NULL;
 
-	pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma);
+	dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc,
+			  rx_ring->dma);
 
 	rx_ring->desc = NULL;
 }
diff --git a/kernel/drivers/net/drivers/natsemi.c b/kernel/drivers/net/drivers/natsemi.c
index b46d0ffefb..74112c5a29 100644
--- a/kernel/drivers/net/drivers/natsemi.c
+++ b/kernel/drivers/net/drivers/natsemi.c
@@ -1413,9 +1413,9 @@ static void dump_ring(struct rtnet_device *dev)
 static int alloc_ring(struct rtnet_device *dev)
 {
 	struct netdev_private *np = dev->priv;
-	np->rx_ring = pci_alloc_consistent(np->pci_dev,
+	np->rx_ring = dma_alloc_coherent(&np->pci_dev->dev,
 		sizeof(struct netdev_desc) * (RX_RING_SIZE+TX_RING_SIZE),
-		&np->ring_dma);
+		&np->ring_dma, GFP_ATOMIC);
 	if (!np->rx_ring)
 		return -ENOMEM;
 	np->tx_ring = &np->rx_ring[RX_RING_SIZE];
@@ -1526,7 +1526,7 @@ static void drain_ring(struct rtnet_device *dev)
 static void free_ring(struct rtnet_device *dev)
 {
 	struct netdev_private *np = dev->priv;
-	pci_free_consistent(np->pci_dev,
+	dma_free_coherent(&np->pci_dev->dev,
 		sizeof(struct netdev_desc) * (RX_RING_SIZE+TX_RING_SIZE),
 		np->rx_ring, np->ring_dma);
 }
diff --git a/kernel/drivers/net/drivers/pcnet32.c b/kernel/drivers/net/drivers/pcnet32.c
index 135e26bb9f..11a0af8632 100644
--- a/kernel/drivers/net/drivers/pcnet32.c
+++ b/kernel/drivers/net/drivers/pcnet32.c
@@ -747,8 +747,9 @@ static int pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line,
 	if (request_region(ioaddr, PCNET32_TOTAL_SIZE, chipname) == NULL)
 		return -EBUSY;
 
-	/* pci_alloc_consistent returns page-aligned memory, so we do not have to check the alignment */
-	if ((lp = pci_alloc_consistent(pdev, sizeof(*lp), &lp_dma_addr)) ==
+	/* dma_alloc_coherent returns page-aligned memory, so we do not have to check the alignment */
+	if ((lp = dma_alloc_coherent(&pdev->dev, sizeof(*lp), &lp_dma_addr,
+				     GFP_ATOMIC)) ==
 	    NULL) {
 		release_region(ioaddr, PCNET32_TOTAL_SIZE);
 		return -ENOMEM;
@@ -784,7 +785,8 @@ static int pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line,
 
 	if (!a) {
 		printk(KERN_ERR PFX "No access methods\n");
-		pci_free_consistent(lp->pci_dev, sizeof(*lp), lp, lp->dma_addr);
+		dma_free_coherent(&lp->pci_dev->dev, sizeof(*lp), lp,
+				  lp->dma_addr);
 		release_region(ioaddr, PCNET32_TOTAL_SIZE);
 		return -ENODEV;
 	}
@@ -842,8 +844,8 @@ static int pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line,
 			printk(", probed IRQ %d.\n", dev->irq);
 		else {
 			printk(", failed to detect IRQ line.\n");
-			pci_free_consistent(lp->pci_dev, sizeof(*lp), lp,
-					    lp->dma_addr);
+			dma_free_coherent(&lp->pci_dev->dev, sizeof(*lp), lp,
+					  lp->dma_addr);
 			release_region(ioaddr, PCNET32_TOTAL_SIZE);
 			return -ENODEV;
 		}
@@ -867,7 +869,8 @@ static int pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line,
 	/* Fill in the generic fields of the device structure. */
 	/*** RTnet ***/
 	if ((i = rt_register_rtnetdev(dev))) {
-		pci_free_consistent(lp->pci_dev, sizeof(*lp), lp, lp->dma_addr);
+		dma_free_coherent(&lp->pci_dev->dev, sizeof(*lp), lp,
+				   lp->dma_addr);
 		release_region(ioaddr, PCNET32_TOTAL_SIZE);
 		rtdev_free(dev);
 		return i;
@@ -1637,7 +1640,8 @@ static void __exit pcnet32_cleanup_module(void)
 		rt_rtdev_disconnect(pcnet32_dev);
 		/*** RTnet ***/
 		release_region(pcnet32_dev->base_addr, PCNET32_TOTAL_SIZE);
-		pci_free_consistent(lp->pci_dev, sizeof(*lp), lp, lp->dma_addr);
+		dma_free_coherent(&lp->pci_dev->dev, sizeof(*lp), lp,
+				  lp->dma_addr);
 		/*** RTnet ***/
 		rtdev_free(pcnet32_dev);
 		/*** RTnet ***/
diff --git a/kernel/drivers/net/drivers/r8169.c b/kernel/drivers/net/drivers/r8169.c
index e05e40cf9c..9c0e259c26 100644
--- a/kernel/drivers/net/drivers/r8169.c
+++ b/kernel/drivers/net/drivers/r8169.c
@@ -1041,13 +1041,15 @@ static int rtl8169_open (struct rtnet_device *rtdev)
 	//2004-05-11
 	// Allocate tx/rx descriptor space
 	priv->sizeof_txdesc_space = NUM_TX_DESC * sizeof(struct TxDesc)+256;
-	priv->txdesc_space = pci_alloc_consistent( pdev, priv->sizeof_txdesc_space, &priv->txdesc_phy_dma_addr );
+	priv->txdesc_space = dma_alloc_coherent(&pdev->dev,
+		priv->sizeof_txdesc_space, &priv->txdesc_phy_dma_addr, GFP_ATOMIC);
 	if( priv->txdesc_space == NULL ){
 		printk("%s: Gigabit driver alloc txdesc_space failed.\n", rtdev->name );
 		return -ENOMEM;
 	}
 	priv->sizeof_rxdesc_space = NUM_RX_DESC * sizeof(struct RxDesc)+256;
-	priv->rxdesc_space = pci_alloc_consistent( pdev, priv->sizeof_rxdesc_space, &priv->rxdesc_phy_dma_addr );
+	priv->rxdesc_space = dma_alloc_coherent(&pdev->dev,
+		priv->sizeof_rxdesc_space, &priv->rxdesc_phy_dma_addr, GFP_ATOMIC);
 	if( priv->rxdesc_space == NULL ){
 		printk("%s: Gigabit driver alloc rxdesc_space failed.\n", rtdev->name );
 		return -ENOMEM;
@@ -1779,8 +1781,8 @@ static int rtl8169_close (struct rtnet_device *rtdev)
 
 	//2004-05-11
 	if(priv->txdesc_space != NULL){
-		pci_free_consistent(
-				priv->pci_dev,
+		dma_free_coherent(
+				&priv->pci_dev->dev,
 				priv->sizeof_txdesc_space,
 				priv->txdesc_space,
 				priv->txdesc_phy_dma_addr
@@ -1789,8 +1791,8 @@ static int rtl8169_close (struct rtnet_device *rtdev)
 	}
 
 	if(priv->rxdesc_space != NULL){
-		pci_free_consistent(
-				priv->pci_dev,
+		dma_free_coherent(
+				&priv->pci_dev->dev,
 				priv->sizeof_rxdesc_space,
 				priv->rxdesc_space,
 				priv->rxdesc_phy_dma_addr
diff --git a/kernel/drivers/net/drivers/tulip/tulip_core.c b/kernel/drivers/net/drivers/tulip/tulip_core.c
index 0d68ef3879..f5e7b3e9d3 100644
--- a/kernel/drivers/net/drivers/tulip/tulip_core.c
+++ b/kernel/drivers/net/drivers/tulip/tulip_core.c
@@ -989,10 +989,10 @@ static int tulip_init_one (struct pci_dev *pdev,
 	 */
 	tp = rtdev->priv;
 
-	tp->rx_ring = pci_alloc_consistent(pdev,
-					   sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
-					   sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
-					   &tp->rx_ring_dma);
+	tp->rx_ring = dma_alloc_coherent(&pdev->dev,
+					 sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
+					 sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
+					 &tp->rx_ring_dma, GFP_ATOMIC);
 	if (!tp->rx_ring)
 		goto err_out_mtable;
 	tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
@@ -1319,10 +1319,10 @@ static int tulip_init_one (struct pci_dev *pdev,
 	return 0;
 
 err_out_free_ring:
-	pci_free_consistent (pdev,
-			     sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
-			     sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
-			     tp->rx_ring, tp->rx_ring_dma);
+	dma_free_coherent(&pdev->dev,
+			  sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
+			  sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
+			  tp->rx_ring, tp->rx_ring_dma);
 
 err_out_mtable:
 	if (tp->mtable)
@@ -1349,10 +1349,10 @@ static void tulip_remove_one (struct pci_dev *pdev)
 		return;
 
 	tp = rtdev->priv;
-	pci_free_consistent (pdev,
-			     sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
-			     sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
-			     tp->rx_ring, tp->rx_ring_dma);
+	dma_free_coherent(&pdev->dev,
+			  sizeof (struct tulip_rx_desc) * RX_RING_SIZE +
+			  sizeof (struct tulip_tx_desc) * TX_RING_SIZE,
+			  tp->rx_ring, tp->rx_ring_dma);
 	rt_unregister_rtnetdev (rtdev);
 	if (tp->mtable)
 		kfree (tp->mtable);
diff --git a/kernel/drivers/net/drivers/via-rhine.c b/kernel/drivers/net/drivers/via-rhine.c
index 122e41d302..fc867cf736 100644
--- a/kernel/drivers/net/drivers/via-rhine.c
+++ b/kernel/drivers/net/drivers/via-rhine.c
@@ -908,22 +908,23 @@ static int alloc_ring(struct rtnet_device* dev) /*** RTnet ***/
 	void *ring;
 	dma_addr_t ring_dma;
 
-	ring = pci_alloc_consistent(np->pdev,
-				    RX_RING_SIZE * sizeof(struct rx_desc) +
-				    TX_RING_SIZE * sizeof(struct tx_desc),
-				    &ring_dma);
+	ring = dma_alloc_coherent(&np->pdev->dev,
+				  RX_RING_SIZE * sizeof(struct rx_desc) +
+				  TX_RING_SIZE * sizeof(struct tx_desc),
+				  &ring_dma, GFP_ATOMIC);
 	if (!ring) {
 		printk(KERN_ERR "Could not allocate DMA memory.\n");
 		return -ENOMEM;
 	}
 	if (np->drv_flags & ReqTxAlign) {
-		np->tx_bufs = pci_alloc_consistent(np->pdev, PKT_BUF_SZ * TX_RING_SIZE,
-								   &np->tx_bufs_dma);
+		np->tx_bufs = dma_alloc_coherent(&np->pdev->dev,
+						 PKT_BUF_SZ * TX_RING_SIZE,
+						 &np->tx_bufs_dma, GFP_ATOMIC);
 		if (np->tx_bufs == NULL) {
-			pci_free_consistent(np->pdev,
-				    RX_RING_SIZE * sizeof(struct rx_desc) +
-				    TX_RING_SIZE * sizeof(struct tx_desc),
-				    ring, ring_dma);
+			dma_free_coherent(&np->pdev->dev,
+					  RX_RING_SIZE * sizeof(struct rx_desc) +
+					  TX_RING_SIZE * sizeof(struct tx_desc),
+					  ring, ring_dma);
 			return -ENOMEM;
 		}
 	}
@@ -940,15 +941,15 @@ void free_ring(struct rtnet_device* dev) /*** RTnet ***/
 {
 	struct netdev_private *np = dev->priv;
 
-	pci_free_consistent(np->pdev,
-			    RX_RING_SIZE * sizeof(struct rx_desc) +
-			    TX_RING_SIZE * sizeof(struct tx_desc),
-			    np->rx_ring, np->rx_ring_dma);
+	dma_free_coherent(&np->pdev->dev,
+			  RX_RING_SIZE * sizeof(struct rx_desc) +
+			  TX_RING_SIZE * sizeof(struct tx_desc),
+			  np->rx_ring, np->rx_ring_dma);
 	np->tx_ring = NULL;
 
 	if (np->tx_bufs)
-		pci_free_consistent(np->pdev, PKT_BUF_SZ * TX_RING_SIZE,
-							np->tx_bufs, np->tx_bufs_dma);
+		dma_free_coherent(&np->pdev->dev, PKT_BUF_SZ * TX_RING_SIZE,
+				  np->tx_bufs, np->tx_bufs_dma);
 
 	np->tx_bufs = NULL;
 
-- 
2.35.3


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

* [PATCH 08/15] drivers: Convert pci_map/unmap_single/page to DMA API
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (6 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 07/15] drivers: Convert pci_alloc/free_consistent " Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 09/15] drivers: Convert pci_dma_sync_single_for_cpu/device " Jan Kiszka
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

The legacy API has been finally dropped, and the new one was "already"
available with 5.10.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/net/drivers/e1000/e1000_main.c | 32 +++++-----
 kernel/drivers/net/drivers/eepro100.c         | 35 ++++++-----
 .../drivers/experimental/e1000/e1000_main.c   | 60 +++++++++----------
 kernel/drivers/net/drivers/natsemi.c          | 29 ++++-----
 kernel/drivers/net/drivers/pcnet32.c          | 34 +++++------
 kernel/drivers/net/drivers/r8169.c            | 12 ++--
 kernel/drivers/net/drivers/tulip/interrupt.c  | 18 +++---
 kernel/drivers/net/drivers/tulip/tulip_core.c | 27 +++++----
 kernel/drivers/net/drivers/via-rhine.c        | 36 ++++++-----
 9 files changed, 149 insertions(+), 134 deletions(-)

diff --git a/kernel/drivers/net/drivers/e1000/e1000_main.c b/kernel/drivers/net/drivers/e1000/e1000_main.c
index 7c34e2f00f..726b38ab87 100644
--- a/kernel/drivers/net/drivers/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/e1000/e1000_main.c
@@ -1809,10 +1809,10 @@ e1000_unmap_and_free_tx_resource(struct e1000_adapter *adapter,
 			struct e1000_buffer *buffer_info)
 {
 	if (buffer_info->dma) {
-		pci_unmap_page(adapter->pdev,
-				buffer_info->dma,
-				buffer_info->length,
-				PCI_DMA_TODEVICE);
+		dma_unmap_page(&adapter->pdev->dev,
+			       buffer_info->dma,
+			       buffer_info->length,
+			       DMA_TO_DEVICE);
 	}
 	if (buffer_info->skb)
 		kfree_rtskb(buffer_info->skb);
@@ -1933,10 +1933,10 @@ e1000_clean_rx_ring(struct e1000_adapter *adapter,
 	for (i = 0; i < rx_ring->count; i++) {
 		buffer_info = &rx_ring->buffer_info[i];
 		if (buffer_info->skb) {
-			pci_unmap_single(pdev,
+			dma_unmap_single(&pdev->dev,
 					 buffer_info->dma,
 					 buffer_info->length,
-					 PCI_DMA_FROMDEVICE);
+					 DMA_FROM_DEVICE);
 
 			kfree_rtskb(buffer_info->skb);
 			buffer_info->skb = NULL;
@@ -2382,10 +2382,10 @@ e1000_tx_map(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
 
 		buffer_info->length = size;
 		buffer_info->dma =
-			pci_map_single(adapter->pdev,
-				skb->data + offset,
-				size,
-				PCI_DMA_TODEVICE);
+			dma_map_single(&adapter->pdev->dev,
+				       skb->data + offset,
+				       size,
+				       DMA_TO_DEVICE);
 		buffer_info->time_stamp = jiffies;
 
 		len -= size;
@@ -2850,10 +2850,10 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
 
 		cleaned = TRUE;
 		cleaned_count++;
-		pci_unmap_single(pdev,
+		dma_unmap_single(&pdev->dev,
 				 buffer_info->dma,
 				 buffer_info->length,
-				 PCI_DMA_FROMDEVICE);
+				 DMA_FROM_DEVICE);
 
 		length = le16_to_cpu(rx_desc->length);
 
@@ -2985,10 +2985,10 @@ e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
 		buffer_info->skb = skb;
 		buffer_info->length = adapter->rx_buffer_len;
 map_skb:
-		buffer_info->dma = pci_map_single(pdev,
+		buffer_info->dma = dma_map_single(&pdev->dev,
 						  skb->data,
 						  adapter->rx_buffer_len,
-						  PCI_DMA_FROMDEVICE);
+						  DMA_FROM_DEVICE);
 
 		/* Fix for errata 23, can't cross 64kB boundary */
 		if (!e1000_check_64k_bound(adapter,
@@ -3001,9 +3001,9 @@ map_skb:
 			kfree_rtskb(skb);
 			buffer_info->skb = NULL;
 
-			pci_unmap_single(pdev, buffer_info->dma,
+			dma_unmap_single(&pdev->dev, buffer_info->dma,
 					 adapter->rx_buffer_len,
-					 PCI_DMA_FROMDEVICE);
+					 DMA_FROM_DEVICE);
 
 			break; /* while !buffer_info->skb */
 		}
diff --git a/kernel/drivers/net/drivers/eepro100.c b/kernel/drivers/net/drivers/eepro100.c
index 64507756c3..74385d61d2 100644
--- a/kernel/drivers/net/drivers/eepro100.c
+++ b/kernel/drivers/net/drivers/eepro100.c
@@ -1070,8 +1070,9 @@ speedo_init_rx_ring(struct rtnet_device *rtdev)
 		rxf = (struct RxFD *)skb->tail;
 		sp->rx_ringp[i] = rxf;
 		sp->rx_ring_dma[i] =
-			pci_map_single(sp->pdev, rxf,
-					PKT_BUF_SZ + sizeof(struct RxFD), PCI_DMA_BIDIRECTIONAL);
+			dma_map_single(&sp->pdev->dev, rxf,
+				       PKT_BUF_SZ + sizeof(struct RxFD),
+				       DMA_BIDIRECTIONAL);
 		rtskb_reserve(skb, sizeof(struct RxFD));
 		if (last_rxf) {
 			last_rxf->link = cpu_to_le32(sp->rx_ring_dma[i]);
@@ -1139,8 +1140,8 @@ speedo_start_xmit(struct rtskb *skb, struct rtnet_device *rtdev)
 	/* The data region is always in one buffer descriptor. */
 	sp->tx_ring[entry].count = cpu_to_le32(sp->tx_threshold);
 	sp->tx_ring[entry].tx_buf_addr0 =
-		cpu_to_le32(pci_map_single(sp->pdev, skb->data,
-					   skb->len, PCI_DMA_TODEVICE));
+		cpu_to_le32(dma_map_single(&sp->pdev->dev, skb->data,
+					   skb->len, DMA_TO_DEVICE));
 	sp->tx_ring[entry].tx_buf_size0 = cpu_to_le32(skb->len);
 
 // *** RTnet ***
@@ -1206,9 +1207,9 @@ static void speedo_tx_buffer_gc(struct rtnet_device *rtdev)
 		if (sp->tx_skbuff[entry]) {
 			sp->stats.tx_packets++;	/* Count only user packets. */
 			sp->stats.tx_bytes += sp->tx_skbuff[entry]->len;
-			pci_unmap_single(sp->pdev,
-					le32_to_cpu(sp->tx_ring[entry].tx_buf_addr0),
-					sp->tx_skbuff[entry]->len, PCI_DMA_TODEVICE);
+			dma_unmap_single(&sp->pdev->dev,
+					 le32_to_cpu(sp->tx_ring[entry].tx_buf_addr0),
+					 sp->tx_skbuff[entry]->len, DMA_TO_DEVICE);
 
 			// *** RTnet ***
 			dev_kfree_rtskb(sp->tx_skbuff[entry]);
@@ -1394,8 +1395,9 @@ static inline struct RxFD *speedo_rx_alloc(struct rtnet_device *rtdev, int entry
 	rtskb_reserve(skb, 2);  /* IP header alignment */
 	rxf = sp->rx_ringp[entry] = (struct RxFD *)skb->tail;
 	sp->rx_ring_dma[entry] =
-		pci_map_single(sp->pdev, rxf,
-					   PKT_BUF_SZ + sizeof(struct RxFD), PCI_DMA_FROMDEVICE);
+		dma_map_single(&sp->pdev->dev, rxf,
+			       PKT_BUF_SZ + sizeof(struct RxFD),
+			       DMA_FROM_DEVICE);
 	rtskb_reserve(skb, sizeof(struct RxFD));
 	rxf->rx_buf_addr = 0xffffffff;
 	pci_dma_sync_single_for_device(sp->pdev, sp->rx_ring_dma[entry],
@@ -1538,8 +1540,10 @@ speedo_rx(struct rtnet_device *rtdev, int* packets, nanosecs_abs_t *time_stamp)
 				sp->rx_skbuff[entry] = NULL;
 				rtskb_put(skb, pkt_len);
 				sp->rx_ringp[entry] = NULL;
-				pci_unmap_single(sp->pdev, sp->rx_ring_dma[entry],
-						PKT_BUF_SZ + sizeof(struct RxFD), PCI_DMA_FROMDEVICE);
+				dma_unmap_single(&sp->pdev->dev,
+						 sp->rx_ring_dma[entry],
+						 PKT_BUF_SZ + sizeof(struct RxFD),
+						 DMA_FROM_DEVICE);
 			}
 			skb->protocol = rt_eth_type_trans(skb, rtdev);
 			//rtmac
@@ -1608,9 +1612,10 @@ speedo_close(struct rtnet_device *rtdev)
 		sp->rx_skbuff[i] = 0;
 		/* Clear the Rx descriptors. */
 		if (skb) {
-			pci_unmap_single(sp->pdev,
+			dma_unmap_single(&sp->pdev->dev,
 					 sp->rx_ring_dma[i],
-					 PKT_BUF_SZ + sizeof(struct RxFD), PCI_DMA_FROMDEVICE);
+					 PKT_BUF_SZ + sizeof(struct RxFD),
+					 DMA_FROM_DEVICE);
 			dev_kfree_rtskb(skb);
 		}
 	}
@@ -1620,9 +1625,9 @@ speedo_close(struct rtnet_device *rtdev)
 		sp->tx_skbuff[i] = 0;
 		/* Clear the Tx descriptors. */
 		if (skb) {
-			pci_unmap_single(sp->pdev,
+			dma_unmap_single(&sp->pdev->dev,
 					 le32_to_cpu(sp->tx_ring[i].tx_buf_addr0),
-					 skb->len, PCI_DMA_TODEVICE);
+					 skb->len, DMA_TO_DEVICE);
 
 			// *** RTnet ***
 			dev_kfree_rtskb(skb);
diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
index 0098d8c2af..d76ad9c775 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
@@ -2594,10 +2594,10 @@ static void e1000_unmap_and_free_tx_resource(struct e1000_adapter *adapter,
 					     struct e1000_buffer *buffer_info)
 {
 	if (buffer_info->dma) {
-		pci_unmap_page(adapter->pdev,
-				buffer_info->dma,
-				buffer_info->length,
-				PCI_DMA_TODEVICE);
+		dma_unmap_page(&adapter->pdev->dev,
+			       buffer_info->dma,
+			       buffer_info->length,
+			       DMA_TO_DEVICE);
 		buffer_info->dma = 0;
 	}
 	if (buffer_info->skb) {
@@ -2714,20 +2714,20 @@ static void e1000_clean_rx_ring(struct e1000_adapter *adapter,
 		buffer_info = &rx_ring->buffer_info[i];
 		if (buffer_info->dma &&
 		    adapter->clean_rx == e1000_clean_rx_irq) {
-			pci_unmap_single(pdev, buffer_info->dma,
+			dma_unmap_single(&pdev->dev, buffer_info->dma,
 					 adapter->rx_buffer_len,
-					 PCI_DMA_FROMDEVICE);
+					 DMA_FROM_DEVICE);
 #ifdef CONFIG_E1000_NAPI
 		} else if (buffer_info->dma &&
 			   adapter->clean_rx == e1000_clean_jumbo_rx_irq) {
-			pci_unmap_page(pdev, buffer_info->dma, PAGE_SIZE,
-				       PCI_DMA_FROMDEVICE);
+			dma_unmap_page(&pdev->dev, buffer_info->dma, PAGE_SIZE,
+				       DMA_FROM_DEVICE);
 #endif
 		} else if (buffer_info->dma &&
 			   adapter->clean_rx == e1000_clean_rx_irq_ps) {
-			pci_unmap_single(pdev, buffer_info->dma,
+			dma_unmap_single(&pdev->dev, buffer_info->dma,
 					 adapter->rx_ps_bsize0,
-					 PCI_DMA_FROMDEVICE);
+					 DMA_FROM_DEVICE);
 		}
 		buffer_info->dma = 0;
 		if (buffer_info->page) {
@@ -2742,9 +2742,9 @@ static void e1000_clean_rx_ring(struct e1000_adapter *adapter,
 		ps_page_dma = &rx_ring->ps_page_dma[i];
 		for (j = 0; j < adapter->rx_ps_pages; j++) {
 			if (!ps_page->ps_page[j]) break;
-			pci_unmap_page(pdev,
+			dma_unmap_page(&pdev->dev,
 				       ps_page_dma->ps_page_dma[j],
-				       PAGE_SIZE, PCI_DMA_FROMDEVICE);
+				       PAGE_SIZE, DMA_FROM_DEVICE);
 			ps_page_dma->ps_page_dma[j] = 0;
 			put_page(ps_page->ps_page[j]);
 			ps_page->ps_page[j] = NULL;
@@ -3488,10 +3488,10 @@ static int e1000_tx_map(struct e1000_adapter *adapter,
 		/* set time_stamp *before* dma to help avoid a possible race */
 		buffer_info->time_stamp = jiffies;
 		buffer_info->dma =
-			pci_map_single(adapter->pdev,
+			dma_map_single(&adapter->pdev->dev,
 				skb->data + offset,
 				size,
-				PCI_DMA_TODEVICE);
+				DMA_TO_DEVICE);
 		buffer_info->next_to_watch = i;
 
 		len -= size;
@@ -3528,11 +3528,11 @@ static int e1000_tx_map(struct e1000_adapter *adapter,
 			buffer_info->length = size;
 			buffer_info->time_stamp = jiffies;
 			buffer_info->dma =
-				pci_map_page(adapter->pdev,
+				dma_map_page(&adapter->pdev->dev,
 					frag->page,
 					offset,
 					size,
-					PCI_DMA_TODEVICE);
+					DMA_TO_DEVICE);
 			buffer_info->next_to_watch = i;
 
 			len -= size;
@@ -4721,10 +4721,10 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
 
 		cleaned = TRUE;
 		cleaned_count++;
-		pci_unmap_page(pdev,
+		dma_unmap_page(&pdev->dev,
 			       buffer_info->dma,
 			       PAGE_SIZE,
-			       PCI_DMA_FROMDEVICE);
+			       DMA_FROM_DEVICE);
 		buffer_info->dma = 0;
 
 		length = le16_to_cpu(rx_desc->length);
@@ -4926,10 +4926,10 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
 
 		cleaned = TRUE;
 		cleaned_count++;
-		pci_unmap_single(pdev,
+		dma_unmap_single(&pdev->dev,
 				 buffer_info->dma,
 				 adapter->rx_buffer_len,
-				 PCI_DMA_FROMDEVICE);
+				 DMA_FROM_DEVICE);
 		buffer_info->dma = 0;
 
 		length = le16_to_cpu(rx_desc->length);
@@ -5074,9 +5074,9 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
 
 		cleaned = TRUE;
 		cleaned_count++;
-		pci_unmap_single(pdev, buffer_info->dma,
+		dma_unmap_single(&pdev->dev, buffer_info->dma,
 				 adapter->rx_ps_bsize0,
-				 PCI_DMA_FROMDEVICE);
+				 DMA_FROM_DEVICE);
 		buffer_info->dma = 0;
 
 		if (unlikely(!(staterr & E1000_RXD_STAT_EOP))) {
@@ -5144,8 +5144,8 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
 		for (j = 0; j < adapter->rx_ps_pages; j++) {
 			if (!(length= le16_to_cpu(rx_desc->wb.upper.length[j])))
 				break;
-			pci_unmap_page(pdev, ps_page_dma->ps_page_dma[j],
-					PAGE_SIZE, PCI_DMA_FROMDEVICE);
+			dma_unmap_page(&pdev->dev, ps_page_dma->ps_page_dma[j],
+				       PAGE_SIZE, DMA_FROM_DEVICE);
 			ps_page_dma->ps_page_dma[j] = 0;
 			skb_fill_page_desc(skb, j, ps_page->ps_page[j], 0,
 					   length);
@@ -5288,10 +5288,10 @@ check_page:
 		}
 
 		if (!buffer_info->dma)
-			buffer_info->dma = pci_map_page(pdev,
+			buffer_info->dma = dma_map_page(&pdev->dev,
 							buffer_info->page, 0,
 							PAGE_SIZE,
-							PCI_DMA_FROMDEVICE);
+							DMA_FROM_DEVICE);
 
 		rx_desc = E1000_RX_DESC(*rx_ring, i);
 		rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
@@ -5382,10 +5382,10 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
 
 		buffer_info->skb = skb;
 map_skb:
-		buffer_info->dma = pci_map_single(pdev,
+		buffer_info->dma = dma_map_single(&pdev->dev,
 						  skb->data,
 						  adapter->rx_buffer_len,
-						  PCI_DMA_FROMDEVICE);
+						  DMA_FROM_DEVICE);
 
 		/* Fix for errata 23, can't cross 64kB boundary */
 		if (!e1000_check_64k_bound(adapter,
@@ -5398,9 +5398,9 @@ map_skb:
 			kfree_rtskb(skb);
 			buffer_info->skb = NULL;
 
-			pci_unmap_single(pdev, buffer_info->dma,
+			dma_unmap_single(&pdev->dev, buffer_info->dma,
 					 adapter->rx_buffer_len,
-					 PCI_DMA_FROMDEVICE);
+					 DMA_FROM_DEVICE);
 			buffer_info->dma = 0;
 
 			adapter->alloc_rx_buff_failed++;
diff --git a/kernel/drivers/net/drivers/natsemi.c b/kernel/drivers/net/drivers/natsemi.c
index 74112c5a29..82d1c33506 100644
--- a/kernel/drivers/net/drivers/natsemi.c
+++ b/kernel/drivers/net/drivers/natsemi.c
@@ -1435,8 +1435,8 @@ static void refill_rx(struct rtnet_device *dev)
 			np->rx_skbuff[entry] = skb;
 			if (skb == NULL)
 				break; /* Better luck next round. */
-			np->rx_dma[entry] = pci_map_single(np->pci_dev,
-				skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
+			np->rx_dma[entry] = dma_map_single(&np->pci_dev->dev,
+				skb->data, np->rx_buf_sz, DMA_FROM_DEVICE);
 			np->rx_ring[entry].addr = cpu_to_le32(np->rx_dma[entry]);
 		}
 		np->rx_ring[entry].cmd_status = cpu_to_le32(np->rx_buf_sz);
@@ -1493,9 +1493,9 @@ static void drain_tx(struct rtnet_device *dev)
 
 	for (i = 0; i < TX_RING_SIZE; i++) {
 		if (np->tx_skbuff[i]) {
-			pci_unmap_single(np->pci_dev,
+			dma_unmap_single(&np->pci_dev->dev,
 				np->rx_dma[i], np->tx_skbuff[i]->len,
-				PCI_DMA_TODEVICE);
+				DMA_TO_DEVICE);
 			dev_kfree_rtskb(np->tx_skbuff[i]);
 			np->stats.tx_dropped++;
 		}
@@ -1513,9 +1513,9 @@ static void drain_ring(struct rtnet_device *dev)
 		np->rx_ring[i].cmd_status = 0;
 		np->rx_ring[i].addr = 0xBADF00D0; /* An invalid address. */
 		if (np->rx_skbuff[i]) {
-			pci_unmap_single(np->pci_dev,
+			dma_unmap_single(&np->pci_dev->dev,
 				np->rx_dma[i], np->rx_skbuff[i]->len,
-				PCI_DMA_FROMDEVICE);
+				DMA_FROM_DEVICE);
 			dev_kfree_rtskb(np->rx_skbuff[i]);
 		}
 		np->rx_skbuff[i] = NULL;
@@ -1546,8 +1546,8 @@ static int start_tx(struct rtskb *skb, struct rtnet_device *dev) /*** RTnet ***/
 	entry = np->cur_tx % TX_RING_SIZE;
 
 	np->tx_skbuff[entry] = skb;
-	np->tx_dma[entry] = pci_map_single(np->pci_dev,
-				skb->data,skb->len, PCI_DMA_TODEVICE);
+	np->tx_dma[entry] = dma_map_single(&np->pci_dev->dev,
+				skb->data,skb->len, DMA_TO_DEVICE);
 
 	np->tx_ring[entry].addr = cpu_to_le32(np->tx_dma[entry]);
 
@@ -1621,9 +1621,9 @@ static void netdev_tx_done(struct rtnet_device *dev)
 				np->stats.tx_window_errors++;
 			np->stats.tx_errors++;
 		}
-		pci_unmap_single(np->pci_dev,np->tx_dma[entry],
-					np->tx_skbuff[entry]->len,
-					PCI_DMA_TODEVICE);
+		dma_unmap_single(&np->pci_dev->dev,np->tx_dma[entry],
+				np->tx_skbuff[entry]->len,
+				DMA_TO_DEVICE);
 		/* Free the original skb. */
 		dev_kfree_rtskb(np->tx_skbuff[entry]); /*** RTnet ***/
 /*		dev_kfree_skb_irq(np->tx_skbuff[entry]);*/
@@ -1750,9 +1750,10 @@ static void netdev_rx(struct rtnet_device *dev, nanosecs_abs_t *time_stamp)
 /*** RTnet ***/
 			{
 				skb = np->rx_skbuff[entry];
-				pci_unmap_single(np->pci_dev, np->rx_dma[entry],
-					np->rx_skbuff[entry]->len,
-					PCI_DMA_FROMDEVICE);
+				dma_unmap_single(&np->pci_dev->dev,
+						 np->rx_dma[entry],
+						 np->rx_skbuff[entry]->len,
+						 DMA_FROM_DEVICE);
 				rtskb_put(skb, pkt_len);
 				np->rx_skbuff[entry] = NULL;
 			}
diff --git a/kernel/drivers/net/drivers/pcnet32.c b/kernel/drivers/net/drivers/pcnet32.c
index 11a0af8632..4fd5ba0b4a 100644
--- a/kernel/drivers/net/drivers/pcnet32.c
+++ b/kernel/drivers/net/drivers/pcnet32.c
@@ -1083,8 +1083,8 @@ static int pcnet32_init_ring(struct rtnet_device *dev) /*** RTnet ***/
 			rtskb_reserve(rx_skbuff, 2); /*** RTnet ***/
 		}
 		lp->rx_dma_addr[i] =
-			pci_map_single(lp->pci_dev, rx_skbuff->tail,
-				       rx_skbuff->len, PCI_DMA_FROMDEVICE);
+			dma_map_single(&lp->pci_dev->dev, rx_skbuff->tail,
+				       rx_skbuff->len, DMA_FROM_DEVICE);
 		lp->rx_ring[i].base = (u32)le32_to_cpu(lp->rx_dma_addr[i]);
 		lp->rx_ring[i].buf_length = le16_to_cpu(-PKT_BUF_SZ);
 		lp->rx_ring[i].status = le16_to_cpu(0x8000);
@@ -1157,8 +1157,8 @@ static int pcnet32_start_xmit(struct rtskb *skb,
 	lp->tx_ring[entry].misc = 0x00000000;
 
 	lp->tx_skbuff[entry] = skb;
-	lp->tx_dma_addr[entry] = pci_map_single(lp->pci_dev, skb->data,
-						skb->len, PCI_DMA_TODEVICE);
+	lp->tx_dma_addr[entry] = dma_map_single(&lp->pci_dev->dev, skb->data,
+						skb->len, DMA_TO_DEVICE);
 	lp->tx_ring[entry].base = (u32)le32_to_cpu(lp->tx_dma_addr[entry]);
 
 	/*** RTnet ***/
@@ -1295,11 +1295,11 @@ static int pcnet32_interrupt(rtdm_irq_t *irq_handle) /*** RTnet ***/
 
 				/* We must free the original skb */
 				if (lp->tx_skbuff[entry]) {
-					pci_unmap_single(
-						lp->pci_dev,
+					dma_unmap_single(
+						&lp->pci_dev->dev,
 						lp->tx_dma_addr[entry],
 						lp->tx_skbuff[entry]->len,
-						PCI_DMA_TODEVICE);
+						DMA_TO_DEVICE);
 					dev_kfree_rtskb(
 						lp->tx_skbuff[entry]); /*** RTnet ***/
 					lp->tx_skbuff[entry] = 0;
@@ -1425,19 +1425,19 @@ static int pcnet32_rx(struct rtnet_device *dev,
 						     dev, PKT_BUF_SZ))) {
 						rtskb_reserve(newskb, 2);
 						skb = lp->rx_skbuff[entry];
-						pci_unmap_single(
-							lp->pci_dev,
+						dma_unmap_single(
+							&lp->pci_dev->dev,
 							lp->rx_dma_addr[entry],
 							skb->len,
-							PCI_DMA_FROMDEVICE);
+							DMA_FROM_DEVICE);
 						rtskb_put(skb, pkt_len);
 						lp->rx_skbuff[entry] = newskb;
 						lp->rx_dma_addr
-							[entry] = pci_map_single(
-							lp->pci_dev,
+							[entry] = dma_map_single(
+							&lp->pci_dev->dev,
 							newskb->tail,
 							newskb->len,
-							PCI_DMA_FROMDEVICE);
+							DMA_FROM_DEVICE);
 						lp->rx_ring[entry]
 							.base = le32_to_cpu(
 							lp->rx_dma_addr[entry]);
@@ -1529,9 +1529,9 @@ static int pcnet32_close(struct rtnet_device *dev) /*** RTnet ***/
 	for (i = 0; i < RX_RING_SIZE; i++) {
 		lp->rx_ring[i].status = 0;
 		if (lp->rx_skbuff[i]) {
-			pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[i],
+			dma_unmap_single(&lp->pci_dev->dev, lp->rx_dma_addr[i],
 					 lp->rx_skbuff[i]->len,
-					 PCI_DMA_FROMDEVICE);
+					 DMA_FROM_DEVICE);
 			dev_kfree_rtskb(lp->rx_skbuff[i]); /*** RTnet ***/
 		}
 		lp->rx_skbuff[i] = NULL;
@@ -1540,9 +1540,9 @@ static int pcnet32_close(struct rtnet_device *dev) /*** RTnet ***/
 
 	for (i = 0; i < TX_RING_SIZE; i++) {
 		if (lp->tx_skbuff[i]) {
-			pci_unmap_single(lp->pci_dev, lp->tx_dma_addr[i],
+			dma_unmap_single(&lp->pci_dev->dev, lp->tx_dma_addr[i],
 					 lp->tx_skbuff[i]->len,
-					 PCI_DMA_TODEVICE);
+					 DMA_TO_DEVICE);
 			dev_kfree_rtskb(lp->tx_skbuff[i]); /*** RTnet ***/
 		}
 		lp->tx_skbuff[i] = NULL;
diff --git a/kernel/drivers/net/drivers/r8169.c b/kernel/drivers/net/drivers/r8169.c
index 9c0e259c26..498b998188 100644
--- a/kernel/drivers/net/drivers/r8169.c
+++ b/kernel/drivers/net/drivers/r8169.c
@@ -1285,7 +1285,7 @@ static void rtl8169_init_ring (struct rtnet_device *rtdev)
 
 	for (i=0 ; i<NUM_TX_DESC ; i++){
 		priv->Tx_skbuff[i]=NULL;
-		priv->txdesc_array_dma_addr[i] = pci_map_single(pdev, &priv->TxDescArray[i], sizeof(struct TxDesc), PCI_DMA_TODEVICE);
+		priv->txdesc_array_dma_addr[i] = dma_map_single(&pdev->dev, &priv->TxDescArray[i], sizeof(struct TxDesc), DMA_TO_DEVICE);
 	}
 
 	for (i=0; i <NUM_RX_DESC; i++) {
@@ -1298,7 +1298,7 @@ static void rtl8169_init_ring (struct rtnet_device *rtdev)
 
 		{//-----------------------------------------------------------------------
 			skb = priv->Rx_skbuff[i];
-			priv->rx_skbuff_dma_addr[i] = pci_map_single(pdev, skb->data, priv->rx_buf_size /* MAX_RX_SKBDATA_SIZE */, PCI_DMA_FROMDEVICE);	/*** <kk> ***/
+			priv->rx_skbuff_dma_addr[i] = dma_map_single(&pdev->dev, skb->data, priv->rx_buf_size /* MAX_RX_SKBDATA_SIZE */, DMA_FROM_DEVICE);	/*** <kk> ***/
 
 			if( skb != NULL ){
 				priv->RxDescArray[i].buf_addr = cpu_to_le32(priv->rx_skbuff_dma_addr[i]);
@@ -1309,7 +1309,7 @@ static void rtl8169_init_ring (struct rtnet_device *rtdev)
 				priv->drvinit_fail = 1;
 			}
 		}//-----------------------------------------------------------------------
-		priv->rxdesc_array_dma_addr[i] = pci_map_single(pdev, &priv->RxDescArray[i], sizeof(struct RxDesc), PCI_DMA_TODEVICE);
+		priv->rxdesc_array_dma_addr[i] = dma_map_single(&pdev->dev, &priv->RxDescArray[i], sizeof(struct RxDesc), DMA_TO_DEVICE);
 		pci_dma_sync_single_for_device(pdev, priv->rxdesc_array_dma_addr[i], sizeof(struct RxDesc), PCI_DMA_TODEVICE);
 	}
 }
@@ -1378,7 +1378,7 @@ static int rtl8169_start_xmit (struct rtskb *skb, struct rtnet_device *rtdev)
 			len = ETH_ZLEN;
 		}
 
-		txbuf_dma_addr = pci_map_single(pdev, skb->data, len, PCI_DMA_TODEVICE);
+		txbuf_dma_addr = dma_map_single(&pdev->dev, skb->data, len, DMA_TO_DEVICE);
 
 		priv->TxDescArray[entry].buf_addr = cpu_to_le32(txbuf_dma_addr);
 
@@ -1504,7 +1504,7 @@ static void rtl8169_tx_interrupt (struct rtnet_device *rtdev, struct rtl8169_pri
 #endif //end #ifdef RTL8169_DYNAMIC_CONTROL
 
 			if (priv->txdesc_array_dma_addr[entry])
-				pci_unmap_single(priv->pci_dev, priv->txdesc_array_dma_addr[entry], priv->Tx_skbuff[entry]->len, PCI_DMA_TODEVICE);	/*** ##KK## ***/
+				dma_unmap_single(&priv->pci_dev->dev, priv->txdesc_array_dma_addr[entry], priv->Tx_skbuff[entry]->len, DMA_TO_DEVICE);	/*** ##KK## ***/
 			dev_kfree_rtskb( priv->Tx_skbuff[entry] );	/*** RTnet; previously: dev_kfree_skb_irq() - luckily we're within an IRQ ***/
 			priv->Tx_skbuff[entry] = NULL;
 			priv->stats.tx_packets++;
@@ -1626,7 +1626,7 @@ static void rtl8169_rx_interrupt (struct rtnet_device *rtdev, struct rtl8169_pri
 				cur_skb = priv->Rx_skbuff[cur_rx];
 
 				if( cur_skb != NULL ){
-					priv->rx_skbuff_dma_addr[cur_rx] = pci_map_single(pdev, cur_skb->data, priv->rx_buf_size /* <kk> MAX_RX_SKBDATA_SIZE */, PCI_DMA_FROMDEVICE);
+					priv->rx_skbuff_dma_addr[cur_rx] = dma_map_single(&pdev->dev, cur_skb->data, priv->rx_buf_size /* <kk> MAX_RX_SKBDATA_SIZE */, DMA_FROM_DEVICE);
 					rxdesc->buf_addr = cpu_to_le32(priv->rx_skbuff_dma_addr[cur_rx]);
 				}
 				else{
diff --git a/kernel/drivers/net/drivers/tulip/interrupt.c b/kernel/drivers/net/drivers/tulip/interrupt.c
index a5e16c8299..d65bb3f786 100644
--- a/kernel/drivers/net/drivers/tulip/interrupt.c
+++ b/kernel/drivers/net/drivers/tulip/interrupt.c
@@ -78,8 +78,8 @@ int tulip_refill_rx(/*RTnet*/struct rtnet_device *rtdev)
 			if (skb == NULL)
 				break;
 
-			mapping = pci_map_single(tp->pdev, skb->tail, PKT_BUF_SZ,
-						 PCI_DMA_FROMDEVICE);
+			mapping = dma_map_single(&tp->pdev->dev, skb->tail,
+						 PKT_BUF_SZ, DMA_FROM_DEVICE);
 			tp->rx_buffers[entry].mapping = mapping;
 
 			tp->rx_ring[entry].buffer1 = cpu_to_le32(mapping);
@@ -168,8 +168,9 @@ static int tulip_rx(/*RTnet*/struct rtnet_device *rtdev, nanosecs_abs_t *time_st
 				}
 #endif
 
-				pci_unmap_single(tp->pdev, tp->rx_buffers[entry].mapping,
-						 PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
+				dma_unmap_single(&tp->pdev->dev,
+						 tp->rx_buffers[entry].mapping,
+						 PKT_BUF_SZ, DMA_FROM_DEVICE);
 
 				tp->rx_buffers[entry].skb = NULL;
 				tp->rx_buffers[entry].mapping = 0;
@@ -247,10 +248,10 @@ int tulip_interrupt(rtdm_irq_t *irq_handle)
 				if (tp->tx_buffers[entry].skb == NULL) {
 					/* test because dummy frames not mapped */
 					if (tp->tx_buffers[entry].mapping)
-						pci_unmap_single(tp->pdev,
+						dma_unmap_single(&tp->pdev->dev,
 							 tp->tx_buffers[entry].mapping,
 							 sizeof(tp->setup_frame),
-							 PCI_DMA_TODEVICE);
+							 DMA_TO_DEVICE);
 					continue;
 				}
 
@@ -275,9 +276,10 @@ int tulip_interrupt(rtdm_irq_t *irq_handle)
 					tp->stats.tx_packets++;
 				}
 
-				pci_unmap_single(tp->pdev, tp->tx_buffers[entry].mapping,
+				dma_unmap_single(&tp->pdev->dev,
+						 tp->tx_buffers[entry].mapping,
 						 tp->tx_buffers[entry].skb->len,
-						 PCI_DMA_TODEVICE);
+						 DMA_TO_DEVICE);
 
 				/* Free the original skb. */
 				/*RTnet*/dev_kfree_rtskb(tp->tx_buffers[entry].skb);
diff --git a/kernel/drivers/net/drivers/tulip/tulip_core.c b/kernel/drivers/net/drivers/tulip/tulip_core.c
index f5e7b3e9d3..3d0b3dba68 100644
--- a/kernel/drivers/net/drivers/tulip/tulip_core.c
+++ b/kernel/drivers/net/drivers/tulip/tulip_core.c
@@ -333,9 +333,9 @@ static void tulip_up(/*RTnet*/struct rtnet_device *rtdev)
 		*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 		*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 
-		mapping = pci_map_single(tp->pdev, tp->setup_frame,
+		mapping = dma_map_single(&tp->pdev->dev, tp->setup_frame,
 					 sizeof(tp->setup_frame),
-					 PCI_DMA_TODEVICE);
+					 DMA_TO_DEVICE);
 		tp->tx_buffers[tp->cur_tx].skb = NULL;
 		tp->tx_buffers[tp->cur_tx].mapping = mapping;
 
@@ -537,7 +537,8 @@ static void tulip_init_ring(/*RTnet*/struct rtnet_device *rtdev)
 		tp->rx_buffers[i].skb = skb;
 		if (skb == NULL)
 			break;
-		mapping = pci_map_single(tp->pdev, skb->tail, PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
+		mapping = dma_map_single(&tp->pdev->dev, skb->tail, PKT_BUF_SZ,
+					 DMA_FROM_DEVICE);
 		tp->rx_buffers[i].mapping = mapping;
 		tp->rx_ring[i].status = cpu_to_le32(DescOwned);	/* Owned by Tulip chip */
 		tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
@@ -582,7 +583,8 @@ tulip_start_xmit(struct /*RTnet*/rtskb *skb, /*RTnet*/struct rtnet_device *rtdev
 	entry = tp->cur_tx % TX_RING_SIZE;
 
 	tp->tx_buffers[entry].skb = skb;
-	mapping = pci_map_single(tp->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
+	mapping = dma_map_single(&tp->pdev->dev, skb->data, skb->len,
+				 DMA_TO_DEVICE);
 	tp->tx_buffers[entry].mapping = mapping;
 	tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
 
@@ -642,16 +644,16 @@ static void tulip_clean_tx_ring(struct tulip_private *tp)
 		if (tp->tx_buffers[entry].skb == NULL) {
 			/* test because dummy frames not mapped */
 			if (tp->tx_buffers[entry].mapping)
-				pci_unmap_single(tp->pdev,
+				dma_unmap_single(&tp->pdev->dev,
 					tp->tx_buffers[entry].mapping,
 					sizeof(tp->setup_frame),
-					PCI_DMA_TODEVICE);
+					DMA_TO_DEVICE);
 			continue;
 		}
 
-		pci_unmap_single(tp->pdev, tp->tx_buffers[entry].mapping,
+		dma_unmap_single(&tp->pdev->dev, tp->tx_buffers[entry].mapping,
 				tp->tx_buffers[entry].skb->len,
-				PCI_DMA_TODEVICE);
+				DMA_TO_DEVICE);
 
 		/* Free the original skb. */
 		/*RTnet*/dev_kfree_rtskb(tp->tx_buffers[entry].skb);
@@ -731,8 +733,8 @@ static int tulip_close (/*RTnet*/struct rtnet_device *rtdev)
 		tp->rx_ring[i].length = 0;
 		tp->rx_ring[i].buffer1 = 0xBADF00D0;	/* An invalid address. */
 		if (skb) {
-			pci_unmap_single(tp->pdev, mapping, PKT_BUF_SZ,
-					 PCI_DMA_FROMDEVICE);
+			dma_unmap_single(&tp->pdev->dev, mapping, PKT_BUF_SZ,
+					 DMA_FROM_DEVICE);
 			/*RTnet*/dev_kfree_rtskb (skb);
 		}
 	}
@@ -740,8 +742,9 @@ static int tulip_close (/*RTnet*/struct rtnet_device *rtdev)
 		struct /*RTnet*/rtskb *skb = tp->tx_buffers[i].skb;
 
 		if (skb != NULL) {
-			pci_unmap_single(tp->pdev, tp->tx_buffers[i].mapping,
-					 skb->len, PCI_DMA_TODEVICE);
+			dma_unmap_single(&tp->pdev->dev,
+					 tp->tx_buffers[i].mapping,
+					 skb->len, DMA_TO_DEVICE);
 			/*RTnet*/dev_kfree_rtskb (skb);
 		}
 		tp->tx_buffers[i].skb = NULL;
diff --git a/kernel/drivers/net/drivers/via-rhine.c b/kernel/drivers/net/drivers/via-rhine.c
index fc867cf736..192f02eb6f 100644
--- a/kernel/drivers/net/drivers/via-rhine.c
+++ b/kernel/drivers/net/drivers/via-rhine.c
@@ -985,8 +985,8 @@ static void alloc_rbufs(struct rtnet_device *dev) /*** RTnet ***/
 		if (skb == NULL)
 			break;
 		np->rx_skbuff_dma[i] =
-			pci_map_single(np->pdev, skb->tail, np->rx_buf_sz,
-						   PCI_DMA_FROMDEVICE);
+			dma_map_single(&np->pdev->dev, skb->tail, np->rx_buf_sz,
+				       DMA_FROM_DEVICE);
 
 		np->rx_ring[i].addr = cpu_to_le32(np->rx_skbuff_dma[i]);
 		np->rx_ring[i].rx_status = cpu_to_le32(DescOwn);
@@ -1004,9 +1004,8 @@ static void free_rbufs(struct rtnet_device* dev) /*** RTnet ***/
 		np->rx_ring[i].rx_status = 0;
 		np->rx_ring[i].addr = cpu_to_le32(0xBADF00D0); /* An invalid address. */
 		if (np->rx_skbuff[i]) {
-			pci_unmap_single(np->pdev,
-							 np->rx_skbuff_dma[i],
-							 np->rx_buf_sz, PCI_DMA_FROMDEVICE);
+			dma_unmap_single(&np->pdev->dev, np->rx_skbuff_dma[i],
+					 np->rx_buf_sz, DMA_FROM_DEVICE);
 			dev_kfree_rtskb(np->rx_skbuff[i]); /*** RTnet ***/
 		}
 		np->rx_skbuff[i] = 0;
@@ -1044,9 +1043,10 @@ static void free_tbufs(struct rtnet_device* dev) /*** RTnet ***/
 		np->tx_ring[i].addr = cpu_to_le32(0xBADF00D0); /* An invalid address. */
 		if (np->tx_skbuff[i]) {
 			if (np->tx_skbuff_dma[i]) {
-				pci_unmap_single(np->pdev,
-								 np->tx_skbuff_dma[i],
-								 np->tx_skbuff[i]->len, PCI_DMA_TODEVICE);
+				dma_unmap_single(&np->pdev->dev,
+						 np->tx_skbuff_dma[i],
+						 np->tx_skbuff[i]->len,
+						 DMA_TO_DEVICE);
 			}
 			dev_kfree_rtskb(np->tx_skbuff[i]); /*** RTnet ***/
 		}
@@ -1282,7 +1282,8 @@ static int via_rhine_start_tx(struct rtskb *skb, struct rtnet_device *dev) /***
 										  (np->tx_buf[entry] - np->tx_bufs));
 	} else {
 		np->tx_skbuff_dma[entry] =
-			pci_map_single(np->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
+			dma_map_single(&np->pdev->dev, skb->data, skb->len,
+				       DMA_TO_DEVICE);
 		np->tx_ring[entry].addr = cpu_to_le32(np->tx_skbuff_dma[entry]);
 
 /*** RTnet ***/
@@ -1445,9 +1446,10 @@ static void via_rhine_tx(struct rtnet_device *dev) /*** RTnet ***/
 		}
 		/* Free the original skb. */
 		if (np->tx_skbuff_dma[entry]) {
-			pci_unmap_single(np->pdev,
-							 np->tx_skbuff_dma[entry],
-							 np->tx_skbuff[entry]->len, PCI_DMA_TODEVICE);
+			dma_unmap_single(&np->pdev->dev,
+					 np->tx_skbuff_dma[entry],
+					 np->tx_skbuff[entry]->len,
+					 DMA_TO_DEVICE);
 		}
 		dev_kfree_rtskb(np->tx_skbuff[entry]); /*** RTnet ***/
 		np->tx_skbuff[entry] = NULL;
@@ -1522,8 +1524,10 @@ static void via_rhine_rx(struct rtnet_device *dev, nanosecs_abs_t *time_stamp) /
 				}
 				np->rx_skbuff[entry] = NULL;
 				rtskb_put(skb, pkt_len); /*** RTnet ***/
-				pci_unmap_single(np->pdev, np->rx_skbuff_dma[entry],
-								 np->rx_buf_sz, PCI_DMA_FROMDEVICE);
+				dma_unmap_single(&np->pdev->dev,
+						 np->rx_skbuff_dma[entry],
+						 np->rx_buf_sz,
+						 DMA_FROM_DEVICE);
 			}
 /*** RTnet ***/
 			skb->protocol = rt_eth_type_trans(skb, dev);
@@ -1548,8 +1552,8 @@ static void via_rhine_rx(struct rtnet_device *dev, nanosecs_abs_t *time_stamp) /
 			if (skb == NULL)
 				break;			/* Better luck next round. */
 			np->rx_skbuff_dma[entry] =
-				pci_map_single(np->pdev, skb->tail, np->rx_buf_sz,
-							   PCI_DMA_FROMDEVICE);
+				dma_map_single(&np->pdev->dev, skb->tail,
+					       np->rx_buf_sz, DMA_FROM_DEVICE);
 			np->rx_ring[entry].addr = cpu_to_le32(np->rx_skbuff_dma[entry]);
 		}
 		np->rx_ring[entry].rx_status = cpu_to_le32(DescOwn);
-- 
2.35.3


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

* [PATCH 09/15] drivers: Convert pci_dma_sync_single_for_cpu/device to DMA API
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (7 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 08/15] drivers: Convert pci_map/unmap_single/page " Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 10/15] cobalt: Resolve cast-function-type warnings Jan Kiszka
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

The legacy API has been finally dropped, and the new one was "already"
available with 5.10.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/net/drivers/eepro100.c | 26 ++++++++++++++------------
 kernel/drivers/net/drivers/r8169.c    | 10 +++++-----
 2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/kernel/drivers/net/drivers/eepro100.c b/kernel/drivers/net/drivers/eepro100.c
index 74385d61d2..1985befe7b 100644
--- a/kernel/drivers/net/drivers/eepro100.c
+++ b/kernel/drivers/net/drivers/eepro100.c
@@ -1076,8 +1076,9 @@ speedo_init_rx_ring(struct rtnet_device *rtdev)
 		rtskb_reserve(skb, sizeof(struct RxFD));
 		if (last_rxf) {
 			last_rxf->link = cpu_to_le32(sp->rx_ring_dma[i]);
-			pci_dma_sync_single_for_device(sp->pdev, last_rxf_dma,
-					sizeof(struct RxFD), PCI_DMA_TODEVICE);
+			dma_sync_single_for_device(&sp->pdev->dev, last_rxf_dma,
+						   sizeof(struct RxFD),
+						   DMA_TO_DEVICE);
 		}
 		last_rxf = rxf;
 		last_rxf_dma = sp->rx_ring_dma[i];
@@ -1086,14 +1087,15 @@ speedo_init_rx_ring(struct rtnet_device *rtdev)
 		/* This field unused by i82557. */
 		rxf->rx_buf_addr = 0xffffffff;
 		rxf->count = cpu_to_le32(PKT_BUF_SZ << 16);
-		pci_dma_sync_single_for_device(sp->pdev, sp->rx_ring_dma[i],
-				sizeof(struct RxFD), PCI_DMA_TODEVICE);
+		dma_sync_single_for_device(&sp->pdev->dev, sp->rx_ring_dma[i],
+					   sizeof(struct RxFD), DMA_TO_DEVICE);
 	}
 	sp->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
 	/* Mark the last entry as end-of-list. */
 	last_rxf->status = cpu_to_le32(0xC0000002);	/* '2' is flag value only. */
-	pci_dma_sync_single_for_device(sp->pdev, sp->rx_ring_dma[RX_RING_SIZE-1],
-			sizeof(struct RxFD), PCI_DMA_TODEVICE);
+	dma_sync_single_for_device(&sp->pdev->dev,
+				   sp->rx_ring_dma[RX_RING_SIZE-1],
+				   sizeof(struct RxFD), DMA_TO_DEVICE);
 	sp->last_rxf = last_rxf;
 	sp->last_rxf_dma = last_rxf_dma;
 }
@@ -1400,8 +1402,8 @@ static inline struct RxFD *speedo_rx_alloc(struct rtnet_device *rtdev, int entry
 			       DMA_FROM_DEVICE);
 	rtskb_reserve(skb, sizeof(struct RxFD));
 	rxf->rx_buf_addr = 0xffffffff;
-	pci_dma_sync_single_for_device(sp->pdev, sp->rx_ring_dma[entry],
-			sizeof(struct RxFD), PCI_DMA_TODEVICE);
+	dma_sync_single_for_device(&sp->pdev->dev, sp->rx_ring_dma[entry],
+				   sizeof(struct RxFD), DMA_TO_DEVICE);
 	return rxf;
 }
 
@@ -1414,8 +1416,8 @@ static inline void speedo_rx_link(struct rtnet_device *rtdev, int entry,
 	rxf->count = cpu_to_le32(PKT_BUF_SZ << 16);
 	sp->last_rxf->link = cpu_to_le32(rxf_dma);
 	sp->last_rxf->status &= cpu_to_le32(~0xC0000000);
-	pci_dma_sync_single_for_device(sp->pdev, sp->last_rxf_dma,
-			sizeof(struct RxFD), PCI_DMA_TODEVICE);
+	dma_sync_single_for_device(&sp->pdev->dev, sp->last_rxf_dma,
+				   sizeof(struct RxFD), DMA_TO_DEVICE);
 	sp->last_rxf = rxf;
 	sp->last_rxf_dma = rxf_dma;
 }
@@ -1487,8 +1489,8 @@ speedo_rx(struct rtnet_device *rtdev, int* packets, nanosecs_abs_t *time_stamp)
 		int status;
 		int pkt_len;
 
-		pci_dma_sync_single_for_cpu(sp->pdev, sp->rx_ring_dma[entry],
-			sizeof(struct RxFD), PCI_DMA_FROMDEVICE);
+		dma_sync_single_for_cpu(&sp->pdev->dev, sp->rx_ring_dma[entry],
+					sizeof(struct RxFD), DMA_FROM_DEVICE);
 		status = le32_to_cpu(sp->rx_ringp[entry]->status);
 		pkt_len = le32_to_cpu(sp->rx_ringp[entry]->count) & 0x3fff;
 
diff --git a/kernel/drivers/net/drivers/r8169.c b/kernel/drivers/net/drivers/r8169.c
index 498b998188..7f280dd765 100644
--- a/kernel/drivers/net/drivers/r8169.c
+++ b/kernel/drivers/net/drivers/r8169.c
@@ -1310,7 +1310,7 @@ static void rtl8169_init_ring (struct rtnet_device *rtdev)
 			}
 		}//-----------------------------------------------------------------------
 		priv->rxdesc_array_dma_addr[i] = dma_map_single(&pdev->dev, &priv->RxDescArray[i], sizeof(struct RxDesc), DMA_TO_DEVICE);
-		pci_dma_sync_single_for_device(pdev, priv->rxdesc_array_dma_addr[i], sizeof(struct RxDesc), PCI_DMA_TODEVICE);
+		dma_sync_single_for_device(&pdev->dev, priv->rxdesc_array_dma_addr[i], sizeof(struct RxDesc), DMA_TO_DEVICE);
 	}
 }
 
@@ -1444,7 +1444,7 @@ static int rtl8169_start_xmit (struct rtskb *skb, struct rtnet_device *rtdev)
 		}
 		priv->TxDescArray[entry].status = cpu_to_le32(status);
 
-		pci_dma_sync_single_for_device(pdev, priv->txdesc_array_dma_addr[entry], sizeof(struct TxDesc), PCI_DMA_TODEVICE);
+		dma_sync_single_for_device(&pdev->dev, priv->txdesc_array_dma_addr[entry], sizeof(struct TxDesc), DMA_TO_DEVICE);
 
 		RTL_W8 ( TxPoll, 0x40);		//set polling bit
 
@@ -1554,7 +1554,7 @@ static void rtl8169_rx_interrupt (struct rtnet_device *rtdev, struct rtl8169_pri
 	cur_rx = priv->cur_rx;
 
 	rxdesc = &priv->RxDescArray[cur_rx];
-	pci_dma_sync_single_for_cpu(pdev, priv->rxdesc_array_dma_addr[cur_rx], sizeof(struct RxDesc), PCI_DMA_FROMDEVICE);
+	dma_sync_single_for_cpu(&pdev->dev, priv->rxdesc_array_dma_addr[cur_rx], sizeof(struct RxDesc), DMA_FROM_DEVICE);
 
 	while ( ((le32_to_cpu(rxdesc->status) & OWNbit)== 0) && (rxdesc_cnt < max_interrupt_work) ){
 
@@ -1589,7 +1589,7 @@ static void rtl8169_rx_interrupt (struct rtnet_device *rtdev, struct rtl8169_pri
 
 					// Indicate rx_skb
 					if( rx_skb != NULL ){
-						pci_dma_sync_single_for_cpu(pdev, priv->rx_skbuff_dma_addr[cur_rx], sizeof(struct RxDesc), PCI_DMA_FROMDEVICE);
+						dma_sync_single_for_cpu(&pdev->dev, priv->rx_skbuff_dma_addr[cur_rx], sizeof(struct RxDesc), DMA_FROM_DEVICE);
 
 						rtskb_put ( rx_skb, pkt_size );
 						rx_skb->protocol = rt_eth_type_trans ( rx_skb, rtdev );
@@ -1639,7 +1639,7 @@ static void rtl8169_rx_interrupt (struct rtnet_device *rtdev, struct rtl8169_pri
 
 	    cur_rx = (cur_rx +1) % NUM_RX_DESC;
 	    rxdesc = &priv->RxDescArray[cur_rx];
-	    pci_dma_sync_single_for_cpu(pdev, priv->rxdesc_array_dma_addr[cur_rx], sizeof(struct RxDesc), PCI_DMA_FROMDEVICE);
+	    dma_sync_single_for_cpu(&pdev->dev, priv->rxdesc_array_dma_addr[cur_rx], sizeof(struct RxDesc), DMA_FROM_DEVICE);
 
 	}// end of while ( (priv->RxDescArray[cur_rx].status & 0x80000000)== 0)
 
-- 
2.35.3


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

* [PATCH 10/15] cobalt: Resolve cast-function-type warnings
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (8 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 09/15] drivers: Convert pci_dma_sync_single_for_cpu/device " Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 11/15] drivers/net/experimental/e1000: Use fallthrough Jan Kiszka
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Latest kernel with around gcc-10 starts to complain about the type casts
done for error stubs, syscall handlers and nomac_dev_openclose. Those
casts remain fine, so suppress them by casting to the special
"void (*)(void)" type first.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/arch/x86/include/asm/xenomai/syscall32.h |  3 ++-
 kernel/cobalt/posix/syscall.c                          |  3 ++-
 kernel/cobalt/rtdm/device.c                            | 10 ++++++----
 kernel/cobalt/rtdm/fd.c                                |  2 +-
 kernel/drivers/net/stack/rtmac/nomac/nomac_dev.c       |  4 ++--
 5 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/kernel/cobalt/arch/x86/include/asm/xenomai/syscall32.h b/kernel/cobalt/arch/x86/include/asm/xenomai/syscall32.h
index a0395e1872..f023de354d 100644
--- a/kernel/cobalt/arch/x86/include/asm/xenomai/syscall32.h
+++ b/kernel/cobalt/arch/x86/include/asm/xenomai/syscall32.h
@@ -40,7 +40,8 @@
 #error "__NR_COBALT_SYSCALLS > __COBALT_IA32_BASE"
 #endif
 
-#define __syshand32emu__(__name)	((cobalt_syshand)(CoBaLt32emu_ ## __name))
+#define __syshand32emu__(__name)	\
+	((cobalt_syshand)(void (*)(void))(CoBaLt32emu_ ## __name))
 
 #define __COBALT_CALL32emu_INITHAND(__handler)	\
 	[__COBALT_IA32_BASE ... __COBALT_IA32_BASE + __NR_COBALT_SYSCALLS-1] = __handler,
diff --git a/kernel/cobalt/posix/syscall.c b/kernel/cobalt/posix/syscall.c
index cd72b22d14..46c4998e4c 100644
--- a/kernel/cobalt/posix/syscall.c
+++ b/kernel/cobalt/posix/syscall.c
@@ -426,7 +426,8 @@ static int CoBaLt_ni(void)
  *
  * --rpm
  */
-#define __syshand__(__name)	((cobalt_syshand)(CoBaLt_ ## __name))
+#define __syshand__(__name)	\
+	((cobalt_syshand)(void (*)(void))(CoBaLt_ ## __name))
 
 #define __COBALT_NI	__syshand__(ni)
 
diff --git a/kernel/cobalt/rtdm/device.c b/kernel/cobalt/rtdm/device.c
index 736e82da7d..12155157a6 100644
--- a/kernel/cobalt/rtdm/device.c
+++ b/kernel/cobalt/rtdm/device.c
@@ -412,10 +412,12 @@ int rtdm_dev_register(struct rtdm_device *dev)
 	}
 
 	dev->ops = drv->ops;
-	if (drv->device_flags & RTDM_NAMED_DEVICE)
-		dev->ops.socket = (typeof(dev->ops.socket))enosys;
-	else
-		dev->ops.open = (typeof(dev->ops.open))enosys;
+	if (drv->device_flags & RTDM_NAMED_DEVICE) {
+		dev->ops.socket =
+			(typeof(dev->ops.socket))(void (*)(void))enosys;
+	} else {
+		dev->ops.open = (typeof(dev->ops.open))(void (*)(void))enosys;
+	}
 
 	INIT_LIST_HEAD(&dev->openfd_list);
 	init_waitqueue_head(&dev->putwq);
diff --git a/kernel/cobalt/rtdm/fd.c b/kernel/cobalt/rtdm/fd.c
index 3c26534f39..ed2e135780 100644
--- a/kernel/cobalt/rtdm/fd.c
+++ b/kernel/cobalt/rtdm/fd.c
@@ -89,7 +89,7 @@ static struct rtdm_fd *fetch_fd(struct cobalt_ppd *p, int ufd)
 
 #define assign_invalid_handler(__handler, __invalid)			\
 	do								\
-		(__handler) = (typeof(__handler))__invalid;		\
+		(__handler) = (typeof(__handler))(void (*)(void))__invalid; \
 	while (0)
 
 /* Calling this handler should beget ENOSYS if not implemented. */
diff --git a/kernel/drivers/net/stack/rtmac/nomac/nomac_dev.c b/kernel/drivers/net/stack/rtmac/nomac/nomac_dev.c
index f75f5f8b73..572d893c05 100644
--- a/kernel/drivers/net/stack/rtmac/nomac/nomac_dev.c
+++ b/kernel/drivers/net/stack/rtmac/nomac/nomac_dev.c
@@ -59,11 +59,11 @@ static struct rtdm_driver
 			 .context_size = 0,
 			 .ops = {
 				 .open = (typeof(nomac_driver.ops.open))
-					 nomac_dev_openclose,
+					 (void (*)(void))nomac_dev_openclose,
 				 .ioctl_rt = nomac_dev_ioctl,
 				 .ioctl_nrt = nomac_dev_ioctl,
 				 .close = (typeof(nomac_driver.ops.close))
-					 nomac_dev_openclose,
+					 (void (*)(void))nomac_dev_openclose,
 			 } };
 
 int nomac_dev_init(struct rtnet_device *rtdev, struct nomac_priv *nomac)
-- 
2.35.3


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

* [PATCH 11/15] drivers/net/experimental/e1000: Use fallthrough
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (9 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 10/15] cobalt: Resolve cast-function-type warnings Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 12/15] drivers/spi: Convert to GPIO descriptor API Jan Kiszka
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/net/drivers/experimental/e1000/e1000_82540.c | 2 +-
 kernel/drivers/net/drivers/experimental/e1000/e1000_82571.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_82540.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_82540.c
index 5c4fec0cb9..6e6e1f085a 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_82540.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_82540.c
@@ -91,7 +91,7 @@ static s32 e1000_init_phy_params_82540(struct e1000_hw *hw)
 	case e1000_82546_rev_3:
 		if (phy->id == M88E1011_I_PHY_ID)
 			break;
-		/* Fall Through */
+		fallthrough;
 	default:
 		ret_val = -E1000_ERR_PHY;
 		goto out;
diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_82571.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_82571.c
index ab43f4990c..af32a34d04 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_82571.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_82571.c
@@ -200,7 +200,7 @@ static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
 			E1000_WRITE_REG(hw, E1000_EECD, eecd);
 			break;
 		}
-		/* Fall Through */
+		fallthrough;
 	default:
 		nvm->type	= e1000_nvm_eeprom_spi;
 		size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
-- 
2.35.3


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

* [PATCH 12/15] drivers/spi: Convert to GPIO descriptor API
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (10 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 11/15] drivers/net/experimental/e1000: Use fallthrough Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 13/15] drivers/spi: Switch to spi_controller API Jan Kiszka
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai; +Cc: Philippe Gerum

From: Jan Kiszka <jan.kiszka@siemens.com>

The legacy one has been retired, and the new one was already available
with 5.10.

CC: Philippe Gerum <rpm@xenomai.org>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/spi/spi-bcm2835.c | 21 +++++++++++----------
 kernel/drivers/spi/spi-device.c  | 22 +++++-----------------
 kernel/drivers/spi/spi-device.h  |  1 -
 kernel/drivers/spi/spi-master.c  |  7 ++++---
 4 files changed, 20 insertions(+), 31 deletions(-)

diff --git a/kernel/drivers/spi/spi-bcm2835.c b/kernel/drivers/spi/spi-bcm2835.c
index 5299cad7a9..b1ee22bf82 100644
--- a/kernel/drivers/spi/spi-bcm2835.c
+++ b/kernel/drivers/spi/spi-bcm2835.c
@@ -281,7 +281,7 @@ static int do_transfer_irq(struct rtdm_spi_remote_slave *slave)
 	 * change the behaviour with gpio-cs this does not happen, so
 	 * it is implemented only for this case.
 	 */
-	if (gpio_is_valid(slave->cs_gpio)) {
+	if (slave->cs_gpiod) {
 		/* Set dummy CS, ->chip_select() was not called. */
 		cs |= BCM2835_SPI_CS_CS_10 | BCM2835_SPI_CS_CS_01;
 		/* Enable SPI block, before filling FIFO. */
@@ -457,11 +457,12 @@ static int find_cs_gpio(struct spi_device *spi)
 	u32 pingroup_index, pin, pin_index;
 	struct device_node *pins;
 	struct gpio_chip *chip;
+	int cs_gpio = -ENOENT;
 	int ret;
 
-	if (gpio_is_valid(spi->cs_gpio)) {
+	if (spi->cs_gpiod) {
 		dev_info(&spi->dev, "using GPIO%i for CS%d\n",
-			 spi->cs_gpio, spi->chip_select);
+			 desc_to_gpio(spi->cs_gpiod), spi->chip_select);
 		return 0;
 	}
 
@@ -477,7 +478,7 @@ static int find_cs_gpio(struct spi_device *spi)
 			     (pin == 8 || pin == 36 || pin == 46)) ||
 			    (spi->chip_select == 1 &&
 			     (pin == 7 || pin == 35))) {
-				spi->cs_gpio = pin;
+				cs_gpio = pin;
 				break;
 			}
 		}
@@ -485,24 +486,24 @@ static int find_cs_gpio(struct spi_device *spi)
 	}
 
 	/* If that failed, assume GPIOs 7-11 are used */
-	if (!gpio_is_valid(spi->cs_gpio) ) {
+	if (!gpio_is_valid(cs_gpio)) {
 		chip = gpiochip_find("pinctrl-bcm2835", gpio_match_name);
 		if (chip == NULL)
 			return 0;
 
-		spi->cs_gpio = chip->base + 8 - spi->chip_select;
+		cs_gpio = chip->base + 8 - spi->chip_select;
 	}
 
 	dev_info(&spi->dev,
 		 "setting up native-CS%i as GPIO %i\n",
-		 spi->chip_select, spi->cs_gpio);
+		 spi->chip_select, cs_gpio);
 
-	ret = gpio_direction_output(spi->cs_gpio,
+	ret = gpio_direction_output(cs_gpio,
 			    (spi->mode & SPI_CS_HIGH) ? 0 : 1);
 	if (ret) {
 		dev_err(&spi->dev,
 			"could not set CS%i gpio %i as output: %i",
-			spi->chip_select, spi->cs_gpio, ret);
+			spi->chip_select, cs_gpio, ret);
 		return ret;
 	}
 
@@ -510,7 +511,7 @@ static int find_cs_gpio(struct spi_device *spi)
 	 * Force value on GPIO in case the pin controller does not
 	 * handle that properly when switching to output mode.
 	 */
-	gpio_set_value(spi->cs_gpio, (spi->mode & SPI_CS_HIGH) ? 0 : 1);
+	gpio_set_value(cs_gpio, (spi->mode & SPI_CS_HIGH) ? 0 : 1);
 
 	return 0;
 }
diff --git a/kernel/drivers/spi/spi-device.c b/kernel/drivers/spi/spi-device.c
index 71f30a6ef4..6e975fc798 100644
--- a/kernel/drivers/spi/spi-device.c
+++ b/kernel/drivers/spi/spi-device.c
@@ -49,21 +49,12 @@ int rtdm_spi_add_remote_slave(struct rtdm_spi_remote_slave *slave,
 	if (dev->label == NULL)
 		return -ENOMEM;
 
-	if (gpio_is_valid(spi->cs_gpio))
-		slave->cs_gpio = spi->cs_gpio;
+	if (spi->cs_gpiod)
+		slave->cs_gpiod = spi->cs_gpiod;
 	else {
-		slave->cs_gpio = -ENOENT;
-		if (kmaster->cs_gpios)
-			slave->cs_gpio = kmaster->cs_gpios[spi->chip_select];
-	}
-
-	if (gpio_is_valid(slave->cs_gpio)) {
-		ret = gpio_request(slave->cs_gpio, dev->label);
-		if (ret)
-			goto fail;
-		slave->cs_gpiod = gpio_to_desc(slave->cs_gpio);
-		if (slave->cs_gpiod == NULL)
-			goto fail;
+		slave->cs_gpiod = NULL;
+		if (kmaster->cs_gpiods)
+			slave->cs_gpiod = kmaster->cs_gpiods[spi->chip_select];
 	}
 	
 	mutex_init(&slave->ctl_lock);
@@ -90,9 +81,6 @@ void rtdm_spi_remove_remote_slave(struct rtdm_spi_remote_slave *slave)
 	struct rtdm_spi_master *master = slave->master;
 	struct rtdm_device *dev;
 	rtdm_lockctx_t c;
-	
-	if (gpio_is_valid(slave->cs_gpio))
-		gpio_free(slave->cs_gpio);
 
 	mutex_destroy(&slave->ctl_lock);
 	rtdm_lock_get_irqsave(&master->lock, c);
diff --git a/kernel/drivers/spi/spi-device.h b/kernel/drivers/spi/spi-device.h
index ee43c38e38..305dec3414 100644
--- a/kernel/drivers/spi/spi-device.h
+++ b/kernel/drivers/spi/spi-device.h
@@ -29,7 +29,6 @@ struct rtdm_spi_master;
 
 struct rtdm_spi_remote_slave {
 	u8 chip_select;
-	int cs_gpio;
 	struct gpio_desc *cs_gpiod;
 	struct rtdm_device dev;
 	struct list_head next;
diff --git a/kernel/drivers/spi/spi-master.c b/kernel/drivers/spi/spi-master.c
index 0fad328ef7..215b4bcc94 100644
--- a/kernel/drivers/spi/spi-master.c
+++ b/kernel/drivers/spi/spi-master.c
@@ -112,7 +112,7 @@ static int do_chip_select(struct rtdm_spi_remote_slave *slave)
 	rtdm_lock_get_irqsave(&master->lock, c);
 	
 	if (master->cs != slave) {
-		if (gpio_is_valid(slave->cs_gpio)) {
+		if (slave->cs_gpiod) {
 			state = !!(slave->config.mode & SPI_CS_HIGH);
 			gpiod_set_raw_value(slave->cs_gpiod, state);
 		} else
@@ -133,7 +133,7 @@ static void do_chip_deselect(struct rtdm_spi_remote_slave *slave)
 
 	rtdm_lock_get_irqsave(&master->lock, c);
 
-	if (gpio_is_valid(slave->cs_gpio)) {
+	if (slave->cs_gpiod) {
 		state = !(slave->config.mode & SPI_CS_HIGH);
 		gpiod_set_raw_value(slave->cs_gpiod, state);
 	} else
@@ -354,7 +354,8 @@ __rtdm_spi_alloc_master(struct device *dev, size_t size, int off)
 	kmaster = spi_alloc_master(dev, size);
 	if (kmaster == NULL)
 		return NULL;
-	
+
+	master->use_gpio_descriptors = true;
 	master = (void *)(kmaster + 1) + off;
 	master->kmaster = kmaster;
 	spi_master_set_devdata(kmaster, master);
-- 
2.35.3


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

* [PATCH 13/15] drivers/spi: Switch to spi_controller API
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (11 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 12/15] drivers/spi: Convert to GPIO descriptor API Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 14/15] drivers/spi: Account for dropped return value of spi_driver.remove Jan Kiszka
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

The kernel generalized spi_master to spi_controller and renamed several
services. Follow this to avoid breakage when the legacy wrappers are
eventually removed. Should come without functional changes.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/spi/spi-bcm2835.c        | 20 ++++++++++----------
 kernel/drivers/spi/spi-device.c         | 10 +++++-----
 kernel/drivers/spi/spi-master.c         | 24 ++++++++++++------------
 kernel/drivers/spi/spi-master.h         |  2 +-
 kernel/drivers/spi/spi-omap2-mcspi-rt.c | 20 ++++++++++----------
 kernel/drivers/spi/spi-sun6i.c          | 24 ++++++++++++------------
 6 files changed, 50 insertions(+), 50 deletions(-)

diff --git a/kernel/drivers/spi/spi-bcm2835.c b/kernel/drivers/spi/spi-bcm2835.c
index b1ee22bf82..e8df8fe7e0 100644
--- a/kernel/drivers/spi/spi-bcm2835.c
+++ b/kernel/drivers/spi/spi-bcm2835.c
@@ -111,7 +111,7 @@ to_master_bcm2835(struct rtdm_spi_remote_slave *slave)
 static inline struct device *
 master_to_kdev(struct rtdm_spi_master *master)
 {
-	return &master->kmaster->dev;
+	return &master->controller->dev;
 }
 
 static inline u32 bcm2835_rd(struct spi_master_bcm2835 *spim,
@@ -453,7 +453,7 @@ static int gpio_match_name(struct gpio_chip *chip, void *data)
 
 static int find_cs_gpio(struct spi_device *spi)
 {
-	struct spi_master *kmaster = spi->master;
+	struct spi_controller *ctlr = spi->controller;
 	u32 pingroup_index, pin, pin_index;
 	struct device_node *pins;
 	struct gpio_chip *chip;
@@ -469,7 +469,7 @@ static int find_cs_gpio(struct spi_device *spi)
 	/* Translate native CS to GPIO. */
 
 	for (pingroup_index = 0;
-	     (pins = of_parse_phandle(kmaster->dev.of_node,
+	     (pins = of_parse_phandle(ctlr->dev.of_node,
 		     "pinctrl-0", pingroup_index)) != 0; pingroup_index++) {
 		for (pin_index = 0;
 		     of_property_read_u32_index(pins, "brcm,pins",
@@ -579,7 +579,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
 {
 	struct spi_master_bcm2835 *spim;
 	struct rtdm_spi_master *master;
-	struct spi_master *kmaster;
+	struct spi_controller *ctlr;
 	struct resource *r;
 	int ret, irq;
 
@@ -594,11 +594,11 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
 	master->ops = &bcm2835_master_ops;
 	platform_set_drvdata(pdev, master);
 
-	kmaster = master->kmaster;
-	kmaster->mode_bits = BCM2835_SPI_MODE_BITS;
-	kmaster->bits_per_word_mask = SPI_BPW_MASK(8);
-	kmaster->num_chipselect = 2;
-	kmaster->dev.of_node = pdev->dev.of_node;
+	ctlr = master->controller;
+	ctlr->mode_bits = BCM2835_SPI_MODE_BITS;
+	ctlr->bits_per_word_mask = SPI_BPW_MASK(8);
+	ctlr->num_chipselect = 2;
+	ctlr->dev.of_node = pdev->dev.of_node;
 
 	spim = container_of(master, struct spi_master_bcm2835, master);
 	rtdm_event_init(&spim->transfer_done, 0);
@@ -652,7 +652,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
 fail_unclk:
 	clk_disable_unprepare(spim->clk);
 fail:
-	spi_master_put(kmaster);
+	spi_controller_put(ctlr);
 
 	return ret;
 }
diff --git a/kernel/drivers/spi/spi-device.c b/kernel/drivers/spi/spi-device.c
index 6e975fc798..397af0f33d 100644
--- a/kernel/drivers/spi/spi-device.c
+++ b/kernel/drivers/spi/spi-device.c
@@ -29,7 +29,7 @@ int rtdm_spi_add_remote_slave(struct rtdm_spi_remote_slave *slave,
 			      struct rtdm_spi_master *master,
 			      struct spi_device *spi)
 {
-	struct spi_master *kmaster = master->kmaster;
+	struct spi_controller *ctlr = master->controller;
 	struct rtdm_device *dev;
 	rtdm_lockctx_t c;
 	int ret;
@@ -44,8 +44,8 @@ int rtdm_spi_add_remote_slave(struct rtdm_spi_remote_slave *slave,
 	dev = &slave->dev;
 	dev->driver = &master->driver;
 	dev->label = kasprintf(GFP_KERNEL, "%s/slave%d.%%d",
-			       dev_name(&kmaster->dev),
-			       kmaster->bus_num);
+			       dev_name(&ctlr->dev),
+			       ctlr->bus_num);
 	if (dev->label == NULL)
 		return -ENOMEM;
 
@@ -53,8 +53,8 @@ int rtdm_spi_add_remote_slave(struct rtdm_spi_remote_slave *slave,
 		slave->cs_gpiod = spi->cs_gpiod;
 	else {
 		slave->cs_gpiod = NULL;
-		if (kmaster->cs_gpiods)
-			slave->cs_gpiod = kmaster->cs_gpiods[spi->chip_select];
+		if (ctlr->cs_gpiods)
+			slave->cs_gpiod = ctlr->cs_gpiods[spi->chip_select];
 	}
 	
 	mutex_init(&slave->ctl_lock);
diff --git a/kernel/drivers/spi/spi-master.c b/kernel/drivers/spi/spi-master.c
index 215b4bcc94..cffeaf087d 100644
--- a/kernel/drivers/spi/spi-master.c
+++ b/kernel/drivers/spi/spi-master.c
@@ -349,16 +349,16 @@ struct rtdm_spi_master *
 __rtdm_spi_alloc_master(struct device *dev, size_t size, int off)
 {
 	struct rtdm_spi_master *master;
-	struct spi_master *kmaster;
+	struct spi_controller *ctlr;
 
-	kmaster = spi_alloc_master(dev, size);
-	if (kmaster == NULL)
+	ctlr = spi_alloc_master(dev, size);
+	if (ctlr == NULL)
 		return NULL;
 
-	master->use_gpio_descriptors = true;
-	master = (void *)(kmaster + 1) + off;
-	master->kmaster = kmaster;
-	spi_master_set_devdata(kmaster, master);
+	ctlr->use_gpio_descriptors = true;
+	master = (void *)(ctlr + 1) + off;
+	master->controller = ctlr;
+	spi_master_set_devdata(ctlr, master);
 
 	return master;
 }
@@ -367,7 +367,7 @@ EXPORT_SYMBOL_GPL(__rtdm_spi_alloc_master);
 int __rtdm_spi_setup_driver(struct rtdm_spi_master *master)
 {
 	master->classname = kstrdup(
-		dev_name(&master->kmaster->dev), GFP_KERNEL);
+		dev_name(&master->controller->dev), GFP_KERNEL);
 	master->devclass = class_create(THIS_MODULE,
 		master->classname);
 	if (IS_ERR(master->devclass)) {
@@ -416,20 +416,20 @@ static int spi_transfer_one_unimp(struct spi_master *master,
 
 int rtdm_spi_add_master(struct rtdm_spi_master *master)
 {
-	struct spi_master *kmaster = master->kmaster;
+	struct spi_controller *ctlr = master->controller;
 
 	/*
 	 * Prevent the transfer handler to be called from the regular
 	 * SPI stack, just in case.
 	 */
-	kmaster->transfer_one = spi_transfer_one_unimp;
+	ctlr->transfer_one = spi_transfer_one_unimp;
 	master->devclass = NULL;
 
 	/*
 	 * Add the core SPI driver, devices on the bus will be
 	 * enumerated, handed to spi_device_probe().
 	 */
-	return spi_register_master(kmaster);
+	return spi_register_controller(ctlr);
 }
 EXPORT_SYMBOL_GPL(rtdm_spi_add_master);
 
@@ -439,7 +439,7 @@ void rtdm_spi_remove_master(struct rtdm_spi_master *master)
 	char *classname = master->classname;
 	
 	rtdm_mutex_destroy(&master->bus_lock);
-	spi_unregister_master(master->kmaster);
+	spi_unregister_controller(master->controller);
 	rtdm_drv_set_sysclass(&master->driver, NULL);
 	class_destroy(class);
 	kfree(classname);
diff --git a/kernel/drivers/spi/spi-master.h b/kernel/drivers/spi/spi-master.h
index ecfea2f902..449a6cc60b 100644
--- a/kernel/drivers/spi/spi-master.h
+++ b/kernel/drivers/spi/spi-master.h
@@ -53,7 +53,7 @@ struct rtdm_spi_master_ops {
 struct rtdm_spi_master {
 	int subclass;
 	const struct rtdm_spi_master_ops *ops;
-	struct spi_master *kmaster;
+	struct spi_controller *controller;
 	struct {	/* Internal */
 		struct rtdm_driver driver;
 		struct class *devclass;
diff --git a/kernel/drivers/spi/spi-omap2-mcspi-rt.c b/kernel/drivers/spi/spi-omap2-mcspi-rt.c
index 03678b9913..7918f61e7d 100644
--- a/kernel/drivers/spi/spi-omap2-mcspi-rt.c
+++ b/kernel/drivers/spi/spi-omap2-mcspi-rt.c
@@ -181,7 +181,7 @@ to_master_omap2_mcspi(struct rtdm_spi_remote_slave *slave)
 static inline struct device *
 master_to_kdev(struct rtdm_spi_master *master)
 {
-	return &master->kmaster->dev;
+	return &master->controller->dev;
 }
 
 static inline u32 mcspi_rd_reg(struct spi_master_omap2_mcspi *spim,
@@ -881,7 +881,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
 {
 	struct spi_master_omap2_mcspi *spim;
 	struct rtdm_spi_master *master;
-	struct spi_master *kmaster;
+	struct spi_controller *ctlr;
 	struct resource *r;
 	int ret, irq;
 	u32 regs_offset = 0;
@@ -912,21 +912,21 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
 	master->ops = &omap2_mcspi_master_ops;
 	platform_set_drvdata(pdev, master);
 
-	kmaster = master->kmaster;
+	ctlr = master->controller;
 	/* flags understood by this controller driver */
-	kmaster->mode_bits = OMAP2_MCSPI_SPI_MODE_BITS;
+	ctlr->mode_bits = OMAP2_MCSPI_SPI_MODE_BITS;
 	/* TODO: SPI_BPW_RANGE_MASK(4, 32); */
-	kmaster->bits_per_word_mask = SPI_BPW_MASK(8);
+	ctlr->bits_per_word_mask = SPI_BPW_MASK(8);
 	of_property_read_u32(pdev->dev.of_node, "ti,spi-num-cs", &num_cs);
-	kmaster->num_chipselect = num_cs;
+	ctlr->num_chipselect = num_cs;
 	if (of_get_property(pdev->dev.of_node,
 		"ti,pindir-d0-out-d1-in", NULL)) {
 		pin_dir = MCSPI_PINDIR_D0_OUT_D1_IN;
 	}
 
-	kmaster->max_speed_hz = OMAP2_MCSPI_MAX_FREQ;
-	kmaster->min_speed_hz = OMAP2_MCSPI_MAX_FREQ >> 15;
-	kmaster->dev.of_node = pdev->dev.of_node;
+	ctlr->max_speed_hz = OMAP2_MCSPI_MAX_FREQ;
+	ctlr->min_speed_hz = OMAP2_MCSPI_MAX_FREQ >> 15;
+	ctlr->dev.of_node = pdev->dev.of_node;
 
 	spim = container_of(master, struct spi_master_omap2_mcspi, master);
 	rtdm_event_init(&spim->transfer_done, 0);
@@ -987,7 +987,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
 
 fail_unclk:
 fail:
-	spi_master_put(kmaster);
+	spi_controller_put(ctlr);
 
 	return ret;
 }
diff --git a/kernel/drivers/spi/spi-sun6i.c b/kernel/drivers/spi/spi-sun6i.c
index 36a2cd4713..72a4abd0d7 100644
--- a/kernel/drivers/spi/spi-sun6i.c
+++ b/kernel/drivers/spi/spi-sun6i.c
@@ -150,7 +150,7 @@ to_master_sun6i(struct rtdm_spi_remote_slave *slave)
 static inline struct device *
 master_to_kdev(struct rtdm_spi_master *master)
 {
-	return &master->kmaster->dev;
+	return &master->controller->dev;
 }
 
 static inline u32 sun6i_rd(struct spi_master_sun6i *spim,
@@ -509,7 +509,7 @@ static int sun6i_spi_probe(struct platform_device *pdev)
 {
 	struct rtdm_spi_master *master;
 	struct spi_master_sun6i *spim;
-	struct spi_master *kmaster;
+	struct spi_controller *ctlr;
 	struct resource *r;
 	int ret, irq;
 	u32 clk_rate;
@@ -525,13 +525,13 @@ static int sun6i_spi_probe(struct platform_device *pdev)
 	master->ops = &sun6i_master_ops;
 	platform_set_drvdata(pdev, master);
 
-	kmaster = master->kmaster;
-	kmaster->max_speed_hz = 100 * 1000 * 1000;
-	kmaster->min_speed_hz = 3 * 1000;
-	kmaster->mode_bits = SUN6I_SPI_MODE_BITS;
-	kmaster->bits_per_word_mask = SPI_BPW_MASK(8);
-	kmaster->num_chipselect = 4;
-	kmaster->dev.of_node = pdev->dev.of_node;
+	ctlr = master->controller;
+	ctlr->max_speed_hz = 100 * 1000 * 1000;
+	ctlr->min_speed_hz = 3 * 1000;
+	ctlr->mode_bits = SUN6I_SPI_MODE_BITS;
+	ctlr->bits_per_word_mask = SPI_BPW_MASK(8);
+	ctlr->num_chipselect = 4;
+	ctlr->dev.of_node = pdev->dev.of_node;
 
 	spim = container_of(master, struct spi_master_sun6i, master);
 	spim->setup = of_device_get_match_data(&pdev->dev);
@@ -572,8 +572,8 @@ static int sun6i_spi_probe(struct platform_device *pdev)
 	 * the fastest transfers properly.
 	 */
 	clk_rate = clk_get_rate(spim->mclk);
-	if (clk_rate < 2 * kmaster->max_speed_hz)
-		clk_set_rate(spim->mclk, 2 * kmaster->max_speed_hz);
+	if (clk_rate < 2 * ctlr->max_speed_hz)
+		clk_set_rate(spim->mclk, 2 * ctlr->max_speed_hz);
 
 	spim->clk_hz = clk_get_rate(spim->mclk);
 
@@ -624,7 +624,7 @@ fail_unclk:
 	clk_disable_unprepare(spim->mclk);
 	clk_disable_unprepare(spim->hclk);
 fail:
-	spi_master_put(kmaster);
+	spi_controller_put(ctlr);
 
 	return ret;
 }
-- 
2.35.3


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

* [PATCH 14/15] drivers/spi: Account for dropped return value of spi_driver.remove
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (12 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 13/15] drivers/spi: Switch to spi_controller API Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:08 ` [PATCH 15/15] ci: Add targets for latest dovetail queue Jan Kiszka
  2022-07-04 13:35 ` [PATCH 00/15] Kernel 5.19 adjustments Philippe Gerum
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Changed in 5.18.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/spi/spi-device.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/kernel/drivers/spi/spi-device.c b/kernel/drivers/spi/spi-device.c
index 397af0f33d..6e368bd555 100644
--- a/kernel/drivers/spi/spi-device.c
+++ b/kernel/drivers/spi/spi-device.c
@@ -124,13 +124,19 @@ static int spi_device_probe(struct spi_device *spi)
 	return 0;
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,18,0)
+static void spi_device_remove(struct spi_device *spi)
+#else
 static int spi_device_remove(struct spi_device *spi)
+#endif
 {
 	struct rtdm_spi_remote_slave *slave = spi_get_drvdata(spi);
 
 	slave->master->ops->detach_slave(slave);
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
 	return 0;
+#endif
 }
 
 static const struct of_device_id spi_device_match[] = {
-- 
2.35.3


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

* [PATCH 15/15] ci: Add targets for latest dovetail queue
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (13 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 14/15] drivers/spi: Account for dropped return value of spi_driver.remove Jan Kiszka
@ 2022-07-04 13:08 ` Jan Kiszka
  2022-07-04 13:35 ` [PATCH 00/15] Kernel 5.19 adjustments Philippe Gerum
  15 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:08 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

This tests the latest v5.xx[.y]-dovetail-rebase queue in addition to the
5.10 and 5.19 variants. Should help to find build compatibility issues
earlier.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 .gitlab-ci.yml | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 224e2ef619..2d4c7635cb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -39,7 +39,7 @@ variables:
     - apt install -y ${PACKAGES} ${!ARCH_PACKAGES}
     - REV=$(git ls-remote --tags --head --refs ${PIPELINE_KERNEL} | sed -e "s/.*[[:space:]]refs\/\(tags\|heads\)\///" | grep "${PIPELINE_REV}" | sort -r -n -t - -k 5 -k 6 | head -1)
     - test -n "${REV}" || REV="${PIPELINE_REV}"
-    - test -n "${PIPELINE_KERNEL}" && git clone --depth 1 --branch ${REV} ${PIPELINE_KERNEL} ${KDIR}
+    - test -n "${PIPELINE_KERNEL}" && echo "Checking out ${REV}..." && git clone --depth 1 --branch ${REV} ${PIPELINE_KERNEL} ${KDIR}
     - case "${ARCH}" in
       "arm64")
       export CROSS_COMPILE=aarch64-linux-gnu-;
@@ -178,6 +178,14 @@ variables:
     paths:
       - .ccache
 
+arm-5.xx-latest:
+  extends: .build
+  variables:
+    ARCH: arm
+    PIPELINE_REV: "v5\\.[0-9][0-9].*-dovetail-rebase"
+    PIPELINE_KERNEL: ${DOVETAIL_URL}
+    KERNEL_DEFCONFIG: multi_v7_defconfig
+
 arm-5.15-head:
   extends: .build
   variables:
@@ -194,6 +202,14 @@ arm-5.10-head:
     PIPELINE_KERNEL: ${DOVETAIL_URL}
     KERNEL_DEFCONFIG: multi_v7_defconfig
 
+arm64-5.xx-latest:
+  extends: .build
+  variables:
+    ARCH: arm64
+    PIPELINE_REV: "v5\\.[0-9][0-9].*-dovetail-rebase"
+    PIPELINE_KERNEL: ${DOVETAIL_URL}
+    KERNEL_DEFCONFIG: defconfig
+
 arm64-5.15-head:
   extends: .build
   variables:
@@ -210,6 +226,14 @@ arm64-5.10-head:
     PIPELINE_KERNEL: ${DOVETAIL_URL}
     KERNEL_DEFCONFIG: defconfig
 
+x86-5.xx-latest:
+  extends: .build
+  variables:
+    ARCH: x86
+    PIPELINE_REV: "v5\\.[0-9][0-9].*-dovetail-rebase"
+    PIPELINE_KERNEL: ${DOVETAIL_URL}
+    KERNEL_DEFCONFIG: x86_64_defconfig
+
 x86-5.15-head:
   extends: .build
   variables:
-- 
2.35.3


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

* Re: [PATCH 00/15] Kernel 5.19 adjustments
  2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
                   ` (14 preceding siblings ...)
  2022-07-04 13:08 ` [PATCH 15/15] ci: Add targets for latest dovetail queue Jan Kiszka
@ 2022-07-04 13:35 ` Philippe Gerum
  2022-07-04 13:51   ` Jan Kiszka
  15 siblings, 1 reply; 25+ messages in thread
From: Philippe Gerum @ 2022-07-04 13:35 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai, Gunter Grau


Jan Kiszka <jan.kiszka@siemens.com> writes:

> This allows to compile and run Xenomai against latest 5.19-dovetail. The
> kernel deprecated a number of APIs that forces us to move on. Luckily,
> we can do that unconditionally in many cases as our lower limit is now
> 5.10.
>
> Philippe, could you have a look at the SPI changes, specifically at
> "drivers/spi: Convert to GPIO descriptor API"? I'm unable to test and
> unsure if the conversion of find_cs_gpio is correct.
>

I'll review those changes asap, but I don't have enough bandwidth for
actually testing this code ATM. If anyone who currently depends on this
driver and/or is willing to test it, please do not hesitate to chime in.

-- 
Philippe.

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

* Re: [PATCH 00/15] Kernel 5.19 adjustments
  2022-07-04 13:35 ` [PATCH 00/15] Kernel 5.19 adjustments Philippe Gerum
@ 2022-07-04 13:51   ` Jan Kiszka
  0 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-04 13:51 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: xenomai, Gunter Grau

On 04.07.22 15:35, Philippe Gerum wrote:
> 
> Jan Kiszka <jan.kiszka@siemens.com> writes:
> 
>> This allows to compile and run Xenomai against latest 5.19-dovetail. The
>> kernel deprecated a number of APIs that forces us to move on. Luckily,
>> we can do that unconditionally in many cases as our lower limit is now
>> 5.10.
>>
>> Philippe, could you have a look at the SPI changes, specifically at
>> "drivers/spi: Convert to GPIO descriptor API"? I'm unable to test and
>> unsure if the conversion of find_cs_gpio is correct.
>>
> 
> I'll review those changes asap, but I don't have enough bandwidth for
> actually testing this code ATM. If anyone who currently depends on this
> driver and/or is willing to test it, please do not hesitate to chime in.
> 

Thanks in advance. Yes, the call should go to the whole community
regarding testing!

Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux

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

* Re: [PATCH 05/15] drivers/net: Switch to dev_addr_set
  2022-07-04 13:08 ` [PATCH 05/15] drivers/net: Switch to dev_addr_set Jan Kiszka
@ 2022-07-04 13:57   ` Bezdeka, Florian
  2022-07-05  9:35     ` Jan Kiszka
  2022-07-04 14:32   ` Bezdeka, Florian
  2022-07-06  9:56   ` [PATCH v2 05/15] drivers/net: Switch to dev_addr_set and eth_hw_addr_set Jan Kiszka
  2 siblings, 1 reply; 25+ messages in thread
From: Bezdeka, Florian @ 2022-07-04 13:57 UTC (permalink / raw)
  To: xenomai, jan.kiszka; +Cc: gunter.grau

On Mon, 2022-07-04 at 15:08 +0200, Jan Kiszka wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> Latest kernel complain about accessing dev_addr directly and push us
> toward the accessor functions. Use that and provide a wrapper for
> kernels prior to 5.15.
> 
> CC: Gunter Grau <gunter.grau@philips.com>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  kernel/cobalt/include/asm-generic/xenomai/wrappers.h |  4 ++++
>  kernel/drivers/net/addons/cap.c                      |  5 ++---
>  kernel/drivers/net/addons/proxy.c                    |  2 +-
>  kernel/drivers/net/drivers/freescale/fec_main.c      | 11 +++++++----
>  kernel/drivers/net/stack/rtmac/rtmac_vnic.c          |  5 ++---
>  5 files changed, 16 insertions(+), 11 deletions(-)
> 
> diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> index 88152a25e1..6489c82c8c 100644
> --- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> +++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> @@ -54,6 +54,10 @@
>  #define close_fd(__ufd)	__close_fd(current->files, __ufd)
>  #endif
>  
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,15,0)
> +#define dev_addr_set(dev, addr)	memcpy((dev)->dev_addr, addr, MAX_ADDR_LEN)

The wrapper for older kernel always uses MAX_ADDR_LEN, see below...

> +#endif
> +
>  #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
>  #define pde_data(i)	PDE_DATA(i)
>  #endif
> diff --git a/kernel/drivers/net/addons/cap.c b/kernel/drivers/net/addons/cap.c
> index 1e86440699..3784b65226 100644
> --- a/kernel/drivers/net/addons/cap.c
> +++ b/kernel/drivers/net/addons/cap.c
> @@ -263,9 +263,8 @@ static int tap_dev_open(struct net_device *dev)
>  	if (err == 0)
>  		return -EIDRM;
>  
> -	memcpy(dev->dev_addr,
> -	       (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
> -	       MAX_ADDR_LEN);
> +	dev_addr_set(dev,
> +		     (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);

This one looks good. MAX_ADDR_LEN was previously used as well.

>  	return 0;
>  }
> diff --git a/kernel/drivers/net/addons/proxy.c b/kernel/drivers/net/addons/proxy.c
> index f70587678a..b37b42c9de 100644
> --- a/kernel/drivers/net/addons/proxy.c
> +++ b/kernel/drivers/net/addons/proxy.c
> @@ -321,7 +321,7 @@ static void __init rtnetproxy_init(struct net_device *dev)
>  
>  	dev->tx_queue_len = 0;
>  #ifdef CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
> -	memcpy(dev->dev_addr, rtnetproxy_rtdev->dev_addr, MAX_ADDR_LEN);
> +	dev_addr_set(dev, rtnetproxy_rtdev->dev_addr);
>  #else
>  	dev->flags |= IFF_NOARP;
>  #endif
> diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
> index be0ed0c51e..72ee4de738 100644
> --- a/kernel/drivers/net/drivers/freescale/fec_main.c
> +++ b/kernel/drivers/net/drivers/freescale/fec_main.c
> @@ -1315,11 +1315,14 @@ static void fec_get_mac(struct net_device *ndev)
>  		return;
>  	}
>  
> -	memcpy(ndev->dev_addr, iap, ETH_ALEN);
> -
>  	/* Adjust MAC if using macaddr */
> -	if (iap == macaddr)
> -		 ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id;
> +	if (iap == macaddr) {
> +		memcpy(tmpaddr, macaddr, ETH_ALEN);
> +		tmpaddr[ETH_ALEN-1] += fep->dev_id;
> +		dev_addr_set(ndev, tmpaddr);

Remember: The wrapper for older kernel uses MAX_ADDR_LEN, but we only
supply ETH_ALEN bytes, which is a mismatch, isn't it?

> +	} else {
> +		dev_addr_set(ndev, iap);
> +	}
>  }
>  
>  /* ------------------------------------------------------------------------- */
> diff --git a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> index 138e276ad9..4b41785db8 100644
> --- a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> +++ b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> @@ -114,9 +114,8 @@ static void rtmac_vnic_signal_handler(rtdm_nrtsig_t *nrtsig, void *arg)
>  
>  static int rtmac_vnic_copy_mac(struct net_device *dev)
>  {
> -	memcpy(dev->dev_addr,
> -	       (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
> -	       MAX_ADDR_LEN);
> +	dev_addr_set(dev,
> +		     (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
>  

Fine again.

>  	return 0;
>  }


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

* Re: [PATCH 05/15] drivers/net: Switch to dev_addr_set
  2022-07-04 13:08 ` [PATCH 05/15] drivers/net: Switch to dev_addr_set Jan Kiszka
  2022-07-04 13:57   ` Bezdeka, Florian
@ 2022-07-04 14:32   ` Bezdeka, Florian
  2022-07-05  9:41     ` Jan Kiszka
  2022-07-06  9:56   ` [PATCH v2 05/15] drivers/net: Switch to dev_addr_set and eth_hw_addr_set Jan Kiszka
  2 siblings, 1 reply; 25+ messages in thread
From: Bezdeka, Florian @ 2022-07-04 14:32 UTC (permalink / raw)
  To: xenomai, jan.kiszka; +Cc: gunter.grau

On Mon, 2022-07-04 at 15:08 +0200, Jan Kiszka wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> Latest kernel complain about accessing dev_addr directly and push us
> toward the accessor functions. Use that and provide a wrapper for
> kernels prior to 5.15.
> 
> CC: Gunter Grau <gunter.grau@philips.com>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  kernel/cobalt/include/asm-generic/xenomai/wrappers.h |  4 ++++
>  kernel/drivers/net/addons/cap.c                      |  5 ++---
>  kernel/drivers/net/addons/proxy.c                    |  2 +-
>  kernel/drivers/net/drivers/freescale/fec_main.c      | 11 +++++++----
>  kernel/drivers/net/stack/rtmac/rtmac_vnic.c          |  5 ++---
>  5 files changed, 16 insertions(+), 11 deletions(-)
> 
> diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> index 88152a25e1..6489c82c8c 100644
> --- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> +++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> @@ -54,6 +54,10 @@
>  #define close_fd(__ufd)	__close_fd(current->files, __ufd)
>  #endif
>  
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,15,0)
> +#define dev_addr_set(dev, addr)	memcpy((dev)->dev_addr, addr, MAX_ADDR_LEN)
> +#endif
> +
>  #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
>  #define pde_data(i)	PDE_DATA(i)
>  #endif
> diff --git a/kernel/drivers/net/addons/cap.c b/kernel/drivers/net/addons/cap.c
> index 1e86440699..3784b65226 100644
> --- a/kernel/drivers/net/addons/cap.c
> +++ b/kernel/drivers/net/addons/cap.c
> @@ -263,9 +263,8 @@ static int tap_dev_open(struct net_device *dev)
>  	if (err == 0)
>  		return -EIDRM;
>  
> -	memcpy(dev->dev_addr,
> -	       (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
> -	       MAX_ADDR_LEN);
> +	dev_addr_set(dev,
> +		     (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
>  
>  	return 0;
>  }
> diff --git a/kernel/drivers/net/addons/proxy.c b/kernel/drivers/net/addons/proxy.c
> index f70587678a..b37b42c9de 100644
> --- a/kernel/drivers/net/addons/proxy.c
> +++ b/kernel/drivers/net/addons/proxy.c
> @@ -321,7 +321,7 @@ static void __init rtnetproxy_init(struct net_device *dev)
>  
>  	dev->tx_queue_len = 0;
>  #ifdef CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
> -	memcpy(dev->dev_addr, rtnetproxy_rtdev->dev_addr, MAX_ADDR_LEN);
> +	dev_addr_set(dev, rtnetproxy_rtdev->dev_addr);
>  #else
>  	dev->flags |= IFF_NOARP;
>  #endif
> diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
> index be0ed0c51e..72ee4de738 100644
> --- a/kernel/drivers/net/drivers/freescale/fec_main.c
> +++ b/kernel/drivers/net/drivers/freescale/fec_main.c
> @@ -1315,11 +1315,14 @@ static void fec_get_mac(struct net_device *ndev)
>  		return;
>  	}
>  
> -	memcpy(ndev->dev_addr, iap, ETH_ALEN);
> -
>  	/* Adjust MAC if using macaddr */
> -	if (iap == macaddr)
> -		 ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id;
> +	if (iap == macaddr) {
> +		memcpy(tmpaddr, macaddr, ETH_ALEN);
> +		tmpaddr[ETH_ALEN-1] += fep->dev_id;
> +		dev_addr_set(ndev, tmpaddr);

One more thing here:

dev_addr_set when available inside the kernel uses ndev->addr_len for
performing the memcpy. Do we ever set ndev->addr_len?

> +	} else {
> +		dev_addr_set(ndev, iap);
> +	}
>  }
>  
>  /* ------------------------------------------------------------------------- */
> diff --git a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> index 138e276ad9..4b41785db8 100644
> --- a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> +++ b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> @@ -114,9 +114,8 @@ static void rtmac_vnic_signal_handler(rtdm_nrtsig_t *nrtsig, void *arg)
>  
>  static int rtmac_vnic_copy_mac(struct net_device *dev)
>  {
> -	memcpy(dev->dev_addr,
> -	       (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
> -	       MAX_ADDR_LEN);
> +	dev_addr_set(dev,
> +		     (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
>  
>  	return 0;
>  }


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

* Re: [PATCH 05/15] drivers/net: Switch to dev_addr_set
  2022-07-04 13:57   ` Bezdeka, Florian
@ 2022-07-05  9:35     ` Jan Kiszka
  0 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-05  9:35 UTC (permalink / raw)
  To: Bezdeka, Florian (T CED SES-DE), xenomai; +Cc: gunter.grau

On 04.07.22 15:57, Bezdeka, Florian (T CED SES-DE) wrote:
> On Mon, 2022-07-04 at 15:08 +0200, Jan Kiszka wrote:
>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>
>> Latest kernel complain about accessing dev_addr directly and push us
>> toward the accessor functions. Use that and provide a wrapper for
>> kernels prior to 5.15.
>>
>> CC: Gunter Grau <gunter.grau@philips.com>
>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>> ---
>>  kernel/cobalt/include/asm-generic/xenomai/wrappers.h |  4 ++++
>>  kernel/drivers/net/addons/cap.c                      |  5 ++---
>>  kernel/drivers/net/addons/proxy.c                    |  2 +-
>>  kernel/drivers/net/drivers/freescale/fec_main.c      | 11 +++++++----
>>  kernel/drivers/net/stack/rtmac/rtmac_vnic.c          |  5 ++---
>>  5 files changed, 16 insertions(+), 11 deletions(-)
>>
>> diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>> index 88152a25e1..6489c82c8c 100644
>> --- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>> +++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>> @@ -54,6 +54,10 @@
>>  #define close_fd(__ufd)      __close_fd(current->files, __ufd)
>>  #endif
>>
>> +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,15,0)
>> +#define dev_addr_set(dev, addr)      memcpy((dev)->dev_addr, addr, MAX_ADDR_LEN)
> 
> The wrapper for older kernel always uses MAX_ADDR_LEN, see below...

Good catch. We should likely use dev->addr_len here, just like the
function in later kernels do. That /should/ be initialized according to
current user's expectations (and provided buffers), but maybe worth a
second check.

Jan

> 
>> +#endif
>> +
>>  #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
>>  #define pde_data(i)  PDE_DATA(i)
>>  #endif
>> diff --git a/kernel/drivers/net/addons/cap.c b/kernel/drivers/net/addons/cap.c
>> index 1e86440699..3784b65226 100644
>> --- a/kernel/drivers/net/addons/cap.c
>> +++ b/kernel/drivers/net/addons/cap.c
>> @@ -263,9 +263,8 @@ static int tap_dev_open(struct net_device *dev)
>>       if (err == 0)
>>               return -EIDRM;
>>
>> -     memcpy(dev->dev_addr,
>> -            (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
>> -            MAX_ADDR_LEN);
>> +     dev_addr_set(dev,
>> +                  (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
> 
> This one looks good. MAX_ADDR_LEN was previously used as well.
> 
>>       return 0;
>>  }
>> diff --git a/kernel/drivers/net/addons/proxy.c b/kernel/drivers/net/addons/proxy.c
>> index f70587678a..b37b42c9de 100644
>> --- a/kernel/drivers/net/addons/proxy.c
>> +++ b/kernel/drivers/net/addons/proxy.c
>> @@ -321,7 +321,7 @@ static void __init rtnetproxy_init(struct net_device *dev)
>>
>>       dev->tx_queue_len = 0;
>>  #ifdef CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
>> -     memcpy(dev->dev_addr, rtnetproxy_rtdev->dev_addr, MAX_ADDR_LEN);
>> +     dev_addr_set(dev, rtnetproxy_rtdev->dev_addr);
>>  #else
>>       dev->flags |= IFF_NOARP;
>>  #endif
>> diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
>> index be0ed0c51e..72ee4de738 100644
>> --- a/kernel/drivers/net/drivers/freescale/fec_main.c
>> +++ b/kernel/drivers/net/drivers/freescale/fec_main.c
>> @@ -1315,11 +1315,14 @@ static void fec_get_mac(struct net_device *ndev)
>>               return;
>>       }
>>
>> -     memcpy(ndev->dev_addr, iap, ETH_ALEN);
>> -
>>       /* Adjust MAC if using macaddr */
>> -     if (iap == macaddr)
>> -              ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id;
>> +     if (iap == macaddr) {
>> +             memcpy(tmpaddr, macaddr, ETH_ALEN);
>> +             tmpaddr[ETH_ALEN-1] += fep->dev_id;
>> +             dev_addr_set(ndev, tmpaddr);
> 
> Remember: The wrapper for older kernel uses MAX_ADDR_LEN, but we only
> supply ETH_ALEN bytes, which is a mismatch, isn't it?
> 
>> +     } else {
>> +             dev_addr_set(ndev, iap);
>> +     }
>>  }
>>
>>  /* ------------------------------------------------------------------------- */
>> diff --git a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
>> index 138e276ad9..4b41785db8 100644
>> --- a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
>> +++ b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
>> @@ -114,9 +114,8 @@ static void rtmac_vnic_signal_handler(rtdm_nrtsig_t *nrtsig, void *arg)
>>
>>  static int rtmac_vnic_copy_mac(struct net_device *dev)
>>  {
>> -     memcpy(dev->dev_addr,
>> -            (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
>> -            MAX_ADDR_LEN);
>> +     dev_addr_set(dev,
>> +                  (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
>>
> 
> Fine again.
> 
>>       return 0;
>>  }
> 


-- 
Siemens AG, Technology
Competence Center Embedded Linux

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

* Re: [PATCH 05/15] drivers/net: Switch to dev_addr_set
  2022-07-04 14:32   ` Bezdeka, Florian
@ 2022-07-05  9:41     ` Jan Kiszka
  2022-07-05 11:16       ` Bezdeka, Florian
  0 siblings, 1 reply; 25+ messages in thread
From: Jan Kiszka @ 2022-07-05  9:41 UTC (permalink / raw)
  To: Bezdeka, Florian (T CED SES-DE), xenomai; +Cc: gunter.grau

On 04.07.22 16:32, Bezdeka, Florian (T CED SES-DE) wrote:
> On Mon, 2022-07-04 at 15:08 +0200, Jan Kiszka wrote:
>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>
>> Latest kernel complain about accessing dev_addr directly and push us
>> toward the accessor functions. Use that and provide a wrapper for
>> kernels prior to 5.15.
>>
>> CC: Gunter Grau <gunter.grau@philips.com>
>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>> ---
>>  kernel/cobalt/include/asm-generic/xenomai/wrappers.h |  4 ++++
>>  kernel/drivers/net/addons/cap.c                      |  5 ++---
>>  kernel/drivers/net/addons/proxy.c                    |  2 +-
>>  kernel/drivers/net/drivers/freescale/fec_main.c      | 11 +++++++----
>>  kernel/drivers/net/stack/rtmac/rtmac_vnic.c          |  5 ++---
>>  5 files changed, 16 insertions(+), 11 deletions(-)
>>
>> diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>> index 88152a25e1..6489c82c8c 100644
>> --- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>> +++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>> @@ -54,6 +54,10 @@
>>  #define close_fd(__ufd)      __close_fd(current->files, __ufd)
>>  #endif
>>
>> +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,15,0)
>> +#define dev_addr_set(dev, addr)      memcpy((dev)->dev_addr, addr, MAX_ADDR_LEN)
>> +#endif
>> +
>>  #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
>>  #define pde_data(i)  PDE_DATA(i)
>>  #endif
>> diff --git a/kernel/drivers/net/addons/cap.c b/kernel/drivers/net/addons/cap.c
>> index 1e86440699..3784b65226 100644
>> --- a/kernel/drivers/net/addons/cap.c
>> +++ b/kernel/drivers/net/addons/cap.c
>> @@ -263,9 +263,8 @@ static int tap_dev_open(struct net_device *dev)
>>       if (err == 0)
>>               return -EIDRM;
>>
>> -     memcpy(dev->dev_addr,
>> -            (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
>> -            MAX_ADDR_LEN);
>> +     dev_addr_set(dev,
>> +                  (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
>>
>>       return 0;
>>  }
>> diff --git a/kernel/drivers/net/addons/proxy.c b/kernel/drivers/net/addons/proxy.c
>> index f70587678a..b37b42c9de 100644
>> --- a/kernel/drivers/net/addons/proxy.c
>> +++ b/kernel/drivers/net/addons/proxy.c
>> @@ -321,7 +321,7 @@ static void __init rtnetproxy_init(struct net_device *dev)
>>
>>       dev->tx_queue_len = 0;
>>  #ifdef CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
>> -     memcpy(dev->dev_addr, rtnetproxy_rtdev->dev_addr, MAX_ADDR_LEN);
>> +     dev_addr_set(dev, rtnetproxy_rtdev->dev_addr);
>>  #else
>>       dev->flags |= IFF_NOARP;
>>  #endif
>> diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
>> index be0ed0c51e..72ee4de738 100644
>> --- a/kernel/drivers/net/drivers/freescale/fec_main.c
>> +++ b/kernel/drivers/net/drivers/freescale/fec_main.c
>> @@ -1315,11 +1315,14 @@ static void fec_get_mac(struct net_device *ndev)
>>               return;
>>       }
>>
>> -     memcpy(ndev->dev_addr, iap, ETH_ALEN);
>> -
>>       /* Adjust MAC if using macaddr */
>> -     if (iap == macaddr)
>> -              ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id;
>> +     if (iap == macaddr) {
>> +             memcpy(tmpaddr, macaddr, ETH_ALEN);
>> +             tmpaddr[ETH_ALEN-1] += fep->dev_id;
>> +             dev_addr_set(ndev, tmpaddr);
> 
> One more thing here:
> 
> dev_addr_set when available inside the kernel uses ndev->addr_len for
> performing the memcpy. Do we ever set ndev->addr_len?

Hmm, I would have expected this to be initialized on device creation,
but it seems not.

Seems the better answer is to use eth_hw_addr_set - which hard-codes
ETH_ALEN as length.

Jan

> 
>> +     } else {
>> +             dev_addr_set(ndev, iap);
>> +     }
>>  }
>>
>>  /* ------------------------------------------------------------------------- */
>> diff --git a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
>> index 138e276ad9..4b41785db8 100644
>> --- a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
>> +++ b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
>> @@ -114,9 +114,8 @@ static void rtmac_vnic_signal_handler(rtdm_nrtsig_t *nrtsig, void *arg)
>>
>>  static int rtmac_vnic_copy_mac(struct net_device *dev)
>>  {
>> -     memcpy(dev->dev_addr,
>> -            (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
>> -            MAX_ADDR_LEN);
>> +     dev_addr_set(dev,
>> +                  (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
>>
>>       return 0;
>>  }
> 


-- 
Siemens AG, Technology
Competence Center Embedded Linux

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

* Re: [PATCH 05/15] drivers/net: Switch to dev_addr_set
  2022-07-05  9:41     ` Jan Kiszka
@ 2022-07-05 11:16       ` Bezdeka, Florian
  2022-07-05 13:11         ` Jan Kiszka
  0 siblings, 1 reply; 25+ messages in thread
From: Bezdeka, Florian @ 2022-07-05 11:16 UTC (permalink / raw)
  To: xenomai, jan.kiszka; +Cc: gunter.grau

On Tue, 2022-07-05 at 11:41 +0200, Jan Kiszka wrote:
> On 04.07.22 16:32, Bezdeka, Florian (T CED SES-DE) wrote:
> > On Mon, 2022-07-04 at 15:08 +0200, Jan Kiszka wrote:
> > > From: Jan Kiszka <jan.kiszka@siemens.com>
> > > 
> > > Latest kernel complain about accessing dev_addr directly and push us
> > > toward the accessor functions. Use that and provide a wrapper for
> > > kernels prior to 5.15.
> > > 
> > > CC: Gunter Grau <gunter.grau@philips.com>
> > > Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> > > ---
> > >  kernel/cobalt/include/asm-generic/xenomai/wrappers.h |  4 ++++
> > >  kernel/drivers/net/addons/cap.c                      |  5 ++---
> > >  kernel/drivers/net/addons/proxy.c                    |  2 +-
> > >  kernel/drivers/net/drivers/freescale/fec_main.c      | 11 +++++++----
> > >  kernel/drivers/net/stack/rtmac/rtmac_vnic.c          |  5 ++---
> > >  5 files changed, 16 insertions(+), 11 deletions(-)
> > > 
> > > diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> > > index 88152a25e1..6489c82c8c 100644
> > > --- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> > > +++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
> > > @@ -54,6 +54,10 @@
> > >  #define close_fd(__ufd)      __close_fd(current->files, __ufd)
> > >  #endif
> > > 
> > > +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,15,0)
> > > +#define dev_addr_set(dev, addr)      memcpy((dev)->dev_addr, addr, MAX_ADDR_LEN)
> > > +#endif
> > > +
> > >  #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
> > >  #define pde_data(i)  PDE_DATA(i)
> > >  #endif
> > > diff --git a/kernel/drivers/net/addons/cap.c b/kernel/drivers/net/addons/cap.c
> > > index 1e86440699..3784b65226 100644
> > > --- a/kernel/drivers/net/addons/cap.c
> > > +++ b/kernel/drivers/net/addons/cap.c
> > > @@ -263,9 +263,8 @@ static int tap_dev_open(struct net_device *dev)
> > >       if (err == 0)
> > >               return -EIDRM;
> > > 
> > > -     memcpy(dev->dev_addr,
> > > -            (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
> > > -            MAX_ADDR_LEN);
> > > +     dev_addr_set(dev,
> > > +                  (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
> > > 
> > >       return 0;
> > >  }
> > > diff --git a/kernel/drivers/net/addons/proxy.c b/kernel/drivers/net/addons/proxy.c
> > > index f70587678a..b37b42c9de 100644
> > > --- a/kernel/drivers/net/addons/proxy.c
> > > +++ b/kernel/drivers/net/addons/proxy.c
> > > @@ -321,7 +321,7 @@ static void __init rtnetproxy_init(struct net_device *dev)
> > > 
> > >       dev->tx_queue_len = 0;
> > >  #ifdef CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
> > > -     memcpy(dev->dev_addr, rtnetproxy_rtdev->dev_addr, MAX_ADDR_LEN);
> > > +     dev_addr_set(dev, rtnetproxy_rtdev->dev_addr);
> > >  #else
> > >       dev->flags |= IFF_NOARP;
> > >  #endif
> > > diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
> > > index be0ed0c51e..72ee4de738 100644
> > > --- a/kernel/drivers/net/drivers/freescale/fec_main.c
> > > +++ b/kernel/drivers/net/drivers/freescale/fec_main.c
> > > @@ -1315,11 +1315,14 @@ static void fec_get_mac(struct net_device *ndev)
> > >               return;
> > >       }
> > > 
> > > -     memcpy(ndev->dev_addr, iap, ETH_ALEN);
> > > -
> > >       /* Adjust MAC if using macaddr */
> > > -     if (iap == macaddr)
> > > -              ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id;
> > > +     if (iap == macaddr) {
> > > +             memcpy(tmpaddr, macaddr, ETH_ALEN);
> > > +             tmpaddr[ETH_ALEN-1] += fep->dev_id;
> > > +             dev_addr_set(ndev, tmpaddr);
> > 
> > One more thing here:
> > 
> > dev_addr_set when available inside the kernel uses ndev->addr_len for
> > performing the memcpy. Do we ever set ndev->addr_len?
> 
> Hmm, I would have expected this to be initialized on device creation,
> but it seems not.
> 
> Seems the better answer is to use eth_hw_addr_set - which hard-codes
> ETH_ALEN as length.

Sounds reasonable. I assume the expectation is to set ndev->addr and
ndev->addr_len at the same time. No idea which API to choose.

Possibilities I know of:
- dev_addr_set
- dev_addr_mod
- eth_hw_addr_set

> 
> Jan
> 
> > 
> > > +     } else {
> > > +             dev_addr_set(ndev, iap);
> > > +     }
> > >  }
> > > 
> > >  /* ------------------------------------------------------------------------- */
> > > diff --git a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> > > index 138e276ad9..4b41785db8 100644
> > > --- a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> > > +++ b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
> > > @@ -114,9 +114,8 @@ static void rtmac_vnic_signal_handler(rtdm_nrtsig_t *nrtsig, void *arg)
> > > 
> > >  static int rtmac_vnic_copy_mac(struct net_device *dev)
> > >  {
> > > -     memcpy(dev->dev_addr,
> > > -            (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
> > > -            MAX_ADDR_LEN);
> > > +     dev_addr_set(dev,
> > > +                  (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
> > > 
> > >       return 0;
> > >  }
> > 
> 
> 


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

* Re: [PATCH 05/15] drivers/net: Switch to dev_addr_set
  2022-07-05 11:16       ` Bezdeka, Florian
@ 2022-07-05 13:11         ` Jan Kiszka
  0 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-05 13:11 UTC (permalink / raw)
  To: Bezdeka, Florian (T CED SES-DE), xenomai; +Cc: gunter.grau

On 05.07.22 13:16, Bezdeka, Florian (T CED SES-DE) wrote:
> On Tue, 2022-07-05 at 11:41 +0200, Jan Kiszka wrote:
>> On 04.07.22 16:32, Bezdeka, Florian (T CED SES-DE) wrote:
>>> On Mon, 2022-07-04 at 15:08 +0200, Jan Kiszka wrote:
>>>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>>>
>>>> Latest kernel complain about accessing dev_addr directly and push us
>>>> toward the accessor functions. Use that and provide a wrapper for
>>>> kernels prior to 5.15.
>>>>
>>>> CC: Gunter Grau <gunter.grau@philips.com>
>>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>>> ---
>>>>  kernel/cobalt/include/asm-generic/xenomai/wrappers.h |  4 ++++
>>>>  kernel/drivers/net/addons/cap.c                      |  5 ++---
>>>>  kernel/drivers/net/addons/proxy.c                    |  2 +-
>>>>  kernel/drivers/net/drivers/freescale/fec_main.c      | 11 +++++++----
>>>>  kernel/drivers/net/stack/rtmac/rtmac_vnic.c          |  5 ++---
>>>>  5 files changed, 16 insertions(+), 11 deletions(-)
>>>>
>>>> diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>>>> index 88152a25e1..6489c82c8c 100644
>>>> --- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>>>> +++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
>>>> @@ -54,6 +54,10 @@
>>>>  #define close_fd(__ufd)      __close_fd(current->files, __ufd)
>>>>  #endif
>>>>
>>>> +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,15,0)
>>>> +#define dev_addr_set(dev, addr)      memcpy((dev)->dev_addr, addr, MAX_ADDR_LEN)
>>>> +#endif
>>>> +
>>>>  #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
>>>>  #define pde_data(i)  PDE_DATA(i)
>>>>  #endif
>>>> diff --git a/kernel/drivers/net/addons/cap.c b/kernel/drivers/net/addons/cap.c
>>>> index 1e86440699..3784b65226 100644
>>>> --- a/kernel/drivers/net/addons/cap.c
>>>> +++ b/kernel/drivers/net/addons/cap.c
>>>> @@ -263,9 +263,8 @@ static int tap_dev_open(struct net_device *dev)
>>>>       if (err == 0)
>>>>               return -EIDRM;
>>>>
>>>> -     memcpy(dev->dev_addr,
>>>> -            (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
>>>> -            MAX_ADDR_LEN);
>>>> +     dev_addr_set(dev,
>>>> +                  (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
>>>>
>>>>       return 0;
>>>>  }
>>>> diff --git a/kernel/drivers/net/addons/proxy.c b/kernel/drivers/net/addons/proxy.c
>>>> index f70587678a..b37b42c9de 100644
>>>> --- a/kernel/drivers/net/addons/proxy.c
>>>> +++ b/kernel/drivers/net/addons/proxy.c
>>>> @@ -321,7 +321,7 @@ static void __init rtnetproxy_init(struct net_device *dev)
>>>>
>>>>       dev->tx_queue_len = 0;
>>>>  #ifdef CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
>>>> -     memcpy(dev->dev_addr, rtnetproxy_rtdev->dev_addr, MAX_ADDR_LEN);
>>>> +     dev_addr_set(dev, rtnetproxy_rtdev->dev_addr);
>>>>  #else
>>>>       dev->flags |= IFF_NOARP;
>>>>  #endif
>>>> diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
>>>> index be0ed0c51e..72ee4de738 100644
>>>> --- a/kernel/drivers/net/drivers/freescale/fec_main.c
>>>> +++ b/kernel/drivers/net/drivers/freescale/fec_main.c
>>>> @@ -1315,11 +1315,14 @@ static void fec_get_mac(struct net_device *ndev)
>>>>               return;
>>>>       }
>>>>
>>>> -     memcpy(ndev->dev_addr, iap, ETH_ALEN);
>>>> -
>>>>       /* Adjust MAC if using macaddr */
>>>> -     if (iap == macaddr)
>>>> -              ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id;
>>>> +     if (iap == macaddr) {
>>>> +             memcpy(tmpaddr, macaddr, ETH_ALEN);
>>>> +             tmpaddr[ETH_ALEN-1] += fep->dev_id;
>>>> +             dev_addr_set(ndev, tmpaddr);
>>>
>>> One more thing here:
>>>
>>> dev_addr_set when available inside the kernel uses ndev->addr_len for
>>> performing the memcpy. Do we ever set ndev->addr_len?
>>
>> Hmm, I would have expected this to be initialized on device creation,
>> but it seems not.
>>
>> Seems the better answer is to use eth_hw_addr_set - which hard-codes
>> ETH_ALEN as length.
> 
> Sounds reasonable. I assume the expectation is to set ndev->addr and
> ndev->addr_len at the same time. No idea which API to choose.
> 
> Possibilities I know of:
> - dev_addr_set
> - dev_addr_mod
> - eth_hw_addr_set

I'm seeing tons of usage for eth_hw_addr_set but only very few addr_len
updates.

Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux

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

* [PATCH v2 05/15] drivers/net: Switch to dev_addr_set and eth_hw_addr_set
  2022-07-04 13:08 ` [PATCH 05/15] drivers/net: Switch to dev_addr_set Jan Kiszka
  2022-07-04 13:57   ` Bezdeka, Florian
  2022-07-04 14:32   ` Bezdeka, Florian
@ 2022-07-06  9:56   ` Jan Kiszka
  2 siblings, 0 replies; 25+ messages in thread
From: Jan Kiszka @ 2022-07-06  9:56 UTC (permalink / raw)
  To: xenomai; +Cc: Gunter Grau, Florian Bezdeka

From: Jan Kiszka <jan.kiszka@siemens.com>

Latest kernel complain about accessing dev_addr directly and push us
toward the accessor functions. Use them and provide wrappers for
kernels prior to 5.15.

CC: Gunter Grau <gunter.grau@philips.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---

Changes in v2:
 - use eth_hw_addr_set for the fec driver

 kernel/cobalt/include/asm-generic/xenomai/wrappers.h |  5 +++++
 kernel/drivers/net/addons/cap.c                      |  5 ++---
 kernel/drivers/net/addons/proxy.c                    |  2 +-
 kernel/drivers/net/drivers/freescale/fec_main.c      | 11 +++++++----
 kernel/drivers/net/stack/rtmac/rtmac_vnic.c          |  5 ++---
 5 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
index 88152a25e1..ea7ed3ad56 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
@@ -54,6 +54,11 @@
 #define close_fd(__ufd)	__close_fd(current->files, __ufd)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,15,0)
+#define dev_addr_set(dev, addr)		memcpy((dev)->dev_addr, addr, MAX_ADDR_LEN)
+#define eth_hw_addr_set(dev, addr)	memcpy((dev)->dev_addr, addr, ETH_ALEN)
+#endif
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
 #define pde_data(i)	PDE_DATA(i)
 #endif
diff --git a/kernel/drivers/net/addons/cap.c b/kernel/drivers/net/addons/cap.c
index 1e86440699..3784b65226 100644
--- a/kernel/drivers/net/addons/cap.c
+++ b/kernel/drivers/net/addons/cap.c
@@ -263,9 +263,8 @@ static int tap_dev_open(struct net_device *dev)
 	if (err == 0)
 		return -EIDRM;
 
-	memcpy(dev->dev_addr,
-	       (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
-	       MAX_ADDR_LEN);
+	dev_addr_set(dev,
+		     (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
 
 	return 0;
 }
diff --git a/kernel/drivers/net/addons/proxy.c b/kernel/drivers/net/addons/proxy.c
index f70587678a..b37b42c9de 100644
--- a/kernel/drivers/net/addons/proxy.c
+++ b/kernel/drivers/net/addons/proxy.c
@@ -321,7 +321,7 @@ static void __init rtnetproxy_init(struct net_device *dev)
 
 	dev->tx_queue_len = 0;
 #ifdef CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP
-	memcpy(dev->dev_addr, rtnetproxy_rtdev->dev_addr, MAX_ADDR_LEN);
+	dev_addr_set(dev, rtnetproxy_rtdev->dev_addr);
 #else
 	dev->flags |= IFF_NOARP;
 #endif
diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
index be0ed0c51e..0080505397 100644
--- a/kernel/drivers/net/drivers/freescale/fec_main.c
+++ b/kernel/drivers/net/drivers/freescale/fec_main.c
@@ -1315,11 +1315,14 @@ static void fec_get_mac(struct net_device *ndev)
 		return;
 	}
 
-	memcpy(ndev->dev_addr, iap, ETH_ALEN);
-
 	/* Adjust MAC if using macaddr */
-	if (iap == macaddr)
-		 ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id;
+	if (iap == macaddr) {
+		memcpy(tmpaddr, macaddr, ETH_ALEN);
+		tmpaddr[ETH_ALEN-1] += fep->dev_id;
+		eth_hw_addr_set(ndev, tmpaddr);
+	} else {
+		eth_hw_addr_set(ndev, iap);
+	}
 }
 
 /* ------------------------------------------------------------------------- */
diff --git a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
index 138e276ad9..4b41785db8 100644
--- a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
+++ b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
@@ -114,9 +114,8 @@ static void rtmac_vnic_signal_handler(rtdm_nrtsig_t *nrtsig, void *arg)
 
 static int rtmac_vnic_copy_mac(struct net_device *dev)
 {
-	memcpy(dev->dev_addr,
-	       (*(struct rtnet_device **)netdev_priv(dev))->dev_addr,
-	       MAX_ADDR_LEN);
+	dev_addr_set(dev,
+		     (*(struct rtnet_device **)netdev_priv(dev))->dev_addr);
 
 	return 0;
 }
-- 
2.35.3

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

end of thread, other threads:[~2022-07-06  9:56 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-04 13:08 [PATCH 00/15] Kernel 5.19 adjustments Jan Kiszka
2022-07-04 13:08 ` [PATCH 01/15] Account for switch to pde_data in 5.17 Jan Kiszka
2022-07-04 13:08 ` [PATCH 02/15] Use linux/stddef.h instead of toolchain header Jan Kiszka
2022-07-04 13:08 ` [PATCH 03/15] drivers/switchtest: Remove unused local vars Jan Kiszka
2022-07-04 13:08 ` [PATCH 04/15] drivers/serial/16550A: Account for privatized defines in 5.17 Jan Kiszka
2022-07-04 13:08 ` [PATCH 05/15] drivers/net: Switch to dev_addr_set Jan Kiszka
2022-07-04 13:57   ` Bezdeka, Florian
2022-07-05  9:35     ` Jan Kiszka
2022-07-04 14:32   ` Bezdeka, Florian
2022-07-05  9:41     ` Jan Kiszka
2022-07-05 11:16       ` Bezdeka, Florian
2022-07-05 13:11         ` Jan Kiszka
2022-07-06  9:56   ` [PATCH v2 05/15] drivers/net: Switch to dev_addr_set and eth_hw_addr_set Jan Kiszka
2022-07-04 13:08 ` [PATCH 06/15] drivers: Convert pci_set_*dma_mask to DMA API Jan Kiszka
2022-07-04 13:08 ` [PATCH 07/15] drivers: Convert pci_alloc/free_consistent " Jan Kiszka
2022-07-04 13:08 ` [PATCH 08/15] drivers: Convert pci_map/unmap_single/page " Jan Kiszka
2022-07-04 13:08 ` [PATCH 09/15] drivers: Convert pci_dma_sync_single_for_cpu/device " Jan Kiszka
2022-07-04 13:08 ` [PATCH 10/15] cobalt: Resolve cast-function-type warnings Jan Kiszka
2022-07-04 13:08 ` [PATCH 11/15] drivers/net/experimental/e1000: Use fallthrough Jan Kiszka
2022-07-04 13:08 ` [PATCH 12/15] drivers/spi: Convert to GPIO descriptor API Jan Kiszka
2022-07-04 13:08 ` [PATCH 13/15] drivers/spi: Switch to spi_controller API Jan Kiszka
2022-07-04 13:08 ` [PATCH 14/15] drivers/spi: Account for dropped return value of spi_driver.remove Jan Kiszka
2022-07-04 13:08 ` [PATCH 15/15] ci: Add targets for latest dovetail queue Jan Kiszka
2022-07-04 13:35 ` [PATCH 00/15] Kernel 5.19 adjustments Philippe Gerum
2022-07-04 13:51   ` Jan Kiszka

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.