From c4969d756eac041758856b99a1084158c06beb7e Mon Sep 17 00:00:00 2001 From: Brahmajit Das Date: Thu, 22 Jun 2023 15:52:18 +0000 Subject: [PATCH] drivers/dahdi: fix build with clang-16 clang-16 enables -Werror=incompatible-pointer-types (along with buch of other warnings) by default, thus resulting in errors such as: /var/tmp/portage/net-misc/dahdi-3.2.0/work/dahdi-linux-3.2.0/drivers/dahdi/dahdi-sysfs.c:272:20: error: incompatible function pointer types initializing 'int (*)(const struct device *, struct kobj_uevent_env *)' with an expression of type 'int (struct device *, struct kobj_uevent_env *)' [-Wincompatible-function-pointer-types] .uevent = span_uevent, ^~~~~~~~~~~ /var/tmp/portage/net-misc/dahdi-3.2.0/work/dahdi-linux-3.2.0/drivers/dahdi/dahdi-sysfs.c:709:20: error: incompatible function pointer types initializing 'int (*)(const struct device *, struct kobj_uevent_env *)' with an expression of type 'int (struct device *, struct kobj_uevent_env *)' [-Wincompatible-function-pointer-types] .uevent = device_uevent, ^~~~~~~~~~~~~ 2 errors generated. This is due the change in bus_type strcut made in upstream commit https://github.com/torvalds/linux/commit/2a81ada32f0e584fc0c943e0d3a8c9f4fae411d6. Where they make uevent take a const *, as the strcut should not be modifying the device that is passed into it. This patch modifes some of the fucntions parameter types, making dahdi possible to be built with clang-16. Bug: https://bugs.gentoo.org/906179 Signed-off-by: Brahmajit Das Upstream: https://github.com/asterisk/dahdi-linux/pull/21 [Bernd: updated patch for compatibility with kernel < 6.3] Signed-off-by: Bernd Kuhls --- drivers/dahdi/dahdi-sysfs.c | 12 ++++++++++-- drivers/dahdi/wctc4xxp/base.c | 2 +- drivers/dahdi/xpp/xbus-sysfs.c | 4 ++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/dahdi/dahdi-sysfs.c b/drivers/dahdi/dahdi-sysfs.c index ca29ddba..38236929 100644 --- a/drivers/dahdi/dahdi-sysfs.c +++ b/drivers/dahdi/dahdi-sysfs.c @@ -47,7 +47,7 @@ static int span_match(struct device *dev, struct device_driver *driver) return 1; } -static inline struct dahdi_span *dev_to_span(struct device *dev) +static inline struct dahdi_span *dev_to_span(const struct device *dev) { return dev_get_drvdata(dev); } @@ -68,7 +68,11 @@ static inline struct dahdi_span *dev_to_span(struct device *dev) return err; \ } while (0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0) static int span_uevent(struct device *dev, struct kobj_uevent_env *kenv) +#else +static int span_uevent(const struct device *dev, struct kobj_uevent_env *kenv) +#endif { struct dahdi_span *span; @@ -415,7 +419,7 @@ static struct { unsigned int clean_chardev:1; } should_cleanup; -static inline struct dahdi_device *to_ddev(struct device *dev) +static inline struct dahdi_device *to_ddev(const struct device *dev) { return container_of(dev, struct dahdi_device, dev); } @@ -438,7 +442,11 @@ static inline struct dahdi_device *to_ddev(struct device *dev) return err; \ } while (0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0) static int device_uevent(struct device *dev, struct kobj_uevent_env *kenv) +#else +static int device_uevent(const struct device *dev, struct kobj_uevent_env *kenv) +#endif { struct dahdi_device *ddev; diff --git a/drivers/dahdi/wctc4xxp/base.c b/drivers/dahdi/wctc4xxp/base.c index ec6fc436..db70ea7e 100644 --- a/drivers/dahdi/wctc4xxp/base.c +++ b/drivers/dahdi/wctc4xxp/base.c @@ -643,7 +643,7 @@ wctc4xxp_net_register(struct wcdte *wc) return -ENOMEM; priv = netdev_priv(netdev); priv->wc = wc; - memcpy(netdev->dev_addr, our_mac, sizeof(our_mac)); + memcpy((void *)netdev->dev_addr, our_mac, sizeof(our_mac)); # ifdef HAVE_NET_DEVICE_OPS netdev->netdev_ops = &wctc4xxp_netdev_ops; diff --git a/drivers/dahdi/xpp/xbus-sysfs.c b/drivers/dahdi/xpp/xbus-sysfs.c index d8c11dc3..11b3ed3e 100644 --- a/drivers/dahdi/xpp/xbus-sysfs.c +++ b/drivers/dahdi/xpp/xbus-sysfs.c @@ -418,7 +418,11 @@ static int astribank_match(struct device *dev, struct device_driver *driver) return err; \ } while (0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0) static int astribank_uevent(struct device *dev, struct kobj_uevent_env *kenv) +#else +static int astribank_uevent(const struct device *dev, struct kobj_uevent_env *kenv) +#endif { xbus_t *xbus; extern char *initdir;