----- Original Message -----
Dave Anderson <anderson(a)redhat.com> writes:
> Hi Ogawa,
Hi,
> Please review the attached update to your patch, which adds support for
> the irq_ctx-to-irq_stack transition.
> - if ((hard_sp = per_cpu_symbol_search("per_cpu__hardirq_ctx"))) {
> + if ((hard_sp = per_cpu_symbol_search("per_cpu__hardirq_ctx")) ||
> + (hard_sp = per_cpu_symbol_search("per_cpu__hardirq_stack"))) {
> if ((kt->flags & SMP) && (kt->flags & PER_CPU_OFF)) {
> for (i = 0; i < NR_CPUS; i++) {
> + ulong ptr;
> +
[...]
Right, this will work, maybe, several stuffs. However hardirq_tasks[] is
missing, so this will not be fully. For now, I don't have dump of other
than v4.9 (stack format was changed), so I'm not sure which commands are
not working (user of hardirq_tasks[]).
I haven't looked at the recent kernel to check out how the linkage is done
without the temporary thread_info at the bottom of the hard/soft irq stacks,
but looking at a live 4.9 system, it looks like the first word at the base of
the hard and soft irq stack now contains a pointer into the stack of the
last caller? If that's true, then stkptr_to_task() could be used to
populate the hardirq_tasks[] and softirq_tasks[] -- but the initialization
would have to be delayed until near the end of task_init().
Dave
Thanks.
> + if (MEMBER_EXISTS("irq_ctx", "tinfo")) {
> + for (i = 0; i < NR_CPUS; i++) {
> + if (!(tt->hardirq_ctx[i]))
> + continue;
>
> - if (!readmem(tt->hardirq_ctx[i], KVADDR, thread_info_buf,
> - SIZE(irq_ctx), "hardirq thread_union",
> - RETURN_ON_ERROR)) {
> - error(INFO, "cannot read hardirq_ctx[%d] at %lx\n",
> - i, tt->hardirq_ctx[i]);
> - continue;
> - }
> + if (!readmem(tt->hardirq_ctx[i], KVADDR, thread_info_buf,
> + SIZE(irq_ctx), "hardirq thread_union",
> + RETURN_ON_ERROR)) {
> + error(INFO, "cannot read hardirq_ctx[%d] at %lx\n",
> + i, tt->hardirq_ctx[i]);
> + continue;
> + }
>
> - tt->hardirq_tasks[i] =
> - ULONG(thread_info_buf+OFFSET(thread_info_task));
> + tt->hardirq_tasks[i] =
> + ULONG(thread_info_buf+OFFSET(thread_info_task));
> + }
> }
--
OGAWA Hirofumi <hirofumi(a)mail.parknet.co.jp>