On 2023/10/09 15:09, 陈冠有 wrote:
> Hi Kazu
> 

Thank you for the information.

I'm reviewing this, but could you please resend a patch as an attached 
plain text file?  Your email cannot be applied with "git am" due to 
base64 encoding and broken indents.

> 
> a41ec880aa7b ("zsmalloc: move huge compressed obj from page to zspage")
> 
> zspage6 meam linux 6 and later, because I don't have a better way at the 
> moment.

ok, the commit a41ec880aa7b exists since Linux 5.17, so "zspage_5_17" 
would be better.

Thanks,
Kazu

> 
> 
> ffedd09fa9b06 ("zsmalloc: Stop using slab fields in struct page")
> 
> using page->index to store 'page' (page->index and page->freelist are at the 
> same offset in struct page).
> 
> 
> f635725c3905e ("zram: do not waste zram_table_entry flags bits")
> 
> -#define ZRAM_FLAG_SHIFT 24
> +#define ZRAM_FLAG_SHIFT (PAGE_SHIFT + 1)
> 
> 
> enum zram_pageflags {
>      /* zram slot is locked */
>      ZRAM_LOCK = ZRAM_FLAG_SHIFT,
>      ZRAM_SAME,  /* Page consists the same element */
>      ZRAM_WB,    /* page is stored on backing_device */
>      ZRAM_UNDER_WB,  /* page is under writeback */
>      ZRAM_HUGE,  /* Incompressible page */
>      ZRAM_IDLE,  /* not accessed page since last idle marking */
>      ZRAM_INCOMPRESSIBLE, /* none of the algorithms could compress it */
> 
>      ZRAM_COMP_PRIORITY_BIT1, /* First bit of comp priority index */
>      ZRAM_COMP_PRIORITY_BIT2, /* Second bit of comp priority index */
> 
>      __NR_ZRAM_PAGEFLAGS,
> };
> 
> Thanks
> 
> 
> ________________________________
> 发件人: HAGIO KAZUHITO(萩尾 一仁) <k-hagio...@nec.com>
> 发送时间: 2023年10月4日 9:33:57
> 收件人: 陈冠有; crash-utility@redhat.com
> 抄送: liji...@redhat.com
> 主题: [External Mail]Re: [PATCH v4] Fix: move huge compressed obj from page to 
> zspage
> 
> [外部邮件] 此邮件来源于小米公司外部,请谨慎处理。若对邮件安全性存疑,请将邮件转发给mi...@xiaomi.com进行反馈
> 
> On 2023/09/20 12:28, 陈冠有 wrote:
>> when zspage define 'huge', crash-utility zram decompress fail.
>> we need to be compatible with the previous kernel,
>> so we can't define 'huge' directly in zspage.
> 
> Thank you for the patch, is this v4 patch the latest one?
> 
>>
>> Before:
>> crash> mod -s zram zram.ko
>>        MODULE       NAME                                          BASE       
>>     SIZE  OBJECT FILE
>> ffffffde224db800  zram                                    ffffffde224d2000   
>>  57344  zram.ko
>> crash> mod -s zsmalloc zsmalloc.ko
>>        MODULE       NAME                                          BASE       
>>     SIZE  OBJECT FILE
>> ffffffde224c5180  zsmalloc                                ffffffde224bf000   
>>  40960  zsmalloc.ko
>> crash> rd 0x13d89fb0
>> rd: zspage magic incorrect: b0
>>
>> After:
>> crash> rd 0x13d89fb0
>>           13d89fb0:  c2b54f7170883b20                     ;.pqO..
>>
>> Link: https://lkml.kernel.org/r/20211115185909.3949505-6-minc...@kernel.org
> 
> Please use the commit information if it's already in the kernel.
> a41ec880aa7b ("zsmalloc: move huge compressed obj from page to zspage")
> 
>>
>> Signed-off-by: chenguanyou <chenguan...@xiaomi.com>
>> ---
>>    defs.h     | 13 +++++++++++
>>    diskdump.c | 67 ++++++++++++++++++++++++++++++++++++++++++++----------
>>    2 files changed, 68 insertions(+), 12 deletions(-)
>>
>> diff --git a/defs.h b/defs.h
>> index 96a7a2a..0af69cc 100644
>> --- a/defs.h
>> +++ b/defs.h
>> @@ -2225,6 +2225,7 @@ struct offset_table {                    /* stash of 
>> commonly-used offsets */
>>       long module_memory_base;
>>       long module_memory_size;
>>       long irq_data_irq;
>> +   long zspage_huge;
>>    };
>>
>>    struct size_table {         /* stash of commonly-used sizes */
>> @@ -7221,6 +7222,18 @@ struct zspage {
>>        unsigned int freeobj;
>>    };
>>
>> +struct zspage6 {
> 
> Why is this name "zspage6"?
> 
>> +    struct {
>> +        unsigned int huge : 1;
>> +        unsigned int fullness : 2;
>> +        unsigned int class : 9;
>> +        unsigned int isolated : 3;
>> +        unsigned int magic : 8;
>> +    };
>> +    unsigned int inuse;
>> +    unsigned int freeobj;
>> +};
>> +
>>    /*
>>     * makedumpfile.c
>>     */
>> diff --git a/diskdump.c b/diskdump.c
>> index 2c284ff..02aaf1b 100644
>> --- a/diskdump.c
>> +++ b/diskdump.c
>> @@ -2754,6 +2754,9 @@ zram_init(void)
>>       if (INVALID_MEMBER(zram_table_flag))
>>           MEMBER_OFFSET_INIT(zram_table_flag, "zram_table_entry", "value");
>>       STRUCT_SIZE_INIT(zram_table_entry, "zram_table_entry");
>> +    MEMBER_OFFSET_INIT(zspoll_size_class, "zs_pool", "size_class");
>> +    MEMBER_OFFSET_INIT(size_class_size, "size_class", "size");
>> +    MEMBER_OFFSET_INIT(zspage_huge, "zspage", "huge");
>>    }
>>
>>    static unsigned char *
>> @@ -2761,9 +2764,11 @@ zram_object_addr(ulong pool, ulong handle, unsigned 
>> char *zram_buf)
>>    {
>>       ulong obj, off, class, page, zspage;
>>       struct zspage zspage_s;
>> +   struct zspage6 zspage6_s;
>>       physaddr_t paddr;
>>       unsigned int obj_idx, class_idx, size;
>>       ulong pages[2], sizes[2];
>> +   ulong zs_magic;
>>
>>       readmem(handle, KVADDR, &obj, sizeof(void *), "zram entry", 
>> FAULT_ON_ERROR);
>>       obj >>= OBJ_TAG_BITS;
>> @@ -2772,11 +2777,19 @@ zram_object_addr(ulong pool, ulong handle, unsigned 
>> char *zram_buf)
>>
>>       readmem(page + OFFSET(page_private), KVADDR, &zspage,
>>               sizeof(void *), "page_private", FAULT_ON_ERROR);
>> -   readmem(zspage, KVADDR, &zspage_s, sizeof(struct zspage), "zspage", 
>> FAULT_ON_ERROR);
>>
>> -   class_idx = zspage_s.class;
>> -   if (zspage_s.magic != ZSPAGE_MAGIC)
>> -       error(FATAL, "zspage magic incorrect: %x\n", zspage_s.magic);
>> +   if (VALID_MEMBER(zspage_huge)) {
>> +       readmem(zspage, KVADDR, &zspage6_s, sizeof(struct zspage6), 
>> "zspage6", FAULT_ON_ERROR);
>> +       class_idx = zspage6_s.class;
>> +       zs_magic = zspage6_s.magic;
>> +   } else {
>> +       readmem(zspage, KVADDR, &zspage_s, sizeof(struct zspage), "zspage", 
>> FAULT_ON_ERROR);
>> +       class_idx = zspage_s.class;
>> +       zs_magic = zspage_s.magic;
>> +   }
>> +
>> +   if (zs_magic != ZSPAGE_MAGIC)
>> +       error(FATAL, "zspage magic incorrect: %x\n", zs_magic);
>>
>>       class = pool + OFFSET(zspoll_size_class);
>>       class += (class_idx * sizeof(void *));
>> @@ -2794,8 +2807,13 @@ zram_object_addr(ulong pool, ulong handle, unsigned 
>> char *zram_buf)
>>       }
>>
>>       pages[0] = page;
>> -   readmem(page + OFFSET(page_freelist), KVADDR, &pages[1],
>> -           sizeof(void *), "page_freelist", FAULT_ON_ERROR);
>> +   if (VALID_MEMBER(page_freelist)) {
>> +       readmem(page + OFFSET(page_freelist), KVADDR, &pages[1],
>> +               sizeof(void *), "page_freelist", FAULT_ON_ERROR);
>> +   } else {
>> +       readmem(page + OFFSET(page_index), KVADDR, &pages[1],
>> +               sizeof(void *), "page_index", FAULT_ON_ERROR);
>> +   }
> 
> What is the kernel commit related to this hunk?
> 
>>       sizes[0] = PAGESIZE() - off;
>>       sizes[1] = size - sizes[0];
>>       if (!is_page_ptr(pages[0], &paddr)) {
>> @@ -2812,9 +2830,15 @@ zram_object_addr(ulong pool, ulong handle, unsigned 
>> char *zram_buf)
>>       readmem(paddr, PHYSADDR, zram_buf + sizes[0], sizes[1], "zram 
>> buffer[1]", FAULT_ON_ERROR);
>>
>>    out:
>> -   readmem(page, KVADDR, &obj, sizeof(void *), "page flags", 
>> FAULT_ON_ERROR);
>> -   if (!(obj & (1<<10))) { //PG_OwnerPriv1 flag
>> -       return (zram_buf + ZS_HANDLE_SIZE);
>> +   if (!VALID_MEMBER(zspage_huge)) {
>> +       readmem(page, KVADDR, &obj, sizeof(void *), "page flags", 
>> FAULT_ON_ERROR);
>> +       if (!(obj & (1<<10))) { //PG_OwnerPriv1 flag
>> +           return (zram_buf + ZS_HANDLE_SIZE);
>> +       }
>> +   } else {
>> +       if (!zspage6_s.huge) {
>> +           return (zram_buf + ZS_HANDLE_SIZE);
>> +       }
>>       }
>>
>>       return zram_buf;
>> @@ -2929,6 +2953,11 @@ try_zram_decompress(ulonglong pte_val, unsigned char 
>> *buf, ulong len, ulonglong
>>       unsigned char *outbuf = NULL;
>>       ulong zram, zram_table_entry, sector, index, entry, flags, size,
>>           outsize, off;
>> +   unsigned long *same_buf = NULL;
>> +   bool is_same = false;
>> +   ulong ZRAM_SAME_PAGEFLAG;
>> +   ulong ZRAM_WB_PAGEFLAG;
>> +   long ZRAM_LOCK_VALUE = 24;
>>
>>       if (INVALID_MEMBER(zram_compressor)) {
>>           zram_init();
>> @@ -2992,11 +3021,25 @@ try_zram_decompress(ulonglong pte_val, unsigned char 
>> *buf, ulong len, ulonglong
>>           sizeof(void *), "entry of table", FAULT_ON_ERROR);
>>       readmem(zram_table_entry + OFFSET(zram_table_flag), KVADDR, &flags,
>>           sizeof(void *), "zram_table_flag", FAULT_ON_ERROR);
>> -   if (!entry || (flags & ZRAM_FLAG_SAME_BIT)) {
>> -       memset(buf, entry, len);
>> +
>> +   if (!enumerator_value("ZRAM_LOCK", &ZRAM_LOCK_VALUE)
>> +           && THIS_KERNEL_VERSION >= LINUX(6,1,0))
>> +       ZRAM_LOCK_VALUE = PAGESHIFT() + 1;
>> +
>> +   ZRAM_SAME_PAGEFLAG = ZRAM_LOCK_VALUE + 1;
>> +   ZRAM_WB_PAGEFLAG = ZRAM_LOCK_VALUE + 2;
>> +
>> +   if (!entry || flags & (1 << ZRAM_SAME_PAGEFLAG)) {
>> +       same_buf = (unsigned long *)GETBUF(PAGESIZE());
>> +       for (int count = 0; count < PAGESIZE() / sizeof(unsigned long); 
>> count++) {
>> +           same_buf[count] = entry;
>> +       }
>> +       memcpy(buf, same_buf + off, PAGESIZE());
>> +       FREEBUF(same_buf);
> 
> What is the kernel commit related to this hunk?
> 
> And I could not apply this, could you resend it as a plain text email or
> an attached plain text file?
> 
> Thanks,
> Kazu
> 
>>           goto out;
>>       }
>> -   size = flags & (ZRAM_FLAG_SHIFT -1);
>> +
>> +   size = flags & ((1 << ZRAM_LOCK_VALUE) - 1);
>>       if (size == 0) {
>>           len = 0;
>>           goto out;
>> --
>> 2.39.0
>>
>>
>> #/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件!
>>  This e-mail and its attachments contain confidential information from 
>> XIAOMI, which is intended only for the person or entity whose address is 
>> listed above. Any use of the information contained herein in any way 
>> (including, but not limited to, total or partial disclosure, reproduction, 
>> or dissemination) by persons other than the intended recipient(s) is 
>> prohibited. If you receive this e-mail in error, please notify the sender by 
>> phone or email immediately and delete it!******/#
> #/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件!
>  This e-mail and its attachments contain confidential information from 
> XIAOMI, which is intended only for the person or entity whose address is 
> listed above. Any use of the information contained herein in any way 
> (including, but not limited to, total or partial disclosure, reproduction, or 
> dissemination) by persons other than the intended recipient(s) is prohibited. 
> If you receive this e-mail in error, please notify the sender by phone or 
> email immediately and delete it!******/#
> 
> 
> Hi Kazu
> 
> 
> a41ec880aa7b ("zsmalloc: move huge compressed obj from page to zspage")
> 
> zspage6 meam linux 6 and later, because I don't have a better way at the 
> moment.
> 
> 
> ffedd09fa9b06 ("zsmalloc: Stop using slab fields in struct page")
> 
> using page->index to store 'page' (page->index and page->freelist are at 
> the same offset in struct page).
> 
> 
> f635725c3905e ("zram: do not waste zram_table_entry flags bits")
> 
> -#define ZRAM_FLAG_SHIFT 24
> +#define ZRAM_FLAG_SHIFT (PAGE_SHIFT + 1)
> 
> enum zram_pageflags {
>      /* zram slot is locked */
>      ZRAM_LOCK = ZRAM_FLAG_SHIFT,
>      ZRAM_SAME,  /* Page consists the same element */
>      ZRAM_WB,    /* page is stored on backing_device */
>      ZRAM_UNDER_WB,  /* page is under writeback */
>      ZRAM_HUGE,  /* Incompressible page */
>      ZRAM_IDLE,  /* not accessed page since last idle marking */
>      ZRAM_INCOMPRESSIBLE, /* none of the algorithms could compress it */
> 
>      ZRAM_COMP_PRIORITY_BIT1, /* First bit of comp priority index */
>      ZRAM_COMP_PRIORITY_BIT2, /* Second bit of comp priority index */
> 
>      __NR_ZRAM_PAGEFLAGS,
> };
> 
> Thanks
> 
> ------------------------------------------------------------------------
> *发件人:* HAGIO KAZUHITO(萩尾 一仁) <k-hagio...@nec.com>
> *发送时间:* 2023年10月4日 9:33:57
> *收件人:* 陈冠有; crash-utility@redhat.com
> *抄送:* liji...@redhat.com
> *主题:* [External Mail]Re: [PATCH v4] Fix: move huge compressed obj from 
> page to zspage
> [外部邮件] 此邮件来源于小米公司外部,请谨慎处理。若对邮件安全性存疑,请 
> 将邮件转发给mi...@xiaomi.com进行反馈
> 
> On 2023/09/20 12:28, 陈冠有 wrote:
>> when zspage define 'huge', crash-utility zram decompress fail.
>> we need to be compatible with the previous kernel,
>> so we can't define 'huge' directly in zspage.
> 
> Thank you for the patch, is this v4 patch the latest one?
> 
>>
>> Before:
>> crash> mod -s zram zram.ko
>>       MODULE       NAME                                          BASE        
>>   SIZE  OBJECT FILE
>> ffffffde224db800  zram                                    ffffffde224d2000   
>>  57344  zram.ko
>> crash> mod -s zsmalloc zsmalloc.ko
>>       MODULE       NAME                                          BASE        
>>   SIZE  OBJECT FILE
>> ffffffde224c5180  zsmalloc                                ffffffde224bf000   
>>  40960  zsmalloc.ko
>> crash> rd 0x13d89fb0
>> rd: zspage magic incorrect: b0
>>
>> After:
>> crash> rd 0x13d89fb0
>>          13d89fb0:  c2b54f7170883b20                     ;.pqO..
>>
>> Link: https://lkml.kernel.org/r/20211115185909.3949505-6-minc...@kernel.org 
> <https://lkml.kernel.org/r/20211115185909.3949505-6-minc...@kernel.org>
> 
> Please use the commit information if it's already in the kernel.
> a41ec880aa7b ("zsmalloc: move huge compressed obj from page to zspage")
> 
>>
>> Signed-off-by: chenguanyou <chenguan...@xiaomi.com>
>> ---
>>   defs.h     | 13 +++++++++++
>>   diskdump.c | 67 ++++++++++++++++++++++++++++++++++++++++++++----------
>>   2 files changed, 68 insertions(+), 12 deletions(-)
>>
>> diff --git a/defs.h b/defs.h
>> index 96a7a2a..0af69cc 100644
>> --- a/defs.h
>> +++ b/defs.h
>> @@ -2225,6 +2225,7 @@ struct offset_table {                    /* stash of 
>> commonly-used offsets */
>>      long module_memory_base;
>>      long module_memory_size;
>>      long irq_data_irq;
>> +   long zspage_huge;
>>   };
>>
>>   struct size_table {         /* stash of commonly-used sizes */
>> @@ -7221,6 +7222,18 @@ struct zspage {
>>       unsigned int freeobj;
>>   };
>>
>> +struct zspage6 {
> 
> Why is this name "zspage6"?
> 
>> +    struct {
>> +        unsigned int huge : 1;
>> +        unsigned int fullness : 2;
>> +        unsigned int class : 9;
>> +        unsigned int isolated : 3;
>> +        unsigned int magic : 8;
>> +    };
>> +    unsigned int inuse;
>> +    unsigned int freeobj;
>> +};
>> +
>>   /*
>>    * makedumpfile.c
>>    */
>> diff --git a/diskdump.c b/diskdump.c
>> index 2c284ff..02aaf1b 100644
>> --- a/diskdump.c
>> +++ b/diskdump.c
>> @@ -2754,6 +2754,9 @@ zram_init(void)
>>      if (INVALID_MEMBER(zram_table_flag))
>>          MEMBER_OFFSET_INIT(zram_table_flag, "zram_table_entry", "value");
>>      STRUCT_SIZE_INIT(zram_table_entry, "zram_table_entry");
>> +    MEMBER_OFFSET_INIT(zspoll_size_class, "zs_pool", "size_class");
>> +    MEMBER_OFFSET_INIT(size_class_size, "size_class", "size");
>> +    MEMBER_OFFSET_INIT(zspage_huge, "zspage", "huge");
>>   }
>>
>>   static unsigned char *
>> @@ -2761,9 +2764,11 @@ zram_object_addr(ulong pool, ulong handle, unsigned 
>> char *zram_buf)
>>   {
>>      ulong obj, off, class, page, zspage;
>>      struct zspage zspage_s;
>> +   struct zspage6 zspage6_s;
>>      physaddr_t paddr;
>>      unsigned int obj_idx, class_idx, size;
>>      ulong pages[2], sizes[2];
>> +   ulong zs_magic;
>>
>>      readmem(handle, KVADDR, &obj, sizeof(void *), "zram entry", 
>>FAULT_ON_ERROR);
>>      obj >>= OBJ_TAG_BITS;
>> @@ -2772,11 +2777,19 @@ zram_object_addr(ulong pool, ulong handle, unsigned 
>> char *zram_buf)
>>
>>      readmem(page + OFFSET(page_private), KVADDR, &zspage,
>>              sizeof(void *), "page_private", FAULT_ON_ERROR);
>> -   readmem(zspage, KVADDR, &zspage_s, sizeof(struct zspage), "zspage", 
>> FAULT_ON_ERROR);
>>
>> -   class_idx = zspage_s.class;
>> -   if (zspage_s.magic != ZSPAGE_MAGIC)
>> -       error(FATAL, "zspage magic incorrect: %x\n", zspage_s.magic);
>> +   if (VALID_MEMBER(zspage_huge)) {
>> +       readmem(zspage, KVADDR, &zspage6_s, sizeof(struct zspage6), 
>> "zspage6", FAULT_ON_ERROR);
>> +       class_idx = zspage6_s.class;
>> +       zs_magic = zspage6_s.magic;
>> +   } else {
>> +       readmem(zspage, KVADDR, &zspage_s, sizeof(struct zspage), "zspage", 
>> FAULT_ON_ERROR);
>> +       class_idx = zspage_s.class;
>> +       zs_magic = zspage_s.magic;
>> +   }
>> +
>> +   if (zs_magic != ZSPAGE_MAGIC)
>> +       error(FATAL, "zspage magic incorrect: %x\n", zs_magic);
>>
>>      class = pool + OFFSET(zspoll_size_class);
>>      class += (class_idx * sizeof(void *));
>> @@ -2794,8 +2807,13 @@ zram_object_addr(ulong pool, ulong handle, unsigned 
>> char *zram_buf)
>>      }
>>
>>      pages[0] = page;
>> -   readmem(page + OFFSET(page_freelist), KVADDR, &pages[1],
>> -           sizeof(void *), "page_freelist", FAULT_ON_ERROR);
>> +   if (VALID_MEMBER(page_freelist)) {
>> +       readmem(page + OFFSET(page_freelist), KVADDR, &pages[1],
>> +               sizeof(void *), "page_freelist", FAULT_ON_ERROR);
>> +   } else {
>> +       readmem(page + OFFSET(page_index), KVADDR, &pages[1],
>> +               sizeof(void *), "page_index", FAULT_ON_ERROR);
>> +   }
> 
> What is the kernel commit related to this hunk?
> 
>>      sizes[0] = PAGESIZE() - off;
>>      sizes[1] = size - sizes[0];
>>      if (!is_page_ptr(pages[0], &paddr)) {
>> @@ -2812,9 +2830,15 @@ zram_object_addr(ulong pool, ulong handle, unsigned 
>> char *zram_buf)
>>      readmem(paddr, PHYSADDR, zram_buf + sizes[0], sizes[1], "zram 
>>buffer[1]", FAULT_ON_ERROR);
>>
>>   out:
>> -   readmem(page, KVADDR, &obj, sizeof(void *), "page flags", 
>> FAULT_ON_ERROR);
>> -   if (!(obj & (1<<10))) { //PG_OwnerPriv1 flag
>> -       return (zram_buf + ZS_HANDLE_SIZE);
>> +   if (!VALID_MEMBER(zspage_huge)) {
>> +       readmem(page, KVADDR, &obj, sizeof(void *), "page flags", 
>> FAULT_ON_ERROR);
>> +       if (!(obj & (1<<10))) { //PG_OwnerPriv1 flag
>> +           return (zram_buf + ZS_HANDLE_SIZE);
>> +       }
>> +   } else {
>> +       if (!zspage6_s.huge) {
>> +           return (zram_buf + ZS_HANDLE_SIZE);
>> +       }
>>      }
>>
>>      return zram_buf;
>> @@ -2929,6 +2953,11 @@ try_zram_decompress(ulonglong pte_val, unsigned char 
>> *buf, ulong len, ulonglong
>>      unsigned char *outbuf = NULL;
>>      ulong zram, zram_table_entry, sector, index, entry, flags, size,
>>          outsize, off;
>> +   unsigned long *same_buf = NULL;
>> +   bool is_same = false;
>> +   ulong ZRAM_SAME_PAGEFLAG;
>> +   ulong ZRAM_WB_PAGEFLAG;
>> +   long ZRAM_LOCK_VALUE = 24;
>>
>>      if (INVALID_MEMBER(zram_compressor)) {
>>          zram_init();
>> @@ -2992,11 +3021,25 @@ try_zram_decompress(ulonglong pte_val, unsigned char 
>> *buf, ulong len, ulonglong
>>          sizeof(void *), "entry of table", FAULT_ON_ERROR);
>>      readmem(zram_table_entry + OFFSET(zram_table_flag), KVADDR, &flags,
>>          sizeof(void *), "zram_table_flag", FAULT_ON_ERROR);
>> -   if (!entry || (flags & ZRAM_FLAG_SAME_BIT)) {
>> -       memset(buf, entry, len);
>> +
>> +   if (!enumerator_value("ZRAM_LOCK", &ZRAM_LOCK_VALUE)
>> +           && THIS_KERNEL_VERSION >= LINUX(6,1,0))
>> +       ZRAM_LOCK_VALUE = PAGESHIFT() + 1;
>> +
>> +   ZRAM_SAME_PAGEFLAG = ZRAM_LOCK_VALUE + 1;
>> +   ZRAM_WB_PAGEFLAG = ZRAM_LOCK_VALUE + 2;
>> +
>> +   if (!entry || flags & (1 << ZRAM_SAME_PAGEFLAG)) {
>> +       same_buf = (unsigned long *)GETBUF(PAGESIZE());
>> +       for (int count = 0; count < PAGESIZE() / sizeof(unsigned long); 
>> count++) {
>> +           same_buf[count] = entry;
>> +       }
>> +       memcpy(buf, same_buf + off, PAGESIZE());
>> +       FREEBUF(same_buf);
> 
> What is the kernel commit related to this hunk?
> 
> And I could not apply this, could you resend it as a plain text email or
> an attached plain text file?
> 
> Thanks,
> Kazu
> 
>>          goto out;
>>      }
>> -   size = flags & (ZRAM_FLAG_SHIFT -1);
>> +
>> +   size = flags & ((1 << ZRAM_LOCK_VALUE) - 1);
>>      if (size == 0) {
>>          len = 0;
>>          goto out;
>> --
>> 2.39.0
>>
>>
>> #/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件!
>>  This e-mail and its attachments contain confidential information from 
>> XIAOMI, which is intended only for the person or entity whose  address is 
>> listed above. Any use of the information contained herein 
> in any way (including, but not limited to, total or partial disclosure, 
> reproduction, or dissemination) by persons other than the intended 
> recipient(s) is prohibited. If you receive this e-mail in error, please 
> notify the sender by phone or email immediately and delete it!******/#
> #/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出 
> 的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄 
> 露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件 
> 通知发件人并删除本邮件! This e-mail and its attachments contain 
> confidential information from XIAOMI, which is intended only for the 
> person or entity whose address is listed above. Any use of the 
> information contained herein in any way (including, but not limited to, 
> total or partial disclosure, reproduction, or dissemination) by persons 
> other than the intended recipient(s) is prohibited. If you receive this 
> e-mail in error, please notify the sender by phone or email immediately 
> and delete it!******/#
--
Crash-utility mailing list
Crash-utility@redhat.com
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to