Commit c8a12d45 authored by Stefan Richter's avatar Stefan Richter

firewire: reorder struct fw_card for better cache efficiency

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: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent d6f95a3d
......@@ -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;
......@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment