[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-ia64-devel] [PATCH] xentrace buffer alignment



Hi, Keir,
        IA64 compiler does promise 8-byte alignment for data segment compiled 
into binary if necessary, but not for dynamic allocated data. The problematic 
code is:
(alloc_trace_bufs)
                buf = t_bufs[i] = (struct t_buf 
*)&rawbuf[i*opt_tbuf_size*PAGE_SIZE];
        buf->cons = buf->prod = 0;
        buf->nr_recs = nr_recs;
        t_recs[i] = (struct t_rec *)(buf + 1);

        Here t_buf is aligned by 4 bytes as:
struct t_buf {
    unsigned int  cons;      /* Next item to be consumed by control tools. */
    unsigned int  prod;      /* Next item to be produced by Xen.           */
    unsigned int  nr_recs;   /* Number of records in this trace buffer.    */
    /* 'nr_recs' records follow immediately after the meta-data header.    */
};

        However t_rec should be aligned by 8 bytes as:
struct t_rec {
    uint64_t cycles;          /* cycle counter timestamp */
    uint32_t event;           /* event ID                */
    unsigned long data[5];    /* event data items        */
};

        So t_rec will be placed at middle of 8 bytes boundary by t_recs[i] = 
(struct t_rec *)(buf + 1). Then later access to 64bit field within t_rec is 
unaligned access.

Thanks,
Kevin

>-----Original Message-----
>From: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
>[mailto:xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Keir Fraser
>Sent: 2005年11月24日 21:34
>To: Masaki Kanno
>Cc: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
>Subject: Re: [Xen-ia64-devel] [PATCH] xentrace buffer alignment
>
>
>Why is explicit 8-byte alignment required? Does ia64 not guarantee to
>align 64-bit values on an 8-byte boundary? If not, then what
>instruction is it that requires this alignment -- there can't be very
>many, otherwise surely the compiler would enforce sufficient alignment?
>
>I'm not happy about adding alignment attributes to the header files, as
>it would be good to not make them gcc-specific.
>
>  -- Keir
>
>On 24 Nov 2005, at 12:05, Masaki Kanno wrote:
>
>> Hi, Kevin
>>
>> OK, I will send patch to the Xen-devel mailing list.
>>
>> Thanks,
>>  kan
>>
>>>> -----Original Message-----
>>>> From: Masaki Kanno
>>>> Sent: 2005定11??24?? 17:21
>>>> Hi, Rob, Kevin,
>>>>
>>>>> The alignment directive is necessary there since they're
>>>>> dynamically marked
>>>>> on an allocated buf. Or how about adding padding bytes to avoid
>>>>> using compiler
>>>>> directive and ifdef? Then, still no need for "t_rec".
>>>>
>>>> Sorry, "t_rec" alignment is mistake. I thought "sizeof(t_rec) = 52
>>>> bytes".
>>>>
>>>> The patch was made on Kevin's idea.
>>>> However, I'm worried. When someone adds other members to "t_buf",
>>>> isn't alignment
>>>> for ia64 forgotten?
>>>
>>> I meant to add padding bytes like "char padding[4]" with warning to
>>> developer that 8 bytes alignment should be promised.
>> But now I think your original ".align" approach may be easier without
>> concern how many padding bytes need to be there on
>> different architecture. So you can send out a patch with your original
>> ".align" approach (but remove "ifdef __ia64__" to
>> xen mailing list since it's a common code modification. Also please
>> keep a comment to warn alignment requirement here.
>> ;-)
>>>
>>> Thanks,
>>> Kevin
>>>>
>>>> Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
>>>>
>>>> Thanks,
>>>> kan
>>>>
>>>> diff -r 51f32d60536b xen/include/public/trace.h
>>>> --- a/xen/include/public/trace.h        Fri Nov 18 00:35:14 2005
>>>> +++ b/xen/include/public/trace.h        Thu Nov 24 18:04:31 2005
>>>> @@ -69,6 +69,7 @@
>>>>     unsigned int  prod;      /* Next item to be produced by Xen.
>>>>       */
>>>>     unsigned int  nr_recs;   /* Number of records in this trace
>>>> buffer.    */
>>>>     /* 'nr_recs' records follow immediately after the meta-data
>>>> header.    */
>>>> +    unsigned int  align_buf; /* 8 bytes alignment for ia64
>>>>        */
>>>> };
>>>>
>>>> #endif /* __XEN_PUBLIC_TRACE_H__ */
>>>>
>>>>
>>>> _______________________________________________
>>>> Xen-ia64-devel mailing list
>>>> Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
>>>> http://lists.xensource.com/xen-ia64-devel
>
>
>_______________________________________________
>Xen-ia64-devel mailing list
>Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
>http://lists.xensource.com/xen-ia64-devel

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.