Subject: Re: linux-next: Tree for Jul 4 -> conflict between s390 and driver-core tree

From: Christian Borntraeger <[email-masked]>
Date: Fri, 5 Jul 2019 10:59:01 +0200

Linus, Vasily, for your attention in the next merge window. (I would suggest to apply
belows fixup during the merge of whatever tree is merged 2nd).

There is now a build conflict between the s390/features branch and the driver-core/driver-core-next
especially between

commit 92ce7e83b4e5 ("driver_find_device: Unify the match function with class_find_device()")
and
commit ec89b55e3bce ("s390: ap: implement PAPQ AQIC interception in kernel")

----------- snip---------------------------
drivers/s390/crypto/vfio_ap_ops.c: In function ‘vfio_ap_get_queue’:
drivers/s390/crypto/vfio_ap_ops.c:60:13: error: passing argument 4 of ‘driver_find_device’ from incompatible pointer type [-Werror=incompatible-pointer-types]
   60 |      &apqn, match_apqn);
      |             ^~~~~~~~~~
      |             |
      |             int (*)(struct device *, void *)
In file included from ./include/linux/iommu.h:11,
                 from ./include/linux/vfio.h:12,
                 from drivers/s390/crypto/vfio_ap_ops.c:12:
./include/linux/device.h:341:16: note: expected ‘int (*)(struct device *, const void *)’ but argument is of type ‘int (*)(struct device *, void *)’
  341 | struct device *driver_find_device(struct device_driver *drv,
      |                ^~~~~~~~~~~~~~~~~~
drivers/s390/crypto/vfio_ap_ops.c: In function ‘vfio_ap_irq_disable_apqn’:
drivers/s390/crypto/vfio_ap_ops.c:1124:13: error: passing argument 4 of ‘driver_find_device’ from incompatible pointer type [-Werror=incompatible-pointer-types]
 1124 |      &apqn, match_apqn);
      |             ^~~~~~~~~~
      |             |
      |             int (*)(struct device *, void *)
In file included from ./include/linux/iommu.h:11,
                 from ./include/linux/vfio.h:12,
                 from drivers/s390/crypto/vfio_ap_ops.c:12:
./include/linux/device.h:341:16: note: expected ‘int (*)(struct device *, const void *)’ but argument is of type ‘int (*)(struct device *, void *)’
  341 | struct device *driver_find_device(struct device_driver *drv,
      |                ^~~~~~~~~~~~~~~~~~
----------- snip---------------------------

The fix is straighforward but it cannot be added to any of the branches as it is
only necessary (and right) when both branches are merged together.

Stephen, can you maybe add something like this to make linux-next build again
on s390?

diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
index 2c9fb1423a39..7e85ba7c6ef0 100644
--- a/drivers/s390/crypto/vfio_ap_ops.c
+++ b/drivers/s390/crypto/vfio_ap_ops.c
@@ -26,7 +26,7 @@
 
 static int vfio_ap_mdev_reset_queues(struct mdev_device *mdev);
 
-static int match_apqn(struct device *dev, void *data)
+static int match_apqn(struct device *dev, const void *data)
 {
 	struct vfio_ap_queue *q = dev_get_drvdata(dev);