[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] S3 resume issues

(re-adding Cc list)

>>> On 16.01.13 at 11:43, Ben Guthro <ben@xxxxxxxxxx> wrote:
> On Wed, Jan 16, 2013 at 4:35 AM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
>>>>> On 15.01.13 at 19:10, Ben Guthro <ben@xxxxxxxxxx> wrote:
>>> On Tue, Jan 15, 2013 at 7:55 AM, Ben Guthro <ben@xxxxxxxxxx> wrote:
>>>> I'll continue down the rcu_check_callbacks() path, I guess.
>>> I believe I've found the culprit of the issue, but am unsure of what
>>> the proper solution is.
>>> It looks like after resume, on these newer machines, the ns16550
>>> registers contain all FF's - and so, the timer code was getting stuck
>>> in __ns16550_poll in the following stack:
>> Interesting. This isn't a plug in PCI device, is it? Which would
>> mean this is a BIOS bug (not bringing the device back online,
>> perhaps by keeping it disabled in some LPC register).
> No, it appears to be the legacy COM1 0x3f8 device.
>>> A workaround seems to be to check some of the named registers at
>>> resume time, and bail out if they contain 0xFF's:
>>> ...
>>> This, of course means that you don't get any serial data after resume,
>>> which is not ideal.
>> Yeah, but better than not resuming. I.e. if we can really nail this
>> down to a platform issue, applying a workaround like what you
>> suggested would seem worth considering.
>> But I suppose this isn't helping on the laptop then?
> It seemed to resolve the hang on both the Ivy Bridge Intel Mobile SDP
> (which is effectively laptop hardware in a desktop case) - as well as
> the Lenovo T430 machines.
> Unfortunately, it did not resolve it for Tomasz's machine, or another
> Sandy Bridge laptop I tried (Lenovo X230T) - so there may be more than
> one issue here.
>> And to me this
>> would also imply that if you run without serial console, there
>> wouldn't be an issue.
> I thought this as well - but if I read the code correctly, it seems
> that the ns16550 is set up for the legacy devices in
> xen/arch/x86/setup.c _start_xen(), regardless of whether serial is
> configured on the command line (if the hardware exists):
>     /* We initialise the serial devices very early so we can get debugging. 
> */
>     ns16550.io_base = 0x3f8;
>     ns16550.irq     = 4;
>     ns16550_init(0, &ns16550);
>     ns16550.io_base = 0x2f8;
>     ns16550.irq     = 3;
>     ns16550_init(1, &ns16550);

Yeah, but serial_resume() doesn't call their resume handlers
unless their state is serial_initialized, which it can get to only
through serial_parse_handle() seeing the right handle.


Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.