LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] x86: use int instead of long to set reset vector back to 0
@ 2011-02-23 22:12 Don Zickus
0 siblings, 0 replies; 3+ messages in thread
From: Don Zickus @ 2011-02-23 22:12 UTC (permalink / raw)
To: x86; +Cc: LKML, Don Zickus
A customer of ours, complained that when setting the reset vector
back to 0, it trashed other data and hung their box. They noticed
when only 4 bytes were set to 0 instead of 8, everything worked
correctly.
I don't know where to find this in the spec to know if this is
correct, but looking at historical info of the code, x86_64 used
to use 'int' here whereas i386 used to use 'long'. When they got
merged it seemed like 'long' was used. So the change seems to
make sense from that point of view.
I am hoping someone smarter than me can verify this.
Signed-off-by: Don Zickus <dzickus@redhat.com>
---
Reposting this in case it was lost in the noise
---
arch/x86/include/asm/smpboot_hooks.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/x86/include/asm/smpboot_hooks.h b/arch/x86/include/asm/smpboot_hooks.h
index 6c22bf3..42d0366 100644
--- a/arch/x86/include/asm/smpboot_hooks.h
+++ b/arch/x86/include/asm/smpboot_hooks.h
@@ -34,7 +34,7 @@ static inline void smpboot_restore_warm_reset_vector(void)
*/
CMOS_WRITE(0, 0xf);
- *((volatile long *)phys_to_virt(apic->trampoline_phys_low)) = 0;
+ *((volatile int *)phys_to_virt(apic->trampoline_phys_low)) = 0;
}
static inline void __init smpboot_setup_io_apic(void)
--
1.7.3.5
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] x86: use int instead of long to set reset vector back to 0
@ 2011-02-08 4:25 Don Zickus
2011-02-28 15:15 ` Matthew Garrett
0 siblings, 1 reply; 3+ messages in thread
From: Don Zickus @ 2011-02-08 4:25 UTC (permalink / raw)
To: x86; +Cc: LKML, Don Zickus
A customer of ours, complained that when setting the reset vector
back to 0, it trashed other data and hung their box. They noticed
when only 4 bytes were set to 0 instead of 8, everything worked
correctly.
I don't know where to find this in the spec to know if this is
correct, but looking at historical info of the code, x86_64 used
to use 'int' here whereas i386 used to use 'long'. When they got
merged it seemed like 'long' was used. So the change seems to
make sense from that point of view.
I am hoping someone smarter than me can verify this.
Signed-off-by: Don Zickus <dzickus@redhat.com>
---
arch/x86/include/asm/smpboot_hooks.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/x86/include/asm/smpboot_hooks.h b/arch/x86/include/asm/smpboot_hooks.h
index 6c22bf3..42d0366 100644
--- a/arch/x86/include/asm/smpboot_hooks.h
+++ b/arch/x86/include/asm/smpboot_hooks.h
@@ -34,7 +34,7 @@ static inline void smpboot_restore_warm_reset_vector(void)
*/
CMOS_WRITE(0, 0xf);
- *((volatile long *)phys_to_virt(apic->trampoline_phys_low)) = 0;
+ *((volatile int *)phys_to_virt(apic->trampoline_phys_low)) = 0;
}
static inline void __init smpboot_setup_io_apic(void)
--
1.7.3.5
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] x86: use int instead of long to set reset vector back to 0
2011-02-08 4:25 Don Zickus
@ 2011-02-28 15:15 ` Matthew Garrett
0 siblings, 0 replies; 3+ messages in thread
From: Matthew Garrett @ 2011-02-28 15:15 UTC (permalink / raw)
To: Don Zickus; +Cc: x86, LKML, mingo
On Mon, Feb 07, 2011 at 11:25:00PM -0500, Don Zickus wrote:
> A customer of ours, complained that when setting the reset vector
> back to 0, it trashed other data and hung their box. They noticed
> when only 4 bytes were set to 0 instead of 8, everything worked
> correctly.
We're supposed to be resetting trampoline_phys_low and
trampoline_phys_high here, which are two 16-bit values. Writing 64 bits
is definitely going to overwrite space that we're not supposed to be
touching.
> - *((volatile long *)phys_to_virt(apic->trampoline_phys_low)) = 0;
> + *((volatile int *)phys_to_virt(apic->trampoline_phys_low)) = 0;
I'd suggest either using u32 here, or alternatively make it more obvious
what's going on and set trampoline_phys_low and trampoline_phys_high
(which are both 16 bit) independently.
Ingo? Looks like you touched this last, but it seems that the bug was
there already.
--
Matthew Garrett | mjg59@srcf.ucam.org
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-02-28 15:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-23 22:12 [PATCH] x86: use int instead of long to set reset vector back to 0 Don Zickus
-- strict thread matches above, loose matches on Subject: below --
2011-02-08 4:25 Don Zickus
2011-02-28 15:15 ` Matthew Garrett
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).