Hello Ratheesh,
I have no kernel 2.6.29.1 and any ia-64 harware, but looked on modern
(3.6) kernel sources.
From arch/ia64/include/asm/io.h you can see that virt_to_phys and
virt_to_bus are actually the same function.
It's implementation is to return (unsigned long) address - PAGE_OFFSET.
I guess, PAGE_OFFSET for ia-64 is defined in arch/ia64/include/asm/page.h
as RGN_BASE(RGN_KERNEL).
RGN_KERNEL is a simple constant (equals 7), which obviously determines
region. Region number (here, 7) is located in top three bits of 64 bit
address, so RGN_BASE simply shifts its argument with 61 bit (see RGN_SHIFT
define).
So, writing in numbers: vitr_to_phys (and virt_to_bus) simply returns
(unsigned long) address - 0xE000000000000000.
The only way you can get ptr == virt_to_phys(ptr) is incorrectly treating
operands as 32-bit numbers (i.e. printk("%u", ptr) instead of
printk("%lu", ptr)).
BR, Anatoliy Sivov
ratheesh kannoth <ratheesh.ksz@xxxxxxxxx> писал(а) в своём письме Wed, 14
Nov 2012 14:11:14 +0400:
Hi,
I am running 2.6.29.1 on ia-64 hardware.
when i run below code in a module
void *ptr = kmalloc( 10 ,GFP_KERNEL )
i got a valid ptr ( ptr != NULL ) ..but i saw that
ptr == vitr_to_phy(ptr ) == virt_to_bus(ptr )
1. why the physical and vitrual address are same ?
2. is this sthing that we can change in kernel config during kernel
compilation ?
-Ratheesh
--
To unsubscribe from this list: send the line "unsubscribe linux-newbie"
in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs
--
To unsubscribe from this list: send the line "unsubscribe linux-newbie" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs