mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
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
@ -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…
x
Reference in New Issue
Block a user