On Tue, May 31, 2011 at 11:52:48PM -0300, william felipe_welter wrote:
> Angus,
> 
> I make some test program (based on the code coreipcc.c) and i now i sure
> that are problems with the mmap systems call on sparc..
> 
> Source code of my test program:
> 
> #include <stdlib.h>
> #include <sys/mman.h>
> #include <stdio.h>
> 
> #define PATH_MAX  36
> 
> int main()
> {
> 
> int32_t fd;
> void *addr_orig;
> void *addr;
> char path[PATH_MAX];
> const char *file = "teste123XXXXXX";
> size_t bytes=10024;
> 
> snprintf (path, PATH_MAX, "/dev/shm/%s", file);
> printf("PATH=%s\n",path);
> 
> fd = mkstemp (path);
> printf("fd=%d \n",fd);
> 
> 
> addr_orig = mmap (NULL, bytes, PROT_NONE,
>               MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
> 
> 
> addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
>               MAP_FIXED | MAP_SHARED, fd, 0);
> 
> printf("ADDR_ORIG:%p  ADDR:%p\n",addr_orig,addr);
> 
> 
>   if (addr != addr_orig) {
>                printf("Erro");
>         }
> }
> 
> Results on x86:
> PATH=/dev/shm/teste123XXXXXX
> fd=3
> ADDR_ORIG:0x7f867d8e6000  ADDR:0x7f867d8e6000
> 
> Results on sparc:
> PATH=/dev/shm/teste123XXXXXX
> fd=3
> ADDR_ORIG:0xf7f72000  ADDR:0xffffffff

Note: 0xffffffff == MAP_FAILED

(from man mmap)
RETURN VALUE
       On success, mmap() returns a pointer to the mapped area.  On
       error, the value MAP_FAILED (that is, (void *) -1) is returned,
       and errno is  set appropriately.

> 
> 
> But im wondering if is really needed to call mmap 2 times ?  What are the
> reason to call the mmap 2 times, on the second time using the address of the
> first?
> 
> 
Well there are 3 calls to mmap()
1) one to allocate 2 * what you need (in pages)
2) maps the first half of the mem to a real file
3) maps the second half of the mem to the same file

The point is when you write to an address over the end of the
first half of memory it is taken care of the the third mmap which maps
the address back to the top of the file for you. This means you
don't have to worry about ringbuffer wrapping which can be a headache.

-Angus

> 
> 
> 
> 
> 2011/5/31 Angus Salkeld <asalk...@redhat.com>
> 
> > On Tue, May 31, 2011 at 06:25:56PM -0300, william felipe_welter wrote:
> > > Thanks Steven,
> > >
> > > Now im try to run on the MCP:
> > > - Uninstall the pacemaker 1.0
> > > - Compile and install 1.1
> > >
> > > But now i have problems to initialize the pacemakerd: Could not
> > initialize
> > > Cluster Configuration Database API instance error 2
> > > Debbuging with gdb i see that the error are on the confdb.. most
> > specificaly
> > > the errors start on coreipcc.c  at line:
> > >
> > >
> > > 448        if (addr != addr_orig) {
> > > 449                goto error_close_unlink;  <- enter here
> > > 450       }
> > >
> > > Some ideia about  what can cause this  ?
> > >
> >
> > I tried porting a ringbuffer (www.libqb.org) to sparc and had the same
> > failure.
> > There are 3 mmap() calls and on sparc the third one keeps failing.
> >
> > This is a common way of creating a ring buffer, see:
> > http://en.wikipedia.org/wiki/Circular_buffer#Exemplary_POSIX_Implementation
> >
> > I couldn't get it working in the short time I tried. It's probably
> > worth looking at the clib implementation to see why it's failing
> > (I didn't get to that).
> >
> > -Angus
> >
> >
> > _______________________________________________
> > Pacemaker mailing list: pacema...@oss.clusterlabs.org
> > http://oss.clusterlabs.org/mailman/listinfo/pacemaker
> >
> > Project Home: http://www.clusterlabs.org
> > Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
> > Bugs:
> > http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker
> >
> 
> 
> 
> -- 
> William Felipe Welter
> ------------------------------
> Consultor em Tecnologias Livres
> william.wel...@4linux.com.br
> www.4linux.com.br

> _______________________________________________
> Openais mailing list
> Openais@lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/openais

_______________________________________________
Openais mailing list
Openais@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to