* [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
[not found] <1368461313-4371-1-git-send-email-jiang.liu@huawei.com>
@ 2013-05-13 16:08 ` Jiang Liu
2013-05-13 17:23 ` Yinghai Lu
0 siblings, 1 reply; 15+ messages in thread
From: Jiang Liu @ 2013-05-13 16:08 UTC (permalink / raw)
To: Bjorn Helgaas, Yinghai Lu
Cc: Neela Syam Kolli, sparclinux, Toshi Kani, Jiang Liu, linux-scsi,
David Airlie, Greg Kroah-Hartman, linuxppc-dev, linux-kernel,
James E.J. Bottomley, Rafael J . Wysocki, Yijing Wang, linux-pci,
Gu Zheng, Paul Mackerras, Andrew Morton, Myron Stowe,
David S. Miller, Jiang Liu
From: Gu Zheng <guz.fnst@cn.fujitsu.com>
<marker to prevent gmail from removing below "From:">
From: Gu Zheng <guz.fnst@cn.fujitsu.com>
Use the new pci_alloc_dev(bus) to replace the existing using of
alloc_pci_dev(void).
v2:
Follow Bjorn's correction to move pci_bus_put() to
pci_release_dev() instead.
Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: David Airlie <airlied@linux.ie>
Cc: Neela Syam Kolli <megaraidlinux@lsi.com>
Cc: "James E.J. Bottomley" <JBottomley@parallels.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-kernel@vger.kernel.org
Cc: sparclinux@vger.kernel.org
Cc: linux-pci@vger.kernel.org
Cc: linux-scsi@vger.kernel.org
Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
---
arch/powerpc/kernel/pci_of_scan.c | 3 +--
arch/sparc/kernel/pci.c | 3 +--
drivers/char/agp/alpha-agp.c | 2 +-
drivers/char/agp/parisc-agp.c | 2 +-
drivers/pci/iov.c | 8 +++++---
drivers/pci/probe.c | 4 ++--
drivers/scsi/megaraid.c | 2 +-
7 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c
index 2a67e9b..24d01c4 100644
--- a/arch/powerpc/kernel/pci_of_scan.c
+++ b/arch/powerpc/kernel/pci_of_scan.c
@@ -128,7 +128,7 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,
const char *type;
struct pci_slot *slot;
- dev = alloc_pci_dev();
+ dev = pci_alloc_dev(bus);
if (!dev)
return NULL;
type = of_get_property(node, "device_type", NULL);
@@ -137,7 +137,6 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,
pr_debug(" create device, devfn: %x, type: %s\n", devfn, type);
- dev->bus = bus;
dev->dev.of_node = of_node_get(node);
dev->dev.parent = bus->bridge;
dev->dev.bus = &pci_bus_type;
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
index baf4366..e5871fb 100644
--- a/arch/sparc/kernel/pci.c
+++ b/arch/sparc/kernel/pci.c
@@ -254,7 +254,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
const char *type;
u32 class;
- dev = alloc_pci_dev();
+ dev = pci_alloc_dev(bus);
if (!dev)
return NULL;
@@ -281,7 +281,6 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
printk(" create device, devfn: %x, type: %s\n",
devfn, type);
- dev->bus = bus;
dev->sysdata = node;
dev->dev.parent = bus->bridge;
dev->dev.bus = &pci_bus_type;
diff --git a/drivers/char/agp/alpha-agp.c b/drivers/char/agp/alpha-agp.c
index dd84af4..199b8e9 100644
--- a/drivers/char/agp/alpha-agp.c
+++ b/drivers/char/agp/alpha-agp.c
@@ -174,7 +174,7 @@ alpha_core_agp_setup(void)
/*
* Build a fake pci_dev struct
*/
- pdev = alloc_pci_dev();
+ pdev = pci_alloc_dev(NULL);
if (!pdev)
return -ENOMEM;
pdev->vendor = 0xffff;
diff --git a/drivers/char/agp/parisc-agp.c b/drivers/char/agp/parisc-agp.c
index 94821ab..bf5d247 100644
--- a/drivers/char/agp/parisc-agp.c
+++ b/drivers/char/agp/parisc-agp.c
@@ -333,7 +333,7 @@ parisc_agp_setup(void __iomem *ioc_hpa, void __iomem *lba_hpa)
struct agp_bridge_data *bridge;
int error = 0;
- fake_bridge_dev = alloc_pci_dev();
+ fake_bridge_dev = pci_alloc_dev(NULL);
if (!fake_bridge_dev) {
error = -ENOMEM;
goto fail;
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index ee599f2..24134cd 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -75,18 +75,20 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
struct pci_dev *virtfn;
struct resource *res;
struct pci_sriov *iov = dev->sriov;
+ struct pci_bus *bus;
- virtfn = alloc_pci_dev();
+ virtfn = pci_alloc_dev(NULL);
if (!virtfn)
return -ENOMEM;
mutex_lock(&iov->dev->sriov->lock);
- virtfn->bus = virtfn_add_bus(dev->bus, virtfn_bus(dev, id));
- if (!virtfn->bus) {
+ bus = virtfn_add_bus(dev->bus, virtfn_bus(dev, id));
+ if (!bus) {
kfree(virtfn);
mutex_unlock(&iov->dev->sriov->lock);
return -ENOMEM;
}
+ virtfn->bus = pci_bus_get(bus);
virtfn->devfn = virtfn_devfn(dev, id);
virtfn->vendor = dev->vendor;
pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device);
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 4f0bc0a..bc075a3 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1131,6 +1131,7 @@ static void pci_release_dev(struct device *dev)
struct pci_dev *pci_dev;
pci_dev = to_pci_dev(dev);
+ pci_bus_put(pci_dev->bus);
pci_release_capabilities(pci_dev);
pci_release_of_node(pci_dev);
kfree(pci_dev);
@@ -1269,11 +1270,10 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
return NULL;
- dev = alloc_pci_dev();
+ dev = pci_alloc_dev(bus);
if (!dev)
return NULL;
- dev->bus = bus;
dev->devfn = devfn;
dev->vendor = l & 0xffff;
dev->device = (l >> 16) & 0xffff;
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 9504ec0..e1660ca 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -2025,7 +2025,7 @@ megaraid_abort_and_reset(adapter_t *adapter, Scsi_Cmnd *cmd, int aor)
static inline int
make_local_pdev(adapter_t *adapter, struct pci_dev **pdev)
{
- *pdev = alloc_pci_dev();
+ *pdev = pci_alloc_dev(NULL);
if( *pdev == NULL ) return -1;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-13 16:08 ` [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead Jiang Liu
@ 2013-05-13 17:23 ` Yinghai Lu
2013-05-14 8:26 ` Gu Zheng
0 siblings, 1 reply; 15+ messages in thread
From: Yinghai Lu @ 2013-05-13 17:23 UTC (permalink / raw)
To: Jiang Liu
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Gu Zheng, Yijing Wang,
linux-pci@vger.kernel.org, Bjorn Helgaas, Paul Mackerras,
Andrew Morton, Myron Stowe, David S. Miller
On Mon, May 13, 2013 at 9:08 AM, Jiang Liu <liuj97@gmail.com> wrote:
> From: Gu Zheng <guz.fnst@cn.fujitsu.com>
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 4f0bc0a..bc075a3 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -1131,6 +1131,7 @@ static void pci_release_dev(struct device *dev)
> struct pci_dev *pci_dev;
>
> pci_dev = to_pci_dev(dev);
> + pci_bus_put(pci_dev->bus);
> pci_release_capabilities(pci_dev);
> pci_release_of_node(pci_dev);
> kfree(pci_dev);
> @@ -1269,11 +1270,10 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
> if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
> return NULL;
>
> - dev = alloc_pci_dev();
> + dev = pci_alloc_dev(bus);
> if (!dev)
> return NULL;
>
> - dev->bus = bus;
> dev->devfn = devfn;
> dev->vendor = l & 0xffff;
> dev->device = (l >> 16) & 0xffff;
in pci_setup_device() fail path, it release the ref to that bus.
Yinghai
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-13 17:23 ` Yinghai Lu
@ 2013-05-14 8:26 ` Gu Zheng
2013-05-14 14:59 ` Liu Jiang
0 siblings, 1 reply; 15+ messages in thread
From: Gu Zheng @ 2013-05-14 8:26 UTC (permalink / raw)
To: Yinghai Lu
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Yijing Wang, linux-pci@vger.kernel.org,
Bjorn Helgaas, Paul Mackerras, Andrew Morton, Myron Stowe,
David S. Miller, Jiang Liu
[-- Attachment #1: Type: text/plain, Size: 1297 bytes --]
On 05/14/2013 01:23 AM, Yinghai Lu wrote:
> On Mon, May 13, 2013 at 9:08 AM, Jiang Liu <liuj97@gmail.com> wrote:
>> From: Gu Zheng <guz.fnst@cn.fujitsu.com>
>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>> index 4f0bc0a..bc075a3 100644
>> --- a/drivers/pci/probe.c
>> +++ b/drivers/pci/probe.c
>> @@ -1131,6 +1131,7 @@ static void pci_release_dev(struct device *dev)
>> struct pci_dev *pci_dev;
>>
>> pci_dev = to_pci_dev(dev);
>> + pci_bus_put(pci_dev->bus);
>> pci_release_capabilities(pci_dev);
>> pci_release_of_node(pci_dev);
>> kfree(pci_dev);
>> @@ -1269,11 +1270,10 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
>> if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
>> return NULL;
>>
>> - dev = alloc_pci_dev();
>> + dev = pci_alloc_dev(bus);
>> if (!dev)
>> return NULL;
>>
>> - dev->bus = bus;
>> dev->devfn = devfn;
>> dev->vendor = l & 0xffff;
>> dev->device = (l >> 16) & 0xffff;
>
> in pci_setup_device() fail path, it release the ref to that bus.
Yes, you're right, we need to release the bus' ref if pci_setup_device() failed.
Thanks for your correction.:)
Best regards,
Gu
>
> Yinghai
>
[-- Attachment #2: Convert-alloc_pci_dev-void-to-pci_alloc_dev-v3.patch --]
[-- Type: text/plain, Size: 5295 bytes --]
>From 7add6d9e70919b95be2debde2f58fc31d26c75bf Mon Sep 17 00:00:00 2001
From: Gu Zheng <guz.fnst@cn.fujitsu.com>
Date: Tue, 14 May 2013 16:11:07 +0800
Subject: [PATCH v3] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
v3:
Follow Yinghai's correction to release the bus' ref
in pci_setup_device() fail path.
v2:
Follow Bjorn's correction to move pci_bus_put() to
pci_release_dev() instead.
Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
---
arch/powerpc/kernel/pci_of_scan.c | 3 +--
arch/sparc/kernel/pci.c | 3 +--
drivers/char/agp/alpha-agp.c | 2 +-
drivers/char/agp/parisc-agp.c | 2 +-
drivers/pci/iov.c | 8 +++++---
drivers/pci/probe.c | 5 +++--
drivers/scsi/megaraid.c | 2 +-
7 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c
index 2a67e9b..24d01c4 100644
--- a/arch/powerpc/kernel/pci_of_scan.c
+++ b/arch/powerpc/kernel/pci_of_scan.c
@@ -128,7 +128,7 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,
const char *type;
struct pci_slot *slot;
- dev = alloc_pci_dev();
+ dev = pci_alloc_dev(bus);
if (!dev)
return NULL;
type = of_get_property(node, "device_type", NULL);
@@ -137,7 +137,6 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,
pr_debug(" create device, devfn: %x, type: %s\n", devfn, type);
- dev->bus = bus;
dev->dev.of_node = of_node_get(node);
dev->dev.parent = bus->bridge;
dev->dev.bus = &pci_bus_type;
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
index baf4366..e5871fb 100644
--- a/arch/sparc/kernel/pci.c
+++ b/arch/sparc/kernel/pci.c
@@ -254,7 +254,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
const char *type;
u32 class;
- dev = alloc_pci_dev();
+ dev = pci_alloc_dev(bus);
if (!dev)
return NULL;
@@ -281,7 +281,6 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
printk(" create device, devfn: %x, type: %s\n",
devfn, type);
- dev->bus = bus;
dev->sysdata = node;
dev->dev.parent = bus->bridge;
dev->dev.bus = &pci_bus_type;
diff --git a/drivers/char/agp/alpha-agp.c b/drivers/char/agp/alpha-agp.c
index dd84af4..199b8e9 100644
--- a/drivers/char/agp/alpha-agp.c
+++ b/drivers/char/agp/alpha-agp.c
@@ -174,7 +174,7 @@ alpha_core_agp_setup(void)
/*
* Build a fake pci_dev struct
*/
- pdev = alloc_pci_dev();
+ pdev = pci_alloc_dev(NULL);
if (!pdev)
return -ENOMEM;
pdev->vendor = 0xffff;
diff --git a/drivers/char/agp/parisc-agp.c b/drivers/char/agp/parisc-agp.c
index 94821ab..bf5d247 100644
--- a/drivers/char/agp/parisc-agp.c
+++ b/drivers/char/agp/parisc-agp.c
@@ -333,7 +333,7 @@ parisc_agp_setup(void __iomem *ioc_hpa, void __iomem *lba_hpa)
struct agp_bridge_data *bridge;
int error = 0;
- fake_bridge_dev = alloc_pci_dev();
+ fake_bridge_dev = pci_alloc_dev(NULL);
if (!fake_bridge_dev) {
error = -ENOMEM;
goto fail;
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index c93071d..2652ca0 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -75,18 +75,20 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
struct pci_dev *virtfn;
struct resource *res;
struct pci_sriov *iov = dev->sriov;
+ struct pci_bus *bus;
- virtfn = alloc_pci_dev();
+ virtfn = pci_alloc_dev(NULL);
if (!virtfn)
return -ENOMEM;
mutex_lock(&iov->dev->sriov->lock);
- virtfn->bus = virtfn_add_bus(dev->bus, virtfn_bus(dev, id));
- if (!virtfn->bus) {
+ bus = virtfn_add_bus(dev->bus, virtfn_bus(dev, id));
+ if (!bus) {
kfree(virtfn);
mutex_unlock(&iov->dev->sriov->lock);
return -ENOMEM;
}
+ virtfn->bus = pci_bus_get(bus);
virtfn->devfn = virtfn_devfn(dev, id);
virtfn->vendor = dev->vendor;
pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device);
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 70f10fa..db8dadc 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1130,6 +1130,7 @@ static void pci_release_dev(struct device *dev)
struct pci_dev *pci_dev;
pci_dev = to_pci_dev(dev);
+ pci_bus_put(pci_dev->bus);
pci_release_capabilities(pci_dev);
pci_release_of_node(pci_dev);
kfree(pci_dev);
@@ -1263,11 +1264,10 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
return NULL;
- dev = alloc_pci_dev();
+ dev = pci_alloc_dev(bus);
if (!dev)
return NULL;
- dev->bus = bus;
dev->devfn = devfn;
dev->vendor = l & 0xffff;
dev->device = (l >> 16) & 0xffff;
@@ -1275,6 +1275,7 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
pci_set_of_node(dev);
if (pci_setup_device(dev)) {
+ pci_bus_put(bus);
kfree(dev);
return NULL;
}
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 846f475f..90c95a3 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -2026,7 +2026,7 @@ megaraid_abort_and_reset(adapter_t *adapter, Scsi_Cmnd *cmd, int aor)
static inline int
make_local_pdev(adapter_t *adapter, struct pci_dev **pdev)
{
- *pdev = alloc_pci_dev();
+ *pdev = pci_alloc_dev(NULL);
if( *pdev == NULL ) return -1;
--
1.7.7
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-14 8:26 ` Gu Zheng
@ 2013-05-14 14:59 ` Liu Jiang
2013-05-14 15:10 ` Yinghai Lu
0 siblings, 1 reply; 15+ messages in thread
From: Liu Jiang @ 2013-05-14 14:59 UTC (permalink / raw)
To: Gu Zheng
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Myron Stowe, linuxppc-dev,
linux-pci@vger.kernel.org, Linux Kernel Mailing List,
James E.J. Bottomley, Rafael J . Wysocki, Yijing Wang,
Greg Kroah-Hartman, Bjorn Helgaas, Paul Mackerras, Andrew Morton,
Yinghai Lu, David S. Miller
On 05/14/2013 04:26 PM, Gu Zheng wrote:
> On 05/14/2013 01:23 AM, Yinghai Lu wrote:
>
>> On Mon, May 13, 2013 at 9:08 AM, Jiang Liu <liuj97@gmail.com> wrote:
>>> From: Gu Zheng <guz.fnst@cn.fujitsu.com>
>>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>>> index 4f0bc0a..bc075a3 100644
>>> --- a/drivers/pci/probe.c
>>> +++ b/drivers/pci/probe.c
>>> @@ -1131,6 +1131,7 @@ static void pci_release_dev(struct device *dev)
>>> struct pci_dev *pci_dev;
>>>
>>> pci_dev = to_pci_dev(dev);
>>> + pci_bus_put(pci_dev->bus);
>>> pci_release_capabilities(pci_dev);
>>> pci_release_of_node(pci_dev);
>>> kfree(pci_dev);
>>> @@ -1269,11 +1270,10 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
>>> if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
>>> return NULL;
>>>
>>> - dev = alloc_pci_dev();
>>> + dev = pci_alloc_dev(bus);
>>> if (!dev)
>>> return NULL;
>>>
>>> - dev->bus = bus;
>>> dev->devfn = devfn;
>>> dev->vendor = l & 0xffff;
>>> dev->device = (l >> 16) & 0xffff;
>> in pci_setup_device() fail path, it release the ref to that bus.
> Yes, you're right, we need to release the bus' ref if pci_setup_device() failed.
Hi Zheng,
I suggest to use pci_release_dev() instead because it also needs to
release OF related resources.
I will update it in next version.
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index bc075a3..2ac6338 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1281,7 +1281,7 @@ static struct pci_dev *pci_scan_device(struct
pci_bus *bus
pci_set_of_node(dev);
if (pci_setup_device(dev)) {
- kfree(dev);
+ pci_release_dev(&dev->dev);
return NULL;
}
> hanks for your correction.:)
>
> Best regards,
> Gu
>
>> Yinghai
>>
>
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-14 14:59 ` Liu Jiang
@ 2013-05-14 15:10 ` Yinghai Lu
2013-05-14 16:57 ` Liu Jiang
0 siblings, 1 reply; 15+ messages in thread
From: Yinghai Lu @ 2013-05-14 15:10 UTC (permalink / raw)
To: Liu Jiang
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Bjorn Helgaas, Yijing Wang,
linux-pci@vger.kernel.org, Gu Zheng, Paul Mackerras,
Andrew Morton, Myron Stowe, David S. Miller
On Tue, May 14, 2013 at 7:59 AM, Liu Jiang <liuj97@gmail.com> wrote:
> On 05/14/2013 04:26 PM, Gu Zheng wrote:
> I suggest to use pci_release_dev() instead because it also needs to
> release OF related resources.
> I will update it in next version.
>
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index bc075a3..2ac6338 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -1281,7 +1281,7 @@ static struct pci_dev *pci_scan_device(struct pci_bus
> *bus
> pci_set_of_node(dev);
>
> if (pci_setup_device(dev)) {
> - kfree(dev);
> + pci_release_dev(&dev->dev);
> return NULL;
no, should move pci_set_of_node calling into pci_setup_device.
Yinghai
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-14 15:10 ` Yinghai Lu
@ 2013-05-14 16:57 ` Liu Jiang
2013-05-14 18:52 ` Yinghai Lu
0 siblings, 1 reply; 15+ messages in thread
From: Liu Jiang @ 2013-05-14 16:57 UTC (permalink / raw)
To: Yinghai Lu
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Bjorn Helgaas, Yijing Wang,
linux-pci@vger.kernel.org, Gu Zheng, Paul Mackerras,
Andrew Morton, Myron Stowe, David S. Miller
On Tue 14 May 2013 11:10:33 PM CST, Yinghai Lu wrote:
> On Tue, May 14, 2013 at 7:59 AM, Liu Jiang <liuj97@gmail.com> wrote:
>> On 05/14/2013 04:26 PM, Gu Zheng wrote:
>> I suggest to use pci_release_dev() instead because it also needs to
>> release OF related resources.
>> I will update it in next version.
>>
>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>> index bc075a3..2ac6338 100644
>> --- a/drivers/pci/probe.c
>> +++ b/drivers/pci/probe.c
>> @@ -1281,7 +1281,7 @@ static struct pci_dev *pci_scan_device(struct pci_bus
>> *bus
>> pci_set_of_node(dev);
>>
>> if (pci_setup_device(dev)) {
>> - kfree(dev);
>> + pci_release_dev(&dev->dev);
>> return NULL;
>
> no, should move pci_set_of_node calling into pci_setup_device.
>
> Yinghai
I'm not sure whether we should call pci_set_of_node() for SR-IOV
devices too,
any suggestions here?
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-14 16:57 ` Liu Jiang
@ 2013-05-14 18:52 ` Yinghai Lu
2013-05-15 14:39 ` Liu Jiang
0 siblings, 1 reply; 15+ messages in thread
From: Yinghai Lu @ 2013-05-14 18:52 UTC (permalink / raw)
To: Liu Jiang
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Bjorn Helgaas, Yijing Wang,
linux-pci@vger.kernel.org, Gu Zheng, Paul Mackerras,
Andrew Morton, Myron Stowe, David S. Miller
On Tue, May 14, 2013 at 9:57 AM, Liu Jiang <liuj97@gmail.com> wrote:
> On Tue 14 May 2013 11:10:33 PM CST, Yinghai Lu wrote:
>>
>> On Tue, May 14, 2013 at 7:59 AM, Liu Jiang <liuj97@gmail.com> wrote:
>>>
>>> On 05/14/2013 04:26 PM, Gu Zheng wrote:
>>> I suggest to use pci_release_dev() instead because it also needs to
>>> release OF related resources.
>>> I will update it in next version.
>>>
>>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>>> index bc075a3..2ac6338 100644
>>> --- a/drivers/pci/probe.c
>>> +++ b/drivers/pci/probe.c
>>> @@ -1281,7 +1281,7 @@ static struct pci_dev *pci_scan_device(struct
>>> pci_bus
>>> *bus
>>> pci_set_of_node(dev);
>>>
>>> if (pci_setup_device(dev)) {
>>> - kfree(dev);
>>> + pci_release_dev(&dev->dev);
>>> return NULL;
>>
>>
>> no, should move pci_set_of_node calling into pci_setup_device.
>>
>> Yinghai
>
>
> I'm not sure whether we should call pci_set_of_node() for SR-IOV devices
> too,
> any suggestions here?
or just move down pci_set_of_node after pci_setup_device?
anyway that is another bug.
Yinghai
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-14 18:52 ` Yinghai Lu
@ 2013-05-15 14:39 ` Liu Jiang
2013-05-15 14:43 ` Yinghai Lu
0 siblings, 1 reply; 15+ messages in thread
From: Liu Jiang @ 2013-05-15 14:39 UTC (permalink / raw)
To: Yinghai Lu
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Bjorn Helgaas, Yijing Wang,
linux-pci@vger.kernel.org, Gu Zheng, Paul Mackerras,
Andrew Morton, Myron Stowe, David S. Miller
On Wed 15 May 2013 02:52:51 AM CST, Yinghai Lu wrote:
> On Tue, May 14, 2013 at 9:57 AM, Liu Jiang <liuj97@gmail.com> wrote:
>> On Tue 14 May 2013 11:10:33 PM CST, Yinghai Lu wrote:
>>>
>>> On Tue, May 14, 2013 at 7:59 AM, Liu Jiang <liuj97@gmail.com> wrote:
>>>>
>>>> On 05/14/2013 04:26 PM, Gu Zheng wrote:
>>>> I suggest to use pci_release_dev() instead because it also needs to
>>>> release OF related resources.
>>>> I will update it in next version.
>>>>
>>>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>>>> index bc075a3..2ac6338 100644
>>>> --- a/drivers/pci/probe.c
>>>> +++ b/drivers/pci/probe.c
>>>> @@ -1281,7 +1281,7 @@ static struct pci_dev *pci_scan_device(struct
>>>> pci_bus
>>>> *bus
>>>> pci_set_of_node(dev);
>>>>
>>>> if (pci_setup_device(dev)) {
>>>> - kfree(dev);
>>>> + pci_release_dev(&dev->dev);
>>>> return NULL;
>>>
>>>
>>> no, should move pci_set_of_node calling into pci_setup_device.
>>>
>>> Yinghai
>>
>>
>> I'm not sure whether we should call pci_set_of_node() for SR-IOV devices
>> too,
>> any suggestions here?
>
> or just move down pci_set_of_node after pci_setup_device?
>
> anyway that is another bug.
>
> Yinghai
I'm not familiar with the OF logic and can't make sure whether
pci_setup_device()
has dependency on dev->of_node. Feel it's more safe to call
pci_release_of_node()
on failing path instead of tuning call-site of pci_set_of_node().
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-15 14:39 ` Liu Jiang
@ 2013-05-15 14:43 ` Yinghai Lu
2013-05-15 14:46 ` Liu Jiang
0 siblings, 1 reply; 15+ messages in thread
From: Yinghai Lu @ 2013-05-15 14:43 UTC (permalink / raw)
To: Liu Jiang
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Bjorn Helgaas, Yijing Wang,
linux-pci@vger.kernel.org, Gu Zheng, Paul Mackerras,
Andrew Morton, Myron Stowe, David S. Miller
On Wed, May 15, 2013 at 7:39 AM, Liu Jiang <liuj97@gmail.com> wrote:
> On Wed 15 May 2013 02:52:51 AM CST, Yinghai Lu wrote:
>>
>> On Tue, May 14, 2013 at 9:57 AM, Liu Jiang <liuj97@gmail.com> wrote:
>>>
>>> On Tue 14 May 2013 11:10:33 PM CST, Yinghai Lu wrote:
>>>>
>>>>
>>>> On Tue, May 14, 2013 at 7:59 AM, Liu Jiang <liuj97@gmail.com> wrote:
>>>>>
>>>>>
>>>>> On 05/14/2013 04:26 PM, Gu Zheng wrote:
>>>>> I suggest to use pci_release_dev() instead because it also needs
>>>>> to
>>>>> release OF related resources.
>>>>> I will update it in next version.
>>>>>
>>>>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>>>>> index bc075a3..2ac6338 100644
>>>>> --- a/drivers/pci/probe.c
>>>>> +++ b/drivers/pci/probe.c
>>>>> @@ -1281,7 +1281,7 @@ static struct pci_dev *pci_scan_device(struct
>>>>> pci_bus
>>>>> *bus
>>>>> pci_set_of_node(dev);
>>>>>
>>>>> if (pci_setup_device(dev)) {
>>>>> - kfree(dev);
>>>>> + pci_release_dev(&dev->dev);
>>>>> return NULL;
>>>>
>>>>
>>>>
>>>> no, should move pci_set_of_node calling into pci_setup_device.
>>>>
>>>> Yinghai
>>>
>>>
>>>
>>> I'm not sure whether we should call pci_set_of_node() for SR-IOV devices
>>> too,
>>> any suggestions here?
>>
>>
>> or just move down pci_set_of_node after pci_setup_device?
>>
>> anyway that is another bug.
> I'm not familiar with the OF logic and can't make sure whether
> pci_setup_device()
> has dependency on dev->of_node. Feel it's more safe to call
> pci_release_of_node()
> on failing path instead of tuning call-site of pci_set_of_node().
that is another bug, let of guy handle it.
Yinghai
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-15 14:43 ` Yinghai Lu
@ 2013-05-15 14:46 ` Liu Jiang
2013-05-15 14:58 ` Yinghai Lu
2013-05-15 21:29 ` Benjamin Herrenschmidt
0 siblings, 2 replies; 15+ messages in thread
From: Liu Jiang @ 2013-05-15 14:46 UTC (permalink / raw)
To: Yinghai Lu
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Jiang Liu, Linux-Scsi, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Bjorn Helgaas, Yijing Wang,
linux-pci@vger.kernel.org, Gu Zheng, Paul Mackerras,
Andrew Morton, Myron Stowe, David S. Miller
On Wed 15 May 2013 10:43:02 PM CST, Yinghai Lu wrote:
> On Wed, May 15, 2013 at 7:39 AM, Liu Jiang <liuj97@gmail.com> wrote:
>> On Wed 15 May 2013 02:52:51 AM CST, Yinghai Lu wrote:
>>>
>>> On Tue, May 14, 2013 at 9:57 AM, Liu Jiang <liuj97@gmail.com> wrote:
>>>>
>>>> On Tue 14 May 2013 11:10:33 PM CST, Yinghai Lu wrote:
>>>>>
>>>>>
>>>>> On Tue, May 14, 2013 at 7:59 AM, Liu Jiang <liuj97@gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>> On 05/14/2013 04:26 PM, Gu Zheng wrote:
>>>>>> I suggest to use pci_release_dev() instead because it also needs
>>>>>> to
>>>>>> release OF related resources.
>>>>>> I will update it in next version.
>>>>>>
>>>>>> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
>>>>>> index bc075a3..2ac6338 100644
>>>>>> --- a/drivers/pci/probe.c
>>>>>> +++ b/drivers/pci/probe.c
>>>>>> @@ -1281,7 +1281,7 @@ static struct pci_dev *pci_scan_device(struct
>>>>>> pci_bus
>>>>>> *bus
>>>>>> pci_set_of_node(dev);
>>>>>>
>>>>>> if (pci_setup_device(dev)) {
>>>>>> - kfree(dev);
>>>>>> + pci_release_dev(&dev->dev);
>>>>>> return NULL;
>>>>>
>>>>>
>>>>>
>>>>> no, should move pci_set_of_node calling into pci_setup_device.
>>>>>
>>>>> Yinghai
>>>>
>>>>
>>>>
>>>> I'm not sure whether we should call pci_set_of_node() for SR-IOV devices
>>>> too,
>>>> any suggestions here?
>>>
>>>
>>> or just move down pci_set_of_node after pci_setup_device?
>>>
>>> anyway that is another bug.
>
>> I'm not familiar with the OF logic and can't make sure whether
>> pci_setup_device()
>> has dependency on dev->of_node. Feel it's more safe to call
>> pci_release_of_node()
>> on failing path instead of tuning call-site of pci_set_of_node().
>
> that is another bug, let of guy handle it.
>
> Yinghai
Hi Yinghai,
I don't know any OF exports, could you please help to CC
some OF experts?
Thanks,
Gerry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-15 14:46 ` Liu Jiang
@ 2013-05-15 14:58 ` Yinghai Lu
2013-05-15 21:32 ` Benjamin Herrenschmidt
2013-05-15 21:29 ` Benjamin Herrenschmidt
1 sibling, 1 reply; 15+ messages in thread
From: Yinghai Lu @ 2013-05-15 14:58 UTC (permalink / raw)
To: Liu Jiang, Benjamin Herrenschmidt, Rafael J . Wysocki,
linuxppc-dev, sparclinux@vger.kernel.org, David S. Miller
Cc: linux-pci@vger.kernel.org, Linux Kernel Mailing List,
Bjorn Helgaas, Paul Mackerras, Greg Kroah-Hartman, Gu Zheng,
Myron Stowe
On Wed, May 15, 2013 at 7:46 AM, Liu Jiang <liuj97@gmail.com> wrote:
> On Wed 15 May 2013 10:43:02 PM CST, Yinghai Lu wrote:
>>
>
>> that is another bug, let of guy handle it.
>>
>> Yinghai
>
> Hi Yinghai,
> I don't know any OF exports, could you please help to CC
> some OF experts?
powerpc and sparc are using that.
Ben,
in drivers/pci/probe.c::pci_scan_device() there is
pci_set_of_node(dev);
if (pci_setup_device(dev)) {
kfree(dev);
return NULL;
}
so if pci_setup_device fails, there is one dev reference is not release.
please check you can just move down pci_set_of_node down after that
failing path, like
if (pci_setup_device(dev)) {
kfree(dev);
return NULL;
}
pci_set_of_node(dev);
Yinghai
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-15 14:46 ` Liu Jiang
2013-05-15 14:58 ` Yinghai Lu
@ 2013-05-15 21:29 ` Benjamin Herrenschmidt
2013-05-15 23:46 ` Liu Jiang
1 sibling, 1 reply; 15+ messages in thread
From: Benjamin Herrenschmidt @ 2013-05-15 21:29 UTC (permalink / raw)
To: Liu Jiang
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Linux-Scsi, Myron Stowe, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Bjorn Helgaas, Yijing Wang, Paul Mackerras,
linux-pci@vger.kernel.org, Gu Zheng, Andrew Morton, Yinghai Lu,
David S. Miller, Jiang Liu
On Wed, 2013-05-15 at 22:46 +0800, Liu Jiang wrote:
> I don't know any OF exports, could you please help to CC
> some OF experts?
I wrote that code I think. Sorry, I've missed the beginning of the
thread, what is the problem ?
Cheers,
Ben.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-15 14:58 ` Yinghai Lu
@ 2013-05-15 21:32 ` Benjamin Herrenschmidt
2013-05-15 21:52 ` Yinghai Lu
0 siblings, 1 reply; 15+ messages in thread
From: Benjamin Herrenschmidt @ 2013-05-15 21:32 UTC (permalink / raw)
To: Yinghai Lu
Cc: Bjorn Helgaas, Myron Stowe, Greg Kroah-Hartman,
Linux Kernel Mailing List, Rafael J . Wysocki, Gu Zheng,
Paul Mackerras, linux-pci@vger.kernel.org,
sparclinux@vger.kernel.org, linuxppc-dev, David S. Miller,
Liu Jiang
On Wed, 2013-05-15 at 07:58 -0700, Yinghai Lu wrote:
> Ben,
>
> in drivers/pci/probe.c::pci_scan_device() there is
>
> pci_set_of_node(dev);
>
> if (pci_setup_device(dev)) {
> kfree(dev);
> return NULL;
> }
>
> so if pci_setup_device fails, there is one dev reference is not release.
>
> please check you can just move down pci_set_of_node down after that
> failing path, like
>
>
> if (pci_setup_device(dev)) {
> kfree(dev);
> return NULL;
> }
>
> pci_set_of_node(dev);
No, we want the OF node set when we run the quirks, we intentionally do
that early, the right thing to do is to to call pci_release_of_node()
in the error path (it's safe to call even if the node is NULL).
Cheers,
Ben.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-15 21:32 ` Benjamin Herrenschmidt
@ 2013-05-15 21:52 ` Yinghai Lu
0 siblings, 0 replies; 15+ messages in thread
From: Yinghai Lu @ 2013-05-15 21:52 UTC (permalink / raw)
To: Benjamin Herrenschmidt
Cc: Bjorn Helgaas, Myron Stowe, Greg Kroah-Hartman,
Linux Kernel Mailing List, Rafael J . Wysocki, Gu Zheng,
Paul Mackerras, linux-pci@vger.kernel.org,
sparclinux@vger.kernel.org, linuxppc-dev, David S. Miller,
Liu Jiang
On Wed, May 15, 2013 at 2:32 PM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Wed, 2013-05-15 at 07:58 -0700, Yinghai Lu wrote:
>
>> Ben,
>>
>> in drivers/pci/probe.c::pci_scan_device() there is
>>
>> pci_set_of_node(dev);
>>
>> if (pci_setup_device(dev)) {
>> kfree(dev);
>> return NULL;
>> }
>>
>> so if pci_setup_device fails, there is one dev reference is not release.
>>
>> please check you can just move down pci_set_of_node down after that
>> failing path, like
>>
>>
>> if (pci_setup_device(dev)) {
>> kfree(dev);
>> return NULL;
>> }
>>
>> pci_set_of_node(dev);
>
> No, we want the OF node set when we run the quirks, we intentionally do
> that early, the right thing to do is to to call pci_release_of_node()
> in the error path (it's safe to call even if the node is NULL).
>
Good.
We have two options.
1. can you please submit one complete patch, and get it merged into v3.10.
2. put it together with pci_alloc_dev patchset towards to v3.11?
Thanks
Yinghai
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead
2013-05-15 21:29 ` Benjamin Herrenschmidt
@ 2013-05-15 23:46 ` Liu Jiang
0 siblings, 0 replies; 15+ messages in thread
From: Liu Jiang @ 2013-05-15 23:46 UTC (permalink / raw)
To: Benjamin Herrenschmidt
Cc: Neela Syam Kolli, sparclinux@vger.kernel.org, Toshi Kani,
Linux-Scsi, Myron Stowe, David Airlie, Greg Kroah-Hartman,
linuxppc-dev, Linux Kernel Mailing List, James E.J. Bottomley,
Rafael J . Wysocki, Bjorn Helgaas, Yijing Wang, Paul Mackerras,
linux-pci@vger.kernel.org, Gu Zheng, Andrew Morton, Yinghai Lu,
David S. Miller, Jiang Liu
On Thu 16 May 2013 05:29:31 AM CST, Benjamin Herrenschmidt wrote:
> On Wed, 2013-05-15 at 22:46 +0800, Liu Jiang wrote:
>> I don't know any OF exports, could you please help to CC
>> some OF experts?
>
> I wrote that code I think. Sorry, I've missed the beginning of the
> thread, what is the problem ?
>
> Cheers,
> Ben.
>
>
Hi,
Just found a little memory leak issue that we should call
pci_release_of_node()
on error recovery path in function pci_scan_device().
pci_set_of_node(dev);
if (pci_setup_device(dev)) {
kfree(dev);
return NULL;
}
Regards!
Gerry
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2013-05-15 23:47 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1368461313-4371-1-git-send-email-jiang.liu@huawei.com>
2013-05-13 16:08 ` [PATCH v2, part 1 3/9] PCI: Convert alloc_pci_dev(void) to pci_alloc_dev(bus) instead Jiang Liu
2013-05-13 17:23 ` Yinghai Lu
2013-05-14 8:26 ` Gu Zheng
2013-05-14 14:59 ` Liu Jiang
2013-05-14 15:10 ` Yinghai Lu
2013-05-14 16:57 ` Liu Jiang
2013-05-14 18:52 ` Yinghai Lu
2013-05-15 14:39 ` Liu Jiang
2013-05-15 14:43 ` Yinghai Lu
2013-05-15 14:46 ` Liu Jiang
2013-05-15 14:58 ` Yinghai Lu
2013-05-15 21:32 ` Benjamin Herrenschmidt
2013-05-15 21:52 ` Yinghai Lu
2013-05-15 21:29 ` Benjamin Herrenschmidt
2013-05-15 23:46 ` Liu Jiang
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).