Messages in this thread | | | Date | Mon, 06 Jul 2009 16:43:50 +0200 | From | Michal Simek <> | Subject | Re: mmap syscall problem |
| |
Arnd Bergmann wrote: > On Monday 06 July 2009, Michal Simek wrote: > >>> Not necessarily, even on platforms that manage aliases in hardware >>> mappings that violate the aliasing constraints can still result in >>> undefined behaviour, this really depends more on your cache controller >>> and MMU than anything else. I notice that microblaze sets SHMLBA to >>> PAGE_SIZE, you may want to see if this test still breaks after bumping it >>> up to something like PAGE_SIZE * 4. >>> >>> >> Yes, test still break - behavior is the same. I don't have accurate >> information about MMU unit >> but I will ask a question about. We are able to turn off cache >> controller directly in HW. >> > > There may still be a problem with data being queued in some write > buffers that don't get flushed before reading back from another > address. > > What happens in a simple user space program that mmaps the same > page to two addresses? Something like > > #include <sys/mman.h> > #include <fcntl.h> > int main(void) > { > int fd = open("existing-4k-file", O_RDWR); > char *p1 = mmap(0, 4096, PROT_READ | PROT_WRITE, > MAP_SHARED, fd, 0); > char *p2 = mmap(p1 + 4096, 4096, PROT_READ | PROT_WRITE, > MAP_SHARED | MAP_FIXED, fd, 0); > > *p1 = 0xaa; *p2 = 0x55; > I closed fd too. close(fd); > return *p1; /* returns 0xaa if broken, 0x55 if correct */ > } > # ls -la existing-4k-file -rw-rw-r-- 1 monstr monstr 4096 Jul 6 2009 existing-4k-file
# ./test-arnd # echo $? 85 # dd if=existing-4k-file of=/dev/console count=1 2>/dev/null U#
in file is first char U (0x55) which is IMO correct.
Michal
> Arnd <>< >
-- Michal Simek, Ing. (M.Eng) PetaLogix - Linux Solutions for a Reconfigurable World w: www.petalogix.com p: +61-7-30090663,+42-0-721842854 f: +61-7-30090663
| |