* [PATCH v3, part2 17/20] PCI, iommu: use hotplug-safe iterators to walk PCI buses
[not found] ` <1369583597-3801-1-git-send-email-jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
@ 2013-05-26 15:53 ` Jiang Liu
[not found] ` <1369583597-3801-18-git-send-email-jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: Jiang Liu @ 2013-05-26 15:53 UTC (permalink / raw)
To: Bjorn Helgaas, Yinghai Lu
Cc: Toshi Kani, Jiang Liu, Greg Kroah-Hartman,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Rafael J . Wysocki,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, Li, Zhen-Hua,
Hannes Reinecke, linux-pci-u79uwXL29TY76Z2rM5mHXA, Gu Zheng,
Myron Stowe, Ingo Molnar, Jiang Liu
Enhance iommu drviers to use hotplug-safe iterators to walk
PCI buses.
Signed-off-by: Jiang Liu <jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Cc: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
Cc: Ingo Molnar <mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Donald Dutile <ddutile-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Hannes Reinecke <hare-l3A5Bk7waGM@public.gmane.org>
Cc: "Li, Zhen-Hua" <zhen-hual-VXdhtT5mjnY@public.gmane.org>
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
---
drivers/iommu/amd_iommu.c | 4 +++-
drivers/iommu/dmar.c | 6 ++++--
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index 21d02b0..eef7a7e 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -352,6 +352,7 @@ static int init_iommu_group(struct device *dev)
struct iommu_dev_data *dev_data;
struct iommu_group *group;
struct pci_dev *dma_pdev;
+ struct pci_bus *b = NULL;
int ret;
group = iommu_group_get(dev);
@@ -388,7 +389,7 @@ static int init_iommu_group(struct device *dev)
* the alias. Be careful to also test the parent device if
* we think the alias is the root of the group.
*/
- bus = pci_find_bus(0, alias >> 8);
+ b = bus = pci_get_bus(0, alias >> 8);
if (!bus)
goto use_group;
@@ -408,6 +409,7 @@ static int init_iommu_group(struct device *dev)
dma_pdev = get_isolation_root(pci_dev_get(to_pci_dev(dev)));
use_pdev:
ret = use_pdev_iommu_group(dma_pdev, dev);
+ pci_bus_put(b);
pci_dev_put(dma_pdev);
return ret;
use_group:
diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
index a7967ce..7162787 100644
--- a/drivers/iommu/dmar.c
+++ b/drivers/iommu/dmar.c
@@ -67,12 +67,12 @@ static void __init dmar_register_drhd_unit(struct dmar_drhd_unit *drhd)
static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
struct pci_dev **dev, u16 segment)
{
- struct pci_bus *bus;
+ struct pci_bus *b, *bus;
struct pci_dev *pdev = NULL;
struct acpi_dmar_pci_path *path;
int count;
- bus = pci_find_bus(segment, scope->bus);
+ b = bus = pci_get_bus(segment, scope->bus);
path = (struct acpi_dmar_pci_path *)(scope + 1);
count = (scope->length - sizeof(struct acpi_dmar_device_scope))
/ sizeof(struct acpi_dmar_pci_path);
@@ -97,6 +97,8 @@ static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
count --;
bus = pdev->subordinate;
}
+ pci_bus_put(b);
+
if (!pdev) {
pr_warn("Device scope device [%04x:%02x:%02x.%02x] not found\n",
segment, scope->bus, path->dev, path->fn);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3, part2 17/20] PCI, iommu: use hotplug-safe iterators to walk PCI buses
[not found] ` <1369583597-3801-18-git-send-email-jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
@ 2013-06-17 20:20 ` Bjorn Helgaas
[not found] ` <20130617202010.GC7877-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: Bjorn Helgaas @ 2013-06-17 20:20 UTC (permalink / raw)
To: Jiang Liu
Cc: Toshi Kani, Jiang Liu, Myron Stowe, Greg Kroah-Hartman,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Rafael J . Wysocki,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, Li, Zhen-Hua,
Hannes Reinecke, linux-pci-u79uwXL29TY76Z2rM5mHXA, Gu Zheng,
Yinghai Lu, Ingo Molnar
On Sun, May 26, 2013 at 11:53:14PM +0800, Jiang Liu wrote:
> Enhance iommu drviers to use hotplug-safe iterators to walk
> PCI buses.
>
> Signed-off-by: Jiang Liu <jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
> Cc: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
> Cc: Ingo Molnar <mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
> Cc: Donald Dutile <ddutile-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> Cc: Hannes Reinecke <hare-l3A5Bk7waGM@public.gmane.org>
> Cc: "Li, Zhen-Hua" <zhen-hual-VXdhtT5mjnY@public.gmane.org>
> Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
> Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> ---
> drivers/iommu/amd_iommu.c | 4 +++-
> drivers/iommu/dmar.c | 6 ++++--
The AMD and Intel IOMMU drivers are very different, and I would
split this into a patch for each.
> 2 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
> index 21d02b0..eef7a7e 100644
> --- a/drivers/iommu/amd_iommu.c
> +++ b/drivers/iommu/amd_iommu.c
> @@ -352,6 +352,7 @@ static int init_iommu_group(struct device *dev)
> struct iommu_dev_data *dev_data;
> struct iommu_group *group;
> struct pci_dev *dma_pdev;
> + struct pci_bus *b = NULL;
> int ret;
>
> group = iommu_group_get(dev);
> @@ -388,7 +389,7 @@ static int init_iommu_group(struct device *dev)
> * the alias. Be careful to also test the parent device if
> * we think the alias is the root of the group.
> */
> - bus = pci_find_bus(0, alias >> 8);
> + b = bus = pci_get_bus(0, alias >> 8);
> if (!bus)
> goto use_group;
>
> @@ -408,6 +409,7 @@ static int init_iommu_group(struct device *dev)
> dma_pdev = get_isolation_root(pci_dev_get(to_pci_dev(dev)));
> use_pdev:
> ret = use_pdev_iommu_group(dma_pdev, dev);
> + pci_bus_put(b);
> pci_dev_put(dma_pdev);
> return ret;
> use_group:
> diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
> index a7967ce..7162787 100644
> --- a/drivers/iommu/dmar.c
> +++ b/drivers/iommu/dmar.c
> @@ -67,12 +67,12 @@ static void __init dmar_register_drhd_unit(struct dmar_drhd_unit *drhd)
> static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
> struct pci_dev **dev, u16 segment)
> {
> - struct pci_bus *bus;
> + struct pci_bus *b, *bus;
> struct pci_dev *pdev = NULL;
> struct acpi_dmar_pci_path *path;
> int count;
>
> - bus = pci_find_bus(segment, scope->bus);
> + b = bus = pci_get_bus(segment, scope->bus);
> path = (struct acpi_dmar_pci_path *)(scope + 1);
> count = (scope->length - sizeof(struct acpi_dmar_device_scope))
> / sizeof(struct acpi_dmar_pci_path);
> @@ -97,6 +97,8 @@ static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
> count --;
> bus = pdev->subordinate;
> }
> + pci_bus_put(b);
> +
> if (!pdev) {
> pr_warn("Device scope device [%04x:%02x:%02x.%02x] not found\n",
> segment, scope->bus, path->dev, path->fn);
> --
> 1.8.1.2
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3, part2 17/20] PCI, iommu: use hotplug-safe iterators to walk PCI buses
[not found] ` <20130617202010.GC7877-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
@ 2013-06-17 20:34 ` Don Dutile
[not found] ` <51BF72DA.3050106-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: Don Dutile @ 2013-06-17 20:34 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Toshi Kani, Jiang Liu, Myron Stowe, Greg Kroah-Hartman,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Rafael J . Wysocki,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, Li, Zhen-Hua,
Hannes Reinecke, linux-pci-u79uwXL29TY76Z2rM5mHXA, Gu Zheng,
Yinghai Lu, Ingo Molnar, Jiang Liu
On 06/17/2013 04:20 PM, Bjorn Helgaas wrote:
> On Sun, May 26, 2013 at 11:53:14PM +0800, Jiang Liu wrote:
>> Enhance iommu drviers to use hotplug-safe iterators to walk
>> PCI buses.
>>
>> Signed-off-by: Jiang Liu<jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
>> Cc: Joerg Roedel<joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
>> Cc: Ingo Molnar<mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
>> Cc: Donald Dutile<ddutile-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>> Cc: Hannes Reinecke<hare-l3A5Bk7waGM@public.gmane.org>
>> Cc: "Li, Zhen-Hua"<zhen-hual-VXdhtT5mjnY@public.gmane.org>
>> Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
>> Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> ---
>> drivers/iommu/amd_iommu.c | 4 +++-
>> drivers/iommu/dmar.c | 6 ++++--
>
> The AMD and Intel IOMMU drivers are very different, and I would
> split this into a patch for each.
>
+1
>> 2 files changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
>> index 21d02b0..eef7a7e 100644
>> --- a/drivers/iommu/amd_iommu.c
>> +++ b/drivers/iommu/amd_iommu.c
>> @@ -352,6 +352,7 @@ static int init_iommu_group(struct device *dev)
>> struct iommu_dev_data *dev_data;
>> struct iommu_group *group;
>> struct pci_dev *dma_pdev;
>> + struct pci_bus *b = NULL;
>> int ret;
>>
>> group = iommu_group_get(dev);
>> @@ -388,7 +389,7 @@ static int init_iommu_group(struct device *dev)
>> * the alias. Be careful to also test the parent device if
>> * we think the alias is the root of the group.
>> */
>> - bus = pci_find_bus(0, alias>> 8);
>> + b = bus = pci_get_bus(0, alias>> 8);
>> if (!bus)
>> goto use_group;
>>
>> @@ -408,6 +409,7 @@ static int init_iommu_group(struct device *dev)
>> dma_pdev = get_isolation_root(pci_dev_get(to_pci_dev(dev)));
>> use_pdev:
>> ret = use_pdev_iommu_group(dma_pdev, dev);
>> + pci_bus_put(b);
>> pci_dev_put(dma_pdev);
>> return ret;
>> use_group:
>> diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
>> index a7967ce..7162787 100644
>> --- a/drivers/iommu/dmar.c
>> +++ b/drivers/iommu/dmar.c
>> @@ -67,12 +67,12 @@ static void __init dmar_register_drhd_unit(struct dmar_drhd_unit *drhd)
>> static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
>> struct pci_dev **dev, u16 segment)
>> {
>> - struct pci_bus *bus;
>> + struct pci_bus *b, *bus;
>> struct pci_dev *pdev = NULL;
>> struct acpi_dmar_pci_path *path;
>> int count;
>>
>> - bus = pci_find_bus(segment, scope->bus);
>> + b = bus = pci_get_bus(segment, scope->bus);
>> path = (struct acpi_dmar_pci_path *)(scope + 1);
>> count = (scope->length - sizeof(struct acpi_dmar_device_scope))
>> / sizeof(struct acpi_dmar_pci_path);
>> @@ -97,6 +97,8 @@ static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
>> count --;
>> bus = pdev->subordinate;
>> }
>> + pci_bus_put(b);
>> +
>> if (!pdev) {
>> pr_warn("Device scope device [%04x:%02x:%02x.%02x] not found\n",
>> segment, scope->bus, path->dev, path->fn);
>> --
>> 1.8.1.2
>>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3, part2 17/20] PCI, iommu: use hotplug-safe iterators to walk PCI buses
[not found] ` <51BF72DA.3050106-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2013-06-18 16:34 ` Jiang Liu
0 siblings, 0 replies; 4+ messages in thread
From: Jiang Liu @ 2013-06-18 16:34 UTC (permalink / raw)
To: Don Dutile
Cc: Toshi Kani, Jiang Liu, Myron Stowe, Greg Kroah-Hartman,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Rafael J . Wysocki, Gu Zheng, Li, Zhen-Hua, Hannes Reinecke,
linux-pci-u79uwXL29TY76Z2rM5mHXA, Bjorn Helgaas, Yinghai Lu,
Ingo Molnar
On 06/18/2013 04:34 AM, Don Dutile wrote:
> On 06/17/2013 04:20 PM, Bjorn Helgaas wrote:
>> On Sun, May 26, 2013 at 11:53:14PM +0800, Jiang Liu wrote:
>>> Enhance iommu drviers to use hotplug-safe iterators to walk
>>> PCI buses.
>>>
>>> Signed-off-by: Jiang Liu<jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
>>> Cc: Joerg Roedel<joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
>>> Cc: Ingo Molnar<mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
>>> Cc: Donald Dutile<ddutile-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>>> Cc: Hannes Reinecke<hare-l3A5Bk7waGM@public.gmane.org>
>>> Cc: "Li, Zhen-Hua"<zhen-hual-VXdhtT5mjnY@public.gmane.org>
>>> Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
>>> Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>>> ---
>>> drivers/iommu/amd_iommu.c | 4 +++-
>>> drivers/iommu/dmar.c | 6 ++++--
>>
>> The AMD and Intel IOMMU drivers are very different, and I would
>> split this into a patch for each.
>>
> +1
Hi Don and Bjorn,
Thanks for review, will split it into two patches.
Regards!
Gerry
>
>>> 2 files changed, 7 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
>>> index 21d02b0..eef7a7e 100644
>>> --- a/drivers/iommu/amd_iommu.c
>>> +++ b/drivers/iommu/amd_iommu.c
>>> @@ -352,6 +352,7 @@ static int init_iommu_group(struct device *dev)
>>> struct iommu_dev_data *dev_data;
>>> struct iommu_group *group;
>>> struct pci_dev *dma_pdev;
>>> + struct pci_bus *b = NULL;
>>> int ret;
>>>
>>> group = iommu_group_get(dev);
>>> @@ -388,7 +389,7 @@ static int init_iommu_group(struct device *dev)
>>> * the alias. Be careful to also test the parent device if
>>> * we think the alias is the root of the group.
>>> */
>>> - bus = pci_find_bus(0, alias>> 8);
>>> + b = bus = pci_get_bus(0, alias>> 8);
>>> if (!bus)
>>> goto use_group;
>>>
>>> @@ -408,6 +409,7 @@ static int init_iommu_group(struct device *dev)
>>> dma_pdev = get_isolation_root(pci_dev_get(to_pci_dev(dev)));
>>> use_pdev:
>>> ret = use_pdev_iommu_group(dma_pdev, dev);
>>> + pci_bus_put(b);
>>> pci_dev_put(dma_pdev);
>>> return ret;
>>> use_group:
>>> diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
>>> index a7967ce..7162787 100644
>>> --- a/drivers/iommu/dmar.c
>>> +++ b/drivers/iommu/dmar.c
>>> @@ -67,12 +67,12 @@ static void __init dmar_register_drhd_unit(struct
>>> dmar_drhd_unit *drhd)
>>> static int __init dmar_parse_one_dev_scope(struct
>>> acpi_dmar_device_scope *scope,
>>> struct pci_dev **dev, u16 segment)
>>> {
>>> - struct pci_bus *bus;
>>> + struct pci_bus *b, *bus;
>>> struct pci_dev *pdev = NULL;
>>> struct acpi_dmar_pci_path *path;
>>> int count;
>>>
>>> - bus = pci_find_bus(segment, scope->bus);
>>> + b = bus = pci_get_bus(segment, scope->bus);
>>> path = (struct acpi_dmar_pci_path *)(scope + 1);
>>> count = (scope->length - sizeof(struct acpi_dmar_device_scope))
>>> / sizeof(struct acpi_dmar_pci_path);
>>> @@ -97,6 +97,8 @@ static int __init dmar_parse_one_dev_scope(struct
>>> acpi_dmar_device_scope *scope,
>>> count --;
>>> bus = pdev->subordinate;
>>> }
>>> + pci_bus_put(b);
>>> +
>>> if (!pdev) {
>>> pr_warn("Device scope device [%04x:%02x:%02x.%02x] not
>>> found\n",
>>> segment, scope->bus, path->dev, path->fn);
>>> --
>>> 1.8.1.2
>>>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-06-18 16:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1369583597-3801-1-git-send-email-jiang.liu@huawei.com>
[not found] ` <1369583597-3801-1-git-send-email-jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-05-26 15:53 ` [PATCH v3, part2 17/20] PCI, iommu: use hotplug-safe iterators to walk PCI buses Jiang Liu
[not found] ` <1369583597-3801-18-git-send-email-jiang.liu-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-06-17 20:20 ` Bjorn Helgaas
[not found] ` <20130617202010.GC7877-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2013-06-17 20:34 ` Don Dutile
[not found] ` <51BF72DA.3050106-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-06-18 16:34 ` Jiang Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).