After looking a bit more about this bug, this was, /methink, more triggered by memory structures being just at different positions due to new Gan code, more than fiddling with GS_BASE MSR. There is basically a window of time, where num_cores >0 and GS/percpu is not setup correctly, but still pointing somewhere we do not GPF. So core_id(), if we were lucky, would just be 0 (or less than num_cores), or we would just scribble random memory until GS/percpu was setup correctly. Once the new percpu code is in, we should be able to drop the ghetto one in kprof.c.
On Mon, Dec 7, 2015 at 6:21 PM, Davide Libenzi <[email protected]> wrote: > Hey Kevin! 😀 > Yes, I tried with offsetof(), it was hell. > I am adding these to asm-offsets.c, so that we can use pcpui_coreid in > there. > > EMIT_OFFSET(pcpui_stacktop, struct per_cpu_info, stacktop); > EMIT_OFFSET(pcpui_coreid, struct per_cpu_info, coreid); > > > > On Mon, Dec 7, 2015 at 6:18 PM, Kevin Klues <[email protected]> wrote: > >> The only reason it exists at all is because of .h file dependency >> hell. We would just use the struct directly if we could get the >> header file included. >> >> On Mon, Dec 7, 2015 at 6:16 PM, 'Davide Libenzi' via Akaros >> <[email protected]> wrote: >> > As side note, given that here we are in C-land, that gs:8 hard-coding >> could >> > be turned into reading the proper offset. >> > I see a comment on include loops there, but once the gen offsets is in >> > place, the offsets are going to be inside an include file which has no >> > dependency at all, so we can turn that 8 into a proper defined offset. >> > >> > >> > On Mon, Dec 7, 2015 at 5:49 PM, Davide Libenzi <[email protected]> >> wrote: >> >> >> >> After *a whole lot* of fun with Gan (his Akaros box reset button melted >> >> basically), we traced the stuck issue to calls to core_id() which >> access the >> >> GS:8 address when it has not been setup. >> >> Strange that Gan changes triggered this, and that before was working >> fine. >> >> >> >> >> >> >> https://github.com/brho/akaros/compare/master...dlibenzi:use_core_id_early >> >> >> >> >> >> The following changes since commit >> >> 2fa42319139e4cc5ca853546363f84443d0ead00: >> >> >> >> Rename 'reallocarray' to 'kreallocarray'. (2015-11-25 18:02:04 -0500) >> >> >> >> are available in the git repository at: >> >> >> >> [email protected]:dlibenzi/akaros use_core_id_early >> >> >> >> for you to fetch changes up to >> a2c903e3f58df5d0bcffa6a2f64b1c8a207a1040: >> >> >> >> Use core_id_early() in kprof trace buffer print code (2015-12-07 >> >> 17:42:25 -0800) >> >> >> >> ---------------------------------------------------------------- >> >> Davide Libenzi (1): >> >> Use core_id_early() in kprof trace buffer print code >> >> >> >> kern/drivers/dev/kprof.c | 4 ++-- >> >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> >> >> diff --git a/kern/drivers/dev/kprof.c b/kern/drivers/dev/kprof.c >> >> index ed16bda..db2739f 100644 >> >> --- a/kern/drivers/dev/kprof.c >> >> +++ b/kern/drivers/dev/kprof.c >> >> @@ -574,7 +574,7 @@ static struct trace_printk_buffer >> >> *kprof_get_printk_buffer(void) >> >> spin_unlock_irqsave(&ktrace_lock); >> >> } >> >> >> >> - return cpu_tpbs + core_id(); >> >> + return cpu_tpbs + core_id_early(); >> >> } >> >> >> >> void trace_vprintk(bool btrace, const char *fmt, va_list args) >> >> @@ -619,7 +619,7 @@ void trace_vprintk(bool btrace, const char *fmt, >> >> va_list args) >> >> if (likely(system_timing.tsc_freq)) >> >> tsc2timespec(read_tsc(), &ts_now); >> >> snprintf(hdr, sizeof(hdr), "[%lu.%09lu]:cpu%d: ", ts_now.tv_sec, >> >> - ts_now.tv_nsec, core_id()); >> >> + ts_now.tv_nsec, core_id_early()); >> >> >> >> pb.ptr = usrbuf + vsnprintf(usrbuf, usr_bufsz, fmt, args); >> >> pb.top = usrbuf + usr_bufsz; >> >> >> > >> > -- >> > You received this message because you are subscribed to the Google >> Groups >> > "Akaros" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> an >> > email to [email protected]. >> > To post to this group, send email to [email protected]. >> > For more options, visit https://groups.google.com/d/optout. >> >> >> >> -- >> ~Kevin >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Akaros" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
