Skip to contentSkip to conversation

linux-next: 1ea0704e (ptep_modify_prot transaction abstraction) breaks no-mmu

PATCH In review Mike Frysinger 3 participants 6 messages Jul 3, 2008 – Jul 16, 2008 Generic include/asm header files

lore
Share & tools
lore
#0 lore raw

the functions added to asm-generic/pgtable.h are only used by mm/mprotect.c (a MMU-only file), but they were not added inside of the CONFIG_MMU ifdef block. since the functions rely on things inside of CONFIG_MMU (the lines just above in pgtable.h), we get build failure on all no-mmu setups:
CC init/main.o
In file included from include/asm/pgtable.h:94,

                 from include/linux/mm.h:39,
                 from include/asm/dma.h:39,
                 from include/linux/bootmem.h:8,
                 from init/main.c:27:

include/asm-generic/pgtable.h: In function '__ptep_modify_prot_start':
include/asm-generic/pgtable.h:210: error: implicit declaration of function 'ptep_get_and_clear' include/asm-generic/pgtable.h:210: error: incompatible types in return make[1]: *** [init/main.o] Error 1
make: *** [init/main.o] Error 2
-mike

#1 lore raw
Quoted 11 lines · Mike Frysinger

the functions added to asm-generic/pgtable.h are only used by mm/mprotect.c (a MMU-only file), but they were not added inside of the CONFIG_MMU ifdef block. since the functions rely on things inside of CONFIG_MMU (the lines just above in pgtable.h), we get build failure on all no-mmu setups:
CC init/main.o
In file included from include/asm/pgtable.h:94,

                 from include/linux/mm.h:39,
                 from include/asm/dma.h:39,
                 from include/linux/bootmem.h:8,
                 from init/main.c:27:
Quoted 8 lines

include/asm-generic/pgtable.h: In function '__ptep_modify_prot_start':
include/asm-generic/pgtable.h:210: error: implicit declaration of function 'ptep_get_and_clear' include/asm-generic/pgtable.h:210: error: incompatible types in return make[1]: *** [init/main.o] Error 1
make: *** [init/main.o] Error 2
-mike

Uh, OK. What does mprotect do on a nommu system? Would it be sufficient to move the definitions of __ptep_modify_prot_start/commit out of a CONFIG_MMU block, or provide separate no-op versions?

J

#2 lore raw
Quoted 21 lines · Jeremy Fitzhardinge
Quoted 11 lines · Mike Frysinger

the functions added to asm-generic/pgtable.h are only used by mm/mprotect.c (a MMU-only file), but they were not added inside of the CONFIG_MMU ifdef block. since the functions rely on things inside of CONFIG_MMU (the lines just above in pgtable.h), we get build failure on all no-mmu setups:
CC init/main.o
In file included from include/asm/pgtable.h:94,

                 from include/linux/mm.h:39,
                 from include/asm/dma.h:39,
                 from include/linux/bootmem.h:8,
                 from init/main.c:27:
Quoted 8 lines

include/asm-generic/pgtable.h: In function '__ptep_modify_prot_start':
include/asm-generic/pgtable.h:210: error: implicit declaration of function 'ptep_get_and_clear' include/asm-generic/pgtable.h:210: error: incompatible types in return make[1]: *** [init/main.o] Error 1
make: *** [init/main.o] Error 2
-mike

Quoted 3 lines

Uh, OK. What does mprotect do on a nommu system? Would it be sufficient to move the definitions of __ptep_modify_prot_start/commit out of a CONFIG_MMU block, or provide separate no-op versions?

FYI:
The compile error now moved into Linus' tree, and broke at least the blackfin and m68knommu ports.

Quoted 1 line

J

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed
#3 lore raw
In reply to Jeremy Fitzhardinge
Quoted 19 lines · Jeremy Fitzhardinge
Quoted 11 lines · Mike Frysinger

the functions added to asm-generic/pgtable.h are only used by mm/mprotect.c (a MMU-only file), but they were not added inside of the CONFIG_MMU ifdef block. since the functions rely on things inside of CONFIG_MMU (the lines just above in pgtable.h), we get build failure on all no-mmu setups:
CC init/main.o
In file included from include/asm/pgtable.h:94,

                from include/linux/mm.h:39,
                from include/asm/dma.h:39,
                from include/linux/bootmem.h:8,
                from init/main.c:27:
Quoted 6 lines

include/asm-generic/pgtable.h: In function '__ptep_modify_prot_start':
include/asm-generic/pgtable.h:210: error: implicit declaration of function 'ptep_get_and_clear' include/asm-generic/pgtable.h:210: error: incompatible types in return make[1]: *** [init/main.o] Error 1
make: *** [init/main.o] Error 2

Quoted 1 line

Uh, OK. What does mprotect do on a nommu system?

it depends on the port. by default, i'm pretty sure mprotect on all nommu systems are realistically pretty much noops. the Blackfin can do real protection (CONFIG_MPU), but with significant performance degradation (since the page fault handler is not in hardware nor hardware assisted in any way).

Quoted 3 lines

Would it be sufficient to
move the definitions of __ptep_modify_prot_start/commit out of a CONFIG_MMU block, or provide separate no-op versions?

simply move them into CONFIG_MMU for now
-mike

#4 lore raw

PATCH 1/1 mm: fix ptep_modify_* for no-MMU systems

Fixes build problem: the functions added to asm-generic/pgtable.h are only used by mm/mprotect.c (a MMU-only file), but they were not added inside of the CONFIG_MMU ifdef block. since the functions rely on things inside of CONFIG_MMU (the lines just above in pgtable.h), we get build failure on all no-mmu setups:
CC init/main.o
In file included from include/asm/pgtable.h:94,

                 from include/linux/mm.h:39,
                 from include/asm/dma.h:39,
                 from include/linux/bootmem.h:8,
                 from init/main.c:27:

include/asm-generic/pgtable.h: In function '__ptep_modify_prot_start':
include/asm-generic/pgtable.h:210: error: implicit declaration of function 'ptep_get_and_clear' include/asm-generic/pgtable.h:210: error: incompatible types in return make[1]: *** [init/main.o] Error 1
make: *** [init/main.o] Error 2

Cc Adrian Bunk <[email protected]>
Cc Mike Frysinger <[email protected]>

---
include/asm-generic/pgtable.h | 2 +-

1 file changed, 1 insertion(+), 1 deletion(-)

===================================================================

include/asm-generic/pgtable.h +0 -0
@@ -195,7 +195,6 @@
	}
	return 0;
}

-#endif /* CONFIG_MMU */

static inline pte_t __ptep_modify_prot_start(struct mm_struct *mm,
unsigned long addr,
@@ -253,6 +252,7 @@

	__ptep_modify_prot_commit(mm, addr, ptep, pte);
}

#endif /* __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION */ +#endif /* CONFIG_MMU */

/*
* A facility to provide lazy MMU batching. This allows PTE updates and

#5 lore raw

Re: [PATCH] mm: fix ptep_modify_* for no-MMU systems

Quoted 12 lines · Jeremy Fitzhardinge

Fixes build problem: the functions added to asm-generic/pgtable.h are only used by
mm/mprotect.c (a MMU-only file), but they were not added inside of the CONFIG_MMU ifdef block. since the functions rely on things inside of CONFIG_MMU (the lines just above in pgtable.h), we get build failure on all no-mmu setups:
CC init/main.o
In file included from include/asm/pgtable.h:94,

                 from include/linux/mm.h:39,
                 from include/asm/dma.h:39,
                 from include/linux/bootmem.h:8,
                 from init/main.c:27:
Quoted 7 lines

include/asm-generic/pgtable.h: In function '__ptep_modify_prot_start':
include/asm-generic/pgtable.h:210: error: implicit declaration of function 'ptep_get_and_clear' include/asm-generic/pgtable.h:210: error: incompatible types in return make[1]: *** [init/main.o] Error 1
make: *** [init/main.o] Error 2
...

Thanks, seems to work fine.

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed