From: Oren Laadan <orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
To: "Serge E. Hallyn" <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Cc: Linux Containers <containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org>
Subject: Re: [PATCH 1/1] fill vdso with syscall32_setup_pages if TIF_IA32 on x86_64
Date: Mon, 08 Feb 2010 11:17:58 -0500 [thread overview]
Message-ID: <4B703936.3010200@cs.columbia.edu> (raw)
In-Reply-To: <20100208153145.GB9120-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Serge E. Hallyn wrote:
> Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
>>
>> Serge E. Hallyn wrote:
>>> Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
>>>> Serge E. Hallyn wrote:
>>>>> Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
>>>>>> Serge E. Hallyn wrote:
>>>>>>> Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
>>>>>>>> Serge E. Hallyn wrote:
>>>>>>>>> Quoting Oren Laadan (orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org):
>>>>>>>>>> Cool !
>>>>>>>>>>
>>>>>>>>>> So what do we have working now for 64 bit kernel (for 32 bit kernel
>>>>>>>>>> we know it works...):
>>>>>>>>>>
>>>>>>>>>> 'restart' checkpointed
>>>>>>>>>> program program
>>>>>>>>>> ----------------------------------------
>>>>>>>>>> 64bit 64bit -> works
>>>>>>>>>> 32bit 32bit -> works
>>>>>>>>>>
>>>>>>>>>> 64bit 32bit -> ?????
>>>>> s/?????/Rejected/
>>>>>
>>>>> CKPT_ARCH_ID is of course different for X86_32 than X86_64, so
>>>>> we refuse restart in restore_read_header().
>>>>>
>>>>> -serge
>>>>>
>>>> lol ... that's actually funny !
>>>>
>>>> Anyway, in light of the IRC discussions, here are the cases again:
>>>>
>>>>
>>>> original original restart target
>>>> program kernel program kernel
>>>> -------- --------- -------- --------
>>>> 64 bit 64 bit 64 bit 64 bit [0] works
>>>>
>>>> 32 bit 32 bit 32 bit 32 bit [0] works
>>>> 32 bit 64 bit 32 bit 64 bit [0] works
>>>>
>>>> 32 bit 32 bit 32 bit 64 bit [1]
>>>> 32 bit 64 bit 32 bit 32 bit [1]
>>>>
>>>> 32 bit any 64 bit 64 bit [2]
>>>> 64 bit 64 bit 32 bit 64 bit [2]
>>>>
>>>> [0] The first 3 cases are "homogeneous", with conditions equal at
>>>> checkpoint and restart. AFAIK, they work.
>>>>
>>>> [1] The next two cases consider 32 bit program, and vary only the
>>>> environment - the kernel may change from 32 to 64 or back. We want
>>>> them to work.
>>>>
>>>> IIUC, your comment above means that they don't work because the
>>>> CKPT_ARCH_ID is a mismatch. The fix should be trivial - either
>>>> make 'restart' modify it, or make the kernel tolerate it.
^^^^^^^^^^^^^^^^^^^^^^^^
---->
>>> Well, you'd think so, but we also check for uts->machine, and want
>>> to eventually check for kernel config, both of which are obviously
>>> different.
>> Then we'll have to take that in account when we get to also
>> check those other fields.
>>
>>> After I comment out the obvious offending checks, it still fails to
>>> restart from x8632->x86-64. I can spend some time next week figuring
>>> out what we're not quite doing right as there shouldn't be a
>>> problem really. But do we definately want to go out of our way to try
>>> and mask out the differences in this case, while trying to detect
>>> cpu differences between two x86-32's for instance?
>> I agree, there shouldn't be a problem really, and I expect this to
>> be a very useful feature for migration/fault-tolerance.
>
> May be, but then perhaps this is the first case where we should be
> using a userspace checkpoing image rewriter to help us out. Otherwise
> we'll need to hardcode in the kernel that a task which was
> checkpointed on X86_32 should, on x86_64, have TIF_IA32 added to
> the thread_flags but may be restarted; etc. Should be doable, but
> kind of ugly...
Indeed. I offered that path above :)
Since we are going to need the bit-ness of a task for the tree
creation as well, how about:
1) Add the bit-ness property to the pids_arr[], e.g. as a flags
field (we may need use it for other stuff later).
2) 'restart' already examines and possibly modifies pids_arr[],
so in transition from 32->64 it will add that flag, and in the
opposite transition it will check/remove that flag.
3) 'restart' will also change the header architecture as needed.
4) The kernel will verify that the bitness reported in pids_arr[]
is the same as the actual process. (This is just a sanity check,
of course).
Later we'll also make 'restart' use that bit-ness information to
decide whether an exec() is needed to change own bit-ness.
Oren.
next prev parent reply other threads:[~2010-02-08 16:17 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-27 7:16 [PATCH 1/1] fill vdso with syscall32_setup_pages if TIF_IA32 on x86_64 Serge E. Hallyn
[not found] ` <20100127071636.GA16624-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-01-27 14:59 ` Oren Laadan
[not found] ` <Pine.LNX.4.64.1001270954120.8974-CXF6herHY6ykSYb+qCZC/1i27PF6R63G9nwVQlTi/Pw@public.gmane.org>
2010-01-27 20:10 ` Serge E. Hallyn
[not found] ` <20100127201037.GA23119-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-01-27 20:51 ` Oren Laadan
[not found] ` <4B60A763.4030806-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-01-27 21:10 ` Serge E. Hallyn
[not found] ` <20100127211052.GA27579-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-01-27 21:13 ` Oren Laadan
[not found] ` <4B60AC7E.2010908-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-02-05 23:38 ` Serge E. Hallyn
[not found] ` <20100205233800.GA17057-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-06 1:04 ` Oren Laadan
[not found] ` <4B6CC00C.2090509-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-02-06 6:26 ` Matt Helsley
[not found] ` <20100206062650.GG3714-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2010-02-06 15:43 ` Oren Laadan
2010-02-08 17:40 ` Oren Laadan
2010-02-06 17:09 ` Serge E. Hallyn
[not found] ` <20100206170902.GA20497-A9i7LUbDfNHQT0dZR+AlfA@public.gmane.org>
2010-02-08 14:43 ` Oren Laadan
[not found] ` <4B7022FE.4060704-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-02-08 15:31 ` Serge E. Hallyn
[not found] ` <20100208153145.GB9120-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-08 16:17 ` Oren Laadan [this message]
[not found] ` <4B703936.3010200-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-02-09 14:54 ` Serge E. Hallyn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B703936.3010200@cs.columbia.edu \
--to=orenl-eqauephvms7envbuuze7ea@public.gmane.org \
--cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
--cc=serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.