[Crash-utility] [PATCH] defs.h: Refine the FILL_PML4() macro
Dave Anderson
anderson at redhat.com
Thu Jan 4 17:55:43 UTC 2018
Queued for crash-7.2.1:
https://github.com/crash-utility/crash/commit/3fe2663be5c6a5b160025a5a65b655a570e7e79e
Thanks,
Dave
----- Original Message -----
> The FILL_PML4() updates the machdep->machspec->last_pml4_read every time.
>
> But the last_pml4_read only need to be updated when IS_LAST_PML4_READ()
> macro returns false.
>
> Refine the FILL_PML4() to keep it simply and do some cleanup.
>
> Signed-off-by: Dou Liyang <douly.fnst at cn.fujitsu.com>
> ---
> defs.h | 38 ++++++++++++++++++--------------------
> 1 file changed, 18 insertions(+), 20 deletions(-)
>
> diff --git a/defs.h b/defs.h
> index 97738a6..9a33b41 100644
> --- a/defs.h
> +++ b/defs.h
> @@ -3344,7 +3344,7 @@ struct arm64_stackframe {
> #define PTRS_PER_P4D 512
>
> #define __PGDIR_SHIFT (machdep->machspec->pgdir_shift)
> -
> +
> #define pml4_index(address) (((address) >> PML4_SHIFT) & (PTRS_PER_PML4-1))
> #define p4d_index(address) (((address) >> P4D_SHIFT) & (PTRS_PER_P4D - 1))
> #define pgd_index(address) (((address) >> __PGDIR_SHIFT) &
> (PTRS_PER_PGD-1))
> @@ -3353,26 +3353,24 @@ struct arm64_stackframe {
>
> #define IS_LAST_PML4_READ(pml4) ((ulong)(pml4) ==
> machdep->machspec->last_pml4_read)
>
> -#define FILL_PML4() { \
> - if (!(pc->flags & RUNTIME) || ACTIVE()) { \
> - if (!IS_LAST_PML4_READ(vt->kernel_pgd[0])) \
> - readmem(vt->kernel_pgd[0], KVADDR,
> machdep->machspec->pml4, \
> - PAGESIZE(), "init_level4_pgt", FAULT_ON_ERROR); \
> - machdep->machspec->last_pml4_read =
> (ulong)(vt->kernel_pgd[0]); \
> - } \
> -}
> +#define FILL_PML4() \
> + if (!(pc->flags & RUNTIME) || ACTIVE()) { \
> + if (!IS_LAST_PML4_READ(vt->kernel_pgd[0])) { \
> + readmem(vt->kernel_pgd[0], KVADDR, machdep->machspec->pml4, \
> + PAGESIZE(), "init_level4_pgt", FAULT_ON_ERROR); \
> + machdep->machspec->last_pml4_read = (ulong)(vt->kernel_pgd[0]); \
> + } \
> + }
>
> -#define FILL_PML4_HYPER() { \
> - if (!machdep->machspec->last_pml4_read) { \
> - unsigned long idle_pg_table = \
> - symbol_exists("idle_pg_table_4") ? symbol_value("idle_pg_table_4") : \
> - symbol_value("idle_pg_table"); \
> - readmem(idle_pg_table, KVADDR, \
> - machdep->machspec->pml4, PAGESIZE(), "idle_pg_table", \
> - FAULT_ON_ERROR); \
> - machdep->machspec->last_pml4_read = idle_pg_table; \
> - }\
> -}
> +#define FILL_PML4_HYPER() \
> + if (!machdep->machspec->last_pml4_read) { \
> + unsigned long idle_pg_table = symbol_exists("idle_pg_table_4") ? \
> + symbol_value("idle_pg_table_4") : \
> + symbol_value("idle_pg_table"); \
> + readmem(idle_pg_table, KVADDR, machdep->machspec->pml4, PAGESIZE(), \
> + "idle_pg_table", FAULT_ON_ERROR); \
> + machdep->machspec->last_pml4_read = idle_pg_table; \
> + }
>
> #define IS_LAST_UPML_READ(pml) ((ulong)(pml) ==
> machdep->machspec->last_upml_read)
>
> --
> 2.14.3
>
>
>
>
More information about the Crash-utility
mailing list