amd_iommu: attach device fails on the last pci device
PATCH 1/1 amd_iommu: attach device fails on the last pci device
amd_iommu_attach_device() checks if device id is within the limits of amd_iommu_last_bdf and instead checking if devid > amd_iommu_last_bdf, it checks devid >= amd_iommu_last_bdf. As a result the last device attach fails because amd_iommu_attach_device() returns an -EINVAL.
This bug is in linux-2.6.32 and an equivalent fix in linux-2.6.33 and has been carried forward to later kernels and is in the upstream kernel. This equivalent fix includes restructuring and consolidating device checks into a routine check_device(). Instead of back-porting all of that work, spot-fixed the bug in amd_iommu_attach_device() for linux-2.6.32.
--- arch/x86/kernel/amd_iommu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/amd_iommu.c +1 -1
@@ -2288,7 +2288,7 @@ static int amd_iommu_attach_device(struct iommu_domain *dom, devid =calc_devid (pdev->bus->number, pdev->devfn); -if (devid >= amd_iommu_last_bdf || +if (devid > amd_iommu_last_bdf || devid != amd_iommu_alias_table[devid])return -EINVAL ;
Signature · 1 line
1.7.9.5
Quoted 22 lines · Shuah Khan
amd_iommu_attach_device()checks if device id is within the limits ofamd_iommu_last_bdfand instead checking if devid >amd_iommu_last_bdf, it checks devid >=amd_iommu_last_bdf. As a result the last device attach fails becauseamd_iommu_attach_device()returns an-EINVAL.This bug is in linux-2.6.32 and an equivalent fix in linux-2.6.33 and has been carried forward to later kernels and is in the upstream kernel. This equivalent fix includes restructuring and consolidating device checks into a routine
check_device(). Instead of back-porting all of that work, spot-fixed the bug inamd_iommu_attach_device()for linux-2.6.32.Signed-off-by Shuah Khan <[email protected]>CC <[email protected]> v2.6.32--- arch/x86/kernel/amd_iommu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/x86/kernel/amd_iommu.c +0
-0
arch/x86/kernel/amd_iommu.c static int amd_iommu_attach_device(struct iommu_domain *dom, · line 2294
Quoted 8 lines
arch/x86/kernel/amd_iommu.c +1
-1@@ -2288,7 +2288,7 @@ static int amd_iommu_attach_device(struct iommu_domain *dom, devid =calc_devid (pdev->bus->number, pdev->devfn); -if (devid >= amd_iommu_last_bdf || +if (devid > amd_iommu_last_bdf || devid != amd_iommu_alias_table[devid])return -EINVAL ;
Looks correct to me, this case was clearly inconsistent with other users of amd_iommu_last_bdf.
Quoted 5 lines · Shuah Khan
This bug is in linux-2.6.32 and an equivalent fix in linux-2.6.33 and has been carried forward to later kernels and is in the upstream kernel. This equivalent fix includes restructuring and consolidating device checks into a routine
check_device(). Instead of back-porting all of that work, spot-fixed the bug inamd_iommu_attach_device()for linux-2.6.32.
To save Willy time: am I correct in guessing the upstream commit you are referring to is 98fc5a693bbdda498a556654c70d1e31a186c988 (x86/amd-iommu: Use get_device_id and check_device where appropriate, 2009-11-24)?
Thanks,
Jonathan
Quoted 8 lines · Jonathan Nieder
Quoted 5 lines · Shuah Khan
This bug is in linux-2.6.32 and an equivalent fix in linux-2.6.33 and has been carried forward to later kernels and is in the upstream kernel. This equivalent fix includes restructuring and consolidating device checks into a routine
check_device(). Instead of back-porting all of that work, spot-fixed the bug inamd_iommu_attach_device()for linux-2.6.32.
Quoted 4 lines
To save Willy time: am I correct in guessing the upstream commit you are referring to is
98fc5a693bbdda498a556654c70d1e31a186c988(x86/amd-iommu: Useget_device_idandcheck_devicewhere appropriate, 2009-11-24)?
Yes that is one. I looked that up again and it has the change to amd_iommu_attach_device() to use check_device() and removes the check
- if (devid >= amd_iommu_last_bdf ||
- devid != amd_iommu_alias_table[devid])
- return -EINVAL;
+ devid = get_device_id(dev);
Ref: http://www.spinics.net/lists/linux-tip-commits/msg06129.html
Thanks,
-- Shuah
Quoted 8 lines · Shuah Khan
Quoted 4 lines · Jonathan Nieder
To save Willy time: am I correct in guessing the upstream commit you are referring to is
98fc5a693bbdda498a556654c70d1e31a186c988(x86/amd-iommu: Useget_device_idandcheck_devicewhere appropriate, 2009-11-24)?Yes that is one.
Great, thanks for the quick confirmation.
Ciao,
Jonathan
Quoted 11 lines · Jonathan Nieder
Quoted 8 lines · Shuah Khan
Quoted 4 lines · Jonathan Nieder
To save Willy time: am I correct in guessing the upstream commit you are referring to is
98fc5a693bbdda498a556654c70d1e31a186c988(x86/amd-iommu: Useget_device_idandcheck_devicewhere appropriate, 2009-11-24)?Yes that is one.
Great, thanks for the quick confirmation.
Is this patch in the queue to be pulled into 2.6.32 tree?
Thanks,
-- Shuah