Erhard Furtner <erhar...@mailbox.org> writes:

> On Fri, 06 Oct 2023 11:04:15 +0530
> "Aneesh Kumar K.V" <aneesh.ku...@linux.ibm.com> wrote:
>
>> Can you check this change?
>> 
>> diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c
>> index 3ba9fe411604..6d144fedd557 100644
>

...

>>  void unmap_kernel_page(unsigned long va)
>
> Thanks for having a look into the issue! Your patch applies but I got a build 
> failure:
>
>  # make
>   CALL    scripts/checksyscalls.sh
>   CC      arch/powerpc/mm/pgtable.o
> In file included from ./include/linux/mm.h:29,
>                  from arch/powerpc/mm/pgtable.c:22:
> ./include/linux/pgtable.h:247:71: error: expected declaration specifiers or 
> '...' before numeric constant
>   247 | #define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 
> 1)
>       |                                                                       
> ^
> arch/powerpc/mm/pgtable.c:190:13: note: in expansion of macro 'set_pte_at'
>   190 | static void set_pte_at(struct mm_struct *mm, unsigned long addr, 
> pte_t *ptep,
>       |             ^~~~~~~~~~

Sorry that I shared a change without build testing.  Here is the updated change

diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c
index 3ba9fe411604..e563e13ffd88 100644
--- a/arch/powerpc/mm/pgtable.c
+++ b/arch/powerpc/mm/pgtable.c
@@ -190,29 +190,28 @@ static pte_t set_access_flags_filter(pte_t pte, struct 
vm_area_struct *vma,
 void set_ptes(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
                pte_t pte, unsigned int nr)
 {
-       /*
-        * Make sure hardware valid bit is not set. We don't do
-        * tlb flush for this update.
-        */
-       VM_WARN_ON(pte_hw_valid(*ptep) && !pte_protnone(*ptep));
-
-       /* Note: mm->context.id might not yet have been assigned as
-        * this context might not have been activated yet when this
-        * is called.
-        */
-       pte = set_pte_filter(pte);
-
        /* Perform the setting of the PTE */
-       arch_enter_lazy_mmu_mode();
        for (;;) {
+
+               /*
+                * Make sure hardware valid bit is not set. We don't do
+                * tlb flush for this update.
+                */
+               VM_WARN_ON(pte_hw_valid(*ptep) && !pte_protnone(*ptep));
+
+               /* Note: mm->context.id might not yet have been assigned as
+                * this context might not have been activated yet when this
+                * is called.
+                */
+               pte = set_pte_filter(pte);
+
+               /* Perform the setting of the PTE */
                __set_pte_at(mm, addr, ptep, pte, 0);
                if (--nr == 0)
                        break;
                ptep++;
-               pte = __pte(pte_val(pte) + (1UL << PTE_RPN_SHIFT));
                addr += PAGE_SIZE;
        }
-       arch_leave_lazy_mmu_mode();
 }
 
 void unmap_kernel_page(unsigned long va)

Reply via email to