linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] merge 32 and 64 realmode wakeup code
@ 2011-03-13 22:03 matthieu castet
  2011-03-13 22:31 ` Rafael J. Wysocki
  0 siblings, 1 reply; 11+ messages in thread
From: matthieu castet @ 2011-03-13 22:03 UTC (permalink / raw)
  To: Linux Kernel list, linux-acpi, x86; +Cc: Rafael J. Wysocki, H. Peter Anvin

- this mean less ifdef in code
- we could remove now unused field in wakeup_header (pmode_*)

Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
---
 arch/x86/kernel/acpi/realmode/wakeup.S |   26 --------------------------
 arch/x86/kernel/acpi/sleep.c           |   25 +++++++++----------------
 arch/x86/kernel/trampoline_32.S        |    4 ----
 3 files changed, 9 insertions(+), 46 deletions(-)

diff --git a/arch/x86/kernel/acpi/realmode/wakeup.S b/arch/x86/kernel/acpi/realmode/wakeup.S
index ead21b6..150a734 100644
--- a/arch/x86/kernel/acpi/realmode/wakeup.S
+++ b/arch/x86/kernel/acpi/realmode/wakeup.S
@@ -93,36 +93,10 @@ wakeup_code:
 
 	/* Do any other stuff... */
 
-#ifndef CONFIG_64BIT
-	/* This could also be done in C code... */
-	movl	pmode_cr3, %eax
-	movl	%eax, %cr3
-
-	movl	pmode_cr4, %ecx
-	jecxz	1f
-	movl	%ecx, %cr4
-1:
-	movl	pmode_efer, %eax
-	movl	pmode_efer + 4, %edx
-	movl	%eax, %ecx
-	orl	%edx, %ecx
-	jz	1f
-	movl	$MSR_EFER, %ecx
-	wrmsr
-1:
-
-	lgdtl	pmode_gdt
-
-	/* This really couldn't... */
-	movl	pmode_cr0, %eax
-	movl	%eax, %cr0
-	jmp	pmode_return
-#else
 	pushw	$0
 	pushw	trampoline_segment
 	pushw	$0
 	lret
-#endif
 
 bogus_real_magic:
 1:
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
index 4572c58..58a0b4b 100644
--- a/arch/x86/kernel/acpi/sleep.c
+++ b/arch/x86/kernel/acpi/sleep.c
@@ -20,7 +20,7 @@
 
 unsigned long acpi_realmode_flags;
 
-#if defined(CONFIG_SMP) && defined(CONFIG_64BIT)
+#if defined(CONFIG_SMP)
 static char temp_stack[4096];
 #endif
 
@@ -67,33 +67,26 @@ int acpi_save_state_mem(void)
 	header->wakeup_gdt[2] =
 		GDT_ENTRY(0x8093, acpi_wakeup_address, 0xfffff);
 
-#ifndef CONFIG_64BIT
-	store_gdt((struct desc_ptr *)&header->pmode_gdt);
-
-	if (rdmsr_safe(MSR_EFER, &header->pmode_efer_low,
-		       &header->pmode_efer_high))
-		header->pmode_efer_low = header->pmode_efer_high = 0;
-#endif /* !CONFIG_64BIT */
-
 	header->pmode_cr0 = read_cr0();
 	header->pmode_cr4 = read_cr4_safe();
 	header->realmode_flags = acpi_realmode_flags;
 	header->real_magic = 0x12345678;
-
-#ifndef CONFIG_64BIT
-	header->pmode_entry = (u32)&wakeup_pmode_return;
-	header->pmode_cr3 = (u32)__pa(&initial_page_table);
-	saved_magic = 0x12345678;
-#else /* CONFIG_64BIT */
 	header->trampoline_segment = trampoline_address() >> 4;
 #ifdef CONFIG_SMP
 	stack_start = (unsigned long)temp_stack + sizeof(temp_stack);
 	early_gdt_descr.address =
 			(unsigned long)get_cpu_gdt_table(smp_processor_id());
+#ifdef CONFIG_64BIT
 	initial_gs = per_cpu_offset(smp_processor_id());
 #endif
+#endif
+
+#ifndef CONFIG_64BIT
+	initial_code = (unsigned long)&wakeup_pmode_return;
+	saved_magic = 0x12345678;
+#else
 	initial_code = (unsigned long)wakeup_long64;
-       saved_magic = 0x123456789abcdef0L;
+	saved_magic = 0x123456789abcdef0L;
 #endif /* CONFIG_64BIT */
 
 	return 0;
diff --git a/arch/x86/kernel/trampoline_32.S b/arch/x86/kernel/trampoline_32.S
index 451c0a7..a726f60 100644
--- a/arch/x86/kernel/trampoline_32.S
+++ b/arch/x86/kernel/trampoline_32.S
@@ -32,8 +32,6 @@
 #include <asm/segment.h>
 #include <asm/page_types.h>
 
-#ifdef CONFIG_SMP
-
 	.section ".x86_trampoline","a"
 	.balign PAGE_SIZE
 	.code16
@@ -79,5 +77,3 @@ ENTRY(trampoline_status)
 
 .globl trampoline_end
 trampoline_end:
-
-#endif /* CONFIG_SMP */
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2] merge 32 and 64 realmode wakeup code
  2011-03-13 22:03 [PATCH 1/2] merge 32 and 64 realmode wakeup code matthieu castet
@ 2011-03-13 22:31 ` Rafael J. Wysocki
  2011-03-13 23:06   ` H. Peter Anvin
  2011-03-15 19:31   ` Pavel Machek
  0 siblings, 2 replies; 11+ messages in thread
