2022-06-16 21:31:52

by Fabio M. De Francesco

[permalink] [raw]
Subject: [RESEND PATCH v4 1/2] highmem: Make __kunmap_{local,atomic}() take "const void *"

__kunmap_ {local,atomic}() currently take pointers to void. However, this
is semantically incorrect, since these functions do not change the memory
their arguments point to.

Therefore, make this semantics explicit by modifying the prototypes of
__kunmap_{local,atomic}() to take pointers to const void.

As a side effect, compilers will likely produce more efficient code.

Cc: Andrew Morton <[email protected]>
Suggested-by: David Sterba <[email protected]>
Suggested-by: Ira Weiny <[email protected]>
Signed-off-by: Fabio M. De Francesco <[email protected]>
---

v3->v4: Cc Maintainers and mailing lists I had overlooked when I sent v3.

v2->v3: Fix compilation errors for ARCH=parisc.
Reported-by: kernel test robot <[email protected]>

v1->v2: Change the commit message to clearly explain why these functions
should require pointers to const void. The fundamental argument
behind the commit message changes is semantic correctness.
Obviously, there are no changes to the code.
Many thanks to David Sterba and Ira Weiny for suggestions and
reviews.

arch/parisc/include/asm/cacheflush.h | 6 +++---
arch/parisc/kernel/cache.c | 2 +-
include/linux/highmem-internal.h | 10 +++++-----
mm/highmem.c | 2 +-
4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h
index 8d03b3b26229..0bdee6724132 100644
--- a/arch/parisc/include/asm/cacheflush.h
+++ b/arch/parisc/include/asm/cacheflush.h
@@ -22,7 +22,7 @@ void flush_kernel_icache_range_asm(unsigned long, unsigned long);
void flush_user_dcache_range_asm(unsigned long, unsigned long);
void flush_kernel_dcache_range_asm(unsigned long, unsigned long);
void purge_kernel_dcache_range_asm(unsigned long, unsigned long);
-void flush_kernel_dcache_page_asm(void *);
+void flush_kernel_dcache_page_asm(const void *addr);
void flush_kernel_icache_page(void *);

/* Cache flush operations */
@@ -31,7 +31,7 @@ void flush_cache_all_local(void);
void flush_cache_all(void);
void flush_cache_mm(struct mm_struct *mm);

-void flush_kernel_dcache_page_addr(void *addr);
+void flush_kernel_dcache_page_addr(const void *addr);

#define flush_kernel_dcache_range(start,size) \
flush_kernel_dcache_range_asm((start), (start)+(size));
@@ -75,7 +75,7 @@ void flush_dcache_page_asm(unsigned long phys_addr, unsigned long vaddr);
void flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vmaddr);

#define ARCH_HAS_FLUSH_ON_KUNMAP
-static inline void kunmap_flush_on_unmap(void *addr)
+static inline void kunmap_flush_on_unmap(const void *addr)
{
flush_kernel_dcache_page_addr(addr);
}
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
index c8a11fcecf4c..824064cafd61 100644
--- a/arch/parisc/kernel/cache.c
+++ b/arch/parisc/kernel/cache.c
@@ -549,7 +549,7 @@ extern void purge_kernel_dcache_page_asm(unsigned long);
extern void clear_user_page_asm(void *, unsigned long);
extern void copy_user_page_asm(void *, void *, unsigned long);

-void flush_kernel_dcache_page_addr(void *addr)
+void flush_kernel_dcache_page_addr(const void *addr)
{
unsigned long flags;

diff --git a/include/linux/highmem-internal.h b/include/linux/highmem-internal.h
index cddb42ff0473..034b1106d022 100644
--- a/include/linux/highmem-internal.h
+++ b/include/linux/highmem-internal.h
@@ -8,7 +8,7 @@
#ifdef CONFIG_KMAP_LOCAL
void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot);
void *__kmap_local_page_prot(struct page *page, pgprot_t prot);
-void kunmap_local_indexed(void *vaddr);
+void kunmap_local_indexed(const void *vaddr);
void kmap_local_fork(struct task_struct *tsk);
void __kmap_local_sched_out(void);
void __kmap_local_sched_in(void);
@@ -89,7 +89,7 @@ static inline void *kmap_local_pfn(unsigned long pfn)
return __kmap_local_pfn_prot(pfn, kmap_prot);
}

-static inline void __kunmap_local(void *vaddr)
+static inline void __kunmap_local(const void *vaddr)
{
kunmap_local_indexed(vaddr);
}
@@ -121,7 +121,7 @@ static inline void *kmap_atomic_pfn(unsigned long pfn)
return __kmap_local_pfn_prot(pfn, kmap_prot);
}

-static inline void __kunmap_atomic(void *addr)
+static inline void __kunmap_atomic(const void *addr)
{
kunmap_local_indexed(addr);
pagefault_enable();
@@ -197,7 +197,7 @@ static inline void *kmap_local_pfn(unsigned long pfn)
return kmap_local_page(pfn_to_page(pfn));
}

-static inline void __kunmap_local(void *addr)
+static inline void __kunmap_local(const void *addr)
{
#ifdef ARCH_HAS_FLUSH_ON_KUNMAP
kunmap_flush_on_unmap(addr);
@@ -224,7 +224,7 @@ static inline void *kmap_atomic_pfn(unsigned long pfn)
return kmap_atomic(pfn_to_page(pfn));
}

-static inline void __kunmap_atomic(void *addr)
+static inline void __kunmap_atomic(const void *addr)
{
#ifdef ARCH_HAS_FLUSH_ON_KUNMAP
kunmap_flush_on_unmap(addr);
diff --git a/mm/highmem.c b/mm/highmem.c
index 1a692997fac4..e32083e4ce0d 100644
--- a/mm/highmem.c
+++ b/mm/highmem.c
@@ -561,7 +561,7 @@ void *__kmap_local_page_prot(struct page *page, pgprot_t prot)
}
EXPORT_SYMBOL(__kmap_local_page_prot);

-void kunmap_local_indexed(void *vaddr)
+void kunmap_local_indexed(const void *vaddr)
{
unsigned long addr = (unsigned long) vaddr & PAGE_MASK;
pte_t *kmap_pte;
--
2.36.1


2022-06-27 17:11:09

by Fabio M. De Francesco

[permalink] [raw]
Subject: Re: [RESEND PATCH v4 1/2] highmem: Make __kunmap_{local,atomic}() take "const void *"

On giovedì 16 giugno 2022 23:00:35 CEST Fabio M. De Francesco wrote:
> __kunmap_ {local,atomic}() currently take pointers to void. However, this
> is semantically incorrect, since these functions do not change the memory
> their arguments point to.
>
> Therefore, make this semantics explicit by modifying the prototypes of
> __kunmap_{local,atomic}() to take pointers to const void.
>
> As a side effect, compilers will likely produce more efficient code.
>
> Cc: Andrew Morton <[email protected]>
> Suggested-by: David Sterba <[email protected]>
> Suggested-by: Ira Weiny <[email protected]>
> Signed-off-by: Fabio M. De Francesco <[email protected]>
> ---
>
> v3->v4: Cc Maintainers and mailing lists I had overlooked when I sent v3.
>
> v2->v3: Fix compilation errors for ARCH=parisc.
> Reported-by: kernel test robot <[email protected]>
>
> v1->v2: Change the commit message to clearly explain why these functions
> should require pointers to const void. The fundamental argument
> behind the commit message changes is semantic correctness.
> Obviously, there are no changes to the code.
> Many thanks to David Sterba and Ira Weiny for suggestions and
> reviews.
>
> arch/parisc/include/asm/cacheflush.h | 6 +++---
> arch/parisc/kernel/cache.c | 2 +-
> include/linux/highmem-internal.h | 10 +++++-----
> mm/highmem.c | 2 +-
> 4 files changed, 10 insertions(+), 10 deletions(-)

@Andrew:

Ira Weiny asked David Sterba for taking this patch through his tree because
it is a pre-requisite for a patch to fs/btrfs. He agreed with the above-
mentioned suggestion, however I suppose that an ACK by you is needed.

Can you please take a look at this patch and say what you think about it?

Thanks,

Fabio

>
> diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/
asm/cacheflush.h
> index 8d03b3b26229..0bdee6724132 100644
> --- a/arch/parisc/include/asm/cacheflush.h
> +++ b/arch/parisc/include/asm/cacheflush.h
> @@ -22,7 +22,7 @@ void flush_kernel_icache_range_asm(unsigned long,
unsigned long);
> void flush_user_dcache_range_asm(unsigned long, unsigned long);
> void flush_kernel_dcache_range_asm(unsigned long, unsigned long);
> void purge_kernel_dcache_range_asm(unsigned long, unsigned long);
> -void flush_kernel_dcache_page_asm(void *);
> +void flush_kernel_dcache_page_asm(const void *addr);
> void flush_kernel_icache_page(void *);
>
> /* Cache flush operations */
> @@ -31,7 +31,7 @@ void flush_cache_all_local(void);
> void flush_cache_all(void);
> void flush_cache_mm(struct mm_struct *mm);
>
> -void flush_kernel_dcache_page_addr(void *addr);
> +void flush_kernel_dcache_page_addr(const void *addr);
>
> #define flush_kernel_dcache_range(start,size) \
> flush_kernel_dcache_range_asm((start), (start)+(size));
> @@ -75,7 +75,7 @@ void flush_dcache_page_asm(unsigned long phys_addr,
unsigned long vaddr);
> void flush_anon_page(struct vm_area_struct *vma, struct page *page,
unsigned long vmaddr);
>
> #define ARCH_HAS_FLUSH_ON_KUNMAP
> -static inline void kunmap_flush_on_unmap(void *addr)
> +static inline void kunmap_flush_on_unmap(const void *addr)
> {
> flush_kernel_dcache_page_addr(addr);
> }
> diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
> index c8a11fcecf4c..824064cafd61 100644
> --- a/arch/parisc/kernel/cache.c
> +++ b/arch/parisc/kernel/cache.c
> @@ -549,7 +549,7 @@ extern void purge_kernel_dcache_page_asm(unsigned
long);
> extern void clear_user_page_asm(void *, unsigned long);
> extern void copy_user_page_asm(void *, void *, unsigned long);
>
> -void flush_kernel_dcache_page_addr(void *addr)
> +void flush_kernel_dcache_page_addr(const void *addr)
> {
> unsigned long flags;
>
> diff --git a/include/linux/highmem-internal.h b/include/linux/highmem-
internal.h
> index cddb42ff0473..034b1106d022 100644
> --- a/include/linux/highmem-internal.h
> +++ b/include/linux/highmem-internal.h
> @@ -8,7 +8,7 @@
> #ifdef CONFIG_KMAP_LOCAL
> void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot);
> void *__kmap_local_page_prot(struct page *page, pgprot_t prot);
> -void kunmap_local_indexed(void *vaddr);
> +void kunmap_local_indexed(const void *vaddr);
> void kmap_local_fork(struct task_struct *tsk);
> void __kmap_local_sched_out(void);
> void __kmap_local_sched_in(void);
> @@ -89,7 +89,7 @@ static inline void *kmap_local_pfn(unsigned long pfn)
> return __kmap_local_pfn_prot(pfn, kmap_prot);
> }
>
> -static inline void __kunmap_local(void *vaddr)
> +static inline void __kunmap_local(const void *vaddr)
> {
> kunmap_local_indexed(vaddr);
> }
> @@ -121,7 +121,7 @@ static inline void *kmap_atomic_pfn(unsigned long
pfn)
> return __kmap_local_pfn_prot(pfn, kmap_prot);
> }
>
> -static inline void __kunmap_atomic(void *addr)
> +static inline void __kunmap_atomic(const void *addr)
> {
> kunmap_local_indexed(addr);
> pagefault_enable();
> @@ -197,7 +197,7 @@ static inline void *kmap_local_pfn(unsigned long pfn)
> return kmap_local_page(pfn_to_page(pfn));
> }
>
> -static inline void __kunmap_local(void *addr)
> +static inline void __kunmap_local(const void *addr)
> {
> #ifdef ARCH_HAS_FLUSH_ON_KUNMAP
> kunmap_flush_on_unmap(addr);
> @@ -224,7 +224,7 @@ static inline void *kmap_atomic_pfn(unsigned long
pfn)
> return kmap_atomic(pfn_to_page(pfn));
> }
>
> -static inline void __kunmap_atomic(void *addr)
> +static inline void __kunmap_atomic(const void *addr)
> {
> #ifdef ARCH_HAS_FLUSH_ON_KUNMAP
> kunmap_flush_on_unmap(addr);
> diff --git a/mm/highmem.c b/mm/highmem.c
> index 1a692997fac4..e32083e4ce0d 100644
> --- a/mm/highmem.c
> +++ b/mm/highmem.c
> @@ -561,7 +561,7 @@ void *__kmap_local_page_prot(struct page *page,
pgprot_t prot)
> }
> EXPORT_SYMBOL(__kmap_local_page_prot);
>
> -void kunmap_local_indexed(void *vaddr)
> +void kunmap_local_indexed(const void *vaddr)
> {
> unsigned long addr = (unsigned long) vaddr & PAGE_MASK;
> pte_t *kmap_pte;
> --
> 2.36.1
>
>




2022-06-27 18:35:36

by Andrew Morton

[permalink] [raw]
Subject: Re: [RESEND PATCH v4 1/2] highmem: Make __kunmap_{local,atomic}() take "const void *"

On Mon, 27 Jun 2022 19:02:31 +0200 "Fabio M. De Francesco" <[email protected]> wrote:

> > v1->v2: Change the commit message to clearly explain why these functions
> > should require pointers to const void. The fundamental argument
> > behind the commit message changes is semantic correctness.
> > Obviously, there are no changes to the code.
> > Many thanks to David Sterba and Ira Weiny for suggestions and
> > reviews.
> >
> > arch/parisc/include/asm/cacheflush.h | 6 +++---
> > arch/parisc/kernel/cache.c | 2 +-
> > include/linux/highmem-internal.h | 10 +++++-----
> > mm/highmem.c | 2 +-
> > 4 files changed, 10 insertions(+), 10 deletions(-)
>
> @Andrew:
>
> Ira Weiny asked David Sterba for taking this patch through his tree because
> it is a pre-requisite for a patch to fs/btrfs. He agreed with the above-
> mentioned suggestion, however I suppose that an ACK by you is needed.
>
> Can you please take a look at this patch and say what you think about it?

Looks OK to me. It's one of those "if it compiles, it's good" things.

I don't believe the patch has ever appeared on linux-mm? Please send
it there for some review then go ahead and merge it up.

2022-06-28 15:15:08

by Fabio M. De Francesco

[permalink] [raw]
Subject: [RESEND PATCH v4 1/2] highmem: Make __kunmap_{local,atomic}() take "const void *"

__kunmap_ {local,atomic}() currently take pointers to void. However, this
is semantically incorrect, since these functions do not change the memory
their arguments point to.

Therefore, make this semantics explicit by modifying the
__kunmap_{local,atomic}() prototypes to take pointers to const void.

As a side effect, compilers will likely produce more efficient code.

Cc: Andrew Morton <[email protected]>
Suggested-by: David Sterba <[email protected]>
Suggested-by: Ira Weiny <[email protected]>
Signed-off-by: Fabio M. De Francesco <[email protected]>
---

This is a resend of the same patch CC'ed to linux-mm.

v3->v4: Cc Maintainers and mailing lists I had overlooked when I sent v3.

v2->v3: Fix compilation errors for ARCH=parisc.
Reported-by: kernel test robot <[email protected]>

v1->v2: Change the commit message to clearly explain why these functions
should require pointers to const void. The fundamental argument
behind the commit message changes is semantic correctness.
Obviously, there are no changes to the code.
Many thanks to David Sterba and Ira Weiny for suggestions and
reviews.

arch/parisc/include/asm/cacheflush.h | 6 +++---
arch/parisc/kernel/cache.c | 2 +-
include/linux/highmem-internal.h | 10 +++++-----
mm/highmem.c | 2 +-
4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h
index 8d03b3b26229..0bdee6724132 100644
--- a/arch/parisc/include/asm/cacheflush.h
+++ b/arch/parisc/include/asm/cacheflush.h
@@ -22,7 +22,7 @@ void flush_kernel_icache_range_asm(unsigned long, unsigned long);
void flush_user_dcache_range_asm(unsigned long, unsigned long);
void flush_kernel_dcache_range_asm(unsigned long, unsigned long);
void purge_kernel_dcache_range_asm(unsigned long, unsigned long);
-void flush_kernel_dcache_page_asm(void *);
+void flush_kernel_dcache_page_asm(const void *addr);
void flush_kernel_icache_page(void *);

/* Cache flush operations */
@@ -31,7 +31,7 @@ void flush_cache_all_local(void);
void flush_cache_all(void);
void flush_cache_mm(struct mm_struct *mm);

-void flush_kernel_dcache_page_addr(void *addr);
+void flush_kernel_dcache_page_addr(const void *addr);

#define flush_kernel_dcache_range(start,size) \
flush_kernel_dcache_range_asm((start), (start)+(size));
@@ -75,7 +75,7 @@ void flush_dcache_page_asm(unsigned long phys_addr, unsigned long vaddr);
void flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vmaddr);

#define ARCH_HAS_FLUSH_ON_KUNMAP
-static inline void kunmap_flush_on_unmap(void *addr)
+static inline void kunmap_flush_on_unmap(const void *addr)
{
flush_kernel_dcache_page_addr(addr);
}
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
index a9bc578e4c52..993999a65e54 100644
--- a/arch/parisc/kernel/cache.c
+++ b/arch/parisc/kernel/cache.c
@@ -549,7 +549,7 @@ extern void purge_kernel_dcache_page_asm(unsigned long);
extern void clear_user_page_asm(void *, unsigned long);
extern void copy_user_page_asm(void *, void *, unsigned long);

-void flush_kernel_dcache_page_addr(void *addr)
+void flush_kernel_dcache_page_addr(const void *addr)
{
unsigned long flags;

diff --git a/include/linux/highmem-internal.h b/include/linux/highmem-internal.h
index cddb42ff0473..034b1106d022 100644
--- a/include/linux/highmem-internal.h
+++ b/include/linux/highmem-internal.h
@@ -8,7 +8,7 @@
#ifdef CONFIG_KMAP_LOCAL
void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot);
void *__kmap_local_page_prot(struct page *page, pgprot_t prot);
-void kunmap_local_indexed(void *vaddr);
+void kunmap_local_indexed(const void *vaddr);
void kmap_local_fork(struct task_struct *tsk);
void __kmap_local_sched_out(void);
void __kmap_local_sched_in(void);
@@ -89,7 +89,7 @@ static inline void *kmap_local_pfn(unsigned long pfn)
return __kmap_local_pfn_prot(pfn, kmap_prot);
}

-static inline void __kunmap_local(void *vaddr)
+static inline void __kunmap_local(const void *vaddr)
{
kunmap_local_indexed(vaddr);
}
@@ -121,7 +121,7 @@ static inline void *kmap_atomic_pfn(unsigned long pfn)
return __kmap_local_pfn_prot(pfn, kmap_prot);
}

-static inline void __kunmap_atomic(void *addr)
+static inline void __kunmap_atomic(const void *addr)
{
kunmap_local_indexed(addr);
pagefault_enable();
@@ -197,7 +197,7 @@ static inline void *kmap_local_pfn(unsigned long pfn)
return kmap_local_page(pfn_to_page(pfn));
}

-static inline void __kunmap_local(void *addr)
+static inline void __kunmap_local(const void *addr)
{
#ifdef ARCH_HAS_FLUSH_ON_KUNMAP
kunmap_flush_on_unmap(addr);
@@ -224,7 +224,7 @@ static inline void *kmap_atomic_pfn(unsigned long pfn)
return kmap_atomic(pfn_to_page(pfn));
}

-static inline void __kunmap_atomic(void *addr)
+static inline void __kunmap_atomic(const void *addr)
{
#ifdef ARCH_HAS_FLUSH_ON_KUNMAP
kunmap_flush_on_unmap(addr);
diff --git a/mm/highmem.c b/mm/highmem.c
index 1a692997fac4..e32083e4ce0d 100644
--- a/mm/highmem.c
+++ b/mm/highmem.c
@@ -561,7 +561,7 @@ void *__kmap_local_page_prot(struct page *page, pgprot_t prot)
}
EXPORT_SYMBOL(__kmap_local_page_prot);

-void kunmap_local_indexed(void *vaddr)
+void kunmap_local_indexed(const void *vaddr)
{
unsigned long addr = (unsigned long) vaddr & PAGE_MASK;
pte_t *kmap_pte;
--
2.36.1

2022-07-01 17:35:17

by Ira Weiny

[permalink] [raw]
Subject: Re: [RESEND PATCH v4 1/2] highmem: Make __kunmap_{local,atomic}() take "const void *"

On Tue, Jun 28, 2022 at 04:46:49PM +0200, Fabio M. De Francesco wrote:
> __kunmap_ {local,atomic}() currently take pointers to void. However, this
> is semantically incorrect, since these functions do not change the memory
> their arguments point to.
>
> Therefore, make this semantics explicit by modifying the
> __kunmap_{local,atomic}() prototypes to take pointers to const void.
>
> As a side effect, compilers will likely produce more efficient code.
>
> Cc: Andrew Morton <[email protected]>
> Suggested-by: David Sterba <[email protected]>
> Suggested-by: Ira Weiny <[email protected]>

Reviewed-by: Ira Weiny <[email protected]>

> Signed-off-by: Fabio M. De Francesco <[email protected]>
> ---
>
> This is a resend of the same patch CC'ed to linux-mm.
>
> v3->v4: Cc Maintainers and mailing lists I had overlooked when I sent v3.
>
> v2->v3: Fix compilation errors for ARCH=parisc.
> Reported-by: kernel test robot <[email protected]>
>
> v1->v2: Change the commit message to clearly explain why these functions
> should require pointers to const void. The fundamental argument
> behind the commit message changes is semantic correctness.
> Obviously, there are no changes to the code.
> Many thanks to David Sterba and Ira Weiny for suggestions and
> reviews.
>
> arch/parisc/include/asm/cacheflush.h | 6 +++---
> arch/parisc/kernel/cache.c | 2 +-
> include/linux/highmem-internal.h | 10 +++++-----
> mm/highmem.c | 2 +-
> 4 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h
> index 8d03b3b26229..0bdee6724132 100644
> --- a/arch/parisc/include/asm/cacheflush.h
> +++ b/arch/parisc/include/asm/cacheflush.h
> @@ -22,7 +22,7 @@ void flush_kernel_icache_range_asm(unsigned long, unsigned long);
> void flush_user_dcache_range_asm(unsigned long, unsigned long);
> void flush_kernel_dcache_range_asm(unsigned long, unsigned long);
> void purge_kernel_dcache_range_asm(unsigned long, unsigned long);
> -void flush_kernel_dcache_page_asm(void *);
> +void flush_kernel_dcache_page_asm(const void *addr);
> void flush_kernel_icache_page(void *);
>
> /* Cache flush operations */
> @@ -31,7 +31,7 @@ void flush_cache_all_local(void);
> void flush_cache_all(void);
> void flush_cache_mm(struct mm_struct *mm);
>
> -void flush_kernel_dcache_page_addr(void *addr);
> +void flush_kernel_dcache_page_addr(const void *addr);
>
> #define flush_kernel_dcache_range(start,size) \
> flush_kernel_dcache_range_asm((start), (start)+(size));
> @@ -75,7 +75,7 @@ void flush_dcache_page_asm(unsigned long phys_addr, unsigned long vaddr);
> void flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vmaddr);
>
> #define ARCH_HAS_FLUSH_ON_KUNMAP
> -static inline void kunmap_flush_on_unmap(void *addr)
> +static inline void kunmap_flush_on_unmap(const void *addr)
> {
> flush_kernel_dcache_page_addr(addr);
> }
> diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
> index a9bc578e4c52..993999a65e54 100644
> --- a/arch/parisc/kernel/cache.c
> +++ b/arch/parisc/kernel/cache.c
> @@ -549,7 +549,7 @@ extern void purge_kernel_dcache_page_asm(unsigned long);
> extern void clear_user_page_asm(void *, unsigned long);
> extern void copy_user_page_asm(void *, void *, unsigned long);
>
> -void flush_kernel_dcache_page_addr(void *addr)
> +void flush_kernel_dcache_page_addr(const void *addr)
> {
> unsigned long flags;
>
> diff --git a/include/linux/highmem-internal.h b/include/linux/highmem-internal.h
> index cddb42ff0473..034b1106d022 100644
> --- a/include/linux/highmem-internal.h
> +++ b/include/linux/highmem-internal.h
> @@ -8,7 +8,7 @@
> #ifdef CONFIG_KMAP_LOCAL
> void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot);
> void *__kmap_local_page_prot(struct page *page, pgprot_t prot);
> -void kunmap_local_indexed(void *vaddr);
> +void kunmap_local_indexed(const void *vaddr);
> void kmap_local_fork(struct task_struct *tsk);
> void __kmap_local_sched_out(void);
> void __kmap_local_sched_in(void);
> @@ -89,7 +89,7 @@ static inline void *kmap_local_pfn(unsigned long pfn)
> return __kmap_local_pfn_prot(pfn, kmap_prot);
> }
>
> -static inline void __kunmap_local(void *vaddr)
> +static inline void __kunmap_local(const void *vaddr)
> {
> kunmap_local_indexed(vaddr);
> }
> @@ -121,7 +121,7 @@ static inline void *kmap_atomic_pfn(unsigned long pfn)
> return __kmap_local_pfn_prot(pfn, kmap_prot);
> }
>
> -static inline void __kunmap_atomic(void *addr)
> +static inline void __kunmap_atomic(const void *addr)
> {
> kunmap_local_indexed(addr);
> pagefault_enable();
> @@ -197,7 +197,7 @@ static inline void *kmap_local_pfn(unsigned long pfn)
> return kmap_local_page(pfn_to_page(pfn));
> }
>
> -static inline void __kunmap_local(void *addr)
> +static inline void __kunmap_local(const void *addr)
> {
> #ifdef ARCH_HAS_FLUSH_ON_KUNMAP
> kunmap_flush_on_unmap(addr);
> @@ -224,7 +224,7 @@ static inline void *kmap_atomic_pfn(unsigned long pfn)
> return kmap_atomic(pfn_to_page(pfn));
> }
>
> -static inline void __kunmap_atomic(void *addr)
> +static inline void __kunmap_atomic(const void *addr)
> {
> #ifdef ARCH_HAS_FLUSH_ON_KUNMAP
> kunmap_flush_on_unmap(addr);
> diff --git a/mm/highmem.c b/mm/highmem.c
> index 1a692997fac4..e32083e4ce0d 100644
> --- a/mm/highmem.c
> +++ b/mm/highmem.c
> @@ -561,7 +561,7 @@ void *__kmap_local_page_prot(struct page *page, pgprot_t prot)
> }
> EXPORT_SYMBOL(__kmap_local_page_prot);
>
> -void kunmap_local_indexed(void *vaddr)
> +void kunmap_local_indexed(const void *vaddr)
> {
> unsigned long addr = (unsigned long) vaddr & PAGE_MASK;
> pte_t *kmap_pte;
> --
> 2.36.1
>
>