----- Original Message ----- > Dave Anderson <anderson@xxxxxxxxxx> 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@xxxxxxxxxxxxxxxxxx> > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility