Skip to content

Commit

Permalink
firewire: reorder struct fw_card for better cache efficiency
Browse files Browse the repository at this point in the history
topology_map is by far the largest member in struct fw_card.  Move it to
the very end of the struct so that card pointer dereferences have better
chances to hit the CPU cache.

This requires to increase the topology_map backing store to the size
specified in IEEE 1394, i.e. 256 rather than 255 quadlets.  Otherwise
the topology_map response handler may access invalid memory.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
  • Loading branch information
Stefan Richter committed Jan 4, 2009
1 parent d6f95a3 commit c8a12d4
Showing 1 changed file with 3 additions and 7 deletions.
10 changes: 3 additions & 7 deletions drivers/firewire/fw-transaction.h
Original file line number Diff line number Diff line change
Expand Up @@ -237,13 +237,6 @@ struct fw_card {
int link_speed;
int config_rom_generation;

/*
* We need to store up to 4 self ID for a maximum of 63
* devices plus 3 words for the topology map header.
*/
u32 topology_map[252 + 3];
u32 broadcast_channel;

spinlock_t lock; /* Take this lock when handling the lists in
* this struct. */
struct fw_node *local_node;
Expand All @@ -261,6 +254,9 @@ struct fw_card {
struct delayed_work work;
int bm_retries;
int bm_generation;

u32 broadcast_channel;
u32 topology_map[(CSR_TOPOLOGY_MAP_END - CSR_TOPOLOGY_MAP) / 4];
};

static inline struct fw_card *fw_card_get(struct fw_card *card)
Expand Down

0 comments on commit c8a12d4

Please sign in to comment.