linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* Re: [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic
@ 2021-01-08 20:20 Paul Cercueil
  2021-01-08 23:58 ` Thomas Bogendoerfer
  0 siblings, 1 reply; 7+ messages in thread
From: Paul Cercueil @ 2021-01-08 20:20 UTC (permalink / raw)
  To: tglx
  Cc: airlied, airlied, akpm, arnd, bcrl, bigeasy, bristot, bsegall,
	bskeggs, chris, christian.koenig, clm, davem, deanbo422,
	dietmar.eggemann, dri-devel, dsterba, green.hu, hch, intel-gfx,
	jcmvbkbc, josef, juri.lelli, kraxel, linux-aio, linux-arm-kernel,
	linux-btrfs, linux-csky, linux-fsdevel,
	linux-graphics-maintainer, linux-kernel, linux-mips, linux-mm,
	linux-snps-arc, linux-xtensa, linux, linuxppc-dev, mgorman,
	mingo, monstr, mpe, nickhu, nouveau, paulmck, paulus, peterz,
	ray.huang, rodrigo.vivi, rostedt, sparclinux, spice-devel,
	sroland, torvalds, tsbogend, vgupta, vincent.guittot, viro,
	virtualization, x86

Hi Thomas,

5.11 does not boot anymore on Ingenic SoCs, I bisected it to this 
commit.

Any idea what could be happening?

Cheers,
-Paul




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic
  2021-01-08 20:20 [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic Paul Cercueil
@ 2021-01-08 23:58 ` Thomas Bogendoerfer
  2021-01-09  0:33   ` Thomas Bogendoerfer
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Bogendoerfer @ 2021-01-08 23:58 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: tglx, airlied, airlied, akpm, arnd, bcrl, bigeasy, bristot,
	bsegall, bskeggs, chris, christian.koenig, clm, davem, deanbo422,
	dietmar.eggemann, dri-devel, dsterba, green.hu, hch, intel-gfx,
	jcmvbkbc, josef, juri.lelli, kraxel, linux-aio, linux-arm-kernel,
	linux-btrfs, linux-csky, linux-fsdevel,
	linux-graphics-maintainer, linux-kernel, linux-mips, linux-mm,
	linux-snps-arc, linux-xtensa, linux, linuxppc-dev, mgorman,
	mingo, monstr, mpe, nickhu, nouveau, paulmck, paulus, peterz,
	ray.huang, rodrigo.vivi, rostedt, sparclinux, spice-devel,
	sroland, torvalds, vgupta, vincent.guittot, viro, virtualization,
	x86

On Fri, Jan 08, 2021 at 08:20:43PM +0000, Paul Cercueil wrote:
> Hi Thomas,
> 
> 5.11 does not boot anymore on Ingenic SoCs, I bisected it to this commit.
> 
> Any idea what could be happening?

not yet, kernel crash log of a Malta QEMU is below.

Thomas.

Kernel bug detected[#1]:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.11.0-rc1-00017-gccb21774863a #2
$ 0   : 00000000 00000001 00000000 00000010
$ 4   : 00000001 000005cf 9e00059f 00000000
$ 8   : 00118173 809e6db8 9e00059f 00000000
$12   : 82023c00 00000001 810da04c 0212422f
$16   : 810da000 00027800 000005cf 80b4bf9c
$20   : 809e968c 82602400 810da000 0000000b
$24   : 021558f9 00000000                  
$28   : 820e0000 820e3928 80b10000 802710d0
Hi    : 0000346c
Lo    : 000002dd
epc   : 80271114 __kmap_local_pfn_prot+0x78/0x1c0
ra    : 802710d0 __kmap_local_pfn_prot+0x34/0x1c0
Status: 1000a403	KERNEL EXL IE 
Cause : 00800034 (ExcCode 0d)
PrId  : 0001a800 (MIPS P5600)
Modules linked in:
Process swapper/0 (pid: 1, threadinfo=(ptrval), task=(ptrval), tls=00000000)
Stack : 7fffffff 820c2408 820e3990 ffffff04 ffff0a00 80518224 000081a4 810da000
        00000001 000005cf fff64000 8011c77c 820e3b26 ffffff04 ffff0a00 80518440
        80b30000 80b4bf64 9e0005cf 000005cf fff64000 80271188 00000000 820e3a60
        80b10000 80194478 0000005e 80954406 809e0000 810da000 00000001 000005cf
        fff68000 8011c77c 8088fd44 809f6074 000000f4 00000000 00000000 80b4bf68
        ...
Call Trace:
[<80271114>] __kmap_local_pfn_prot+0x78/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<8011c77c>] __update_cache+0x16c/0x174
[<80271188>] __kmap_local_pfn_prot+0xec/0x1c0
[<802c49a0>] copy_string_kernel+0x168/0x264
[<802c5d18>] kernel_execve+0xd0/0x164
[<801006cc>] try_to_run_init_process+0x18/0x5c
[<80859e0c>] kernel_init+0xd0/0x120
[<801037f8>] ret_from_kernel_thread+0x14/0x1c

Code: 8c630564  28640010  38840001 <00040336> 8f82000c  2463ffff  00021100  00431021  2403ffbf 

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic
  2021-01-08 23:58 ` Thomas Bogendoerfer
@ 2021-01-09  0:33   ` Thomas Bogendoerfer
  2021-01-10 11:35     ` Paul Cercueil
  2021-01-11  9:16     ` Sebastian Andrzej Siewior
  0 siblings, 2 replies; 7+ messages in thread
From: Thomas Bogendoerfer @ 2021-01-09  0:33 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: tglx, airlied, airlied, akpm, arnd, bcrl, bigeasy, bristot,
	bsegall, bskeggs, chris, christian.koenig, clm, davem, deanbo422,
	dietmar.eggemann, dri-devel, dsterba, green.hu, hch, intel-gfx,
	jcmvbkbc, josef, juri.lelli, kraxel, linux-aio, linux-arm-kernel,
	linux-btrfs, linux-csky, linux-fsdevel,
	linux-graphics-maintainer, linux-kernel, linux-mips, linux-mm,
	linux-snps-arc, linux-xtensa, linux, linuxppc-dev, mgorman,
	mingo, monstr, mpe, nickhu, nouveau, paulmck, paulus, peterz,
	ray.huang, rodrigo.vivi, rostedt, sparclinux, spice-devel,
	sroland, torvalds, vgupta, vincent.guittot, viro, virtualization,
	x86

On Sat, Jan 09, 2021 at 12:58:05AM +0100, Thomas Bogendoerfer wrote:
> On Fri, Jan 08, 2021 at 08:20:43PM +0000, Paul Cercueil wrote:
> > Hi Thomas,
> > 
> > 5.11 does not boot anymore on Ingenic SoCs, I bisected it to this commit.
> > 
> > Any idea what could be happening?
> 
> not yet, kernel crash log of a Malta QEMU is below.

update:

This dirty hack lets the Malta QEMU boot again:

diff --git a/mm/highmem.c b/mm/highmem.c
index c3a9ea7875ef..190cdda1149d 100644
--- a/mm/highmem.c
+++ b/mm/highmem.c
@@ -515,7 +515,7 @@ void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot)
 	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
 	BUG_ON(!pte_none(*(kmap_pte - idx)));
 	pteval = pfn_pte(pfn, prot);
-	set_pte_at(&init_mm, vaddr, kmap_pte - idx, pteval);
+	set_pte(kmap_pte - idx, pteval);
 	arch_kmap_local_post_map(vaddr, pteval);
 	current->kmap_ctrl.pteval[kmap_local_idx()] = pteval;
 	preempt_enable();

set_pte_at() tries to update cache and could do an kmap_atomic() there.
Not sure, if this is allowed at this point.

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic
  2021-01-09  0:33   ` Thomas Bogendoerfer
@ 2021-01-10 11:35     ` Paul Cercueil
  2021-01-10 11:53       ` H. Nikolaus Schaller
  2021-01-11  9:16     ` Sebastian Andrzej Siewior
  1 sibling, 1 reply; 7+ messages in thread
From: Paul Cercueil @ 2021-01-10 11:35 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: tglx, airlied, airlied, akpm, arnd, bcrl, bigeasy, bristot,
	bsegall, bskeggs, chris, christian.koenig, clm, davem, deanbo422,
	dietmar.eggemann, dri-devel, dsterba, green.hu, hch, intel-gfx,
	jcmvbkbc, josef, juri.lelli, kraxel, linux-aio, linux-arm-kernel,
	linux-btrfs, linux-csky, linux-fsdevel,
	linux-graphics-maintainer, linux-kernel, linux-mips, linux-mm,
	linux-snps-arc, linux-xtensa, linux, linuxppc-dev, mgorman,
	mingo, monstr, mpe, nickhu, nouveau, paulmck, paulus, peterz,
	ray.huang, rodrigo.vivi, rostedt, sparclinux, spice-devel,
	sroland, torvalds, vgupta, vincent.guittot, viro, virtualization,
	x86

Hi Thomas,

Le sam. 9 janv. 2021 à 1:33, Thomas Bogendoerfer 
<tsbogend@alpha.franken.de> a écrit :
> On Sat, Jan 09, 2021 at 12:58:05AM +0100, Thomas Bogendoerfer wrote:
>>  On Fri, Jan 08, 2021 at 08:20:43PM +0000, Paul Cercueil wrote:
>>  > Hi Thomas,
>>  >
>>  > 5.11 does not boot anymore on Ingenic SoCs, I bisected it to this 
>> commit.
>>  >
>>  > Any idea what could be happening?
>> 
>>  not yet, kernel crash log of a Malta QEMU is below.
> 
> update:
> 
> This dirty hack lets the Malta QEMU boot again:
> 
> diff --git a/mm/highmem.c b/mm/highmem.c
> index c3a9ea7875ef..190cdda1149d 100644
> --- a/mm/highmem.c
> +++ b/mm/highmem.c
> @@ -515,7 +515,7 @@ void *__kmap_local_pfn_prot(unsigned long pfn, 
> pgprot_t prot)
>  	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
>  	BUG_ON(!pte_none(*(kmap_pte - idx)));
>  	pteval = pfn_pte(pfn, prot);
> -	set_pte_at(&init_mm, vaddr, kmap_pte - idx, pteval);
> +	set_pte(kmap_pte - idx, pteval);
>  	arch_kmap_local_post_map(vaddr, pteval);
>  	current->kmap_ctrl.pteval[kmap_local_idx()] = pteval;
>  	preempt_enable();
> 
> set_pte_at() tries to update cache and could do an kmap_atomic() 
> there.
> Not sure, if this is allowed at this point.

Yes, I can confirm that your workaround works here too.

Cheers,
-Paul




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic
  2021-01-10 11:35     ` Paul Cercueil
@ 2021-01-10 11:53       ` H. Nikolaus Schaller
  0 siblings, 0 replies; 7+ messages in thread
From: H. Nikolaus Schaller @ 2021-01-10 11:53 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: Thomas Bogendoerfer, tglx, airlied, airlied, akpm, arnd, bcrl,
	bigeasy, bristot, bsegall, bskeggs, chris, christian.koenig, clm,
	davem, deanbo422, dietmar.eggemann, ML dri-devel, dsterba,
	green.hu, hch, intel-gfx, jcmvbkbc, josef, juri.lelli, kraxel,
	linux-aio, linux-arm-kernel, linux-btrfs, linux-csky,
	linux-fsdevel, linux-graphics-maintainer,
	Linux Kernel Mailing List, linux-mips, linux-mm, linux-snps-arc,
	linux-xtensa, linux, linuxppc-dev, mgorman, mingo, monstr, mpe,
	nickhu, nouveau, paulmck, paulus, peterz, ray.huang,
	rodrigo.vivi, rostedt, sparclinux, spice-devel, sroland,
	torvalds, vgupta, vincent.guittot, viro, virtualization, x86


> Am 10.01.2021 um 12:35 schrieb Paul Cercueil <paul@crapouillou.net>:
> 
> Hi Thomas,
> 
> Le sam. 9 janv. 2021 à 1:33, Thomas Bogendoerfer <tsbogend@alpha.franken.de> a écrit :
>> On Sat, Jan 09, 2021 at 12:58:05AM +0100, Thomas Bogendoerfer wrote:
>>> On Fri, Jan 08, 2021 at 08:20:43PM +0000, Paul Cercueil wrote:
>>> > Hi Thomas,
>>> >
>>> > 5.11 does not boot anymore on Ingenic SoCs, I bisected it to this commit.

Just for completeness, I have no such problems booting CI20/jz4780 or Skytone400/jz4730 (unpublished work) with 5.11-rc2.
But may depend on board capabilites (ram size, memory layout or something else).

>>> >
>>> > Any idea what could be happening?
>>> not yet, kernel crash log of a Malta QEMU is below.
>> update:
>> This dirty hack lets the Malta QEMU boot again:
>> diff --git a/mm/highmem.c b/mm/highmem.c
>> index c3a9ea7875ef..190cdda1149d 100644
>> --- a/mm/highmem.c
>> +++ b/mm/highmem.c
>> @@ -515,7 +515,7 @@ void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot)
>> 	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
>> 	BUG_ON(!pte_none(*(kmap_pte - idx)));
>> 	pteval = pfn_pte(pfn, prot);
>> -	set_pte_at(&init_mm, vaddr, kmap_pte - idx, pteval);
>> +	set_pte(kmap_pte - idx, pteval);
>> 	arch_kmap_local_post_map(vaddr, pteval);
>> 	current->kmap_ctrl.pteval[kmap_local_idx()] = pteval;
>> 	preempt_enable();
>> set_pte_at() tries to update cache and could do an kmap_atomic() there.
>> Not sure, if this is allowed at this point.
> 
> Yes, I can confirm that your workaround works here too.
> 
> Cheers,
> -Paul
> 
> 



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic
  2021-01-09  0:33   ` Thomas Bogendoerfer
  2021-01-10 11:35     ` Paul Cercueil
@ 2021-01-11  9:16     ` Sebastian Andrzej Siewior
  1 sibling, 0 replies; 7+ messages in thread
From: Sebastian Andrzej Siewior @ 2021-01-11  9:16 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: Paul Cercueil, tglx, airlied, airlied, akpm, arnd, bcrl, bristot,
	bsegall, bskeggs, chris, christian.koenig, clm, davem, deanbo422,
	dietmar.eggemann, dri-devel, dsterba, green.hu, hch, intel-gfx,
	jcmvbkbc, josef, juri.lelli, kraxel, linux-aio, linux-arm-kernel,
	linux-btrfs, linux-csky, linux-fsdevel,
	linux-graphics-maintainer, linux-kernel, linux-mips, linux-mm,
	linux-snps-arc, linux-xtensa, linux, linuxppc-dev, mgorman,
	mingo, monstr, mpe, nickhu, nouveau, paulmck, paulus, peterz,
	ray.huang, rodrigo.vivi, rostedt, sparclinux, spice-devel,
	sroland, torvalds, vgupta, vincent.guittot, viro, virtualization,
	x86

On 2021-01-09 01:33:52 [+0100], Thomas Bogendoerfer wrote:
> On Sat, Jan 09, 2021 at 12:58:05AM +0100, Thomas Bogendoerfer wrote:
> > On Fri, Jan 08, 2021 at 08:20:43PM +0000, Paul Cercueil wrote:
> > > Hi Thomas,
> > > 
> > > 5.11 does not boot anymore on Ingenic SoCs, I bisected it to this commit.
> > > 
> > > Any idea what could be happening?
> > 
> > not yet, kernel crash log of a Malta QEMU is below.
> 
> update:
> 
> This dirty hack lets the Malta QEMU boot again:
> 
> diff --git a/mm/highmem.c b/mm/highmem.c
> index c3a9ea7875ef..190cdda1149d 100644
> --- a/mm/highmem.c
> +++ b/mm/highmem.c
> @@ -515,7 +515,7 @@ void *__kmap_local_pfn_prot(unsigned long pfn, pgprot_t prot)
>  	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
>  	BUG_ON(!pte_none(*(kmap_pte - idx)));
>  	pteval = pfn_pte(pfn, prot);
> -	set_pte_at(&init_mm, vaddr, kmap_pte - idx, pteval);
> +	set_pte(kmap_pte - idx, pteval);
>  	arch_kmap_local_post_map(vaddr, pteval);
>  	current->kmap_ctrl.pteval[kmap_local_idx()] = pteval;
>  	preempt_enable();
> 
> set_pte_at() tries to update cache and could do an kmap_atomic() there.
So the old implementation used set_pte() while the new one uses
set_pte_at().

> Not sure, if this is allowed at this point.
The problem is the recursion
  kmap_atomic() -> __update_cache() -> kmap_atomic()

and kmap_local_idx_push() runs out if index space before stack space.

I'm not sure if the __update_cache() worked for highmem. It has been
added for that in commit
   f4281bba81810 ("MIPS: Handle highmem pages in __update_cache")

but it assumes that the address returned by kmap_atomic() is the same or
related enough for flush_data_cache_page() to work.

> Thomas.
> 

Sebastian


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic
  2020-11-03  9:27 [patch V3 00/37] mm/highmem: Preemptible variant of kmap_atomic & friends Thomas Gleixner
@ 2020-11-03  9:27 ` Thomas Gleixner
  0 siblings, 0 replies; 7+ messages in thread
From: Thomas Gleixner @ 2020-11-03  9:27 UTC (permalink / raw)
  To: LKML
  Cc: Linus Torvalds, Peter Zijlstra, Paul McKenney, Christoph Hellwig,
	Sebastian Andrzej Siewior, Thomas Bogendoerfer, linux-mips,
	Andrew Morton, linux-mm, Alexander Viro, Benjamin LaHaise,
	linux-fsdevel, linux-aio, Chris Mason, Josef Bacik, David Sterba,
	linux-btrfs, x86, Vineet Gupta, linux-snps-arc, Russell King,
	Arnd Bergmann, linux-arm-kernel, linux-csky, Michal Simek,
	Nick Hu, Greentime Hu, Vincent Chen, Michael Ellerman,
	Benjamin Herrenschmidt, Paul Mackerras, linuxppc-dev,
	David S. Miller, sparclinux, Chris Zankel, Max Filippov,
	linux-xtensa, Ingo Molnar, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Daniel Bristot de Oliveira, Christian Koenig, Huang Rui,
	David Airlie, Daniel Vetter, dri-devel, VMware Graphics,
	Roland Scheidegger, Dave Airlie, Gerd Hoffmann, virtualization,
	spice-devel, Ben Skeggs, nouveau, Jani Nikula, Joonas Lahtinen,
	Rodrigo Vivi, intel-gfx

No reason having the same code in every architecture

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: linux-mips@vger.kernel.org
---
V3: Remove the kmap types cruft
---
 arch/mips/Kconfig                  |    1 
 arch/mips/include/asm/fixmap.h     |    4 -
 arch/mips/include/asm/highmem.h    |    6 +-
 arch/mips/include/asm/kmap_types.h |   13 ------
 arch/mips/mm/highmem.c             |   77 -------------------------------------
 arch/mips/mm/init.c                |    4 -
 6 files changed, 6 insertions(+), 99 deletions(-)

--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2719,6 +2719,7 @@ config WAR_MIPS34K_MISSED_ITLB
 config HIGHMEM
 	bool "High Memory Support"
 	depends on 32BIT && CPU_SUPPORTS_HIGHMEM && SYS_SUPPORTS_HIGHMEM && !CPU_MIPS32_3_5_EVA
+	select KMAP_LOCAL
 
 config CPU_SUPPORTS_HIGHMEM
 	bool
--- a/arch/mips/include/asm/fixmap.h
+++ b/arch/mips/include/asm/fixmap.h
@@ -17,7 +17,7 @@
 #include <spaces.h>
 #ifdef CONFIG_HIGHMEM
 #include <linux/threads.h>
-#include <asm/kmap_types.h>
+#include <asm/kmap_size.h>
 #endif
 
 /*
@@ -52,7 +52,7 @@ enum fixed_addresses {
 #ifdef CONFIG_HIGHMEM
 	/* reserved pte's for temporary kernel mappings */
 	FIX_KMAP_BEGIN = FIX_CMAP_END + 1,
-	FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
+	FIX_KMAP_END = FIX_KMAP_BEGIN + (KM_MAX_IDX * NR_CPUS) - 1,
 #endif
 	__end_of_fixed_addresses
 };
--- a/arch/mips/include/asm/highmem.h
+++ b/arch/mips/include/asm/highmem.h
@@ -24,7 +24,7 @@
 #include <linux/interrupt.h>
 #include <linux/uaccess.h>
 #include <asm/cpu-features.h>
-#include <asm/kmap_types.h>
+#include <asm/kmap_size.h>
 
 /* declarations for highmem.c */
 extern unsigned long highstart_pfn, highend_pfn;
@@ -48,11 +48,11 @@ extern pte_t *pkmap_page_table;
 
 #define ARCH_HAS_KMAP_FLUSH_TLB
 extern void kmap_flush_tlb(unsigned long addr);
-extern void *kmap_atomic_pfn(unsigned long pfn);
 
 #define flush_cache_kmaps()	BUG_ON(cpu_has_dc_aliases)
 
-extern void kmap_init(void);
+#define arch_kmap_local_post_map(vaddr, pteval)	local_flush_tlb_one(vaddr)
+#define arch_kmap_local_post_unmap(vaddr)	local_flush_tlb_one(vaddr)
 
 #endif /* __KERNEL__ */
 
--- a/arch/mips/include/asm/kmap_types.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _ASM_KMAP_TYPES_H
-#define _ASM_KMAP_TYPES_H
-
-#ifdef CONFIG_DEBUG_HIGHMEM
-#define	 __WITH_KM_FENCE
-#endif
-
-#include <asm-generic/kmap_types.h>
-
-#undef __WITH_KM_FENCE
-
-#endif
--- a/arch/mips/mm/highmem.c
+++ b/arch/mips/mm/highmem.c
@@ -8,8 +8,6 @@
 #include <asm/fixmap.h>
 #include <asm/tlbflush.h>
 
-static pte_t *kmap_pte;
-
 unsigned long highstart_pfn, highend_pfn;
 
 void kmap_flush_tlb(unsigned long addr)
@@ -17,78 +15,3 @@ void kmap_flush_tlb(unsigned long addr)
 	flush_tlb_one(addr);
 }
 EXPORT_SYMBOL(kmap_flush_tlb);
-
-void *kmap_atomic_high_prot(struct page *page, pgprot_t prot)
-{
-	unsigned long vaddr;
-	int idx, type;
-
-	type = kmap_atomic_idx_push();
-	idx = type + KM_TYPE_NR*smp_processor_id();
-	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
-#ifdef CONFIG_DEBUG_HIGHMEM
-	BUG_ON(!pte_none(*(kmap_pte - idx)));
-#endif
-	set_pte(kmap_pte-idx, mk_pte(page, prot));
-	local_flush_tlb_one((unsigned long)vaddr);
-
-	return (void*) vaddr;
-}
-EXPORT_SYMBOL(kmap_atomic_high_prot);
-
-void kunmap_atomic_high(void *kvaddr)
-{
-	unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK;
-	int type __maybe_unused;
-
-	if (vaddr < FIXADDR_START)
-		return;
-
-	type = kmap_atomic_idx();
-#ifdef CONFIG_DEBUG_HIGHMEM
-	{
-		int idx = type + KM_TYPE_NR * smp_processor_id();
-
-		BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx));
-
-		/*
-		 * force other mappings to Oops if they'll try to access
-		 * this pte without first remap it
-		 */
-		pte_clear(&init_mm, vaddr, kmap_pte-idx);
-		local_flush_tlb_one(vaddr);
-	}
-#endif
-	kmap_atomic_idx_pop();
-}
-EXPORT_SYMBOL(kunmap_atomic_high);
-
-/*
- * This is the same as kmap_atomic() but can map memory that doesn't
- * have a struct page associated with it.
- */
-void *kmap_atomic_pfn(unsigned long pfn)
-{
-	unsigned long vaddr;
-	int idx, type;
-
-	preempt_disable();
-	pagefault_disable();
-
-	type = kmap_atomic_idx_push();
-	idx = type + KM_TYPE_NR*smp_processor_id();
-	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
-	set_pte(kmap_pte-idx, pfn_pte(pfn, PAGE_KERNEL));
-	flush_tlb_one(vaddr);
-
-	return (void*) vaddr;
-}
-
-void __init kmap_init(void)
-{
-	unsigned long kmap_vstart;
-
-	/* cache the first kmap pte */
-	kmap_vstart = __fix_to_virt(FIX_KMAP_BEGIN);
-	kmap_pte = virt_to_kpte(kmap_vstart);
-}
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -36,7 +36,6 @@
 #include <asm/cachectl.h>
 #include <asm/cpu.h>
 #include <asm/dma.h>
-#include <asm/kmap_types.h>
 #include <asm/maar.h>
 #include <asm/mmu_context.h>
 #include <asm/sections.h>
@@ -402,9 +401,6 @@ void __init paging_init(void)
 
 	pagetable_init();
 
-#ifdef CONFIG_HIGHMEM
-	kmap_init();
-#endif
 #ifdef CONFIG_ZONE_DMA
 	max_zone_pfns[ZONE_DMA] = MAX_DMA_PFN;
 #endif



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-01-11  9:16 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-08 20:20 [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic Paul Cercueil
2021-01-08 23:58 ` Thomas Bogendoerfer
2021-01-09  0:33   ` Thomas Bogendoerfer
2021-01-10 11:35     ` Paul Cercueil
2021-01-10 11:53       ` H. Nikolaus Schaller
2021-01-11  9:16     ` Sebastian Andrzej Siewior
  -- strict thread matches above, loose matches on Subject: below --
2020-11-03  9:27 [patch V3 00/37] mm/highmem: Preemptible variant of kmap_atomic & friends Thomas Gleixner
2020-11-03  9:27 ` [patch V3 13/37] mips/mm/highmem: Switch to generic kmap atomic Thomas Gleixner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).