Patch "bus: fsl-mc: don't assume child devices are all fsl-mc devices" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    bus: fsl-mc: don't assume child devices are all fsl-mc devices

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     bus-fsl-mc-don-t-assume-child-devices-are-all-fsl-mc.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 9e6090352b3fbfbd14b522b6bfb376cf1a87698a
Author: Laurentiu Tudor <laurentiu.tudor@xxxxxxx>
Date:   Tue Jun 13 19:07:18 2023 +0300

    bus: fsl-mc: don't assume child devices are all fsl-mc devices
    
    [ Upstream commit 303c9c63abb9390e906052863f82bb4e9824e5c0 ]
    
    Changes in VFIO caused a pseudo-device to be created as child of
    fsl-mc devices causing a crash [1] when trying to bind a fsl-mc
    device to VFIO. Fix this by checking the device type when enumerating
    fsl-mc child devices.
    
    [1]
    Modules linked in:
    Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP
    CPU: 6 PID: 1289 Comm: sh Not tainted 6.2.0-rc5-00047-g7c46948a6e9c #2
    Hardware name: NXP Layerscape LX2160ARDB (DT)
    pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : mc_send_command+0x24/0x1f0
    lr : dprc_get_obj_region+0xfc/0x1c0
    sp : ffff80000a88b900
    x29: ffff80000a88b900 x28: ffff48a9429e1400 x27: 00000000000002b2
    x26: ffff48a9429e1718 x25: 0000000000000000 x24: 0000000000000000
    x23: ffffd59331ba3918 x22: ffffd59331ba3000 x21: 0000000000000000
    x20: ffff80000a88b9b8 x19: 0000000000000000 x18: 0000000000000001
    x17: 7270642f636d2d6c x16: 73662e3030303030 x15: ffffffffffffffff
    x14: ffffd59330f1d668 x13: ffff48a8727dc389 x12: ffff48a8727dc386
    x11: 0000000000000002 x10: 00008ceaf02f35d4 x9 : 0000000000000012
    x8 : 0000000000000000 x7 : 0000000000000006 x6 : ffff80000a88bab0
    x5 : 0000000000000000 x4 : 0000000000000000 x3 : ffff80000a88b9e8
    x2 : ffff80000a88b9e8 x1 : 0000000000000000 x0 : ffff48a945142b80
    Call trace:
     mc_send_command+0x24/0x1f0
     dprc_get_obj_region+0xfc/0x1c0
     fsl_mc_device_add+0x340/0x590
     fsl_mc_obj_device_add+0xd0/0xf8
     dprc_scan_objects+0x1c4/0x340
     dprc_scan_container+0x38/0x60
     vfio_fsl_mc_probe+0x9c/0xf8
     fsl_mc_driver_probe+0x24/0x70
     really_probe+0xbc/0x2a8
     __driver_probe_device+0x78/0xe0
     device_driver_attach+0x30/0x68
     bind_store+0xa8/0x130
     drv_attr_store+0x24/0x38
     sysfs_kf_write+0x44/0x60
     kernfs_fop_write_iter+0x128/0x1b8
     vfs_write+0x334/0x448
     ksys_write+0x68/0xf0
     __arm64_sys_write+0x1c/0x28
     invoke_syscall+0x44/0x108
     el0_svc_common.constprop.1+0x94/0xf8
     do_el0_svc+0x38/0xb0
     el0_svc+0x20/0x50
     el0t_64_sync_handler+0x98/0xc0
     el0t_64_sync+0x174/0x178
    Code: aa0103f4 a9025bf5 d5384100 b9400801 (79401260)
    ---[ end trace 0000000000000000 ]---
    
    Fixes: 3c28a76124b2 ("vfio: Add struct device to vfio_device")
    Signed-off-by: Laurentiu Tudor <laurentiu.tudor@xxxxxxx>
    Tested-by: Ioana Ciornei <ioana.ciornei@xxxxxxx>
    Reviewed-by: Ioana Ciornei <ioana.ciornei@xxxxxxx>
    Message-ID: <20230613160718.29500-1-laurentiu.tudor@xxxxxxx>
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/bus/fsl-mc/dprc-driver.c b/drivers/bus/fsl-mc/dprc-driver.c
index 5e70f9775a0e3..d1e2d2987dd38 100644
--- a/drivers/bus/fsl-mc/dprc-driver.c
+++ b/drivers/bus/fsl-mc/dprc-driver.c
@@ -46,6 +46,9 @@ static int __fsl_mc_device_remove_if_not_in_mc(struct device *dev, void *data)
 	struct fsl_mc_child_objs *objs;
 	struct fsl_mc_device *mc_dev;
 
+	if (!dev_is_fsl_mc(dev))
+		return 0;
+
 	mc_dev = to_fsl_mc_device(dev);
 	objs = data;
 
@@ -65,6 +68,9 @@ static int __fsl_mc_device_remove_if_not_in_mc(struct device *dev, void *data)
 
 static int __fsl_mc_device_remove(struct device *dev, void *data)
 {
+	if (!dev_is_fsl_mc(dev))
+		return 0;
+
 	fsl_mc_device_remove(to_fsl_mc_device(dev));
 	return 0;
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux