Messages in this thread | | | Subject | Re: [v2 PATCH 1/3] panic: Change nmi_panic from macro to function | From | Guenter Roeck <> | Date | Wed, 2 Mar 2016 09:03:06 -0800 |
| |
On 03/02/2016 05:18 AM, Michal Hocko wrote: > On Wed 02-03-16 19:36:26, Hidehiro Kawai wrote: > [...] >> +void nmi_panic(struct pt_regs *regs, const char *fmt, ...) > > Do we really need vargs? All the current users seem to be OK with a > simple string. This makes the code slightly more complicated without any > apparent reason. > >> +{ >> + static char buf[1024]; /* protected by panic_cpu */
I am also not too happy with this additional stack allocation. panic() itself takes varargs. Can those be passed on ? I understand this would need something like vpanic(), so maybe that isn't feasible.
Dropping the format, at least for now, might be a simpler option.
Guenter
>> + va_list args; >> + int old_cpu, cpu; >> + >> + cpu = raw_smp_processor_id(); >> + old_cpu = atomic_cmpxchg(&panic_cpu, PANIC_CPU_INVALID, cpu); >> + >> + if (old_cpu == PANIC_CPU_INVALID) { >> + va_start(args, fmt); >> + vsnprintf(buf, sizeof(buf), fmt, args); >> + va_end(args); >> + >> + panic("%s", buf); >> + } else if (old_cpu != cpu) >> + nmi_panic_self_stop(regs); >> +} >> +EXPORT_SYMBOL(nmi_panic); >> + >> /** >> * panic - halt the system >> * @fmt: The text string to print >> >> >
| |