Messages in this thread | | | From | "Rafael J. Wysocki" <> | Subject | Re: Regression from 2.6.26: Hibernation (possibly suspend) broken on Toshiba R500 (bisected) | Date | Tue, 2 Dec 2008 16:49:26 +0100 |
| |
On Tuesday, 2 of December 2008, Linus Torvalds wrote: > > On Tue, 2 Dec 2008, Rafael J. Wysocki wrote: > > r_size = resource_size(r); > > /* For bridges size != alignment */ > > - align = resource_alignment(r); > > + align = (i < PCI_BRIDGE_RESOURCES) ? r_size : r->start; > > Hmm. This means that something set the alignment flags incorrectly. The > resource _should_ have IORESOURCE_SIZEALIGN set for a resource with size > alignment, and IORESOURCE_STARTALIGN for one that has start alignment. > > Your patch doesn't fix anything, it just hides the bug.
Well, it's just a partial revert of commit 5f17cfce5776c566d64430f543a289e5cfa4538b ("PCI: fix pbus_size_mem() resource alignment for CardBus controllers").
> It would be good to hear what resource this is, and where it got set. So > instead of that broken patch that just hides the problem, please try to > debug it with something like > > resource_size_t expected_align; > > expected_align = (i < PCI_BRIDGE_RESOURCES) ? r_size : r->start; > align = resource_alignment(r); > if (align != expected_align) { > dev_warn(&dev->dev, > "BAR %d %llx-%llx wrong alignment flags %lx %llx (%llx)\n", > i, > (unsigned long long) r->start, > (unsigned long long) r->end, > r->flags, > (unsigned long long) align, > (unsigned long long) expected_align); > /* Hacky and wrong, but trying to keep things > align = expected_align; > } > > or something like that. And then we just need to figure out which setup > routine sets the wrong alignment flag,.
Yeah, I'll give it a try later today, when I get back from the Uni.
Thanks, Rafael
| |