Rolf,If we memcpy instead of assigning the header in the OB1 PML why do we need the padding in the frag header ?
Thanks, george. On Jan 3, 2008, at 2:47 PM, Rolf vandeVaart wrote:
Greetings. We have seen some bus errors when compiling a user application with certain compiler flags and running on a sparc based server. The issue is that some structures are not word or double wordaligned causing a bus error. I have tracked down two places where I can make a minor change and everything seems to work fine. However, I wantto see if anyone has issues with these changes. The two changes are shown below. burl-ct-v440-0 206 =>svn diff Index: ompi/mca/btl/sm/btl_sm_frag.h =================================================================== --- ompi/mca/btl/sm/btl_sm_frag.h (revision 17039) +++ ompi/mca/btl/sm/btl_sm_frag.h (working copy) @@ -9,6 +9,7 @@* University of Stuttgart. All rights reserved.* Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved.+ * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.* $COPYRIGHT$ * * Additional copyrights may follow @@ -41,6 +42,10 @@ struct mca_btl_sm_frag_t *frag; size_t len; mca_btl_base_tag_t tag; + /* Add a 4 byte pad to round out structure to 16 bytes for 32-bit+ * and to 24 bytes for 64-bit. Helps prevent bus errors for strict+ * alignment cases like SPARC. */ + char pad[4]; }; typedef struct mca_btl_sm_hdr_t mca_btl_sm_hdr_t; Index: ompi/mca/pml/ob1/pml_ob1_recvfrag.h =================================================================== --- ompi/mca/pml/ob1/pml_ob1_recvfrag.h (revision 17039) +++ ompi/mca/pml/ob1/pml_ob1_recvfrag.h (working copy) @@ -9,6 +9,7 @@* University of Stuttgart. All rights reserved.* Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved.+ * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.* $COPYRIGHT$ * * Additional copyrights may follow @@ -67,7 +68,8 @@unsigned char* _ptr = (unsigned char*)frag- >addr; \ /* init recv_frag */ \ frag->btl = btl; \ - frag->hdr = *(mca_pml_ob1_hdr_t*)hdr; \ + memcpy(&frag->hdr, (void *) ((mca_pml_ob1_hdr_t*)hdr) \ + sizeof(mca_pml_ob1_hdr_t)); \ frag->num_segments = 1; \ _size = segs[0].seg_len; \ for( i = 1; i < cnt; i++ ) { \burl-ct-v440-0 207 => The ticket associated with this issue is https://svn.open-mpi.org/trac/ompi/ticket/1148 Rolf _______________________________________________ devel mailing list de...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/devel
smime.p7s
Description: S/MIME cryptographic signature