[Crash-utility] Re: [PATCH v2] arm64: fix regression for the determination of section_size_bits

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Lijiang & guanyou & qiwu,

On Mon, Aug 26, 2024 at 3:08 PM lijiang <lijiang@xxxxxxxxxx> wrote:
>
> On Tue, Aug 20, 2024 at 11:54 AM <devel-request@xxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
>>
>> Date: Tue, 20 Aug 2024 03:53:16 -0000
>> From: chenguanyou9338@xxxxxxxxx
>> Subject:  Re: [PATCH v2] arm64: fix regression for the
>>         determination of section_size_bits
>> To: devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
>> Message-ID: <20240820035316.8055.4425@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
>> Content-Type: text/plain; charset="utf-8"
>>
>> Hi  lianbo
>>
>> Base on qiwu's patch, is this attached patch OK ?
>>
>
> Sorry for the late reply.
>
> I'm worried that there will be more and more similar patches in the future, how should we handle them by then?
>
> Or leave it there for the time being until we find a better solution. Any thoughts from other reviewers?
>

Agreed. The patch is Android specific, which can only serve for
android, not for other distros.

Please correct me if I'm wrong. The android can be viewed as a distro,
similar to ubuntu/fedora etc. The distro specific change/code should
better go into distro packaging, like the one[1] for fedora, which may
have extra compiling hardening or other customizations required by
distro itself, hence these patches are maintained here other than
upstream.

I'm not a android guy and not familiar with how the andorid
commandline tools are maintained. AFAIK there are 3rd package systems
for android, such as termux [2]. IMHO the above change should go in
there instead. Any thoughts?

Thanks,
Tao Liu

[1]: https://src.fedoraproject.org/rpms/crash/tree/rawhide
[2]: https://github.com/termux/termux-packages

> Thanks
> Lianbo
>
>> >From 08d4af144b981daf292473303e08546ef1e81a04 Mon Sep 17 00:00:00 2001
>> From: chenguanyou <chenguanyou@xxxxxxxxxx>
>> Date: Thu, 8 Aug 2024 17:35:07 +0800
>> Subject: [PATCH] arm64: fix regression for the determination of
>>  section_size_bits
>>
>> The commit 568c6f04 will cause a regression issue for the determination of
>> section_size_bits on kernel version before android12-5.10 or Linux-v5.12.
>> The section_size_bits is supposed to be compatible with linux upstream and
>> android GKI version:
>> Before android12-5.10 or Linux-v5.12:
>>         SECTION_SIZE_BITS = 30
>>
>> After android12-5.10 or Linux-v5.12:
>>     SECTION_SIZE_BITS = 27 when defined 4K_PAGES or 16K_PAGES.
>>     SECTION_SIZE_BITS = 29 when defined 64K_PAGES.
>>
>> Fixes: 568c6f04 ("arm64: section_size_bits compatible with macro definitions")
>> Change-Id: Ib6ec610753aabb52dfbafab65e1e6c04cbe65f72
>>
>> Signed-off-by: qiwu.chen <qiwu.chen@xxxxxxxxxxxxx>
>> Signed-off-by: chenguanyou <chenguanyou@xxxxxxxxxx>
>> ---
>>  arm64.c       | 22 ++++++++++------------
>>  defs.h        | 10 ++++++++++
>>  global_data.c |  7 +++++++
>>  kernel.c      | 23 +++++++++++++++++++++++
>>  4 files changed, 50 insertions(+), 12 deletions(-)
>>
>> diff --git a/arm64.c b/arm64.c
>> index 8ed1aaf..f0721b7 100644
>> --- a/arm64.c
>> +++ b/arm64.c
>> @@ -1667,30 +1667,28 @@ arm64_get_section_size_bits(void)
>>     int ret;
>>     char *string;
>>
>> -   if (THIS_KERNEL_VERSION >= LINUX(5,12,0)) {
>> +   if (arm64_get_vmcoreinfo(&machdep->section_size_bits, "NUMBER(SECTION_SIZE_BITS)", NUM_DEC))
>> +       goto exit;
>> +
>> +   if (THIS_KERNEL_VERSION >= LINUX(5,12,0)
>> +           || (IS_ANDROID_KERNEL_REL
>> +               && THIS_KERNEL_VERSION >= LINUX(5,10,0)
>> +               && THIS_ANDROID_VERSION >= ANDROID(12,0)))
>>         if (machdep->pagesize == 65536)
>>             machdep->section_size_bits = _SECTION_SIZE_BITS_5_12_64K;
>>         else
>>             machdep->section_size_bits = _SECTION_SIZE_BITS_5_12;
>> -   } else
>> +   else
>>         machdep->section_size_bits = _SECTION_SIZE_BITS;
>>
>> -   if (arm64_get_vmcoreinfo(&machdep->section_size_bits, "NUMBER(SECTION_SIZE_BITS)", NUM_DEC)) {
>> -       /* nothing */
>> -   } else if (kt->ikconfig_flags & IKCONFIG_AVAIL) {
>> +   if (kt->ikconfig_flags & IKCONFIG_AVAIL) {
>>         if ((ret = get_kernel_config("CONFIG_MEMORY_HOTPLUG", NULL)) == IKCONFIG_Y) {
>>             if ((ret = get_kernel_config("CONFIG_HOTPLUG_SIZE_BITS", &string)) == IKCONFIG_STR)
>>                 machdep->section_size_bits = atol(string);
>>         }
>> -
>> -       /* arm64: reduce section size for sparsemem */
>> -       if ((ret = get_kernel_config("CONFIG_ARM64_4K_PAGES", NULL)) == IKCONFIG_Y
>> -           || (ret = get_kernel_config("CONFIG_ARM64_16K_PAGES", NULL)) == IKCONFIG_Y)
>> -           machdep->section_size_bits = _SECTION_SIZE_BITS_5_12;
>> -       else if ((ret = get_kernel_config("CONFIG_ARM64_64K_PAGES", NULL)) == IKCONFIG_Y)
>> -           machdep->section_size_bits = _SECTION_SIZE_BITS_5_12_64K;
>>     }
>>
>> +exit:
>>     if (CRASHDEBUG(1))
>>         fprintf(fp, "SECTION_SIZE_BITS: %ld\n", machdep->section_size_bits);
>>  }
>> diff --git a/defs.h b/defs.h
>> index 1b7649d..b0d3f8f 100644
>> --- a/defs.h
>> +++ b/defs.h
>> @@ -829,6 +829,15 @@ struct kernel_table {                   /* kernel data */
>>  #define IS_KERNEL_STATIC_TEXT(x) (((ulong)(x) >= kt->stext) && \
>>                       ((ulong)(x) < kt->etext))
>>
>> +#define THIS_KERNEL_RELEASE (kt->utsname.release)
>> +
>> +struct android_table {
>> +   uint android_version[2];
>> +};
>> +#define IS_ANDROID_KERNEL_REL (at->android_version[0] > 0)
>> +#define THIS_ANDROID_VERSION ((at->android_version[0] << 16) + (at->android_version[1]))
>> +#define ANDROID(x,y) (((uint)(x) << 16) + (uint)(y))
>> +
>>  #define TASK_COMM_LEN 16     /* task command name length including NULL */
>>
>>  struct task_context {                     /* context stored for each task */
>> @@ -5353,6 +5362,7 @@ extern struct vm_table vm_table, *vt;
>>  extern struct machdep_table *machdep;
>>  extern struct symbol_table_data symbol_table_data, *st;
>>  extern struct extension_table *extension_table;
>> +extern struct android_table android_table, *at;
>>
>>  /*
>>   *  Generated in build_data.c
>> diff --git a/global_data.c b/global_data.c
>> index f9bb7d0..dddde96 100644
>> --- a/global_data.c
>> +++ b/global_data.c
>> @@ -55,6 +55,13 @@ struct symbol_table_data *st = &symbol_table_data;
>>  struct machdep_table machdep_table = { 0 };
>>  struct machdep_table *machdep = &machdep_table;
>>
>> +/*
>> + *  The same thing goes for accesses to the frequently-accessed android_table,
>> + *  making the "at" pointers globally available.
>> + */
>> +struct android_table android_table = { 0, 0 };
>> +struct android_table *at = &android_table;
>> +
>>  /*
>>   *  Command functions are entered with the args[] array and argcnt value
>>   *  pre-set for issuance to getopt().
>> diff --git a/kernel.c b/kernel.c
>> index adb19ad..814418c 100644
>> --- a/kernel.c
>> +++ b/kernel.c
>> @@ -104,6 +104,26 @@ static void check_vmcoreinfo(void);
>>  static int is_pvops_xen(void);
>>  static int get_linux_banner_from_vmlinux(char *, size_t);
>>
>> +/*
>> + * Determine Andriod GKI vmcore by reading "android" from ut->release.
>> + * The prefix of Andriod GKI release version is:
>> + *     Kernel Version - Android release version
>> + * For example:
>> + *     5.10.209-android12, 5.10.209-android12.1, 5.15.148-android13
>> + */
>> +void
>> +parse_android_table(void)
>> +{
>> +    char *p;
>> +    if ((p = strstr(THIS_KERNEL_RELEASE, "android"))) {
>> +        sscanf(p, "android%d.%d", &at->android_version[0], &at->android_version[1]);
>> +
>> +        if (CRASHDEBUG(1))
>> +            fprintf(fp, "andriod_version: andriod-%d.%d\n",
>> +                    at->android_version[0], at->android_version[1]);
>> +    }
>> +}
>> +
>>  /*
>>   * popuplate the global kernel table (kt) with kernel version
>>   * information parsed from UTSNAME/OSRELEASE string
>> @@ -298,6 +318,9 @@ kernel_init()
>>             kt->utsname.domainname : "(not printable)");
>>     }
>>
>> +   // non-upstream rel
>> +   parse_android_table();
>> +
>>     strncpy(buf, kt->utsname.release, 65);
>>     if (buf[64])
>>         buf[64] = NULLCHAR;
>> --
>> 2.39.0
>
> --
> Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx
> https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
> Contribution Guidelines: https://github.com/crash-utility/crash/wiki
--
Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx
https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux