mbox series

[v6,0/5] rcu: Dump memory object info if callback function is invalid

Message ID 20230804091136.1177-1-thunder.leizhen@huaweicloud.com (mailing list archive)
Headers show
Series rcu: Dump memory object info if callback function is invalid | expand

Message

Leizhen (ThunderTown) Aug. 4, 2023, 9:11 a.m. UTC
From: Zhen Lei <thunder.leizhen@huawei.com>

v5 --> v6:
1. Use print_hex_dump() to dump the memory of slab object.
2. Add a new dump prefix DUMP_PREFIX_ADDRESS_LOW16
3. Minimize the output width of the offset

v4 --> v5:
1. Add Reviewed-by Acked-by for patch 1/3
2. Add patch 3/3:
   mm: Dump the memory of slab object in kmem_dump_obj()

v3 --> v4:
1. Remove kmem_valid_obj() and convert kmem_dump_obj() to work the same way
   as vmalloc_dump_obj().
2. In kernel/rcu/rcu.h
-#include <linux/mm.h>
+#include <linux/slab.h>

v2 --> v3:
1. I made statistics about the source of 'rhp'. kmem_valid_obj() accounts for
   more than 97.5%, and vmalloc accounts for less than 1%. So change call
   mem_dump_obj() to call kmem_dump_obj() can meet debugging requirements and
   avoid the potential deadlock risk of vmalloc_dump_obj().
-		mem_dump_obj(rhp);
+		if (kmem_valid_obj(rhp))
+			kmem_dump_obj(rhp);

   The discussion about vmap_area_lock deadlock in v2:
   https://lkml.org/lkml/2022/11/11/493

2. Provide static inline empty functions for kmem_valid_obj() and kmem_dump_obj()
   when CONFIG_PRINTK=n.

v1 --> v2:
1. Remove condition "(unsigned long)rhp->func & 0x3", it have problems on x86.
2. Paul E. McKenney helped me update the commit message, thanks.


Zhen Lei (5):
  hexdump: add a new dump prefix DUMP_PREFIX_ADDRESS_LOW16
  hexdump: minimize the output width of the offset
  mm: Remove kmem_valid_obj()
  mm: Dump the memory of slab object in kmem_dump_obj()
  rcu: Dump memory object info if callback function is invalid

 include/linux/printk.h |  1 +
 include/linux/slab.h   |  5 ++--
 kernel/rcu/rcu.h       |  7 +++++
 kernel/rcu/srcutiny.c  |  1 +
 kernel/rcu/srcutree.c  |  1 +
 kernel/rcu/tasks.h     |  1 +
 kernel/rcu/tiny.c      |  1 +
 kernel/rcu/tree.c      |  1 +
 lib/hexdump.c          | 17 +++++++++--
 mm/slab_common.c       | 68 ++++++++++++++++++++++--------------------
 mm/util.c              |  4 +--
 11 files changed, 67 insertions(+), 40 deletions(-)

Comments

Paul E. McKenney Aug. 4, 2023, 5:31 p.m. UTC | #1
On Fri, Aug 04, 2023 at 05:11:30PM +0800, thunder.leizhen@huaweicloud.com wrote:
> From: Zhen Lei <thunder.leizhen@huawei.com>
> 
> v5 --> v6:
> 1. Use print_hex_dump() to dump the memory of slab object.
> 2. Add a new dump prefix DUMP_PREFIX_ADDRESS_LOW16
> 3. Minimize the output width of the offset
> 
> v4 --> v5:
> 1. Add Reviewed-by Acked-by for patch 1/3
> 2. Add patch 3/3:
>    mm: Dump the memory of slab object in kmem_dump_obj()
> 
> v3 --> v4:
> 1. Remove kmem_valid_obj() and convert kmem_dump_obj() to work the same way
>    as vmalloc_dump_obj().
> 2. In kernel/rcu/rcu.h
> -#include <linux/mm.h>
> +#include <linux/slab.h>
> 
> v2 --> v3:
> 1. I made statistics about the source of 'rhp'. kmem_valid_obj() accounts for
>    more than 97.5%, and vmalloc accounts for less than 1%. So change call
>    mem_dump_obj() to call kmem_dump_obj() can meet debugging requirements and
>    avoid the potential deadlock risk of vmalloc_dump_obj().
> -		mem_dump_obj(rhp);
> +		if (kmem_valid_obj(rhp))
> +			kmem_dump_obj(rhp);
> 
>    The discussion about vmap_area_lock deadlock in v2:
>    https://lkml.org/lkml/2022/11/11/493
> 
> 2. Provide static inline empty functions for kmem_valid_obj() and kmem_dump_obj()
>    when CONFIG_PRINTK=n.
> 
> v1 --> v2:
> 1. Remove condition "(unsigned long)rhp->func & 0x3", it have problems on x86.
> 2. Paul E. McKenney helped me update the commit message, thanks.

I would be happy to take the patch that Matthew and Vlastimil are happy
with, and also the one against RCU.  But unless you tell me otherwise,
I will assume that you would prefer me to wait until the entire series
is ready.  The best way to tell me otherwise is of course to resend just
those two patches in their own series.  ;-)

							Thanx, Paul

> Zhen Lei (5):
>   hexdump: add a new dump prefix DUMP_PREFIX_ADDRESS_LOW16
>   hexdump: minimize the output width of the offset
>   mm: Remove kmem_valid_obj()
>   mm: Dump the memory of slab object in kmem_dump_obj()
>   rcu: Dump memory object info if callback function is invalid
> 
>  include/linux/printk.h |  1 +
>  include/linux/slab.h   |  5 ++--
>  kernel/rcu/rcu.h       |  7 +++++
>  kernel/rcu/srcutiny.c  |  1 +
>  kernel/rcu/srcutree.c  |  1 +
>  kernel/rcu/tasks.h     |  1 +
>  kernel/rcu/tiny.c      |  1 +
>  kernel/rcu/tree.c      |  1 +
>  lib/hexdump.c          | 17 +++++++++--
>  mm/slab_common.c       | 68 ++++++++++++++++++++++--------------------
>  mm/util.c              |  4 +--
>  11 files changed, 67 insertions(+), 40 deletions(-)
> 
> -- 
> 2.34.1
>
Leizhen (ThunderTown) Aug. 5, 2023, 2:30 a.m. UTC | #2
On 2023/8/5 1:31, Paul E. McKenney wrote:
> On Fri, Aug 04, 2023 at 05:11:30PM +0800, thunder.leizhen@huaweicloud.com wrote:
>> From: Zhen Lei <thunder.leizhen@huawei.com>
>>
>> v5 --> v6:
>> 1. Use print_hex_dump() to dump the memory of slab object.
>> 2. Add a new dump prefix DUMP_PREFIX_ADDRESS_LOW16
>> 3. Minimize the output width of the offset
>>
>> v4 --> v5:
>> 1. Add Reviewed-by Acked-by for patch 1/3
>> 2. Add patch 3/3:
>>    mm: Dump the memory of slab object in kmem_dump_obj()
>>
>> v3 --> v4:
>> 1. Remove kmem_valid_obj() and convert kmem_dump_obj() to work the same way
>>    as vmalloc_dump_obj().
>> 2. In kernel/rcu/rcu.h
>> -#include <linux/mm.h>
>> +#include <linux/slab.h>
>>
>> v2 --> v3:
>> 1. I made statistics about the source of 'rhp'. kmem_valid_obj() accounts for
>>    more than 97.5%, and vmalloc accounts for less than 1%. So change call
>>    mem_dump_obj() to call kmem_dump_obj() can meet debugging requirements and
>>    avoid the potential deadlock risk of vmalloc_dump_obj().
>> -		mem_dump_obj(rhp);
>> +		if (kmem_valid_obj(rhp))
>> +			kmem_dump_obj(rhp);
>>
>>    The discussion about vmap_area_lock deadlock in v2:
>>    https://lkml.org/lkml/2022/11/11/493
>>
>> 2. Provide static inline empty functions for kmem_valid_obj() and kmem_dump_obj()
>>    when CONFIG_PRINTK=n.
>>
>> v1 --> v2:
>> 1. Remove condition "(unsigned long)rhp->func & 0x3", it have problems on x86.
>> 2. Paul E. McKenney helped me update the commit message, thanks.
> 
> I would be happy to take the patch that Matthew and Vlastimil are happy
> with, and also the one against RCU.  But unless you tell me otherwise,
> I will assume that you would prefer me to wait until the entire series
> is ready.  The best way to tell me otherwise is of course to resend just
> those two patches in their own series.  ;-)

Yes, I also feel this snowball rolling bigger and bigger. Let me resend the two
RCU-related patches that we've discussed OK.

> 
> 							Thanx, Paul
> 
>> Zhen Lei (5):
>>   hexdump: add a new dump prefix DUMP_PREFIX_ADDRESS_LOW16
>>   hexdump: minimize the output width of the offset
>>   mm: Remove kmem_valid_obj()
>>   mm: Dump the memory of slab object in kmem_dump_obj()
>>   rcu: Dump memory object info if callback function is invalid
>>
>>  include/linux/printk.h |  1 +
>>  include/linux/slab.h   |  5 ++--
>>  kernel/rcu/rcu.h       |  7 +++++
>>  kernel/rcu/srcutiny.c  |  1 +
>>  kernel/rcu/srcutree.c  |  1 +
>>  kernel/rcu/tasks.h     |  1 +
>>  kernel/rcu/tiny.c      |  1 +
>>  kernel/rcu/tree.c      |  1 +
>>  lib/hexdump.c          | 17 +++++++++--
>>  mm/slab_common.c       | 68 ++++++++++++++++++++++--------------------
>>  mm/util.c              |  4 +--
>>  11 files changed, 67 insertions(+), 40 deletions(-)
>>
>> -- 
>> 2.34.1
>>
> .
>