On Wed, Jan 8, 2025 at 7:32 AM <devel-requ...@lists.crash-utility.osci.io> wrote:
> Date: Wed, 8 Jan 2025 12:30:11 +1300 > From: Tao Liu <l...@redhat.com> > Subject: [Crash-utility] Re: [PATCH] Fix "net -a" option on Linux 6.13 > and later kernels > To: HAGIO KAZUHITO(萩尾 一仁) <k-hagio...@nec.com> > Cc: "devel@lists.crash-utility.osci.io" > <devel@lists.crash-utility.osci.io> > Message-ID: > <CAO7dBbVYFpdtgMOvtnxp4MJJB_p4GyG= > 2_je7ymt33h40jm...@mail.gmail.com> > Content-Type: text/plain; charset="UTF-8" > > Hi Kazu, > > Thanks for the fix, the patch LGTM, so ack. > > Applied: https://github.com/crash-utility/crash/commit/8eb5279fdd2e447e593fc04c86a9993661f37410 Thanks Lianbo > Thanks, > Tao Liu > > On Tue, Jan 7, 2025 at 3:46 PM HAGIO KAZUHITO(萩尾 一仁) <k-hagio...@nec.com> > wrote: > > > > From: Kazuhito Hagio <k-hagio...@nec.com> > > > > Kernel commit e4e3fd0a99d5 ("Merge branch > 'improve-neigh_flush_dev-performance'") > > and its patch set, which are contained in Linux 6.13 and later kernels, > > removed neigh_hash_table.hash_buckets and neighbour.next members, and > > introduced neigh_hash_table.hash_heads and neighbour.hash members > > instead with the hlist implementation. > > > > Without the patch, the "net -a" option fails with the following error: > > > > crash> net -a > > > > net: invalid structure member offset: neigh_table_hash_buckets > > FILE: net.c LINE: 701 FUNCTION: dump_arp() > > ... > > > > Signed-off-by: Kazuhito Hagio <k-hagio...@nec.com> > > --- > > defs.h | 2 ++ > > net.c | 26 +++++++++++++++++++++----- > > symbols.c | 2 ++ > > 3 files changed, 25 insertions(+), 5 deletions(-) > > > > diff --git a/defs.h b/defs.h > > index d8d378ef94b1..8378cbab2f73 100644 > > --- a/defs.h > > +++ b/defs.h > > @@ -2269,6 +2269,8 @@ struct offset_table { /* stash > of commonly-used offsets */ > > long task_struct_thread_context_x26; > > long task_struct_thread_context_x27; > > long task_struct_thread_context_x28; > > + long neigh_table_hash_heads; > > + long neighbour_hash; > > }; > > > > struct size_table { /* stash of commonly-used sizes */ > > diff --git a/net.c b/net.c > > index 31d3f2bf7c2f..4e14f19fc097 100644 > > --- a/net.c > > +++ b/net.c > > @@ -169,6 +169,11 @@ net_init(void) > > "neigh_hash_table", "hash_shift"); > > MEMBER_OFFSET_INIT(neigh_table_hash_buckets, > > "neigh_hash_table", "hash_buckets"); > > + /* Linux 6.13 and later */ > > + if (INVALID_MEMBER(neigh_table_hash_buckets)) { > > + > MEMBER_OFFSET_INIT(neigh_table_hash_heads, "neigh_hash_table", > "hash_heads"); > > + MEMBER_OFFSET_INIT(neighbour_hash, > "neighbour", "hash"); > > + } > > } else { > > MEMBER_OFFSET_INIT(neigh_table_hash_buckets, > > "neigh_table", "hash_buckets"); > > @@ -698,9 +703,13 @@ dump_arp(void) > > "neigh_table key_len", FAULT_ON_ERROR); > > > > if (VALID_MEMBER(neigh_table_nht_ptr)) { > > - readmem(nht + OFFSET(neigh_table_hash_buckets), > > - KVADDR, &hash, sizeof(hash), > > - "neigh_hash_table hash_buckets ptr", > FAULT_ON_ERROR); > > + /* Linux 6.13 and later */ > > + if (VALID_MEMBER(neigh_table_hash_heads)) > > + readmem(nht + OFFSET(neigh_table_hash_heads), > KVADDR, &hash, > > + sizeof(hash), "neigh_hash_table > hash_heads ptr", FAULT_ON_ERROR); > > + else > > + readmem(nht + OFFSET(neigh_table_hash_buckets), > KVADDR, &hash, > > + sizeof(hash), "neigh_hash_table > hash_buckets ptr", FAULT_ON_ERROR); > > > > readmem(hash, KVADDR, hash_buckets, hash_bytes, > > "neigh_hash_table hash_buckets", FAULT_ON_ERROR); > > @@ -831,8 +840,15 @@ print_neighbour_q(ulong addr, int key_len) > > > > arp_state_to_flags(state); > > > > - readmem(addr + OFFSET(neighbour_next), KVADDR, > > - &addr, sizeof(addr), "neighbour next", > FAULT_ON_ERROR); > > + /* Linux 6.13 and later kernels use hlist. */ > > + if (VALID_MEMBER(neighbour_hash)) { > > + readmem(addr + OFFSET(neighbour_hash), KVADDR, > &addr, > > + sizeof(addr), "neighbour hash", > FAULT_ON_ERROR); > > + if (addr) > > + addr -= OFFSET(neighbour_hash); > > + } else > > + readmem(addr + OFFSET(neighbour_next), KVADDR, > &addr, > > + sizeof(addr), "neighbour next", > FAULT_ON_ERROR); > > } > > > > FREEBUF(ha_buf); > > diff --git a/symbols.c b/symbols.c > > index a3cd0f3f6e1f..0b63e11fa567 100644 > > --- a/symbols.c > > +++ b/symbols.c > > @@ -11028,6 +11028,7 @@ dump_offset_table(char *spec, ulong makestruct) > > > > fprintf(fp, " neighbour_next: %ld\n", > > OFFSET(neighbour_next)); > > + fprintf(fp, " neighbour_hash: %ld\n", > OFFSET(neighbour_hash)); > > fprintf(fp, " neighbour_primary_key: %ld\n", > > OFFSET(neighbour_primary_key)); > > fprintf(fp, " neighbour_ha: %ld\n", > > @@ -11038,6 +11039,7 @@ dump_offset_table(char *spec, ulong makestruct) > > OFFSET(neighbour_nud_state)); > > fprintf(fp, " neigh_table_hash_buckets: %ld\n", > > OFFSET(neigh_table_hash_buckets)); > > + fprintf(fp, " neigh_table_hash_heads: %ld\n", > OFFSET(neigh_table_hash_heads)); > > fprintf(fp, " neigh_table_hash_mask: %ld\n", > > OFFSET(neigh_table_hash_mask)); > > fprintf(fp, " neigh_table_hash_shift: %ld\n", > > -- > > 2.31.1 >
-- Crash-utility mailing list -- devel@lists.crash-utility.osci.io To unsubscribe send an email to devel-le...@lists.crash-utility.osci.io https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/ Contribution Guidelines: https://github.com/crash-utility/crash/wiki