Problem with remap_page_range

From: Dmytro Bablinyuk
Date: Tue Sep 09 2003 - 04:10:59 EST



We have a DSP shared memory which we should access (from PowerPC).
The problem is when I do ioremap I can see the memory correctly from the driver (see below) but when I do remap_page_range to the user space application then data appears to be wrong, I can recognize some values there, but they are in the wrong places and other values around from everywhere else (see below).

I tried mem_map_reserve - but still without luck.

Could somebody please give me a clue on this.

Thank you very much in advance for any help.

Below: the dsp_area prints correct values from DSP RAM but remap_page_range does not work properly.

dsp_ptr=ioremap_nocache( DSP_ADDR, WINDOW_SIZE);
dsp_area=(ushort *)(((unsigned long)dsp_ptr + PAGE_SIZE -1) &
PAGE_MASK);
/* for (virt_addr=(unsigned long)dsp_area; virt_addr<(unsigned
long)dsp_area+WINDOW_SIZE; */
/* virt_addr+=PAGE_SIZE) { */
/* /\* reserve all pages to make them remapable *\/ */
/* mem_map_reserve(virt_to_page(virt_addr)); */
/* } */

printk("dsp_area[0]=%04x\n", dsp_area[0]); //prints correct values
...
vma->vm_flags |= (VM_SHM | VM_LOCKED | VM_IO | VM_RESERVED);

if (remap_page_range(vma->vm_start,
DSP_ADDR,
size,
vma->vm_page_prot
))
{
printk("remap page range failed\n");
return -ENXIO;
}

Here is the ouput:
//correct from the driver
dsp_area[0]=0000
dsp_area[1]=bc00
dsp_area[2]=eb17
dsp_area[3]=2643
dsp_area[4]=54cd
dsp_area[5]=5405
dsp_area[6]=91ba
dsp_area[7]=49c2
dsp_area[8]=1f61
hpi_mmap: vma->vm_start=3006f000, vma->vm_end=30097000
vma->vm_flags=864fb

//wrong from the user space application
kadr=0x3006f000
kadr[0]=1c59
kadr[1]=49c2
kadr[2]=5405
kadr[3]=bc00
kadr[4]=49c2
kadr[5]=54cd
kadr[6]=bc00
kadr[7]=54cd



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" 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.tux.org/lkml/