From: Rafael J. Wysocki @ 2011-03-13 22:31 UTC (permalink / raw)
  To: matthieu castet; +Cc: Linux Kernel list, linux-acpi, x86, H. Peter Anvin

On Sunday, March 13, 2011, matthieu castet wrote:
> - this mean less ifdef in code
> - we could remove now unused field in wakeup_header (pmode_*)
> 
> Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
> ---
>  arch/x86/kernel/acpi/realmode/wakeup.S |   26 --------------------------
>  arch/x86/kernel/acpi/sleep.c           |   25 +++++++++----------------
>  arch/x86/kernel/trampoline_32.S        |    4 ----
>  3 files changed, 9 insertions(+), 46 deletions(-)
> 
> diff --git a/arch/x86/kernel/acpi/realmode/wakeup.S b/arch/x86/kernel/acpi/realmode/wakeup.S
> index ead21b6..150a734 100644
> --- a/arch/x86/kernel/acpi/realmode/wakeup.S
> +++ b/arch/x86/kernel/acpi/realmode/wakeup.S
> @@ -93,36 +93,10 @@ wakeup_code:
>  
>  	/* Do any other stuff... */
>  
> -#ifndef CONFIG_64BIT
> -	/* This could also be done in C code... */
> -	movl	pmode_cr3, %eax
> -	movl	%eax, %cr3
> -
> -	movl	pmode_cr4, %ecx
> -	jecxz	1f
> -	movl	%ecx, %cr4
> -1:
> -	movl	pmode_efer, %eax
> -	movl	pmode_efer + 4, %edx
> -	movl	%eax, %ecx
> -	orl	%edx, %ecx
> -	jz	1f
> -	movl	$MSR_EFER, %ecx
> -	wrmsr
> -1:
> -
> -	lgdtl	pmode_gdt
> -
> -	/* This really couldn't... */
> -	movl	pmode_cr0, %eax
> -	movl	%eax, %cr0
> -	jmp	pmode_return
> -#else
>  	pushw	$0
>  	pushw	trampoline_segment
>  	pushw	$0
>  	lret
> -#endif
>  
>  bogus_real_magic:
>  1:
> diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
> index 4572c58..58a0b4b 100644
> --- a/arch/x86/kernel/acpi/sleep.c
> +++ b/arch/x86/kernel/acpi/sleep.c
> @@ -20,7 +20,7 @@
>  
>  unsigned long acpi_realmode_flags;
>  
> -#if defined(CONFIG_SMP) && defined(CONFIG_64BIT)
> +#if defined(CONFIG_SMP)

+#ifdef CONFIG_SMP

please.

>  static char temp_stack[4096];
>  #endif
>  
> @@ -67,33 +67,26 @@ int acpi_save_state_mem(void)
>  	header->wakeup_gdt[2] =
>  		GDT_ENTRY(0x8093, acpi_wakeup_address, 0xfffff);
>  
> -#ifndef CONFIG_64BIT
> -	store_gdt((struct desc_ptr *)&header->pmode_gdt);
> -
> -	if (rdmsr_safe(MSR_EFER, &header->pmode_efer_low,
> -		       &header->pmode_efer_high))
> -		header->pmode_efer_low = header->pmode_efer_high = 0;
> -#endif /* !CONFIG_64BIT */
> -
>  	header->pmode_cr0 = read_cr0();
>  	header->pmode_cr4 = read_cr4_safe();
>  	header->realmode_flags = acpi_realmode_flags;
>  	header->real_magic = 0x12345678;
> -
> -#ifndef CONFIG_64BIT
> -	header->pmode_entry = (u32)&wakeup_pmode_return;
> -	header->pmode_cr3 = (u32)__pa(&initial_page_table);
> -	saved_magic = 0x12345678;
> -#else /* CONFIG_64BIT */
>  	header->trampoline_segment = trampoline_address() >> 4;
>  #ifdef CONFIG_SMP
>  	stack_start = (unsigned long)temp_stack + sizeof(temp_stack);
>  	early_gdt_descr.address =
>  			(unsigned long)get_cpu_gdt_table(smp_processor_id());
> +#ifdef CONFIG_64BIT
>  	initial_gs = per_cpu_offset(smp_processor_id());
>  #endif
> +#endif
> +
> +#ifndef CONFIG_64BIT

Please do
 
+ifdef CONFIG_64BIT

instead and reorder the following code accordingly (IMHO using #ifndef
with #else is confusing, unless the option is a "NO_SOMETHING" one).

> +	initial_code = (unsigned long)&wakeup_pmode_return;
> +	saved_magic = 0x12345678;
> +#else
>  	initial_code = (unsigned long)wakeup_long64;
> -       saved_magic = 0x123456789abcdef0L;
> +	saved_magic = 0x123456789abcdef0L;
>  #endif /* CONFIG_64BIT */
>  
>  	return 0;
> diff --git a/arch/x86/kernel/trampoline_32.S b/arch/x86/kernel/trampoline_32.S
> index 451c0a7..a726f60 100644
> --- a/arch/x86/kernel/trampoline_32.S
> +++ b/arch/x86/kernel/trampoline_32.S
> @@ -32,8 +32,6 @@
>  #include <asm/segment.h>
>  #include <asm/page_types.h>
>  
> -#ifdef CONFIG_SMP
> -
>  	.section ".x86_trampoline","a"
>  	.balign PAGE_SIZE
>  	.code16
> @@ -79,5 +77,3 @@ ENTRY(trampoline_status)
>  
>  .globl trampoline_end
>  trampoline_end:
> -
> -#endif /* CONFIG_SMP */

Apart from the remarks above it looks good.

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2] merge 32 and 64 realmode wakeup code
  2011-03-13 22:31 ` Rafael J. Wysocki
@ 2011-03-13 23:06   ` H. Peter Anvin
  2011-03-15 19:31   ` Pavel Machek
  1 sibling, 0 replies; 11+ messages in thread
From: H. Peter Anvin @ 2011-03-13 23:06 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: matthieu castet, Linux Kernel list, linux-acpi, x86

On 03/13/2011 03:31 PM, Rafael J. Wysocki wrote:
> 
> Apart from the remarks above it looks good.
> 

Indeed... if I get this quickly we can probably get it into .39.

	-hpa

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2] merge 32 and 64 realmode wakeup code
  2011-03-13 22:31 ` Rafael J. Wysocki
  2011-03-13 23:06   ` H. Peter Anvin
@ 2011-03-15 19:31   ` Pavel Machek
  1 sibling, 0 replies; 11+ messages in thread
From: Pavel Machek @ 2011-03-15 19:31 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: matthieu castet, Linux Kernel list, linux-acpi, x86,
	H. Peter Anvin

Hi!

> > -#ifdef CONFIG_SMP
> > -
> >  	.section ".x86_trampoline","a"
> >  	.balign PAGE_SIZE
> >  	.code16
> > @@ -79,5 +77,3 @@ ENTRY(trampoline_status)
> >  
> >  .globl trampoline_end
> >  trampoline_end:
> > -
> > -#endif /* CONFIG_SMP */
> 
> Apart from the remarks above it looks good.

