From: Vivek Goyal <vgoyal@in.ibm.com>
To: Pavel Machek <pavel@suse.cz>
Cc: linux kernel mailing list <linux-kernel@vger.kernel.org>,
akpm@osdl.org, rjw@sisk.pl, ebiederm@xmission.com, hpa@zytor.com,
magnus.damm@gmail.com,
Reloc Kernel List <fastboot@lists.osdl.org>,
ak@suse.de
Subject: Re: [Fastboot] [RFC] [PATCH 10/16] x86_64: 64bit PIC ACPI wakeup
Date: Thu, 16 Nov 2006 16:29:50 -0500 [thread overview]
Message-ID: <20061116212950.GF13069@in.ibm.com> (raw)
In-Reply-To: <20061116205313.GB5596@elf.ucw.cz>
On Thu, Nov 16, 2006 at 09:53:13PM +0100, Pavel Machek wrote:
> Hi!
>
> > > Ok. In the new code NX bit protection feature is not being enabled and that
> > > seems to be causing the problem. I checked and enabled the NX bit feature
> > > in EFER in wakeup.S and it starts working.
> > >
> > > I think my new machine supports NX bit protection feature and if while
> > > resuming if I don't enable that feature back probably it must have caused
> > > a GPF while loading the page tables which have got NX bit set. (A guess).
> > >
> > > I know that previous machine I was testing on does not support NX bit
> > > feature and that could be the reason that previous machine did not run into
> > > the problems.
> >
> > Fixed the resume problem happening on my second box which supported NX
> > protection bit. Please find attached the regenerated patch.
> >
> > - Killed lots of dead code
>
> Cleanup. (a)
>
> > - Improve the cpu sanity checks to verify long mode
> > is enabled when we wake up.
>
> Change. (b). I'm not sure if we really need this one. I do not think
> replacing cpu while suspended is supported operation.
>
That's fine but it does not harm. Now all the entry path share the
same sanity check (verify_cpu.S) and I believe it makes code more
maintanable and more robust. It just makes our checks stronger in
case somebody really replaces the cpus.
> > - Removed the need for modifying any existing kernel page table.
>
> Unrelated change, probably good one. (c).
>
> > - Moved wakeup_level4_pgt into the wakeup routine so we can
> > run the kernel above 4G.
>
> The change you really wanted to do in the first place. (d).
>
> > - Increased the size of the wakeup routine to 8K.
>
> You want bigger stack or what? (e)
>
I think this is because of wakeup_level4_pgt page tables which are now
part of trampoline. And these page tables got to be at 4K byte boundary.
Hence now we need two pages for trampoline instead of one.
> > - Renamed the variables to use the 64bit register names.
>
> Cleanup. (a)
>
> > - Lots of misc cleanups to match trampoline.S
>
> More cleanups. (a).
>
> Can we at least get (a) (b) (c) (d) and (e) separated?
>
Ok. I will separate the patches.
> Oh and please drop the whitespace changes.
>
Sure. Will drop the whitespace too.
> > I don't have a configuration I can test this but it compiles cleanly
> > and it should work, the code is very similar to the SMP trampoline,
>
> I assume you have configuration for test now?
>
Eric did not have but now I have tested it already on two configurations.
I think that's good enough. Isn't it?
> > @@ -60,17 +60,6 @@ extern char wakeup_start, wakeup_end;
> >
> > extern unsigned long FASTCALL(acpi_copy_wakeup_routine(unsigned long));
> >
> > -static pgd_t low_ptr;
> > -
> > -static void init_low_mapping(void)
> > -{
> > - pgd_t *slot0 = pgd_offset(current->mm, 0UL);
> > - low_ptr = *slot0;
> > - set_pgd(slot0, *pgd_offset(current->mm, PAGE_OFFSET));
> > - WARN_ON(num_online_cpus() != 1);
> > - local_flush_tlb();
> > -}
> > -
>
> So you no longer need identity mapping? Is not it specified that when
> you transition between modes, you should do that while in identity
> mapping?
>
I am not sure where these mappings are required at all in first place?
While going to sleep state? While resuming we are using wake page tables
and they already got identity mappings so it should not be an issue.
[..]
> More whitespace changes.
>
>
> > movl real_magic - wakeup_code, %eax
> > cmpl $0x12345678, %eax
> > jne bogus_real_magic
> >
> > + call verify_cpu # Verify the cpu supports long mode
> > +
>
> Check if cpu supports long mode... but we suspended when running long
> mode, why checking again?
>
Please see above.
> > testl $1, video_flags - wakeup_code
> > jz 1f
> > lcall $0xc000,$3
> > movw %cs, %ax
> > - movw %ax, %ds # Bios might have played with that
> > + movw %ax, %ds # Bios might have played with that
> > movw %ax, %ss
> > 1:
>
> More whitespace changes.
>
> > @@ -228,25 +206,10 @@ wakeup_long64:
> > .align 64
> > gdta:
> > .word 0, 0, 0, 0 # dummy
> > -
> > - .word 0, 0, 0, 0 # unused
> > -
> > - .word 0xFFFF # 4Gb - (0x100000*0x1000 = 4Gb)
> > - .word 0 # base address = 0
> > - .word 0x9B00 # code read/exec. ??? Why I need 0x9B00 (as opposed to 0x9A00 in order for this to work?)
> > - .word 0x00CF # granularity = 4096, 386
> > - # (+5th nibble of limit)
> > -
> > - .word 0xFFFF # 4Gb - (0x100000*0x1000 = 4Gb)
> > - .word 0 # base address = 0
> > - .word 0x9200 # data read/write
> > - .word 0x00CF # granularity = 4096, 386
> > - # (+5th nibble of limit)
> > -# this is 64bit descriptor for code
> > - .word 0xFFFF
> > - .word 0
> > - .word 0x9A00 # code read/exec
> > - .word 0x00AF # as above, but it is long mode and with D=0
> > + /* ??? Why I need the accessed bit set in order for this to work? */
> > + .quad 0x00cf9b000000ffff # __KERNEL32_CS
> > + .quad 0x00af9b000000ffff # __KERNEL_CS
> > + .quad 0x00cf93000000ffff # __KERNEL_DS
>
> Why this change, why did you change the values in here, and why you
> did not tell me about it in the changelog?
>
I think mainly it has been modified to be consistent gdt table across
the kernel (cpu_gdt_table, trampoline.S and wakeup.S). Now __KERNEL_32_CS
entry has been moved up to keep the size of gdt small on trampoline. This
change was done in patch number 7 (cleanup segments).
Seondly, I think it is just change of form from using .word to .quad. More
compact form.
Thirdly I think it does not harm marking that gdt entry has been accessed.
Eric can elaborate more on it. Patch 7 also has got details.
Thanks
Vivek
next prev parent reply other threads:[~2006-11-16 21:30 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-13 16:21 [RFC] [PATCH 0/16] x86_64: Relocatable bzImage Support (V2) Vivek Goyal
2006-11-13 16:26 ` [RFC] [PATCH 1/16] x86_64: Align data segment to page size boundary Vivek Goyal
2006-11-13 16:28 ` [RFC] [PATCH 2/16] x86_64: Assembly safe page.h and pgtable.h Vivek Goyal
2006-11-13 17:17 ` Andi Kleen
2006-11-13 19:27 ` Eric W. Biederman
2006-11-13 21:16 ` Vivek Goyal
2006-11-14 1:46 ` Andi Kleen
2006-11-14 2:41 ` Eric W. Biederman
2006-11-13 16:30 ` [RFC] [PATCH 3/16] x86_64: Kill temp_boot_pmds Vivek Goyal
2006-11-13 16:31 ` [RFC] [PATCH 4/16] x86_64: Clean up the early boot page table Vivek Goyal
2006-11-13 16:33 ` [RFC] [PATCH 5/16] x86_64: Fix earlyprintk to use standard ISA mapping Vivek Goyal
2006-11-13 16:34 ` [RFC] [PATCH 6/16] x86_64: Modify copy_bootdata to to use virtual address Vivek Goyal
2006-11-13 16:35 ` [RFC] [PATCH 7/16] x86_64: cleanup segments Vivek Goyal
2006-11-13 16:40 ` [RFC] [PATCH 8/16] x86_64: Add EFER to the set registers saved by save_processor_state Vivek Goyal
2006-11-13 16:42 ` [RFC] [PATCH 9/16] x86_64: 64bit PIC SMP trampoline Vivek Goyal
2006-11-13 17:28 ` Andi Kleen
2006-11-13 16:43 ` [RFC] [PATCH 10/16] x86_64: 64bit PIC ACPI wakeup Vivek Goyal
2006-11-13 17:22 ` Andi Kleen
2006-11-13 17:59 ` Vivek Goyal
2006-11-13 18:13 ` Andi Kleen
2006-11-13 19:21 ` Eric W. Biederman
2006-11-13 19:34 ` Vivek Goyal
2006-11-13 19:57 ` Eric W. Biederman
2006-11-13 23:01 ` Pavel Machek
2006-11-13 23:09 ` Vivek Goyal
2006-11-15 21:07 ` [PATCH] x86_64: Move cpu long mode verification code to common file (was Re: [RFC] [PATCH 10/16] x86_64: 64bit PIC ACPI wakeup) Vivek Goyal
2006-11-15 22:54 ` Pavel Machek
2006-11-16 20:06 ` Vivek Goyal
2006-11-14 16:30 ` [RFC] [PATCH 10/16] x86_64: 64bit PIC ACPI wakeup Pavel Machek
2006-11-14 21:36 ` Eric W. Biederman
2006-11-14 21:40 ` H. Peter Anvin
2006-11-14 23:43 ` Pavel Machek
2006-11-15 3:49 ` Andi Kleen
2006-11-15 17:26 ` Eric W. Biederman
2006-11-15 18:29 ` Vivek Goyal
2006-11-15 18:38 ` Pavel Machek
2006-11-14 23:17 ` Vivek Goyal
2006-11-14 23:39 ` Pavel Machek
2006-11-15 21:24 ` [Fastboot] " Vivek Goyal
2006-11-15 23:03 ` Pavel Machek
2006-11-16 0:28 ` Vivek Goyal
2006-11-16 20:09 ` Vivek Goyal
2006-11-16 20:53 ` Pavel Machek
2006-11-16 21:29 ` Vivek Goyal [this message]
2006-11-16 21:51 ` Pavel Machek
2006-11-13 16:44 ` [RFC] [PATCH 11/16] x86_64: Modify discover_ebda to use virtual address Vivek Goyal
2006-11-13 16:46 ` [RFC] [PATCH 12/16] x86_64: Remove the identity mapping as early as possible Vivek Goyal
2006-11-13 16:47 ` [RFC] [PATCH 13/16] x86_64: __pa and __pa_symbol address space separation Vivek Goyal
2006-11-13 16:48 ` [RFC] [PATCH 14/16] x86_64: Remove CONFIG_PHYSICAL_START Vivek Goyal
2006-11-13 16:50 ` [RFC] [PATCH 15/16] x86_64: Relocatable kernel support Vivek Goyal
2006-11-13 16:51 ` [RFC] [PATCH 16/16] x86_64: Extend bzImage protocol for relocatable bzImage Vivek Goyal
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=20061116212950.GF13069@in.ibm.com \
--to=vgoyal@in.ibm.com \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=ebiederm@xmission.com \
--cc=fastboot@lists.osdl.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=pavel@suse.cz \
--cc=rjw@sisk.pl \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox