* Re: sparc32 sunrpc.o [not found] <mailman.1033072381.13688.linux-kernel2news@redhat.com> @ 2002-09-26 21:27 ` Pete Zaitcev 2002-09-26 21:29 ` David S. Miller 0 siblings, 1 reply; 12+ messages in thread From: Pete Zaitcev @ 2002-09-26 21:27 UTC (permalink / raw) To: Tomas Szepe; +Cc: linux-kernel > Since 2.4.20-pre2 or 3, sunrpc.o has had this problem on sparc32: > > depmod: *** Unresolved symbols in /lib/modules/2.4.20-pre8/kernel/net/sunrpc/sunrpc.o > depmod: ___illegal_use_of_BTFIXUP_SETHI_in_module > depmod: ___f_set_pte > depmod: fix_kmap_begin > depmod: ___f_flush_cache_all > depmod: ___f_pte_clear > depmod: ___f_mk_pte > depmod: ___f_flush_tlb_all Try these two things: 1. diff -urN -X dontdiff linux-2.4.19 linux-2.4.20-pre2 > x.diff vi x.diff I've got Tigran's dontdiff updated at http://people.redhat.com/zaitcev/linux/dontdiff.fix 2. make vmlinux modules > build.out 2>&1 </dev/null grep -i warning build.out -- Pete ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-26 21:27 ` sparc32 sunrpc.o Pete Zaitcev @ 2002-09-26 21:29 ` David S. Miller 2002-09-28 12:28 ` Tomas Szepe 0 siblings, 1 reply; 12+ messages in thread From: David S. Miller @ 2002-09-26 21:29 UTC (permalink / raw) To: zaitcev; +Cc: szepe, linux-kernel From: Pete Zaitcev <zaitcev@redhat.com> Date: Thu, 26 Sep 2002 17:27:24 -0400 > Since 2.4.20-pre2 or 3, sunrpc.o has had this problem on sparc32: > > depmod: *** Unresolved symbols in /lib/modules/2.4.20-pre8/kernel/net/sunrpc/sunrpc.o > depmod: ___illegal_use_of_BTFIXUP_SETHI_in_module > depmod: ___f_set_pte > depmod: fix_kmap_begin > depmod: ___f_flush_cache_all > depmod: ___f_pte_clear > depmod: ___f_mk_pte > depmod: ___f_flush_tlb_all Try these two things: No Peter, it really does use kmap_atomic stuff from modules, and this precludes providing those routines inline in highmem.h, they must live statically in main kernel image so that flush/pte calls can be properly BTFIXUP'd. See my other email. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-26 21:29 ` David S. Miller @ 2002-09-28 12:28 ` Tomas Szepe 2002-09-28 16:13 ` Tomas Szepe 0 siblings, 1 reply; 12+ messages in thread From: Tomas Szepe @ 2002-09-28 12:28 UTC (permalink / raw) To: David S. Miller; +Cc: zaitcev, linux-kernel > From: Pete Zaitcev <zaitcev@redhat.com> > Date: Thu, 26 Sep 2002 17:27:24 -0400 > > > Since 2.4.20-pre2 or 3, sunrpc.o has had this problem on sparc32: > > > > depmod: *** Unresolved symbols in /lib/modules/2.4.20-pre8/kernel/net/sunrpc/sunrpc.o > > depmod: ___illegal_use_of_BTFIXUP_SETHI_in_module > > depmod: ___f_set_pte > > depmod: fix_kmap_begin > > depmod: ___f_flush_cache_all > > depmod: ___f_pte_clear > > depmod: ___f_mk_pte > > depmod: ___f_flush_tlb_all > > Try these two things: > > No Peter, it really does use kmap_atomic stuff from modules, and this > precludes providing those routines inline in highmem.h, they must > live statically in main kernel image so that flush/pte calls can > be properly BTFIXUP'd. > > See my other email. Ok, DaveM, could you have a look at this patch? T. diff -urN linux-2.4.20-pre8.vanilla/arch/sparc/kernel/sparc_ksyms.c linux-2.4.20-pre8/arch/sparc/kernel/sparc_ksyms.c --- linux-2.4.20-pre8.vanilla/arch/sparc/kernel/sparc_ksyms.c 2002-08-03 06:12:08.000000000 +0200 +++ linux-2.4.20-pre8/arch/sparc/kernel/sparc_ksyms.c 2002-09-28 14:15:53.000000000 +0200 @@ -46,6 +46,9 @@ #include <asm/sbus.h> #include <asm/dma.h> #endif +#ifdef CONFIG_HIGHMEM +#include <asm/highmem.h> +#endif #include <asm/a.out.h> #include <asm/io-unit.h> @@ -204,6 +207,14 @@ EXPORT_SYMBOL(pci_dma_sync_single); #endif +/* Highmem helpers from arch/sparc/mm/highmem.c */ +#ifdef CONFIG_HIGHMEM +EXPORT_SYMBOL(kmap); +EXPORT_SYMBOL(kunmap); +EXPORT_SYMBOL(kmap_atomic); +EXPORT_SYMBOL(kunmap_atomic); +#endif + /* Solaris/SunOS binary compatibility */ EXPORT_SYMBOL(svr4_setcontext); EXPORT_SYMBOL(svr4_getcontext); diff -urN linux-2.4.20-pre8.vanilla/arch/sparc/mm/Makefile linux-2.4.20-pre8/arch/sparc/mm/Makefile --- linux-2.4.20-pre8.vanilla/arch/sparc/mm/Makefile 2000-12-29 23:07:21.000000000 +0100 +++ linux-2.4.20-pre8/arch/sparc/mm/Makefile 2002-09-28 13:33:55.000000000 +0200 @@ -11,7 +11,7 @@ $(CC) $(AFLAGS) -ansi -c -o $*.o $< O_TARGET := mm.o -obj-y := fault.o init.o loadmmu.o generic.o extable.o btfixup.o +obj-y := fault.o init.o loadmmu.o generic.o extable.o highmem.o btfixup.o ifeq ($(CONFIG_SUN4),y) obj-y += nosrmmu.o diff -urN linux-2.4.20-pre8.vanilla/arch/sparc/mm/highmem.c linux-2.4.20-pre8/arch/sparc/mm/highmem.c --- linux-2.4.20-pre8.vanilla/arch/sparc/mm/highmem.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.4.20-pre8/arch/sparc/mm/highmem.c 2002-09-28 13:56:56.000000000 +0200 @@ -0,0 +1,101 @@ +/* + * highmem.c: virtual kernel memory mappings for high memory + * + * Uninlined versions of kmap(), kunmap(), kmap_atomic(), + * and kunmap_atomic() split from include/asm-sparc/highmem.h. + * -- Tomas Szepe <szepe@pinerecords.com>, September 2002 + */ + +#include <linux/mm.h> +#include <linux/highmem.h> +#include <asm/highmem.h> + +void *kmap(struct page *page) +{ + if (in_interrupt()) + BUG(); + if (page < highmem_start_page) + return page_address(page); + return kmap_high(page); +} + +void kunmap(struct page *page) +{ + if (in_interrupt()) + BUG(); + if (page < highmem_start_page) + return; + kunmap_high(page); +} + +/* + * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap + * gives a more generic (and caching) interface. But kmap_atomic can + * be used in IRQ contexts, so in some (very limited) cases we need + * it. + */ +void *kmap_atomic(struct page *page, enum km_type type) +{ + unsigned long idx; + unsigned long vaddr; + + if (page < highmem_start_page) + return page_address(page); + + idx = type + KM_TYPE_NR*smp_processor_id(); + vaddr = fix_kmap_begin + idx * PAGE_SIZE; + +/* XXX Fix - Anton */ +#if 0 + __flush_cache_one(vaddr); +#else + flush_cache_all(); +#endif + +#if HIGHMEM_DEBUG + if (!pte_none(*(kmap_pte+idx))) + BUG(); +#endif + set_pte(kmap_pte+idx, mk_pte(page, kmap_prot)); +/* XXX Fix - Anton */ +#if 0 + __flush_tlb_one(vaddr); +#else + flush_tlb_all(); +#endif + + return (void*) vaddr; +} + +void kunmap_atomic(void *kvaddr, enum km_type type) +{ + unsigned long vaddr = (unsigned long) kvaddr; + unsigned long idx = type + KM_TYPE_NR*smp_processor_id(); + + if (vaddr < fix_kmap_begin) // FIXME + return; + + if (vaddr != fix_kmap_begin + idx * PAGE_SIZE) + BUG(); + +/* XXX Fix - Anton */ +#if 0 + __flush_cache_one(vaddr); +#else + flush_cache_all(); +#endif + +#ifdef HIGHMEM_DEBUG + /* + * force other mappings to Oops if they'll try to access + * this pte without first remap it + */ + pte_clear(kmap_pte+idx); +/* XXX Fix - Anton */ +#if 0 + __flush_tlb_one(vaddr); +#else + flush_tlb_all(); +#endif +#endif +} diff -urN linux-2.4.20-pre8.vanilla/include/asm-sparc/highmem.h linux-2.4.20-pre8/include/asm-sparc/highmem.h --- linux-2.4.20-pre8.vanilla/include/asm-sparc/highmem.h 2002-09-28 14:18:17.000000000 +0200 +++ linux-2.4.20-pre8/include/asm-sparc/highmem.h 2002-09-28 14:10:12.000000000 +0200 @@ -29,6 +29,10 @@ /* undef for production */ #define HIGHMEM_DEBUG 1 +/* in mm/highmem.c */ +extern void *kmap_high(struct page *page); +extern void kunmap_high(struct page *page); + /* declarations for highmem.c */ extern unsigned long highstart_pfn, highend_pfn; @@ -55,98 +59,11 @@ #define PKMAP_NR(virt) ((virt - pkmap_base) >> PAGE_SHIFT) #define PKMAP_ADDR(nr) (pkmap_base + ((nr) << PAGE_SHIFT)) -extern void *kmap_high(struct page *page); -extern void kunmap_high(struct page *page); - -static inline void *kmap(struct page *page) -{ - if (in_interrupt()) - BUG(); - if (page < highmem_start_page) - return page_address(page); - return kmap_high(page); -} - -static inline void kunmap(struct page *page) -{ - if (in_interrupt()) - BUG(); - if (page < highmem_start_page) - return; - kunmap_high(page); -} - -/* - * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap - * gives a more generic (and caching) interface. But kmap_atomic can - * be used in IRQ contexts, so in some (very limited) cases we need - * it. - */ -static inline void *kmap_atomic(struct page *page, enum km_type type) -{ - unsigned long idx; - unsigned long vaddr; - - if (page < highmem_start_page) - return page_address(page); - - idx = type + KM_TYPE_NR*smp_processor_id(); - vaddr = fix_kmap_begin + idx * PAGE_SIZE; - -/* XXX Fix - Anton */ -#if 0 - __flush_cache_one(vaddr); -#else - flush_cache_all(); -#endif - -#if HIGHMEM_DEBUG - if (!pte_none(*(kmap_pte+idx))) - BUG(); -#endif - set_pte(kmap_pte+idx, mk_pte(page, kmap_prot)); -/* XXX Fix - Anton */ -#if 0 - __flush_tlb_one(vaddr); -#else - flush_tlb_all(); -#endif - - return (void*) vaddr; -} - -static inline void kunmap_atomic(void *kvaddr, enum km_type type) -{ - unsigned long vaddr = (unsigned long) kvaddr; - unsigned long idx = type + KM_TYPE_NR*smp_processor_id(); - - if (vaddr < fix_kmap_begin) // FIXME - return; - - if (vaddr != fix_kmap_begin + idx * PAGE_SIZE) - BUG(); - -/* XXX Fix - Anton */ -#if 0 - __flush_cache_one(vaddr); -#else - flush_cache_all(); -#endif - -#ifdef HIGHMEM_DEBUG - /* - * force other mappings to Oops if they'll try to access - * this pte without first remap it - */ - pte_clear(kmap_pte+idx); -/* XXX Fix - Anton */ -#if 0 - __flush_tlb_one(vaddr); -#else - flush_tlb_all(); -#endif -#endif -} +/* in arch/sparc/mm/highmem.c */ +void *kmap(struct page *page); +void kunmap(struct page *page); +void *kmap_atomic(struct page *page, enum km_type type); +void kunmap_atomic(void *kvaddr, enum km_type type); #endif /* __KERNEL__ */ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-28 12:28 ` Tomas Szepe @ 2002-09-28 16:13 ` Tomas Szepe 2002-09-29 6:23 ` David S. Miller 0 siblings, 1 reply; 12+ messages in thread From: Tomas Szepe @ 2002-09-28 16:13 UTC (permalink / raw) To: David S. Miller; +Cc: zaitcev, linux-kernel > > From: Pete Zaitcev <zaitcev@redhat.com> > > Date: Thu, 26 Sep 2002 17:27:24 -0400 > > > > > Since 2.4.20-pre2 or 3, sunrpc.o has had this problem on sparc32: > > > > > > depmod: *** Unresolved symbols in /lib/modules/2.4.20-pre8/kernel/net/sunrpc/sunrpc.o > > > depmod: ___illegal_use_of_BTFIXUP_SETHI_in_module > > > depmod: ___f_set_pte > > > depmod: fix_kmap_begin > > > depmod: ___f_flush_cache_all > > > depmod: ___f_pte_clear > > > depmod: ___f_mk_pte > > > depmod: ___f_flush_tlb_all > > > > Try these two things: > > > > No Peter, it really does use kmap_atomic stuff from modules, and this > > precludes providing those routines inline in highmem.h, they must > > live statically in main kernel image so that flush/pte calls can > > be properly BTFIXUP'd. > > > > See my other email. > > Ok, DaveM, could you have a look at this patch? Please disregard, highmem.c unreasonably included linux/highmem.h. I'll be looking into this some more. T. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-28 16:13 ` Tomas Szepe @ 2002-09-29 6:23 ` David S. Miller 2002-09-29 10:22 ` Tomas Szepe 0 siblings, 1 reply; 12+ messages in thread From: David S. Miller @ 2002-09-29 6:23 UTC (permalink / raw) To: szepe; +Cc: zaitcev, linux-kernel From: Tomas Szepe <szepe@pinerecords.com> Date: Sat, 28 Sep 2002 18:13:16 +0200 > Ok, DaveM, could you have a look at this patch? Please disregard, highmem.c unreasonably included linux/highmem.h. I'll be looking into this some more. Let us know when new working patch is available :-) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-29 6:23 ` David S. Miller @ 2002-09-29 10:22 ` Tomas Szepe 2002-09-29 23:56 ` Pete Zaitcev 0 siblings, 1 reply; 12+ messages in thread From: Tomas Szepe @ 2002-09-29 10:22 UTC (permalink / raw) To: David S. Miller; +Cc: zaitcev, linux-kernel > From: Tomas Szepe <szepe@pinerecords.com> > Date: Sat, 28 Sep 2002 18:13:16 +0200 > > > Ok, DaveM, could you have a look at this patch? > > Please disregard, highmem.c unreasonably included linux/highmem.h. > I'll be looking into this some more. > > Let us know when new working patch is available :-) Right. :) This took a bit longer cos I had to leave for the night. Patch against 2.4.20-pre8. T. diff -urN 2.4.20-pre8.vanilla/arch/sparc/kernel/sparc_ksyms.c linux-2.4.20-pre8/arch/sparc/kernel/sparc_ksyms.c --- 2.4.20-pre8.vanilla/arch/sparc/kernel/sparc_ksyms.c 2002-08-03 06:12:08.000000000 +0200 +++ linux-2.4.20-pre8/arch/sparc/kernel/sparc_ksyms.c 2002-09-29 11:45:33.000000000 +0200 @@ -46,6 +46,9 @@ #include <asm/sbus.h> #include <asm/dma.h> #endif +#ifdef CONFIG_HIGHMEM +#include <asm/highmem.h> +#endif #include <asm/a.out.h> #include <asm/io-unit.h> @@ -204,6 +207,12 @@ EXPORT_SYMBOL(pci_dma_sync_single); #endif +/* in arch/sparc/mm/highmem.c */ +#ifdef CONFIG_HIGHMEM +EXPORT_SYMBOL(kmap_atomic); +EXPORT_SYMBOL(kunmap_atomic); +#endif + /* Solaris/SunOS binary compatibility */ EXPORT_SYMBOL(svr4_setcontext); EXPORT_SYMBOL(svr4_getcontext); diff -urN 2.4.20-pre8.vanilla/arch/sparc/mm/Makefile linux-2.4.20-pre8/arch/sparc/mm/Makefile --- 2.4.20-pre8.vanilla/arch/sparc/mm/Makefile 2000-12-29 23:07:21.000000000 +0100 +++ linux-2.4.20-pre8/arch/sparc/mm/Makefile 2002-09-29 11:45:33.000000000 +0200 @@ -11,7 +11,7 @@ $(CC) $(AFLAGS) -ansi -c -o $*.o $< O_TARGET := mm.o -obj-y := fault.o init.o loadmmu.o generic.o extable.o btfixup.o +obj-y := fault.o init.o loadmmu.o generic.o extable.o highmem.o btfixup.o ifeq ($(CONFIG_SUN4),y) obj-y += nosrmmu.o diff -urN 2.4.20-pre8.vanilla/arch/sparc/mm/highmem.c linux-2.4.20-pre8/arch/sparc/mm/highmem.c --- 2.4.20-pre8.vanilla/arch/sparc/mm/highmem.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.4.20-pre8/arch/sparc/mm/highmem.c 2002-09-29 11:46:38.000000000 +0200 @@ -0,0 +1,84 @@ +/* + * highmem.c: virtual kernel memory mappings for high memory + * + * Provides kernel-static versions of atomic kmap functions originally + * found as inlines in include/asm-sparc/highmem.h. These became + * needed as kmap_atomic() and kunmap_atomic() started getting + * called from within modules. + * -- Tomas Szepe <szepe@pinerecords.com>, September 2002 + */ + +#include <linux/mm.h> +#include <asm/highmem.h> +#include <asm/pgalloc.h> + +/* + * The use of kmap_atomic/kunmap_atomic is discouraged -- kmap()/kunmap() + * gives a more generic (and caching) interface. But kmap_atomic() can + * be used in IRQ contexts, so in some (very limited) cases we need it. + */ +void *kmap_atomic(struct page *page, enum km_type type) +{ + unsigned long idx; + unsigned long vaddr; + + if (page < highmem_start_page) + return page_address(page); + + idx = type + KM_TYPE_NR * smp_processor_id(); + vaddr = fix_kmap_begin + idx * PAGE_SIZE; + +/* XXX Fix - Anton */ +#if 0 + __flush_cache_one(vaddr); +#else + flush_cache_all(); +#endif + +#if HIGHMEM_DEBUG + if (!pte_none(*(kmap_pte + idx))) + BUG(); +#endif + set_pte(kmap_pte + idx, mk_pte(page, kmap_prot)); +/* XXX Fix - Anton */ +#if 0 + __flush_tlb_one(vaddr); +#else + flush_tlb_all(); +#endif + + return (void *) vaddr; +} + +void kunmap_atomic(void *kvaddr, enum km_type type) +{ + unsigned long vaddr = (unsigned long) kvaddr; + unsigned long idx = type + KM_TYPE_NR * smp_processor_id(); + + if (vaddr < fix_kmap_begin) /* FIXME */ + return; + + if (vaddr != fix_kmap_begin + idx * PAGE_SIZE) + BUG(); + +/* XXX Fix - Anton */ +#if 0 + __flush_cache_one(vaddr); +#else + flush_cache_all(); +#endif + +#ifdef HIGHMEM_DEBUG + /* + * Force other mappings to oops if they try to access + * this pte without first remapping it. + */ + pte_clear(kmap_pte + idx); +/* XXX Fix - Anton */ +#if 0 + __flush_tlb_one(vaddr); +#else + flush_tlb_all(); +#endif +#endif +} diff -urN 2.4.20-pre8.vanilla/include/asm-sparc/highmem.h linux-2.4.20-pre8/include/asm-sparc/highmem.h --- 2.4.20-pre8.vanilla/include/asm-sparc/highmem.h 2002-09-29 11:36:45.000000000 +0200 +++ linux-2.4.20-pre8/include/asm-sparc/highmem.h 2002-09-29 11:48:13.000000000 +0200 @@ -29,6 +29,13 @@ /* undef for production */ #define HIGHMEM_DEBUG 1 +/* in mm/highmem.c */ +extern void *kmap_high(struct page *page); +extern void kunmap_high(struct page *page); + +/* in mm/memory.c */ +extern struct page *highmem_start_page; + /* declarations for highmem.c */ extern unsigned long highstart_pfn, highend_pfn; @@ -51,12 +58,13 @@ */ #define LAST_PKMAP 1024 -#define LAST_PKMAP_MASK (LAST_PKMAP - 1) -#define PKMAP_NR(virt) ((virt - pkmap_base) >> PAGE_SHIFT) -#define PKMAP_ADDR(nr) (pkmap_base + ((nr) << PAGE_SHIFT)) - -extern void *kmap_high(struct page *page); -extern void kunmap_high(struct page *page); +#define LAST_PKMAP_MASK (LAST_PKMAP - 1) +#define PKMAP_NR(virt) ((virt - pkmap_base) >> PAGE_SHIFT) +#define PKMAP_ADDR(nr) (pkmap_base + ((nr) << PAGE_SHIFT)) + +/* in arch/sparc/mm/highmem.c */ +void *kmap_atomic(struct page *page, enum km_type type); +void kunmap_atomic(void *kvaddr, enum km_type type); static inline void *kmap(struct page *page) { @@ -76,78 +84,6 @@ kunmap_high(page); } -/* - * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap - * gives a more generic (and caching) interface. But kmap_atomic can - * be used in IRQ contexts, so in some (very limited) cases we need - * it. - */ -static inline void *kmap_atomic(struct page *page, enum km_type type) -{ - unsigned long idx; - unsigned long vaddr; - - if (page < highmem_start_page) - return page_address(page); - - idx = type + KM_TYPE_NR*smp_processor_id(); - vaddr = fix_kmap_begin + idx * PAGE_SIZE; - -/* XXX Fix - Anton */ -#if 0 - __flush_cache_one(vaddr); -#else - flush_cache_all(); -#endif - -#if HIGHMEM_DEBUG - if (!pte_none(*(kmap_pte+idx))) - BUG(); -#endif - set_pte(kmap_pte+idx, mk_pte(page, kmap_prot)); -/* XXX Fix - Anton */ -#if 0 - __flush_tlb_one(vaddr); -#else - flush_tlb_all(); -#endif - - return (void*) vaddr; -} - -static inline void kunmap_atomic(void *kvaddr, enum km_type type) -{ - unsigned long vaddr = (unsigned long) kvaddr; - unsigned long idx = type + KM_TYPE_NR*smp_processor_id(); - - if (vaddr < fix_kmap_begin) // FIXME - return; - - if (vaddr != fix_kmap_begin + idx * PAGE_SIZE) - BUG(); - -/* XXX Fix - Anton */ -#if 0 - __flush_cache_one(vaddr); -#else - flush_cache_all(); -#endif - -#ifdef HIGHMEM_DEBUG - /* - * force other mappings to Oops if they'll try to access - * this pte without first remap it - */ - pte_clear(kmap_pte+idx); -/* XXX Fix - Anton */ -#if 0 - __flush_tlb_one(vaddr); -#else - flush_tlb_all(); -#endif -#endif -} - #endif /* __KERNEL__ */ #endif /* _ASM_HIGHMEM_H */ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-29 10:22 ` Tomas Szepe @ 2002-09-29 23:56 ` Pete Zaitcev 2002-09-30 0:50 ` David S. Miller ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: Pete Zaitcev @ 2002-09-29 23:56 UTC (permalink / raw) To: Tomas Szepe; +Cc: David S. Miller, zaitcev, linux-kernel > Date: Sun, 29 Sep 2002 12:22:39 +0200 > From: Tomas Szepe <szepe@pinerecords.com> > +++ linux-2.4.20-pre8/arch/sparc/kernel/sparc_ksyms.c 2002-09-29 11:45:33.000000000 +0200 > +#ifdef CONFIG_HIGHMEM > +#include <asm/highmem.h> > +#endif OK, this is actually correct, I think. Looks funny. :) > +++ linux-2.4.20-pre8/arch/sparc/mm/Makefile 2002-09-29 11:45:33.000000000 +0200 > @@ -11,7 +11,7 @@ > $(CC) $(AFLAGS) -ansi -c -o $*.o $< > > O_TARGET := mm.o > -obj-y := fault.o init.o loadmmu.o generic.o extable.o btfixup.o > +obj-y := fault.o init.o loadmmu.o generic.o extable.o highmem.o btfixup.o Why is this not obj-$(CONFIG_HIGHMEM) ? > +/* in mm/memory.c */ > +extern struct page *highmem_start_page; > + I would not do this. I would try to include <linux/highmem.h> into arch/sparc/mm/highmem.c (instead of <asm/highmem.h> as you did). Also, now that you moved a bunch of implementation out of inlines, try to trim the #include list at the top of <asm-sparc/highmem.h>. For instance, asm/vaddrs.h is a suspect. The rest of the patch is sane, as far as I can tell. I do not have a ready to run 2.4 sparc box, sorry. Please ask sparclinux@vger people to test, especially Uzi. -- Pete ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-29 23:56 ` Pete Zaitcev @ 2002-09-30 0:50 ` David S. Miller 2002-09-30 2:05 ` Horst von Brand 2002-09-30 2:09 ` Tomas Szepe 2 siblings, 0 replies; 12+ messages in thread From: David S. Miller @ 2002-09-30 0:50 UTC (permalink / raw) To: zaitcev; +Cc: szepe, linux-kernel From: Pete Zaitcev <zaitcev@redhat.com> Date: Sun, 29 Sep 2002 19:56:12 -0400 The rest of the patch is sane, as far as I can tell. I do not have a ready to run 2.4 sparc box, sorry. Please ask sparclinux@vger people to test, especially Uzi. Let me know when new acceptable and tested patch is available. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-29 23:56 ` Pete Zaitcev 2002-09-30 0:50 ` David S. Miller @ 2002-09-30 2:05 ` Horst von Brand 2002-09-30 2:09 ` Tomas Szepe 2 siblings, 0 replies; 12+ messages in thread From: Horst von Brand @ 2002-09-30 2:05 UTC (permalink / raw) To: Pete Zaitcev; +Cc: Tomas Szepe, David S. Miller, linux-kernel Pete Zaitcev <zaitcev@redhat.com> said: > > Date: Sun, 29 Sep 2002 12:22:39 +0200 > > From: Tomas Szepe <szepe@pinerecords.com> > > > +++ linux-2.4.20-pre8/arch/sparc/kernel/sparc_ksyms.c 2002-09-29 11:45:33.000 > 000000 +0200 > > +#ifdef CONFIG_HIGHMEM > > +#include <asm/highmem.h> > > +#endif > > OK, this is actually correct, I think. Looks funny. :) Do it inside the included file then? -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de Informatica Fono: +56 32 654431 Universidad Tecnica Federico Santa Maria +56 32 654239 Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-29 23:56 ` Pete Zaitcev 2002-09-30 0:50 ` David S. Miller 2002-09-30 2:05 ` Horst von Brand @ 2002-09-30 2:09 ` Tomas Szepe 2 siblings, 0 replies; 12+ messages in thread From: Tomas Szepe @ 2002-09-30 2:09 UTC (permalink / raw) To: Pete Zaitcev; +Cc: David S. Miller, linux-kernel Hi, > > +++ linux-2.4.20-pre8/arch/sparc/mm/Makefile 2002-09-29 11:45:33.000000000 +0200 > > @@ -11,7 +11,7 @@ > > $(CC) $(AFLAGS) -ansi -c -o $*.o $< > > > > O_TARGET := mm.o > > -obj-y := fault.o init.o loadmmu.o generic.o extable.o btfixup.o > > +obj-y := fault.o init.o loadmmu.o generic.o extable.o highmem.o btfixup.o > > Why is this not obj-$(CONFIG_HIGHMEM) ? My bad. I took the liberty of fixing up the formatting of the makefile when I was at changing this. > > +/* in mm/memory.c */ > > +extern struct page *highmem_start_page; > > + > > I would not do this. I would try to include <linux/highmem.h> > into arch/sparc/mm/highmem.c (instead of <asm/highmem.h> as you did). Ok. linux/highmem.h initially looked suspicious to me. Also if this extern isn't put in asm-sparc/highmem.h, linux/highmem.h has to be included everywhere instead (which is not really a problem I think). > Also, now that you moved a bunch of implementation out of inlines, > try to trim the #include list at the top of <asm-sparc/highmem.h>. > For instance, asm/vaddrs.h is a suspect. Indeed! And linux/init.h and asm/pgtable.h aren't needed either. > The rest of the patch is sane, as far as I can tell. I do not > have a ready to run 2.4 sparc box, sorry. Please ask sparclinux@vger > people to test, especially Uzi. Will do. Hopefully aurora people will have a go with the patch too. v3 as per your comments follows. T. diff -urN 2.4.20-pre8.vanilla/arch/sparc/kernel/sparc_ksyms.c linux-2.4.20-pre8/arch/sparc/kernel/sparc_ksyms.c --- 2.4.20-pre8.vanilla/arch/sparc/kernel/sparc_ksyms.c 2002-08-03 06:12:08.000000000 +0200 +++ linux-2.4.20-pre8/arch/sparc/kernel/sparc_ksyms.c 2002-09-30 03:44:37.000000000 +0200 @@ -46,6 +46,9 @@ #include <asm/sbus.h> #include <asm/dma.h> #endif +#ifdef CONFIG_HIGHMEM +#include <linux/highmem.h> +#endif #include <asm/a.out.h> #include <asm/io-unit.h> @@ -204,6 +207,12 @@ EXPORT_SYMBOL(pci_dma_sync_single); #endif +/* in arch/sparc/mm/highmem.c */ +#ifdef CONFIG_HIGHMEM +EXPORT_SYMBOL(kmap_atomic); +EXPORT_SYMBOL(kunmap_atomic); +#endif + /* Solaris/SunOS binary compatibility */ EXPORT_SYMBOL(svr4_setcontext); EXPORT_SYMBOL(svr4_getcontext); diff -urN 2.4.20-pre8.vanilla/arch/sparc/mm/Makefile linux-2.4.20-pre8/arch/sparc/mm/Makefile --- 2.4.20-pre8.vanilla/arch/sparc/mm/Makefile 2000-12-29 23:07:21.000000000 +0100 +++ linux-2.4.20-pre8/arch/sparc/mm/Makefile 2002-09-30 03:23:25.000000000 +0200 @@ -10,19 +10,24 @@ .S.o: $(CC) $(AFLAGS) -ansi -c -o $*.o $< -O_TARGET := mm.o -obj-y := fault.o init.o loadmmu.o generic.o extable.o btfixup.o +O_TARGET := mm.o +obj-y := fault.o init.o loadmmu.o generic.o extable.o btfixup.o ifeq ($(CONFIG_SUN4),y) -obj-y += nosrmmu.o +obj-y += nosrmmu.o else -obj-y += srmmu.o iommu.o io-unit.o hypersparc.o viking.o tsunami.o swift.o +obj-y += srmmu.o iommu.o io-unit.o hypersparc.o viking.o \ + tsunami.o swift.o +endif + +ifdef CONFIG_HIGHMEM +obj-y += highmem.o endif ifdef CONFIG_SMP -obj-y += nosun4c.o +obj-y += nosun4c.o else -obj-y += sun4c.o +obj-y += sun4c.o endif include $(TOPDIR)/Rules.make diff -urN 2.4.20-pre8.vanilla/arch/sparc/mm/highmem.c linux-2.4.20-pre8/arch/sparc/mm/highmem.c --- 2.4.20-pre8.vanilla/arch/sparc/mm/highmem.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.4.20-pre8/arch/sparc/mm/highmem.c 2002-09-30 03:27:54.000000000 +0200 @@ -0,0 +1,84 @@ +/* + * highmem.c: virtual kernel memory mappings for high memory + * + * Provides kernel-static versions of atomic kmap functions originally + * found as inlines in include/asm-sparc/highmem.h. These became + * needed as kmap_atomic() and kunmap_atomic() started getting + * called from within modules. + * -- Tomas Szepe <szepe@pinerecords.com>, September 2002 + */ + +#include <linux/mm.h> +#include <linux/highmem.h> +#include <asm/pgalloc.h> + +/* + * The use of kmap_atomic/kunmap_atomic is discouraged -- kmap()/kunmap() + * gives a more generic (and caching) interface. But kmap_atomic() can + * be used in IRQ contexts, so in some (very limited) cases we need it. + */ +void *kmap_atomic(struct page *page, enum km_type type) +{ + unsigned long idx; + unsigned long vaddr; + + if (page < highmem_start_page) + return page_address(page); + + idx = type + KM_TYPE_NR * smp_processor_id(); + vaddr = fix_kmap_begin + idx * PAGE_SIZE; + +/* XXX Fix - Anton */ +#if 0 + __flush_cache_one(vaddr); +#else + flush_cache_all(); +#endif + +#if HIGHMEM_DEBUG + if (!pte_none(*(kmap_pte + idx))) + BUG(); +#endif + set_pte(kmap_pte + idx, mk_pte(page, kmap_prot)); +/* XXX Fix - Anton */ +#if 0 + __flush_tlb_one(vaddr); +#else + flush_tlb_all(); +#endif + + return (void *) vaddr; +} + +void kunmap_atomic(void *kvaddr, enum km_type type) +{ + unsigned long vaddr = (unsigned long) kvaddr; + unsigned long idx = type + KM_TYPE_NR * smp_processor_id(); + + if (vaddr < fix_kmap_begin) /* FIXME */ + return; + + if (vaddr != fix_kmap_begin + idx * PAGE_SIZE) + BUG(); + +/* XXX Fix - Anton */ +#if 0 + __flush_cache_one(vaddr); +#else + flush_cache_all(); +#endif + +#ifdef HIGHMEM_DEBUG + /* + * Force other mappings to oops if they try to access + * this pte without first remapping it. + */ + pte_clear(kmap_pte + idx); +/* XXX Fix - Anton */ +#if 0 + __flush_tlb_one(vaddr); +#else + flush_tlb_all(); +#endif +#endif +} diff -urN 2.4.20-pre8.vanilla/include/asm-sparc/highmem.h linux-2.4.20-pre8/include/asm-sparc/highmem.h --- 2.4.20-pre8.vanilla/include/asm-sparc/highmem.h 2002-09-30 03:32:26.000000000 +0200 +++ linux-2.4.20-pre8/include/asm-sparc/highmem.h 2002-09-30 03:56:59.000000000 +0200 @@ -20,15 +20,16 @@ #ifdef __KERNEL__ -#include <linux/init.h> #include <linux/interrupt.h> -#include <asm/vaddrs.h> #include <asm/kmap_types.h> -#include <asm/pgtable.h> /* undef for production */ #define HIGHMEM_DEBUG 1 +/* in mm/highmem.c */ +extern void *kmap_high(struct page *page); +extern void kunmap_high(struct page *page); + /* declarations for highmem.c */ extern unsigned long highstart_pfn, highend_pfn; @@ -51,12 +52,13 @@ */ #define LAST_PKMAP 1024 -#define LAST_PKMAP_MASK (LAST_PKMAP - 1) -#define PKMAP_NR(virt) ((virt - pkmap_base) >> PAGE_SHIFT) -#define PKMAP_ADDR(nr) (pkmap_base + ((nr) << PAGE_SHIFT)) - -extern void *kmap_high(struct page *page); -extern void kunmap_high(struct page *page); +#define LAST_PKMAP_MASK (LAST_PKMAP - 1) +#define PKMAP_NR(virt) ((virt - pkmap_base) >> PAGE_SHIFT) +#define PKMAP_ADDR(nr) (pkmap_base + ((nr) << PAGE_SHIFT)) + +/* in arch/sparc/mm/highmem.c */ +void *kmap_atomic(struct page *page, enum km_type type); +void kunmap_atomic(void *kvaddr, enum km_type type); static inline void *kmap(struct page *page) { @@ -76,78 +78,6 @@ kunmap_high(page); } -/* - * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap - * gives a more generic (and caching) interface. But kmap_atomic can - * be used in IRQ contexts, so in some (very limited) cases we need - * it. - */ -static inline void *kmap_atomic(struct page *page, enum km_type type) -{ - unsigned long idx; - unsigned long vaddr; - - if (page < highmem_start_page) - return page_address(page); - - idx = type + KM_TYPE_NR*smp_processor_id(); - vaddr = fix_kmap_begin + idx * PAGE_SIZE; - -/* XXX Fix - Anton */ -#if 0 - __flush_cache_one(vaddr); -#else - flush_cache_all(); -#endif - -#if HIGHMEM_DEBUG - if (!pte_none(*(kmap_pte+idx))) - BUG(); -#endif - set_pte(kmap_pte+idx, mk_pte(page, kmap_prot)); -/* XXX Fix - Anton */ -#if 0 - __flush_tlb_one(vaddr); -#else - flush_tlb_all(); -#endif - - return (void*) vaddr; -} - -static inline void kunmap_atomic(void *kvaddr, enum km_type type) -{ - unsigned long vaddr = (unsigned long) kvaddr; - unsigned long idx = type + KM_TYPE_NR*smp_processor_id(); - - if (vaddr < fix_kmap_begin) // FIXME - return; - - if (vaddr != fix_kmap_begin + idx * PAGE_SIZE) - BUG(); - -/* XXX Fix - Anton */ -#if 0 - __flush_cache_one(vaddr); -#else - flush_cache_all(); -#endif - -#ifdef HIGHMEM_DEBUG - /* - * force other mappings to Oops if they'll try to access - * this pte without first remap it - */ - pte_clear(kmap_pte+idx); -/* XXX Fix - Anton */ -#if 0 - __flush_tlb_one(vaddr); -#else - flush_tlb_all(); -#endif -#endif -} - #endif /* __KERNEL__ */ #endif /* _ASM_HIGHMEM_H */ ^ permalink raw reply [flat|nested] 12+ messages in thread
* sparc32 sunrpc.o @ 2002-09-26 20:25 Tomas Szepe 2002-09-26 21:09 ` David S. Miller 0 siblings, 1 reply; 12+ messages in thread From: Tomas Szepe @ 2002-09-26 20:25 UTC (permalink / raw) To: lkml Since 2.4.20-pre2 or 3, sunrpc.o has had this problem on sparc32: depmod: *** Unresolved symbols in /lib/modules/2.4.20-pre8/kernel/net/sunrpc/sunrpc.o depmod: ___illegal_use_of_BTFIXUP_SETHI_in_module depmod: ___f_set_pte depmod: fix_kmap_begin depmod: ___f_flush_cache_all depmod: ___f_pte_clear depmod: ___f_mk_pte depmod: ___f_flush_tlb_all I'd like to fix the breakage but have no idea where to start looking. Any hints will be thoroughly appreciated. T. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: sparc32 sunrpc.o 2002-09-26 20:25 Tomas Szepe @ 2002-09-26 21:09 ` David S. Miller 0 siblings, 0 replies; 12+ messages in thread From: David S. Miller @ 2002-09-26 21:09 UTC (permalink / raw) To: szepe; +Cc: linux-kernel From: Tomas Szepe <szepe@pinerecords.com> Date: Thu, 26 Sep 2002 22:25:25 +0200 Since 2.4.20-pre2 or 3, sunrpc.o has had this problem on sparc32: depmod: *** Unresolved symbols in /lib/modules/2.4.20-pre8/kernel/net/sunrpc/sunrpc.o depmod: ___illegal_use_of_BTFIXUP_SETHI_in_module depmod: ___f_set_pte depmod: fix_kmap_begin depmod: ___f_flush_cache_all depmod: ___f_pte_clear depmod: ___f_mk_pte depmod: ___f_flush_tlb_all I'd like to fix the breakage but have no idea where to start looking. Any hints will be thoroughly appreciated. Move all the kmap atomic routines from include/asm-sparc/highmem.h into arch/sparc/mm/highmem.c, export them from ksyms in arch/sparc/kernel/sparc_ksyms.c when CONFIG_HIGHMEM is defined. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2002-09-30 2:04 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <mailman.1033072381.13688.linux-kernel2news@redhat.com> 2002-09-26 21:27 ` sparc32 sunrpc.o Pete Zaitcev 2002-09-26 21:29 ` David S. Miller 2002-09-28 12:28 ` Tomas Szepe 2002-09-28 16:13 ` Tomas Szepe 2002-09-29 6:23 ` David S. Miller 2002-09-29 10:22 ` Tomas Szepe 2002-09-29 23:56 ` Pete Zaitcev 2002-09-30 0:50 ` David S. Miller 2002-09-30 2:05 ` Horst von Brand 2002-09-30 2:09 ` Tomas Szepe 2002-09-26 20:25 Tomas Szepe 2002-09-26 21:09 ` David S. Miller
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).