Looks ok to me, too...

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/2] merge 32 and 64 realmode wakeup code
@ 2011-07-02 17:43 Matthieu CASTET
  2011-07-02 22:31 ` H. Peter Anvin
  0 siblings, 1 reply; 11+ messages in thread
From: Matthieu CASTET @ 2011-07-02 17:43 UTC (permalink / raw)
  To: Linux Kernel list, linux-acpi, x86
  Cc: Rafael J. Wysocki, H. Peter Anvin, Matthieu CASTET

- this mean less ifdef in code
- we could remove now unused field in wakeup_header (pmode_*)

Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
---
 arch/x86/kernel/acpi/realmode/wakeup.S |   26 --------------------------
 arch/x86/kernel/acpi/sleep.c           |   27 ++++++++++-----------------
 arch/x86/kernel/trampoline_32.S        |    4 ----
 3 files changed, 10 insertions(+), 47 deletions(-)

diff --git a/arch/x86/kernel/acpi/realmode/wakeup.S b/arch/x86/kernel/acpi/realmode/wakeup.S
index ead21b6..150a734 100644
--- a/arch/x86/kernel/acpi/realmode/wakeup.S
+++ b/arch/x86/kernel/acpi/realmode/wakeup.S
@@ -93,36 +93,10 @@ wakeup_code:
 
 	/* Do any other stuff... */
 
-#ifndef CONFIG_64BIT
-	/* This could also be done in C code... */
-	movl	pmode_cr3, %eax
-	movl	%eax, %cr3
-
-	movl	pmode_cr4, %ecx
-	jecxz	1f
-	movl	%ecx, %cr4
-1:
-	movl	pmode_efer, %eax
-	movl	pmode_efer + 4, %edx
-	movl	%eax, %ecx
-	orl	%edx, %ecx
-	jz	1f
-	movl	$MSR_EFER, %ecx
-	wrmsr
-1:
-
-	lgdtl	pmode_gdt
-
-	/* This really couldn't... */
-	movl	pmode_cr0, %eax
-	movl	%eax, %cr0
-	jmp	pmode_return
-#else
 	pushw	$0
 	pushw	trampoline_segment
 	pushw	$0
 	lret
-#endif
 
 bogus_real_magic:
 1:
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
index 18a857b..96719ad 100644
--- a/arch/x86/kernel/acpi/sleep.c
+++ b/arch/x86/kernel/acpi/sleep.c
@@ -20,7 +20,7 @@
 
 unsigned long acpi_realmode_flags;
 
-#if defined(CONFIG_SMP) && defined(CONFIG_64BIT)
+#ifdef CONFIG_SMP
 static char temp_stack[4096];
 #endif
 
@@ -67,34 +67,27 @@ int acpi_suspend_lowlevel(void)
 	header->wakeup_gdt[2] =
 		GDT_ENTRY(0x8093, acpi_wakeup_address, 0xfffff);
 
-#ifndef CONFIG_64BIT
-	store_gdt((struct desc_ptr *)&header->pmode_gdt);
-
-	if (rdmsr_safe(MSR_EFER, &header->pmode_efer_low,
-		       &header->pmode_efer_high))
-		header->pmode_efer_low = header->pmode_efer_high = 0;
-#endif /* !CONFIG_64BIT */
-
 	header->pmode_cr0 = read_cr0();
 	header->pmode_cr4 = read_cr4_safe();
 	header->realmode_flags = acpi_realmode_flags;
 	header->real_magic = 0x12345678;
-
-#ifndef CONFIG_64BIT
-	header->pmode_entry = (u32)&wakeup_pmode_return;
-	header->pmode_cr3 = (u32)__pa(&initial_page_table);
-	saved_magic = 0x12345678;
-#else /* CONFIG_64BIT */
 	header->trampoline_segment = trampoline_address() >> 4;
 #ifdef CONFIG_SMP
 	stack_start = (unsigned long)temp_stack + sizeof(temp_stack);
 	early_gdt_descr.address =
 			(unsigned long)get_cpu_gdt_table(smp_processor_id());
+#ifdef CONFIG_64BIT
 	initial_gs = per_cpu_offset(smp_processor_id());
 #endif
+#endif
+
+#ifdef CONFIG_64BIT
 	initial_code = (unsigned long)wakeup_long64;
-       saved_magic = 0x123456789abcdef0L;
-#endif /* CONFIG_64BIT */
+	saved_magic = 0x123456789abcdef0L;
+#else
+	initial_code = (unsigned long)&wakeup_pmode_return;
+	saved_magic = 0x12345678;
+#endif
 
 	do_suspend_lowlevel();
 	return 0;
diff --git a/arch/x86/kernel/trampoline_32.S b/arch/x86/kernel/trampoline_32.S
index 451c0a7..a726f60 100644
--- a/arch/x86/kernel/trampoline_32.S
+++ b/arch/x86/kernel/trampoline_32.S
@@ -32,8 +32,6 @@
 #include <asm/segment.h>
 #include <asm/page_types.h>
 
-#ifdef CONFIG_SMP
-
 	.section ".x86_trampoline","a"
 	.balign PAGE_SIZE
 	.code16
@@ -79,5 +77,3 @@ ENTRY(trampoline_status)
 
 .globl trampoline_end
 trampoline_end:
-
-#endif /* CONFIG_SMP */
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2] merge 32 and 64 realmode wakeup code
  2011-07-02 17:43 Matthieu CASTET
@ 2011-07-02 22:31 ` H. Peter Anvin
  2011-07-03  6:50   ` Rafael J. Wysocki
  0 siblings, 1 reply; 11+ messages in thread
From: H. Peter Anvin @ 2011-07-02 22:31 UTC (permalink / raw)
  To: Matthieu CASTET; +Cc: Linux Kernel list, linux-acpi, x86, Rafael J. Wysocki

On 07/02/2011 10:43 AM, Matthieu CASTET wrote:
> - this mean less ifdef in code
> - we could remove now unused field in wakeup_header (pmode_*)
> 
> Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
> ---
>  arch/x86/kernel/acpi/realmode/wakeup.S |   26 --------------------------
>  arch/x86/kernel/acpi/sleep.c           |   27 ++++++++++-----------------
>  arch/x86/kernel/trampoline_32.S        |    4 ----
>  3 files changed, 10 insertions(+), 47 deletions(-)
> 

Looks great to me.  Rafael?

	-hpa


-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2] merge 32 and 64 realmode wakeup code
  2011-07-02 22:31 ` H. Peter Anvin
@ 2011-07-03  6:50   ` Rafael J. Wysocki
  2011-07-03 20:52     ` matthieu castet
  0 siblings, 1 reply; 11+ messages in thread
From: Rafael J. Wysocki @ 2011-07-03  6:50 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Matthieu CASTET, Linux Kernel list, linux-acpi, x86

On Sunday, July 03, 2011, H. Peter Anvin wrote:
> On 07/02/2011 10:43 AM, Matthieu CASTET wrote:
> > - this mean less ifdef in code
> > - we could remove now unused field in wakeup_header (pmode_*)
> > 
> > Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
> > ---
> >  arch/x86/kernel/acpi/realmode/wakeup.S |   26 --------------------------
> >  arch/x86/kernel/acpi/sleep.c           |   27 ++++++++++-----------------
> >  arch/x86/kernel/trampoline_32.S        |    4 ----
> >  3 files changed, 10 insertions(+), 47 deletions(-)
> > 
> 
> Looks great to me.  Rafael?

I don't have any immediate complaints.  Please feel free to add my ACK
to the patches.

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2] merge 32 and 64 realmode wakeup code
  2011-07-03  6:50   ` Rafael J. Wysocki
@ 2011-07-03 20:52     ` matthieu castet
  2011-07-03 21:19       ` H. Peter Anvin
  0 siblings, 1 reply; 11+ messages in thread
From: matthieu castet @ 2011-07-03 20:52 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: H. Peter Anvin, Linux Kernel list, linux-acpi, x86

Hi,

Le Sun, 3 Jul 2011 08:50:32 +0200,
"Rafael J. Wysocki" <rjw@sisk.pl> a écrit :

> On Sunday, July 03, 2011, H. Peter Anvin wrote:
> > On 07/02/2011 10:43 AM, Matthieu CASTET wrote:
> > > - this mean less ifdef in code
> > > - we could remove now unused field in wakeup_header (pmode_*)
> > > 
> > > Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
> > > ---
> > >  arch/x86/kernel/acpi/realmode/wakeup.S |   26
> > > -------------------------- arch/x86/kernel/acpi/sleep.c
> > > |   27 ++++++++++-----------------
> > > arch/x86/kernel/trampoline_32.S        |    4 ---- 3 files
> > > changed, 10 insertions(+), 47 deletions(-)
> > > 
> > 
> > Looks great to me.  Rafael?
> 
> I don't have any immediate complaints.  Please feel free to add my ACK
> to the patches.
> 
Thanks,

Should I repost the patches with our ack somewhere ?


Matthieu
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2] merge 32 and 64 realmode wakeup code
  2011-07-03 20:52     ` matthieu castet
@ 2011-07-03 21:19       ` H. Peter Anvin
  0 siblings, 0 replies; 11+ messages in thread
From: H. Peter Anvin @ 2011-07-03 21:19 UTC (permalink / raw)
  To: matthieu castet; +Cc: Rafael J. Wysocki, Linux Kernel list, linux-acpi, x86

On 07/03/2011 01:52 PM, matthieu castet wrote:
> Thanks,
> 
> Should I repost the patches with our ack somewhere ?

No need.

	-hpa

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/2] merge 32 and 64 realmode wakeup code
@ 2011-12-16 20:13 Matthieu CASTET
  2012-01-13 18:01 ` Pavel Machek
  0 siblings, 1 reply; 11+ messages in thread
From: Matthieu CASTET @ 2011-12-16 20:13 UTC (permalink / raw)
  To: linux-acpi, hpa, linux-kernel, rjw; +Cc: Matthieu CASTET

- this mean less ifdef in code
- we could remove now unused field in wakeup_header (pmode_*)

Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
---
 arch/x86/kernel/acpi/realmode/wakeup.S |   26 --------------------------
 arch/x86/kernel/acpi/sleep.c           |   27 ++++++++++-----------------
 arch/x86/kernel/trampoline_32.S        |    4 ----
 3 files changed, 10 insertions(+), 47 deletions(-)

diff --git a/arch/x86/kernel/acpi/realmode/wakeup.S b/arch/x86/kernel/acpi/realmode/wakeup.S
index b4fd836..2a83da1 100644
--- a/arch/x86/kernel/acpi/realmode/wakeup.S
+++ b/arch/x86/kernel/acpi/realmode/wakeup.S
@@ -107,36 +107,10 @@ wakeup_code:
 
 	/* Do any other stuff... */
 
-#ifndef CONFIG_64BIT
-	/* This could also be done in C code... */
-	movl	pmode_cr3, %eax
-	movl	%eax, %cr3
-
-	movl	pmode_cr4, %ecx
-	jecxz	1f
-	movl	%ecx, %cr4
-1:
-	movl	pmode_efer, %eax
-	movl	pmode_efer + 4, %edx
-	movl	%eax, %ecx
-	orl	%edx, %ecx
-	jz	1f
-	movl	$MSR_EFER, %ecx
-	wrmsr
-1:
-
-	lgdtl	pmode_gdt
-
-	/* This really couldn't... */
-	movl	pmode_cr0, %eax
-	movl	%eax, %cr0
-	jmp	pmode_return
-#else
 	pushw	$0
 	pushw	trampoline_segment
 	pushw	$0
 	lret
-#endif
 
 bogus_real_magic:
 1:
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
index 103b6ab..14b00f7 100644
--- a/arch/x86/kernel/acpi/sleep.c
+++ b/arch/x86/kernel/acpi/sleep.c
@@ -20,7 +20,7 @@
 
 unsigned long acpi_realmode_flags;
 
-#if defined(CONFIG_SMP) && defined(CONFIG_64BIT)
+#ifdef CONFIG_SMP
 static char temp_stack[4096];
 #endif
 
@@ -67,14 +67,6 @@ int acpi_suspend_lowlevel(void)
 	header->wakeup_gdt[2] =
 		GDT_ENTRY(0x8093, acpi_wakeup_address, 0xfffff);
 
-#ifndef CONFIG_64BIT
-	store_gdt((struct desc_ptr *)&header->pmode_gdt);
-
-	if (rdmsr_safe(MSR_EFER, &header->pmode_efer_low,
-		       &header->pmode_efer_high))
-		header->pmode_efer_low = header->pmode_efer_high = 0;
-#endif /* !CONFIG_64BIT */
-
 	header->pmode_cr0 = read_cr0();
 	header->pmode_cr4 = read_cr4_safe();
 	header->pmode_behavior = 0;
@@ -85,22 +77,23 @@ int acpi_suspend_lowlevel(void)
 			(1 << WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE);
 	header->realmode_flags = acpi_realmode_flags;
 	header->real_magic = 0x12345678;
-
-#ifndef CONFIG_64BIT
-	header->pmode_entry = (u32)&wakeup_pmode_return;
-	header->pmode_cr3 = (u32)__pa(&initial_page_table);
-	saved_magic = 0x12345678;
-#else /* CONFIG_64BIT */
 	header->trampoline_segment = trampoline_address() >> 4;
 #ifdef CONFIG_SMP
 	stack_start = (unsigned long)temp_stack + sizeof(temp_stack);
 	early_gdt_descr.address =
 			(unsigned long)get_cpu_gdt_table(smp_processor_id());
+#ifdef CONFIG_64BIT
 	initial_gs = per_cpu_offset(smp_processor_id());
 #endif
+#endif
+
+#ifdef CONFIG_64BIT
 	initial_code = (unsigned long)wakeup_long64;
-       saved_magic = 0x123456789abcdef0L;
-#endif /* CONFIG_64BIT */
+	saved_magic = 0x123456789abcdef0L;
+#else
+	initial_code = (unsigned long)&wakeup_pmode_return;
+	saved_magic = 0x12345678;
+#endif
 
 	do_suspend_lowlevel();
 	return 0;
diff --git a/arch/x86/kernel/trampoline_32.S b/arch/x86/kernel/trampoline_32.S
index 451c0a7..a726f60 100644
--- a/arch/x86/kernel/trampoline_32.S
+++ b/arch/x86/kernel/trampoline_32.S
@@ -32,8 +32,6 @@
 #include <asm/segment.h>
 #include <asm/page_types.h>
 
-#ifdef CONFIG_SMP
-
 	.section ".x86_trampoline","a"
 	.balign PAGE_SIZE
 	.code16
@@ -79,5 +77,3 @@ ENTRY(trampoline_status)
 
 .globl trampoline_end
 trampoline_end:
-
-#endif /* CONFIG_SMP */
-- 
1.7.5.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/2] merge 32 and 64 realmode wakeup code
  2011-12-16 20:13 Matthieu CASTET
@ 2012-01-13 18:01 ` Pavel Machek
  0 siblings, 0 replies; 11+ messages in thread
From: Pavel Machek @ 2012-01-13 18:01 UTC (permalink / raw)
  To: Matthieu CASTET; +Cc: linux-acpi, hpa, linux-kernel, rjw

> - this mean less ifdef in code
> - we could remove now unused field in wakeup_header (pmode_*)
> 
> Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>

Looks good... was it tested on both 32 and 64 bit?

> -	/* This really couldn't... */
> -	movl	pmode_cr0, %eax
> -	movl	%eax, %cr0
> -	jmp	pmode_return

How was this handled?
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2012-01-13 18:01 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-13 22:03 [PATCH 1/2] merge 32 and 64 realmode wakeup code matthieu castet
2011-03-13 22:31 ` Rafael J. Wysocki
2011-03-13 23:06   ` H. Peter Anvin
2011-03-15 19:31   ` Pavel Machek
  -- strict thread matches above, loose matches on Subject: below --
2011-07-02 17:43 Matthieu CASTET
2011-07-02 22:31 ` H. Peter Anvin
2011-07-03  6:50   ` Rafael J. Wysocki
2011-07-03 20:52     ` matthieu castet
2011-07-03 21:19       ` H. Peter Anvin
2011-12-16 20:13 Matthieu CASTET
2012-01-13 18:01 ` Pavel Machek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).