* [Broken] PCI: clean up resource alignment management
[not found] <b6a2187b0804220943l26f7b441sb5a7309dff0e84dc@mail.gmail.com>
@ 2008-04-22 16:44 ` Jeff Chua
2008-04-22 17:25 ` Linus Torvalds
1 sibling, 0 replies; 10+ messages in thread
From: Jeff Chua @ 2008-04-22 16:44 UTC (permalink / raw)
To: Linus Torvalds, Ivan Kokshaysky, lkml
Linus, Ivan,
I'm having problem loading pccard (Sony PC300 broadband card) with the
recent git download, and bisected down to this commit.
commit 884525655d07fdee9245716b998ecdc45cdd8007
Author: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Date: Sun Mar 30 19:50:14 2008 +0400
PCI: clean up resource alignment management
The symptom that I'm seeing is ...
yenta_cardbus 0000:15:00.0: device not available because of BAR 7
[100:1ff] collisions
yenta_cardbus: probe of 0000:15:00.0 failed with error -16
Reverting the commit solves the problem.
Let me know if you need me to debug further.
Thanks,
Jeff.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
[not found] <b6a2187b0804220943l26f7b441sb5a7309dff0e84dc@mail.gmail.com>
2008-04-22 16:44 ` [Broken] PCI: clean up resource alignment management Jeff Chua
@ 2008-04-22 17:25 ` Linus Torvalds
2008-04-22 21:40 ` Ivan Kokshaysky
1 sibling, 1 reply; 10+ messages in thread
From: Linus Torvalds @ 2008-04-22 17:25 UTC (permalink / raw)
To: Jeff Chua
Cc: Ivan Kokshaysky, Jesse Barnes, Greg KH, Linux Kernel Mailing List
On Wed, 23 Apr 2008, Jeff Chua wrote:
>
> I'm having problem loading pccard (Sony PC300 broadband card) with the
> recent git download, and bisected down to this commit.
>
> commit 884525655d07fdee9245716b998ecdc45cdd8007
> Author: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> Date: Sun Mar 30 19:50:14 2008 +0400
>
> PCI: clean up resource alignment management
Ok, at worst we'll have to revert it, but before doing that, can you set
up a bugzilla entry with a before-and-after version of "lspci -vv", full
dmesg, and the output of /proc/iomem and /proc/ioports?
> The symptom that I'm seeing is ...
>
> yenta_cardbus 0000:15:00.0: device not available because of BAR 7 [100:1ff] collisions
> yenta_cardbus: probe of 0000:15:00.0 failed with error -16
I suspect there wasn't a _real_ collision there, but the allocation failed
because of the alignment bits not being set up right for cardbus bridges,
but I'm not seeing the bug right now.
Ivan?
Linus
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
2008-04-22 17:25 ` Linus Torvalds
@ 2008-04-22 21:40 ` Ivan Kokshaysky
2008-04-22 21:59 ` Linus Torvalds
0 siblings, 1 reply; 10+ messages in thread
From: Ivan Kokshaysky @ 2008-04-22 21:40 UTC (permalink / raw)
To: Linus Torvalds
Cc: Jeff Chua, Jesse Barnes, Greg KH, Linux Kernel Mailing List
On Tue, Apr 22, 2008 at 10:25:34AM -0700, Linus Torvalds wrote:
> On Wed, 23 Apr 2008, Jeff Chua wrote:
> > yenta_cardbus 0000:15:00.0: device not available because of BAR 7 [100:1ff] collisions
> > yenta_cardbus: probe of 0000:15:00.0 failed with error -16
>
> I suspect there wasn't a _real_ collision there, but the allocation failed
> because of the alignment bits not being set up right for cardbus bridges,
> but I'm not seeing the bug right now.
>
> Ivan?
Yes, exactly. My fault - I somehow missed the cardbus stuff...
The patch below should fix that.
Ivan.
---
PCI: make resource_alignment() work for cardbus bridges
Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
---
drivers/pci/setup-bus.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index f9b7bdd..dbd80db 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -418,11 +418,11 @@ static void pci_bus_size_cardbus(struct pci_bus *bus)
*/
b_res[0].start = pci_cardbus_io_size;
b_res[0].end = b_res[0].start + pci_cardbus_io_size - 1;
- b_res[0].flags |= IORESOURCE_IO;
+ b_res[0].flags |= IORESOURCE_IO | IORESOURCE_STARTALIGN;
b_res[1].start = pci_cardbus_io_size;
b_res[1].end = b_res[1].start + pci_cardbus_io_size - 1;
- b_res[1].flags |= IORESOURCE_IO;
+ b_res[1].flags |= IORESOURCE_IO | IORESOURCE_STARTALIGN;
/*
* Check whether prefetchable memory is supported
@@ -443,15 +443,16 @@ static void pci_bus_size_cardbus(struct pci_bus *bus)
if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
b_res[2].start = pci_cardbus_mem_size;
b_res[2].end = b_res[2].start + pci_cardbus_mem_size - 1;
- b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
+ b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH |
+ IORESOURCE_STARTALIGN;
b_res[3].start = pci_cardbus_mem_size;
b_res[3].end = b_res[3].start + pci_cardbus_mem_size - 1;
- b_res[3].flags |= IORESOURCE_MEM;
+ b_res[3].flags |= IORESOURCE_MEM | IORESOURCE_STARTALIGN;
} else {
b_res[3].start = pci_cardbus_mem_size * 2;
b_res[3].end = b_res[3].start + pci_cardbus_mem_size * 2 - 1;
- b_res[3].flags |= IORESOURCE_MEM;
+ b_res[3].flags |= IORESOURCE_MEM | IORESOURCE_STARTALIGN;
}
}
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
2008-04-22 21:40 ` Ivan Kokshaysky
@ 2008-04-22 21:59 ` Linus Torvalds
2008-04-22 22:13 ` Linus Torvalds
2008-04-23 1:05 ` Jeff Chua
0 siblings, 2 replies; 10+ messages in thread
From: Linus Torvalds @ 2008-04-22 21:59 UTC (permalink / raw)
To: Ivan Kokshaysky
Cc: Jeff Chua, Jesse Barnes, Greg KH, Linux Kernel Mailing List
On Wed, 23 Apr 2008, Ivan Kokshaysky wrote:
>
> Yes, exactly. My fault - I somehow missed the cardbus stuff...
Ok, this patch looks sane, but ...
Don't cardbus bus resources work the same way as _normal_ IO resources, ie
the alignment is the same as the size?
So I think we could clean this up a bit, and just use IORESOURCE_SIZEALIGN
for Cardbus bridges, which leads to much more obvious code (ie just keep
the base at zero)?
(In fact, I think cardbus bridges have a much more flexible alignment than
that size thing, and can be aligned at finer granularity, but I forget the
exact details, and since we didn't add a special "alignment" field, we
can't take advantage of it anyway).
Patch entirely UNTESTED!
Linus
---
drivers/pci/setup-bus.c | 30 +++++++++++++++---------------
1 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index f9b7bdd..8ddb918 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -416,13 +416,13 @@ static void pci_bus_size_cardbus(struct pci_bus *bus)
* Reserve some resources for CardBus. We reserve
* a fixed amount of bus space for CardBus bridges.
*/
- b_res[0].start = pci_cardbus_io_size;
- b_res[0].end = b_res[0].start + pci_cardbus_io_size - 1;
- b_res[0].flags |= IORESOURCE_IO;
+ b_res[0].start = 0;
+ b_res[0].end = pci_cardbus_io_size - 1;
+ b_res[0].flags |= IORESOURCE_IO | IORESOURCE_SIZEALIGN;
- b_res[1].start = pci_cardbus_io_size;
- b_res[1].end = b_res[1].start + pci_cardbus_io_size - 1;
- b_res[1].flags |= IORESOURCE_IO;
+ b_res[1].start = 0;
+ b_res[1].end = pci_cardbus_io_size - 1;
+ b_res[1].flags |= IORESOURCE_IO | IORESOURCE_SIZEALIGN;
/*
* Check whether prefetchable memory is supported
@@ -441,17 +441,17 @@ static void pci_bus_size_cardbus(struct pci_bus *bus)
* twice the size.
*/
if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
- b_res[2].start = pci_cardbus_mem_size;
- b_res[2].end = b_res[2].start + pci_cardbus_mem_size - 1;
- b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
+ b_res[2].start = 0;
+ b_res[2].end = pci_cardbus_mem_size - 1;
+ b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH | IORESOURCE_SIZEALIGN;
- b_res[3].start = pci_cardbus_mem_size;
- b_res[3].end = b_res[3].start + pci_cardbus_mem_size - 1;
- b_res[3].flags |= IORESOURCE_MEM;
+ b_res[3].start = 0;
+ b_res[3].end = pci_cardbus_mem_size - 1;
+ b_res[3].flags |= IORESOURCE_MEM | IORESOURCE_SIZEALIGN;
} else {
- b_res[3].start = pci_cardbus_mem_size * 2;
- b_res[3].end = b_res[3].start + pci_cardbus_mem_size * 2 - 1;
- b_res[3].flags |= IORESOURCE_MEM;
+ b_res[3].start = 0;
+ b_res[3].end = pci_cardbus_mem_size * 2 - 1;
+ b_res[3].flags |= IORESOURCE_MEM | IORESOURCE_SIZEALIGN;
}
}
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
2008-04-22 21:59 ` Linus Torvalds
@ 2008-04-22 22:13 ` Linus Torvalds
2008-04-22 22:51 ` Jesse Barnes
2008-04-23 1:05 ` Jeff Chua
1 sibling, 1 reply; 10+ messages in thread
From: Linus Torvalds @ 2008-04-22 22:13 UTC (permalink / raw)
To: Ivan Kokshaysky
Cc: Jeff Chua, Jesse Barnes, Greg KH, Linux Kernel Mailing List
On Tue, 22 Apr 2008, Linus Torvalds wrote:
>
> (In fact, I think cardbus bridges have a much more flexible alignment than
> that size thing, and can be aligned at finer granularity, but I forget the
> exact details, and since we didn't add a special "alignment" field, we
> can't take advantage of it anyway).
Yeah, I double-checked: the IO alignment is 4 bytes, the MEM alignment is
4k.
So if we had a separate alignment word we could use that, but in the
meantime I think IORESOURCE_SIZEALIGN is good enough, and a bit more
readable than the STARTALIGN thing.
Now we just need to have somebody test it. It turns out that I no longer
have any Cardbus cards, since my laptops now all have built-in wireless.
Boo hiss for me.
Linus
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
2008-04-22 22:13 ` Linus Torvalds
@ 2008-04-22 22:51 ` Jesse Barnes
2008-04-23 1:06 ` Linus Torvalds
0 siblings, 1 reply; 10+ messages in thread
From: Jesse Barnes @ 2008-04-22 22:51 UTC (permalink / raw)
To: Linus Torvalds
Cc: Ivan Kokshaysky, Jeff Chua, Greg KH, Linux Kernel Mailing List
On Tuesday, April 22, 2008 3:13 pm Linus Torvalds wrote:
> On Tue, 22 Apr 2008, Linus Torvalds wrote:
> > (In fact, I think cardbus bridges have a much more flexible alignment
> > than that size thing, and can be aligned at finer granularity, but I
> > forget the exact details, and since we didn't add a special "alignment"
> > field, we can't take advantage of it anyway).
>
> Yeah, I double-checked: the IO alignment is 4 bytes, the MEM alignment is
> 4k.
>
> So if we had a separate alignment word we could use that, but in the
> meantime I think IORESOURCE_SIZEALIGN is good enough, and a bit more
> readable than the STARTALIGN thing.
>
> Now we just need to have somebody test it. It turns out that I no longer
> have any Cardbus cards, since my laptops now all have built-in wireless.
> Boo hiss for me.
I may be in the same boat, I'll have to dig around and see if I have any...
That said, I think an explicit alignment field would make things even cleaner
(and like you said allow us to take advantage of bus specific alignment
better).
Jesse
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
2008-04-22 21:59 ` Linus Torvalds
2008-04-22 22:13 ` Linus Torvalds
@ 2008-04-23 1:05 ` Jeff Chua
2008-04-23 1:26 ` Linus Torvalds
1 sibling, 1 reply; 10+ messages in thread
From: Jeff Chua @ 2008-04-23 1:05 UTC (permalink / raw)
To: Linus Torvalds
Cc: Ivan Kokshaysky, Jesse Barnes, Greg KH, Linux Kernel Mailing List
On Wed, Apr 23, 2008 at 5:59 AM, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
> On Wed, 23 Apr 2008, Ivan Kokshaysky wrote:
> > Yes, exactly. My fault - I somehow missed the cardbus stuff...
> Ok, this patch looks sane, but ..
> Patch entirely UNTESTED!
I just tested Linus's patch and it works.
Thanks,
Jeff.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
2008-04-22 22:51 ` Jesse Barnes
@ 2008-04-23 1:06 ` Linus Torvalds
0 siblings, 0 replies; 10+ messages in thread
From: Linus Torvalds @ 2008-04-23 1:06 UTC (permalink / raw)
To: Jesse Barnes
Cc: Ivan Kokshaysky, Jeff Chua, Greg KH, Linux Kernel Mailing List
On Tue, 22 Apr 2008, Jesse Barnes wrote:
> On Tuesday, April 22, 2008 3:13 pm Linus Torvalds wrote:
> >
> > Now we just need to have somebody test it. It turns out that I no longer
> > have any Cardbus cards, since my laptops now all have built-in wireless.
> > Boo hiss for me.
>
> I may be in the same boat, I'll have to dig around and see if I have any...
> That said, I think an explicit alignment field would make things even cleaner
> (and like you said allow us to take advantage of bus specific alignment
> better).
Never mind. The error happens even without a card or driver, just plain
cardbus.
I'll test the fix and check it in if it looks ok,
Linus
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
2008-04-23 1:05 ` Jeff Chua
@ 2008-04-23 1:26 ` Linus Torvalds
2008-04-23 1:46 ` Jeff Chua
0 siblings, 1 reply; 10+ messages in thread
From: Linus Torvalds @ 2008-04-23 1:26 UTC (permalink / raw)
To: Jeff Chua
Cc: Ivan Kokshaysky, Jesse Barnes, Greg KH, Linux Kernel Mailing List
On Wed, 23 Apr 2008, Jeff Chua wrote:
> On Wed, Apr 23, 2008 at 5:59 AM, Linus Torvalds
> <torvalds@linux-foundation.org> wrote:
> > On Wed, 23 Apr 2008, Ivan Kokshaysky wrote:
> > > Yes, exactly. My fault - I somehow missed the cardbus stuff...
> > Ok, this patch looks sane, but ..
> > Patch entirely UNTESTED!
>
> I just tested Linus's patch and it works.
Thanks, and I could test it myself (without any actual card, but at least
I could see the failure to even set up the bridge, and the fix).
So I committed it.
When we did the original commit that caused this, we had considered having
a separate "alignment" value, but I had discarded it because I didn't
think there was any actual hardware that could even use it. But this
cardbus thing shows that I was wrong - the two bits may have been clever,
and it works no worse than the old setup (and slightly better), but I
think the separate alignment field would probably have been better.
Anyway, it's probably not worth worrying about now. It's not like we've
ever _needed_ the finer-granularity alignment, so I think we're ok with
the current setup, but if we ever decide to add the alignment field after
all, somebody should remind me/Ink about the cardbus thing.
Linus
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Broken] PCI: clean up resource alignment management
2008-04-23 1:26 ` Linus Torvalds
@ 2008-04-23 1:46 ` Jeff Chua
0 siblings, 0 replies; 10+ messages in thread
From: Jeff Chua @ 2008-04-23 1:46 UTC (permalink / raw)
To: Linus Torvalds
Cc: Ivan Kokshaysky, Jesse Barnes, Greg KH, Linux Kernel Mailing List
On Wed, Apr 23, 2008 at 9:26 AM, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
> Thanks, and I could test it myself (without any actual card, but at least
> I could see the failure to even set up the bridge, and the fix).
>
> So I committed it.
Cool. Thank you. And the patch does works. I'm using the wireless modem now.
Jeff.
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-04-23 1:47 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <b6a2187b0804220943l26f7b441sb5a7309dff0e84dc@mail.gmail.com>
2008-04-22 16:44 ` [Broken] PCI: clean up resource alignment management Jeff Chua
2008-04-22 17:25 ` Linus Torvalds
2008-04-22 21:40 ` Ivan Kokshaysky
2008-04-22 21:59 ` Linus Torvalds
2008-04-22 22:13 ` Linus Torvalds
2008-04-22 22:51 ` Jesse Barnes
2008-04-23 1:06 ` Linus Torvalds
2008-04-23 1:05 ` Jeff Chua
2008-04-23 1:26 ` Linus Torvalds
2008-04-23 1:46 ` Jeff Chua
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox