Dan,
I'd like to see this patch from last week make it in before we forget
about it. It's a compiler timebomb waiting to go off. To see it on
gcc-3.4, run ski, set a break point at alloc_vcpu_struct, set the data
window to the address in r12 (sp), step over the second memset and note
that the stack has been cleared. If we were using the stack (as I was
w/ gcc-3.3) we'd be in trouble. Thanks,
Alex
-------- Forwarded Message --------
From: Alex Williamson <alex.williamson@xxxxxx>
To: Tian, Kevin <kevin.tian@xxxxxxxxx>
Cc: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
Subject: RE: [Xen-ia64-devel] stack corruption creating idle domain
Date: Wed, 25 Jan 2006 10:36:49 -0700
On Wed, 2006-01-25 at 11:04 +0800, Tian, Kevin wrote:
>
> Make sense and thanks for info. We shouldn't manipulate switch stack
> area for current running vcpu, since that area only makes sense when
> specific vcpu is de-activated. The initial stack of idle vcpu0 starts
> from point under pt_regs, and thus above memset definitely corrupts
> active stack frames. Could you try whether following change working
> for you?
Kevin,
Yes, that seems to fix the problem, or at least avoid it.
xen-unstable.hg looks to be a bit out of date with xen-ia64-unstable.hg
in this area. I think the patch below is effectively the same change
versus xen-unstable.hg. Thanks,
Alex
Signed-off-by: Alex Williamson <alex.williamson@xxxxxx>
---
diff -r aad2b2da3c8b xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Wed Jan 25 11:51:21 2006
+++ b/xen/arch/ia64/xen/domain.c Wed Jan 25 04:22:50 2006
@@ -157,14 +157,14 @@
if ((v = alloc_xenheap_pages(KERNEL_STACK_SIZE_ORDER)) == NULL)
return NULL;
memset(v, 0, sizeof(*v));
- }
-
- ti = alloc_thread_info(v);
- /* Clear thread_info to clear some important fields, like
- * preempt_count
- */
- memset(ti, 0, sizeof(struct thread_info));
- init_switch_stack(v);
+
+ ti = alloc_thread_info(v);
+ /* Clear thread_info to clear some important fields, like
+ * preempt_count
+ */
+ memset(ti, 0, sizeof(struct thread_info));
+ init_switch_stack(v);
+ }
if (!is_idle_domain(d)) {
v->arch.privregs =
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
--
Alex Williamson HP Linux & Open Source Lab
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|