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: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
d6f95a3d14
commit
c8a12d45d5
1 changed files with 3 additions and 7 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue