Re: Regression from 2.6.26: Hibernation (possibly suspend) broken on Toshiba R500 (bisected)

From: Rafael J. Wysocki
Date: Tue Dec 02 2008 - 10:50:22 EST


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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/