lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <CAAhV-H4G+vsJYTyP9Txpke=YiuGcTr-6L7ZrOdt8=b8dWdHD9A@mail.gmail.com>
Date:   Mon, 9 Oct 2023 09:18:06 +0800
From:   Huacai Chen <chenhuacai@...nel.org>
To:     Icenowy Zheng <uwu@...nowy.me>
Cc:     WANG Xuerui <kernel@...0n.name>, Jun Yi <yijun@...ngson.cn>,
        Baoquan He <bhe@...hat.com>,
        Geert Uytterhoeven <geert@...ux-m68k.org>,
        Andrew Morton <akpm@...ux-foundation.org>,
        Mike Rapoport <rppt@...nel.org>,
        Matthew Wilcox <willy@...radead.org>,
        David Hildenbrand <david@...hat.com>,
        Hongchen Zhang <zhanghongchen@...ngson.cn>,
        Binbin Zhou <zhoubinbin@...ngson.cn>,
        Youling Tang <tangyouling@...ngson.cn>,
        Thomas Gleixner <tglx@...utronix.de>,
        Tiezhu Yang <yangtiezhu@...ngson.cn>,
        Zhihong Dong <donmor3000@...mail.com>,
        loongarch@...ts.linux.dev, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] loongarch/mm: disable WUC for pgprot_writecombine() too

Hi, Zheng,

The title can be "LoongArch: Disable WUC for pgprot_writecombine() as
same as ioremap()"

On Sun, Oct 8, 2023 at 9:03 PM Icenowy Zheng <uwu@...nowy.me> wrote:
>
> Currently the code disables WUC only disables it for ioremap_wc(), which
> is only used when mapping writecombine pages like ioremap() (mapped to
> the kernel space). For VRAM mapped in TTM/GEM, it's mapped with a
> crafted pgprot with pgprot_writecombine() function, which isn't
> corrently disabled now.
>
> Disable WUC for pgprot_writecombine() (fallback to SUC) too.
>
> This improves AMDGPU driver stability on Loongson 3A5000 machines.
>
> Signed-off-by: Icenowy Zheng <uwu@...nowy.me>
> ---
>  arch/loongarch/include/asm/io.h           |  4 +---
>  arch/loongarch/include/asm/pgtable-bits.h |  9 ++++++++-
>  arch/loongarch/kernel/setup.c             | 10 +++++-----
>  3 files changed, 14 insertions(+), 9 deletions(-)
>
> diff --git a/arch/loongarch/include/asm/io.h b/arch/loongarch/include/asm/io.h
> index 0dcb36b32cb25..5477d9e3ab072 100644
> --- a/arch/loongarch/include/asm/io.h
> +++ b/arch/loongarch/include/asm/io.h
> @@ -52,10 +52,8 @@ static inline void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size,
>   * @offset:    bus address of the memory
>   * @size:      size of the resource to map
>   */
> -extern pgprot_t pgprot_wc;
> -
>  #define ioremap_wc(offset, size)       \
> -       ioremap_prot((offset), (size), pgprot_val(pgprot_wc))
> +       ioremap_prot((offset), (size), pgprot_val(PAGE_KERNEL_WC))
>
>  #define ioremap_cache(offset, size)    \
>         ioremap_prot((offset), (size), pgprot_val(PAGE_KERNEL))
> diff --git a/arch/loongarch/include/asm/pgtable-bits.h b/arch/loongarch/include/asm/pgtable-bits.h
> index 35348d4c4209a..c9e3ed330fb97 100644
> --- a/arch/loongarch/include/asm/pgtable-bits.h
> +++ b/arch/loongarch/include/asm/pgtable-bits.h
> @@ -92,6 +92,13 @@
>
>  #ifndef __ASSEMBLY__
>
> +extern bool wc_enabled;
> +
> +#define _CACHE_WC      (wc_enabled ? _CACHE_WUC : _CACHE_SUC)
> +
> +#define PAGE_KERNEL_WC __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
> +                                _PAGE_GLOBAL | _PAGE_KERN |  _CACHE_WC)
If these macros cannot be put close to their friends, I prefer to open code.

Huacai
> +
>  #define _PAGE_IOREMAP          pgprot_val(PAGE_KERNEL_SUC)
>
>  #define pgprot_noncached pgprot_noncached
> @@ -111,7 +118,7 @@ static inline pgprot_t pgprot_writecombine(pgprot_t _prot)
>  {
>         unsigned long prot = pgprot_val(_prot);
>
> -       prot = (prot & ~_CACHE_MASK) | _CACHE_WUC;
> +       prot = (prot & ~_CACHE_MASK) | _CACHE_WC;
>
>         return __pgprot(prot);
>  }
> diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c
> index 4de32b07c0dcd..b35186f7b2547 100644
> --- a/arch/loongarch/kernel/setup.c
> +++ b/arch/loongarch/kernel/setup.c
> @@ -161,19 +161,19 @@ static void __init smbios_parse(void)
>  }
>
>  #ifdef CONFIG_ARCH_WRITECOMBINE
> -pgprot_t pgprot_wc = PAGE_KERNEL_WUC;
> +bool wc_enabled = true;
>  #else
> -pgprot_t pgprot_wc = PAGE_KERNEL_SUC;
> +bool wc_enabled;
>  #endif
>
> -EXPORT_SYMBOL(pgprot_wc);
> +EXPORT_SYMBOL(wc_enabled);
>
>  static int __init setup_writecombine(char *p)
>  {
>         if (!strcmp(p, "on"))
> -               pgprot_wc = PAGE_KERNEL_WUC;
> +               wc_enabled = true;
>         else if (!strcmp(p, "off"))
> -               pgprot_wc = PAGE_KERNEL_SUC;
> +               wc_enabled = false;
>         else
>                 pr_warn("Unknown writecombine setting \"%s\".\n", p);
>
> --
> 2.39.1
>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