* [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4]
@ 2006-10-19 11:19 Franck Bui-Huu
2006-10-19 11:19 ` [PATCH 1/7] page.h: remove __pa() usages Franck Bui-Huu
` (7 more replies)
0 siblings, 8 replies; 20+ messages in thread
From: Franck Bui-Huu @ 2006-10-19 11:19 UTC (permalink / raw)
To: ralf; +Cc: anemo, ths, linux-mips
Changes since take #3
--------------------
* Sign extension hack still needed by rd_start_early() (Atsushi)
* Replace panic() by printk() in init_initrd() (Atsushi)
* Fix CONFIG_64BITS typo (Atsushi)
* Add a new sanity check in init_initrd():
initrd_start < PAGE_OFFSET
Changes since take #2
--------------------
* More initrd code clean up. It should be more readable and
more robust now.
* Add some missing include in page.h (Atsushi)
* Fix a wrong use of __page_offset() in __va() (Atsushi)
* Rename __page_offset() into __pa_page_offset()
changes since take #1
--------------------
* Changed the definition of __pa() for 64-bits kernels to match
the one suggested by Atsushi. It should be safer.
* Make virt_to_page() uses virt_to_phys() instead of __pa().
Thanks to Atsushi for testing this patchset on 64 bit kernels.
Please consider,
Franck
---
arch/mips/kernel/setup.c | 87 +++++++++++++++++++++++++++-----------------
arch/mips/mm/init.c | 42 ++++++++++-----------
include/asm-mips/io.h | 2 +
include/asm-mips/page.h | 16 ++++++--
include/asm-mips/pgtable.h | 2 +
5 files changed, 87 insertions(+), 62 deletions(-)
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH 1/7] page.h: remove __pa() usages. 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu @ 2006-10-19 11:19 ` Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu ` (6 subsequent siblings) 7 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 11:19 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu __pa() was used by virt_to_page() and virt_addr_valid(). These latter are used when kernel is initialised so __pa() is not appropriate, we use virt_to_phys() instead. Futhermore __pa() is going to take care of CKSEG0/XKPHYS address mix for 64 bit kernels. This makes __pa() more complex than virt_to_phys() and this extra work is not needed by virt_to_page() and virt_addr_valid(). Eventually it consolidates virt_to_phys() prototype by making its argument 'const'. this avoids some warnings that was due to some virt_to_page() usages which pass const pointer. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- arch/mips/mm/init.c | 8 ++++---- include/asm-mips/io.h | 2 +- include/asm-mips/page.h | 6 ++++-- include/asm-mips/pgtable.h | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 2f346d1..4431ea0 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c @@ -90,9 +90,9 @@ unsigned long setup_zero_pages(void) if (!empty_zero_page) panic("Oh boy, that early out of memory?"); - page = virt_to_page(empty_zero_page); + page = virt_to_page((void *)empty_zero_page); split_page(page, order); - while (page < virt_to_page(empty_zero_page + (PAGE_SIZE << order))) { + while (page < virt_to_page((void *)(empty_zero_page + (PAGE_SIZE << order)))) { SetPageReserved(page); page++; } @@ -490,8 +490,8 @@ void free_init_pages(char *what, unsigne unsigned long addr; for (addr = begin; addr < end; addr += PAGE_SIZE) { - ClearPageReserved(virt_to_page(addr)); - init_page_count(virt_to_page(addr)); + ClearPageReserved(virt_to_page((void *)addr)); + init_page_count(virt_to_page((void *)addr)); memset((void *)addr, 0xcc, PAGE_SIZE); free_page(addr); totalram_pages++; diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index d5307dd..9b9f804 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h @@ -113,7 +113,7 @@ #endif * almost all conceivable cases a device driver should not be using * this function */ -static inline unsigned long virt_to_phys(volatile void * address) +static inline unsigned long virt_to_phys(volatile const void *address) { return (unsigned long)address - PAGE_OFFSET; } diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index 32e5625..fa4e4d9 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h @@ -34,7 +34,9 @@ #define PAGE_MASK (~((1 << PAGE_SH #ifndef __ASSEMBLY__ +#include <linux/pfn.h> #include <asm/cpu-features.h> +#include <asm/io.h> extern void clear_page(void * page); extern void copy_page(void * to, void * from); @@ -157,8 +159,8 @@ ({ \ #endif -#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) -#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) +#define virt_to_page(kaddr) pfn_to_page(PFN_DOWN(virt_to_phys(kaddr))) +#define virt_addr_valid(kaddr) pfn_valid(PFN_DOWN(virt_to_phys(kaddr))) #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) diff --git a/include/asm-mips/pgtable.h b/include/asm-mips/pgtable.h index 1ca4d1e..f2e1325 100644 --- a/include/asm-mips/pgtable.h +++ b/include/asm-mips/pgtable.h @@ -67,7 +67,7 @@ extern unsigned long empty_zero_page; extern unsigned long zero_page_mask; #define ZERO_PAGE(vaddr) \ - (virt_to_page(empty_zero_page + (((unsigned long)(vaddr)) & zero_page_mask))) + (virt_to_page((void *)(empty_zero_page + (((unsigned long)(vaddr)) & zero_page_mask)))) #define __HAVE_ARCH_MOVE_PTE #define move_pte(pte, prot, old_addr, new_addr) \ -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu 2006-10-19 11:19 ` [PATCH 1/7] page.h: remove __pa() usages Franck Bui-Huu @ 2006-10-19 11:20 ` Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 3/7] setup.c: get ride of CPHYSADDR() Franck Bui-Huu ` (5 subsequent siblings) 7 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 11:20 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu During early boot mem init, some configs couldn't use __pa() to convert virtual into physical addresses. Specially for 64 bit kernel cases when CONFIG_BUILD_ELF64=n. This patch make __pa() work for _all_ configs and thus make CPHYSADDR() useless. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- include/asm-mips/page.h | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index fa4e4d9..119daee 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h @@ -133,8 +133,13 @@ #endif /* !__ASSEMBLY__ */ /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) -#define __pa(x) ((unsigned long) (x) - PAGE_OFFSET) -#define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET)) +#if defined(CONFIG_64BIT) && !defined(CONFIG_BUILD_ELF64) +#define __pa_page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) +#else +#define __pa_page_offset(x) PAGE_OFFSET +#endif +#define __pa(x) ((unsigned long)(x) - __pa_page_offset(x)) +#define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 3/7] setup.c: get ride of CPHYSADDR() 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu 2006-10-19 11:19 ` [PATCH 1/7] page.h: remove __pa() usages Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu @ 2006-10-19 11:20 ` Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 4/7] Introduce __pa_symbol() Franck Bui-Huu ` (4 subsequent siblings) 7 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 11:20 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu and use new __pa() implementation instead introduced by the previous patch. Indeed this macro can be used now even by the 64 bit kernels with CONFIG_BUILD_ELF64=n config. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- arch/mips/kernel/setup.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index 8f6e896..715451a 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c @@ -204,12 +204,12 @@ static void __init finalize_initrd(void) printk(KERN_INFO "Initrd not found or empty"); goto disable; } - if (CPHYSADDR(initrd_end) > PFN_PHYS(max_low_pfn)) { + if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) { printk("Initrd extends beyond end of memory"); goto disable; } - reserve_bootmem(CPHYSADDR(initrd_start), size); + reserve_bootmem(__pa(initrd_start), size); initrd_below_start_ok = 1; printk(KERN_INFO "Initial ramdisk at: 0x%lx (%lu bytes)\n", @@ -260,7 +260,7 @@ static void __init bootmem_init(void) * of usable memory. */ reserved_end = init_initrd(); - reserved_end = PFN_UP(CPHYSADDR(max(reserved_end, (unsigned long)&_end))); + reserved_end = PFN_UP(__pa(max(reserved_end, (unsigned long)&_end))); /* * Find the highest page frame number we have available. -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 4/7] Introduce __pa_symbol() 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu ` (2 preceding siblings ...) 2006-10-19 11:20 ` [PATCH 3/7] setup.c: get ride of CPHYSADDR() Franck Bui-Huu @ 2006-10-19 11:20 ` Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 5/7] setup.c: use __pa_symbol() where needed Franck Bui-Huu ` (3 subsequent siblings) 7 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 11:20 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu This patch introduces __pa_symbol() macro which should be used to calculate the physical address of kernel symbols. It also relies on RELOC_HIDE() to avoid any compiler's oddities when doing arithmetics on symbols. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- include/asm-mips/page.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index 119daee..5c4284b 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h @@ -139,6 +139,7 @@ #else #define __pa_page_offset(x) PAGE_OFFSET #endif #define __pa(x) ((unsigned long)(x) - __pa_page_offset(x)) +#define __pa_symbol(x) __pa(RELOC_HIDE((unsigned long)(x),0)) #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 5/7] setup.c: use __pa_symbol() where needed 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu ` (3 preceding siblings ...) 2006-10-19 11:20 ` [PATCH 4/7] Introduce __pa_symbol() Franck Bui-Huu @ 2006-10-19 11:20 ` Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 6/7] setup.c: clean up initrd related code Franck Bui-Huu ` (2 subsequent siblings) 7 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 11:20 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu It should fix the broken code in resource_init() too. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- arch/mips/kernel/setup.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index 715451a..b52cc97 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c @@ -260,7 +260,7 @@ static void __init bootmem_init(void) * of usable memory. */ reserved_end = init_initrd(); - reserved_end = PFN_UP(__pa(max(reserved_end, (unsigned long)&_end))); + reserved_end = PFN_UP(max(__pa(reserved_end), __pa_symbol(&_end))); /* * Find the highest page frame number we have available. @@ -432,10 +432,10 @@ static void __init resource_init(void) if (UNCAC_BASE != IO_BASE) return; - code_resource.start = virt_to_phys(&_text); - code_resource.end = virt_to_phys(&_etext) - 1; - data_resource.start = virt_to_phys(&_etext); - data_resource.end = virt_to_phys(&_edata) - 1; + code_resource.start = __pa_symbol(&_text); + code_resource.end = __pa_symbol(&_etext) - 1; + data_resource.start = __pa_symbol(&_etext); + data_resource.end = __pa_symbol(&_edata) - 1; /* * Request address space for all standard RAM. -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 6/7] setup.c: clean up initrd related code 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu ` (4 preceding siblings ...) 2006-10-19 11:20 ` [PATCH 5/7] setup.c: use __pa_symbol() where needed Franck Bui-Huu @ 2006-10-19 11:20 ` Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 7/7] Make free_init_pages() arguments to be physical addresses Franck Bui-Huu 2006-10-20 3:19 ` [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Atsushi Nemoto 7 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 11:20 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- arch/mips/kernel/setup.c | 75 +++++++++++++++++++++++++++++----------------- arch/mips/mm/init.c | 5 --- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index b52cc97..89440a0 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c @@ -145,13 +145,12 @@ static int __init rd_start_early(char *p unsigned long start = memparse(p, &p); #ifdef CONFIG_64BIT - /* HACK: Guess if the sign extension was forgotten */ - if (start > 0x0000000080000000 && start < 0x00000000ffffffff) - start |= 0xffffffff00000000UL; + /* Guess if the sign extension was forgotten by bootloader */ + if (start < XKPHYS) + start = (int)start; #endif initrd_start = start; initrd_end += start; - return 0; } early_param("rd_start", rd_start_early); @@ -159,41 +158,64 @@ early_param("rd_start", rd_start_early); static int __init rd_size_early(char *p) { initrd_end += memparse(p, &p); - return 0; } early_param("rd_size", rd_size_early); +/* it returns the next free pfn after initrd */ static unsigned long __init init_initrd(void) { - unsigned long tmp, end, size; + unsigned long end; u32 *initrd_header; - ROOT_DEV = Root_RAM0; - /* * Board specific code or command line parser should have * already set up initrd_start and initrd_end. In these cases * perfom sanity checks and use them if all looks good. */ - size = initrd_end - initrd_start; - if (initrd_end == 0 || size == 0) { - initrd_start = 0; - initrd_end = 0; - } else - return initrd_end; - - end = (unsigned long)&_end; - tmp = PAGE_ALIGN(end) - sizeof(u32) * 2; - if (tmp < end) - tmp += PAGE_SIZE; - - initrd_header = (u32 *)tmp; - if (initrd_header[0] == 0x494E5244) { - initrd_start = (unsigned long)&initrd_header[2]; - initrd_end = initrd_start + initrd_header[1]; + if (initrd_start && initrd_end > initrd_start) + goto sanitize; + + /* + * See if initrd has been added to the kernel image by + * arch/mips/boot/addinitrd.c. In that case a header is + * prepended to initrd and is made up by 8 bytes. The fisrt + * word is a magic number and the second one is the size of + * initrd. Initrd start must be page aligned in any cases. + */ + initrd_header = __va(PAGE_ALIGN(__pa_symbol(&_end) + 8)) - 8; + if (initrd_header[0] != 0x494E5244) + goto disable; + initrd_start = (unsigned long)(initrd_header + 2); + initrd_end = initrd_start + initrd_header[1]; + +sanitize: + if (initrd_start & ~PAGE_MASK) { + printk(KERN_ERR "initrd start must be page aligned\n"); + goto disable; } - return initrd_end; + if (initrd_start < PAGE_OFFSET) { + printk(KERN_ERR "initrd start < PAGE_OFFSET\n"); + goto disable; + } + + /* + * Sanitize initrd addresses. For example firmware + * can't guess if they need to pass them through + * 64-bits values if the kernel has been built in pure + * 32-bit. We need also to switch from KSEG0 to XKPHYS + * addresses now, so the code can now safely use __pa(). + */ + end = __pa(initrd_end); + initrd_end = (unsigned long)__va(end); + initrd_start = (unsigned long)__va(__pa(initrd_start)); + + ROOT_DEV = Root_RAM0; + return PFN_UP(end); +disable: + initrd_start = 0; + initrd_end = 0; + return 0; } static void __init finalize_initrd(void) @@ -259,8 +281,7 @@ static void __init bootmem_init(void) * not selected. Once that done we can determine the low bound * of usable memory. */ - reserved_end = init_initrd(); - reserved_end = PFN_UP(max(__pa(reserved_end), __pa_symbol(&_end))); + reserved_end = max(init_initrd(), PFN_UP(__pa_symbol(&_end))); /* * Find the highest page frame number we have available. diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 4431ea0..072b3b0 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c @@ -502,11 +502,6 @@ void free_init_pages(char *what, unsigne #ifdef CONFIG_BLK_DEV_INITRD void free_initrd_mem(unsigned long start, unsigned long end) { -#ifdef CONFIG_64BIT - /* Switch from KSEG0 to XKPHYS addresses */ - start = (unsigned long)phys_to_virt(CPHYSADDR(start)); - end = (unsigned long)phys_to_virt(CPHYSADDR(end)); -#endif free_init_pages("initrd memory", start, end); } #endif -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 7/7] Make free_init_pages() arguments to be physical addresses 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu ` (5 preceding siblings ...) 2006-10-19 11:20 ` [PATCH 6/7] setup.c: clean up initrd related code Franck Bui-Huu @ 2006-10-19 11:20 ` Franck Bui-Huu 2006-10-20 3:19 ` [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Atsushi Nemoto 7 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 11:20 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu It allows caller of this function to not care about CKSEG0/XKPHYS address mixes. It's now automatically done by free_init_pages(). We can now safely remove hack needed by 64 bit kernels with CONFIG_BUILD_ELF64=n in free_initmem(). Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- arch/mips/mm/init.c | 33 +++++++++++++++++---------------- 1 files changed, 17 insertions(+), 16 deletions(-) diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 072b3b0..733bdec 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c @@ -485,15 +485,18 @@ #endif } #endif /* !CONFIG_NEED_MULTIPLE_NODES */ -void free_init_pages(char *what, unsigned long begin, unsigned long end) +static void free_init_pages(char *what, unsigned long begin, unsigned long end) { - unsigned long addr; + unsigned long pfn; - for (addr = begin; addr < end; addr += PAGE_SIZE) { - ClearPageReserved(virt_to_page((void *)addr)); - init_page_count(virt_to_page((void *)addr)); - memset((void *)addr, 0xcc, PAGE_SIZE); - free_page(addr); + for (pfn = PFN_UP(begin); pfn < PFN_DOWN(end); pfn++) { + struct page *page = pfn_to_page(pfn); + void *addr = phys_to_virt(PFN_PHYS(pfn)); + + ClearPageReserved(page); + init_page_count(page); + memset(addr, POISON_FREE_INITMEM, PAGE_SIZE); + __free_page(page); totalram_pages++; } printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10); @@ -502,7 +505,9 @@ void free_init_pages(char *what, unsigne #ifdef CONFIG_BLK_DEV_INITRD void free_initrd_mem(unsigned long start, unsigned long end) { - free_init_pages("initrd memory", start, end); + free_init_pages("initrd memory", + virt_to_phys((void *)start), + virt_to_phys((void *)end)); } #endif @@ -510,17 +515,13 @@ extern unsigned long prom_free_prom_memo void free_initmem(void) { - unsigned long start, end, freed; + unsigned long freed; freed = prom_free_prom_memory(); if (freed) printk(KERN_INFO "Freeing firmware memory: %ldk freed\n",freed); - start = (unsigned long)(&__init_begin); - end = (unsigned long)(&__init_end); -#ifdef CONFIG_64BIT - start = PAGE_OFFSET | CPHYSADDR(start); - end = PAGE_OFFSET | CPHYSADDR(end); -#endif - free_init_pages("unused kernel memory", start, end); + free_init_pages("unused kernel memory", + __pa_symbol(&__init_begin), + __pa_symbol(&__init_end)); } -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu ` (6 preceding siblings ...) 2006-10-19 11:20 ` [PATCH 7/7] Make free_init_pages() arguments to be physical addresses Franck Bui-Huu @ 2006-10-20 3:19 ` Atsushi Nemoto 7 siblings, 0 replies; 20+ messages in thread From: Atsushi Nemoto @ 2006-10-20 3:19 UTC (permalink / raw) To: vagabon.xyz; +Cc: ralf, ths, linux-mips On Thu, 19 Oct 2006 13:19:58 +0200, Franck Bui-Huu <vagabon.xyz@gmail.com> wrote: > Changes since take #3 > -------------------- > * Sign extension hack still needed by rd_start_early() (Atsushi) > * Replace panic() by printk() in init_initrd() (Atsushi) > * Fix CONFIG_64BITS typo (Atsushi) > * Add a new sanity check in init_initrd(): > initrd_start < PAGE_OFFSET Works fine for me. Thanks. --- Atsushi Nemoto ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #3]
@ 2006-10-16 16:12 Franck Bui-Huu
2006-10-16 16:12 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu
0 siblings, 1 reply; 20+ messages in thread
From: Franck Bui-Huu @ 2006-10-16 16:12 UTC (permalink / raw)
To: ralf; +Cc: anemo, ths, linux-mips
Changes from take #2
--------------------
* More initrd code clean up. It should be more readable and
more robust now.
* Add some missing include in page.h (Atsushi)
* Fix a wrong use of __page_offset() in __va() (Atsushi)
* Rename __page_offset() into __pa_page_offset()
changes from take #1
--------------------
* Changed the definition of __pa() for 64-bits kernels to match
the one suggested by Atsushi. It should be safer.
* Make virt_to_page() uses virt_to_phys() instead of __pa().
I still can't test this patchset on 64 bit kernels. If anybody
could give a try that would be great.
Please consider,
Franck
---
arch/mips/kernel/setup.c | 77 +++++++++++++++++++-------------------------
arch/mips/mm/init.c | 42 +++++++++++++-----------
include/asm-mips/io.h | 2 +
include/asm-mips/page.h | 16 ++-------
include/asm-mips/pgtable.h | 2 +
5 files changed, 62 insertions(+), 77 deletions(-)
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-16 16:12 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #3] Franck Bui-Huu @ 2006-10-16 16:12 ` Franck Bui-Huu 0 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-16 16:12 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu During early boot mem init, some configs couldn't use __pa() to convert virtual into physical addresses. Specially for 64 bit kernel cases when CONFIG_BUILD_ELF64=n. This patch make __pa() work for _all_ configs and thus make CPHYSADDR() useless. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- include/asm-mips/page.h | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index fa4e4d9..df3a87e 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h @@ -133,8 +133,13 @@ #endif /* !__ASSEMBLY__ */ /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) -#define __pa(x) ((unsigned long) (x) - PAGE_OFFSET) -#define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET)) +#if defined(CONFIG_64BITS) && !defined(CONFIG_BUILD_ELF64) +#define __pa_page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) +#else +#define __pa_page_offset(x) PAGE_OFFSET +#endif +#define __pa(x) ((unsigned long)(x) - __pa_page_offset(x)) +#define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #2] @ 2006-10-13 12:38 Franck Bui-Huu 2006-10-13 12:39 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu 0 siblings, 1 reply; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-13 12:38 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips Here's the take #2. I changed the definition of __pa() for 64-bits kernels to match the one suggested by Atsushi. It should be safer. It also makes virt_to_page() uses virt_to_phys() instead of __pa(). Unfortunately, no tests have been done for 64 bit kernels because of lacks of hardware. If anybody could give a try that would be great. Please consider, Franck --- arch/mips/kernel/setup.c | 55 +++++++++++++++++++++++++------------------- arch/mips/mm/init.c | 42 +++++++++++++++------------------- include/asm-mips/io.h | 2 +- include/asm-mips/page.h | 14 ++++++++--- include/asm-mips/pgtable.h | 2 +- 5 files changed, 62 insertions(+), 53 deletions(-) ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-13 12:38 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #2] Franck Bui-Huu @ 2006-10-13 12:39 ` Franck Bui-Huu 2006-10-13 16:27 ` Atsushi Nemoto 2006-10-19 4:01 ` Atsushi Nemoto 0 siblings, 2 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-13 12:39 UTC (permalink / raw) To: ralf; +Cc: anemo, ths, linux-mips, Franck Bui-Huu During early boot mem init, some configs couldn't use __pa() to convert virtual into physical addresses. Specially for 64 bit kernel cases when CONFIG_BUILD_ELF64=n. This patch make __pa() work for _all_ configs and thus make CPHYSADDR() useless. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- include/asm-mips/page.h | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index 0821eb0..5da4733 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h @@ -131,8 +131,13 @@ #endif /* !__ASSEMBLY__ */ /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) -#define __pa(x) ((unsigned long) (x) - PAGE_OFFSET) -#define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET)) +#if defined(CONFIG_64BITS) && !defined(CONFIG_BUILD_ELF64) +#define __page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) +#else +#define __page_offset(x) PAGE_OFFSET +#endif +#define __pa(x) ((unsigned long)(x) - __page_offset(x)) +#define __va(x) ((void *)((unsigned long)(x) + __page_offset(x))) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) -- 1.4.2.3 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-13 12:39 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu @ 2006-10-13 16:27 ` Atsushi Nemoto 2006-10-14 8:39 ` Franck Bui-Huu 2006-10-19 4:01 ` Atsushi Nemoto 1 sibling, 1 reply; 20+ messages in thread From: Atsushi Nemoto @ 2006-10-13 16:27 UTC (permalink / raw) To: vagabon.xyz; +Cc: ralf, ths, linux-mips, fbuihuu On Fri, 13 Oct 2006 14:39:01 +0200, Franck Bui-Huu <vagabon.xyz@gmail.com> wrote: > -#define __pa(x) ((unsigned long) (x) - PAGE_OFFSET) > -#define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET)) > +#if defined(CONFIG_64BITS) && !defined(CONFIG_BUILD_ELF64) > +#define __page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) > +#else > +#define __page_offset(x) PAGE_OFFSET > +#endif > +#define __pa(x) ((unsigned long)(x) - __page_offset(x)) > +#define __va(x) ((void *)((unsigned long)(x) + __page_offset(x))) In __va(), you are passing an physical address to __page_offset(). --- Atsushi Nemoto ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-13 16:27 ` Atsushi Nemoto @ 2006-10-14 8:39 ` Franck Bui-Huu 0 siblings, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-14 8:39 UTC (permalink / raw) To: Atsushi Nemoto; +Cc: ralf, ths, linux-mips, fbuihuu On 10/13/06, Atsushi Nemoto <anemo@mba.ocn.ne.jp> wrote: > On Fri, 13 Oct 2006 14:39:01 +0200, Franck Bui-Huu <vagabon.xyz@gmail.com> wrote: > > -#define __pa(x) ((unsigned long) (x) - PAGE_OFFSET) > > -#define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET)) > > +#if defined(CONFIG_64BITS) && !defined(CONFIG_BUILD_ELF64) > > +#define __page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) > > +#else > > +#define __page_offset(x) PAGE_OFFSET > > +#endif > > +#define __pa(x) ((unsigned long)(x) - __page_offset(x)) > > +#define __va(x) ((void *)((unsigned long)(x) + __page_offset(x))) > > In __va(), you are passing an physical address to __page_offset(). > oops, good catch ! I'll change that. thanks -- Franck ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-13 12:39 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu 2006-10-13 16:27 ` Atsushi Nemoto @ 2006-10-19 4:01 ` Atsushi Nemoto 2006-10-19 6:20 ` Franck Bui-Huu 2006-10-19 6:41 ` Yoichi Yuasa 1 sibling, 2 replies; 20+ messages in thread From: Atsushi Nemoto @ 2006-10-19 4:01 UTC (permalink / raw) To: vagabon.xyz; +Cc: ralf, ths, linux-mips, fbuihuu On Fri, 13 Oct 2006 14:39:01 +0200, Franck Bui-Huu <vagabon.xyz@gmail.com> wrote: > +#if defined(CONFIG_64BITS) && !defined(CONFIG_BUILD_ELF64) > +#define __page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) CONFIG_64BIT, not CONFIG_64BITS. Sorry, my mistake. Also since CKSEG0 is defined with _LLCONST_ macro, the final type of __page_offset(), __pa(), __pa_sym() will be "unsigned long long", not "unsigned long". This raise a "comparison of distinct pointer types lacks a cast" warning on this line. reserved_end = max(init_initrd(), PFN_UP(__pa_symbol(&_end))); A qiuck and non-intrusive hack would be cast CKSEG0 with "unsigned long" here, but it might be preferred to change _LLCONST_ definition like this. What do you think? Subject: Use "long" for _ATYPE64_ and _LLCONST_ on 64-bit kernel. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> diff --git a/include/asm-mips/addrspace.h b/include/asm-mips/addrspace.h index 45c706e..5005555 100644 --- a/include/asm-mips/addrspace.h +++ b/include/asm-mips/addrspace.h @@ -23,9 +23,14 @@ #define _LLCONST_(x) x #else #define _ATYPE_ __PTRDIFF_TYPE__ #define _ATYPE32_ int +#ifdef CONFIG_64BIT +#define _ATYPE64_ long +#define _LLCONST_(x) x ## L +#else #define _ATYPE64_ long long #define _LLCONST_(x) x ## LL #endif +#endif /* * 32-bit MIPS address spaces --- Atsushi Nemoto ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-19 4:01 ` Atsushi Nemoto @ 2006-10-19 6:20 ` Franck Bui-Huu 2006-10-19 6:41 ` Yoichi Yuasa 1 sibling, 0 replies; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 6:20 UTC (permalink / raw) To: Atsushi Nemoto; +Cc: ralf, ths, linux-mips On 10/19/06, Atsushi Nemoto <anemo@mba.ocn.ne.jp> wrote: > > A qiuck and non-intrusive hack would be cast CKSEG0 with "unsigned > long" here, but it might be preferred to change _LLCONST_ definition > like this. What do you think? > I think _LLCONST_ change is the correct thing to do. Can you please submit your patch to Ralf ? thanks -- Franck ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-19 4:01 ` Atsushi Nemoto 2006-10-19 6:20 ` Franck Bui-Huu @ 2006-10-19 6:41 ` Yoichi Yuasa 2006-10-19 7:01 ` Atsushi Nemoto 1 sibling, 1 reply; 20+ messages in thread From: Yoichi Yuasa @ 2006-10-19 6:41 UTC (permalink / raw) To: Atsushi Nemoto; +Cc: yoichi_yuasa, vagabon.xyz, ralf, ths, linux-mips, fbuihuu On Thu, 19 Oct 2006 13:01:33 +0900 (JST) Atsushi Nemoto <anemo@mba.ocn.ne.jp> wrote: > On Fri, 13 Oct 2006 14:39:01 +0200, Franck Bui-Huu <vagabon.xyz@gmail.com> wrote: > > +#if defined(CONFIG_64BITS) && !defined(CONFIG_BUILD_ELF64) > > +#define __page_offset(x) ((unsigned long)(x) < CKSEG0 ? PAGE_OFFSET : CKSEG0) > > CONFIG_64BIT, not CONFIG_64BITS. Sorry, my mistake. > > Also since CKSEG0 is defined with _LLCONST_ macro, the final type of > __page_offset(), __pa(), __pa_sym() will be "unsigned long long", not > "unsigned long". This raise a "comparison of distinct pointer types > lacks a cast" warning on this line. > > reserved_end = max(init_initrd(), PFN_UP(__pa_symbol(&_end))); > > A qiuck and non-intrusive hack would be cast CKSEG0 with "unsigned > long" here, but it might be preferred to change _LLCONST_ definition > like this. What do you think? > > > Subject: Use "long" for _ATYPE64_ and _LLCONST_ on 64-bit kernel. > > Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> > > diff --git a/include/asm-mips/addrspace.h b/include/asm-mips/addrspace.h > index 45c706e..5005555 100644 > --- a/include/asm-mips/addrspace.h > +++ b/include/asm-mips/addrspace.h > @@ -23,9 +23,14 @@ #define _LLCONST_(x) x > #else > #define _ATYPE_ __PTRDIFF_TYPE__ > #define _ATYPE32_ int > +#ifdef CONFIG_64BIT > +#define _ATYPE64_ long > +#define _LLCONST_(x) x ## L ^^ ^ The name is not corresponding to reality. It's not so good. Yoichi ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-19 6:41 ` Yoichi Yuasa @ 2006-10-19 7:01 ` Atsushi Nemoto 2006-10-19 7:23 ` Yoichi Yuasa 2006-10-19 7:43 ` Franck Bui-Huu 0 siblings, 2 replies; 20+ messages in thread From: Atsushi Nemoto @ 2006-10-19 7:01 UTC (permalink / raw) To: yoichi_yuasa; +Cc: vagabon.xyz, ralf, ths, linux-mips, fbuihuu On Thu, 19 Oct 2006 15:41:38 +0900, Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> wrote: > > +#define _LLCONST_(x) x ## L > ^^ ^ > The name is not corresponding to reality. > It's not so good. Indeed. How about this? Subject: Use "long" for 64-bit values on 64-bit kernel. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> diff --git a/include/asm-mips/addrspace.h b/include/asm-mips/addrspace.h index 45c706e..7401711 100644 --- a/include/asm-mips/addrspace.h +++ b/include/asm-mips/addrspace.h @@ -19,12 +19,17 @@ #ifdef __ASSEMBLY__ #define _ATYPE_ #define _ATYPE32_ #define _ATYPE64_ -#define _LLCONST_(x) x +#define _CONST64_(x) x #else #define _ATYPE_ __PTRDIFF_TYPE__ #define _ATYPE32_ int +#ifdef CONFIG_64BIT +#define _ATYPE64_ long +#define _CONST64_(x) x ## L +#else #define _ATYPE64_ long long -#define _LLCONST_(x) x ## LL +#define _CONST64_(x) x ## LL +#endif #endif /* @@ -48,7 +53,7 @@ #define KSEGX(a) ((_ACAST32_ (a)) & 0xe */ #define CPHYSADDR(a) ((_ACAST32_(a)) & 0x1fffffff) #define XPHYSADDR(a) ((_ACAST64_(a)) & \ - _LLCONST_(0x000000ffffffffff)) + _CONST64_(0x000000ffffffffff)) #ifdef CONFIG_64BIT @@ -57,14 +62,14 @@ #ifdef CONFIG_64BIT * The compatibility segments use the full 64-bit sign extended value. Note * the R8000 doesn't have them so don't reference these in generic MIPS code. */ -#define XKUSEG _LLCONST_(0x0000000000000000) -#define XKSSEG _LLCONST_(0x4000000000000000) -#define XKPHYS _LLCONST_(0x8000000000000000) -#define XKSEG _LLCONST_(0xc000000000000000) -#define CKSEG0 _LLCONST_(0xffffffff80000000) -#define CKSEG1 _LLCONST_(0xffffffffa0000000) -#define CKSSEG _LLCONST_(0xffffffffc0000000) -#define CKSEG3 _LLCONST_(0xffffffffe0000000) +#define XKUSEG _CONST64_(0x0000000000000000) +#define XKSSEG _CONST64_(0x4000000000000000) +#define XKPHYS _CONST64_(0x8000000000000000) +#define XKSEG _CONST64_(0xc000000000000000) +#define CKSEG0 _CONST64_(0xffffffff80000000) +#define CKSEG1 _CONST64_(0xffffffffa0000000) +#define CKSSEG _CONST64_(0xffffffffc0000000) +#define CKSEG3 _CONST64_(0xffffffffe0000000) #define CKSEG0ADDR(a) (CPHYSADDR(a) | CKSEG0) #define CKSEG1ADDR(a) (CPHYSADDR(a) | CKSEG1) @@ -122,7 +127,7 @@ #define K_CALG_UNCACHED_ACCEL 7 #define PHYS_TO_XKSEG_UNCACHED(p) PHYS_TO_XKPHYS(K_CALG_UNCACHED,(p)) #define PHYS_TO_XKSEG_CACHED(p) PHYS_TO_XKPHYS(K_CALG_COH_SHAREABLE,(p)) #define XKPHYS_TO_PHYS(p) ((p) & TO_PHYS_MASK) -#define PHYS_TO_XKPHYS(cm,a) (_LLCONST_(0x8000000000000000) | \ +#define PHYS_TO_XKPHYS(cm,a) (_CONST64_(0x8000000000000000) | \ ((cm)<<59) | (a)) #if defined (CONFIG_CPU_R4300) \ @@ -132,20 +137,20 @@ #if defined (CONFIG_CPU_R4300) \ || defined (CONFIG_CPU_NEVADA) \ || defined (CONFIG_CPU_TX49XX) \ || defined (CONFIG_CPU_MIPS64) -#define TO_PHYS_MASK _LLCONST_(0x0000000fffffffff) /* 2^^36 - 1 */ +#define TO_PHYS_MASK _CONST64_(0x0000000fffffffff) /* 2^^36 - 1 */ #endif #if defined (CONFIG_CPU_R8000) /* We keep KUSIZE consistent with R4000 for now (2^^40) instead of (2^^48) */ -#define TO_PHYS_MASK _LLCONST_(0x000000ffffffffff) /* 2^^40 - 1 */ +#define TO_PHYS_MASK _CONST64_(0x000000ffffffffff) /* 2^^40 - 1 */ #endif #if defined (CONFIG_CPU_R10000) -#define TO_PHYS_MASK _LLCONST_(0x000000ffffffffff) /* 2^^40 - 1 */ +#define TO_PHYS_MASK _CONST64_(0x000000ffffffffff) /* 2^^40 - 1 */ #endif #if defined(CONFIG_CPU_SB1) || defined(CONFIG_CPU_SB1A) -#define TO_PHYS_MASK _LLCONST_(0x00000fffffffffff) /* 2^^44 - 1 */ +#define TO_PHYS_MASK _CONST64_(0x00000fffffffffff) /* 2^^44 - 1 */ #endif #ifndef CONFIG_CPU_R8000 @@ -155,7 +160,7 @@ #ifndef CONFIG_CPU_R8000 * in order to catch bugs in the source code. */ -#define COMPAT_K1BASE32 _LLCONST_(0xffffffffa0000000) +#define COMPAT_K1BASE32 _CONST64_(0xffffffffa0000000) #define PHYS_TO_COMPATK1(x) ((x) | COMPAT_K1BASE32) /* 32-bit compat k1 */ #endif ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-19 7:01 ` Atsushi Nemoto @ 2006-10-19 7:23 ` Yoichi Yuasa 2006-10-19 7:43 ` Franck Bui-Huu 1 sibling, 0 replies; 20+ messages in thread From: Yoichi Yuasa @ 2006-10-19 7:23 UTC (permalink / raw) To: Atsushi Nemoto; +Cc: yoichi_yuasa, vagabon.xyz, ralf, ths, linux-mips, fbuihuu On Thu, 19 Oct 2006 16:01:45 +0900 (JST) Atsushi Nemoto <anemo@mba.ocn.ne.jp> wrote: > On Thu, 19 Oct 2006 15:41:38 +0900, Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> wrote: > > > +#define _LLCONST_(x) x ## L > > ^^ ^ > > The name is not corresponding to reality. > > It's not so good. > > Indeed. How about this? > > > Subject: Use "long" for 64-bit values on 64-bit kernel. > > Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> > > diff --git a/include/asm-mips/addrspace.h b/include/asm-mips/addrspace.h > index 45c706e..7401711 100644 > --- a/include/asm-mips/addrspace.h > +++ b/include/asm-mips/addrspace.h > @@ -19,12 +19,17 @@ #ifdef __ASSEMBLY__ > #define _ATYPE_ > #define _ATYPE32_ > #define _ATYPE64_ > -#define _LLCONST_(x) x > +#define _CONST64_(x) x > #else > #define _ATYPE_ __PTRDIFF_TYPE__ > #define _ATYPE32_ int > +#ifdef CONFIG_64BIT > +#define _ATYPE64_ long > +#define _CONST64_(x) x ## L > +#else > #define _ATYPE64_ long long > -#define _LLCONST_(x) x ## LL > +#define _CONST64_(x) x ## LL > +#endif > #endif <snip> It's good for me. Thanks, Yoichi ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-19 7:01 ` Atsushi Nemoto 2006-10-19 7:23 ` Yoichi Yuasa @ 2006-10-19 7:43 ` Franck Bui-Huu 2006-10-19 7:59 ` Atsushi Nemoto 1 sibling, 1 reply; 20+ messages in thread From: Franck Bui-Huu @ 2006-10-19 7:43 UTC (permalink / raw) To: Atsushi Nemoto; +Cc: yoichi_yuasa, vagabon.xyz, ralf, ths, linux-mips, fbuihuu Atsushi Nemoto wrote: > On Thu, 19 Oct 2006 15:41:38 +0900, Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> wrote: >>> +#define _LLCONST_(x) x ## L >> ^^ ^ >> The name is not corresponding to reality. >> It's not so good. > > Indeed. How about this? > or why not simply replacing _LLCONST_ usages by _LCONST_ ? After all, 64 bits value seems to be used only for 64 bits kernels. Franck ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels 2006-10-19 7:43 ` Franck Bui-Huu @ 2006-10-19 7:59 ` Atsushi Nemoto 0 siblings, 0 replies; 20+ messages in thread From: Atsushi Nemoto @ 2006-10-19 7:59 UTC (permalink / raw) To: vagabon.xyz; +Cc: yoichi_yuasa, ralf, ths, linux-mips, fbuihuu On Thu, 19 Oct 2006 09:43:56 +0200, Franck Bui-Huu <vagabon.xyz@gmail.com> wrote: > or why not simply replacing _LLCONST_ usages by _LCONST_ ? After all, > 64 bits value seems to be used only for 64 bits kernels. Well, I suppose 32bit kernel might want to use 64bit values, for example, CONFIG_64BIT_PHYS_ADDR. --- Atsushi Nemoto ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2006-10-20 3:19 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-10-19 11:19 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Franck Bui-Huu 2006-10-19 11:19 ` [PATCH 1/7] page.h: remove __pa() usages Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 3/7] setup.c: get ride of CPHYSADDR() Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 4/7] Introduce __pa_symbol() Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 5/7] setup.c: use __pa_symbol() where needed Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 6/7] setup.c: clean up initrd related code Franck Bui-Huu 2006-10-19 11:20 ` [PATCH 7/7] Make free_init_pages() arguments to be physical addresses Franck Bui-Huu 2006-10-20 3:19 ` [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #4] Atsushi Nemoto -- strict thread matches above, loose matches on Subject: below -- 2006-10-16 16:12 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #3] Franck Bui-Huu 2006-10-16 16:12 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu 2006-10-13 12:38 [PATCH 0/7] Get ride of CPHYSADDR() in setup.c [take #2] Franck Bui-Huu 2006-10-13 12:39 ` [PATCH 2/7] Make __pa() aware of XKPHYS/CKSEG0 address mix for 64 bit kernels Franck Bui-Huu 2006-10-13 16:27 ` Atsushi Nemoto 2006-10-14 8:39 ` Franck Bui-Huu 2006-10-19 4:01 ` Atsushi Nemoto 2006-10-19 6:20 ` Franck Bui-Huu 2006-10-19 6:41 ` Yoichi Yuasa 2006-10-19 7:01 ` Atsushi Nemoto 2006-10-19 7:23 ` Yoichi Yuasa 2006-10-19 7:43 ` Franck Bui-Huu 2006-10-19 7:59 ` Atsushi Nemoto
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox