* [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.