Align pointers in hna list elements
Commit Message
Architectures like SuperARM or Xscale needs aligned data for multi-byte
operations. GCC can create instructions sequences for packed data, but
must know that something will not be aligned. Since list_add will
operate on untyped data over void-pointers it cannot know that
hna_global_entry is packed and will create only a fast and unsafe
version for load and store operations.
It is only important for the first 5 bytes of hna_global_entry to be
packed we can force these elements to be aligned without changing
the relative addresses of the first bytes.
Signed-off-by: Sven Eckelmann <sven.eckelmann@gmx.de>
---
batman/hna.h | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
Comments
On Tue, Jun 2, 2009 at 12:56 PM, Sven Eckelmann <sven.eckelmann@gmx.de> wrote:
> Architectures like SuperARM or Xscale needs aligned data for multi-byte
> operations. GCC can create instructions sequences for packed data, but
> must know that something will not be aligned. Since list_add will
> operate on untyped data over void-pointers it cannot know that
> hna_global_entry is packed and will create only a fast and unsafe
> version for load and store operations.
> It is only important for the first 5 bytes of hna_global_entry to be
> packed we can force these elements to be aligned without changing
> the relative addresses of the first bytes.
>
It looks good here. I am running this combined with the previous 3
patches with cpu/alignment set to bus error on problems.
On Wednesday 03 June 2009 18:39:26 Sven Eckelmann wrote:
> Architectures like SuperARM or Xscale needs aligned data for multi-byte
> operations. GCC can create instructions sequences for packed data, but
> must know that something will not be aligned. Since list_add will
> operate on untyped data over void-pointers it cannot know that
> hna_global_entry is packed and will create only a fast and unsafe
> version for load and store operations.
> It is only important for the first 5 bytes of hna_global_entry to be
> packed we can force these elements to be aligned without changing
> the relative addresses of the first bytes.
Sven, thanks a lot for your patches and thanks for your debugging help,
Nathan. I just applied these patches. :-)
Regards,
Marek
@@ -58,8 +58,8 @@ struct hna_global_entry
{
uint32_t addr;
uint8_t netmask;
- struct orig_node *curr_orig_node;
- struct list_head_first orig_list;
+ struct orig_node *curr_orig_node ALIGN_WORD;
+ struct list_head_first orig_list ALIGN_WORD;
} __attribute__((packed));
struct hna_orig_ptr