From: Geoff Levand <geoffrey.levand@am.sony.com>
To: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Cc: linuxppc-dev@ozlabs.org, Paul Mackerras <paulus@samba.org>,
Arnd Bergmann <arnd@arndb.de>
Subject: Re: [PATCH] ps3: add vuart support
Date: Thu, 07 Dec 2006 14:01:04 -0800 [thread overview]
Message-ID: <45788F20.8030804@am.sony.com> (raw)
In-Reply-To: <Pine.LNX.4.62.0612072229260.30717@pademelon.sonytel.be>
Geert Uytterhoeven wrote:
> On Thu, 7 Dec 2006, Geoff Levand wrote:
>> Arnd Bergmann wrote:
>> > On Thursday 07 December 2006 01:17, Geoff Levand wrote:
>> >> Adds support for the PS3 virtual UART (vuart). The vuart provides a
>> >> bi-directional byte stream data link between logical partitions.
>> >
>> > Looks good now, just a few minor comments:
>> >
>> >> +struct ports_bmp
>> >> +{
>> >> + u64 status;
>> >> + u64 unused[3];
>> >> +} __attribute__ ((packed));
>> >
>> > Do you really want to have this structure packed? It will produce
>> > better code if it isn't.
>>
>> Yes, it is a little obscure in the code, but the address of the ports_bmp
>> instance is passed to ps3_alloc_vuart_irq(), which in turn calls
>> lv1_configure_virtual_uart_irq(). The HV (actually the vuart service
>> in the policy module) uses this as a 256 bit bitmap to indicate the
>> interrupt status of the ports. The system supports 256 ports, but
>> currently just two ports, 1 and 3, are used, so I took advantage of
>> that to simplify the code and just used the first word of the bitmap.
>
> I think Arnd meant that the `__attribute__ ((packed))' is useless for structs
> containing u64 members only. The natural alignment of 64-bit values is on a
> 64-bit boundary, so there won't be padding anyway.
>
> IIRC, someone (davem?) told me a long time ago gcc _always_ uses byte-accesses
> when accessing members in a struct with `__attribute__ ((packed))', since the
> members may be unaligned. Even when the values are perfectly aligned. So it's
> better not to use `__attribute__ ((packed))' unless it's really needed.
>
> Why is there a comment about `Needs 4 byte alignment.'? The way it's used, it
> will always be 8-byte aligned anyway.
After some discussion on IRC I understand that my comment above is in error.
The packed attribute forces both the structure members and the structure instance
to have 1-byte alignment, so it will not have an 8-byte alignment, but a 1-byte.
In the usage here though, the ports_bmp instance follows an aligned long, so it
by chance starts at 8-byte aligned address.
The 4-byte alignment is a requirement of the HV, so I just noted that in
the comment. I'll change the comment to be more clear.
-Geoff
next prev parent reply other threads:[~2006-12-07 22:01 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-07 0:17 [PATCH] ps3: add vuart support Geoff Levand
2006-12-07 1:13 ` Geoff Levand
2006-12-07 18:37 ` Arnd Bergmann
2006-12-07 20:29 ` Geoff Levand
2006-12-07 21:37 ` Geert Uytterhoeven
2006-12-07 22:01 ` Geoff Levand [this message]
2006-12-09 2:27 ` Geoff Levand
2006-12-09 12:18 ` Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45788F20.8030804@am.sony.com \
--to=geoffrey.levand@am.sony.com \
--cc=Geert.Uytterhoeven@sonycom.com \
--cc=arnd@arndb.de \
--cc=linuxppc-dev@ozlabs.org \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.