Commit 39431acb1a4c464e62471cb3058b8ffffb9244db
1 parent
1c9db52534
Exists in
master
and in
39 other branches
pci: Cleanup the irq_desc mess in msi
Handing down irq_desc to msi just so that msi can access irq_desc.irq_data.msi_desc is a pretty stupid idea. The calling code can hand down a pointer to msi_desc so msi code does not need to know about the irq descriptor at all. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Ingo Molnar <mingo@elte.hu> Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Showing 3 changed files with 15 additions and 21 deletions Side-by-side Diff
arch/x86/kernel/apic/io_apic.c
... | ... | @@ -3383,14 +3383,14 @@ |
3383 | 3383 | |
3384 | 3384 | cfg = desc->chip_data; |
3385 | 3385 | |
3386 | - get_cached_msi_msg_desc(desc, &msg); | |
3386 | + __get_cached_msi_msg(desc->irq_data.msi_desc, &msg); | |
3387 | 3387 | |
3388 | 3388 | msg.data &= ~MSI_DATA_VECTOR_MASK; |
3389 | 3389 | msg.data |= MSI_DATA_VECTOR(cfg->vector); |
3390 | 3390 | msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; |
3391 | 3391 | msg.address_lo |= MSI_ADDR_DEST_ID(dest); |
3392 | 3392 | |
3393 | - write_msi_msg_desc(desc, &msg); | |
3393 | + __write_msi_msg(desc->irq_data.msi_desc, &msg); | |
3394 | 3394 | |
3395 | 3395 | return 0; |
3396 | 3396 | } |
drivers/pci/msi.c
... | ... | @@ -193,10 +193,8 @@ |
193 | 193 | msi_set_mask_bit(data, 0); |
194 | 194 | } |
195 | 195 | |
196 | -void read_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg) | |
196 | +void __read_msi_msg(struct msi_desc *entry, struct msi_msg *msg) | |
197 | 197 | { |
198 | - struct msi_desc *entry = get_irq_desc_msi(desc); | |
199 | - | |
200 | 198 | BUG_ON(entry->dev->current_state != PCI_D0); |
201 | 199 | |
202 | 200 | if (entry->msi_attrib.is_msix) { |
203 | 201 | |
204 | 202 | |
205 | 203 | |
... | ... | @@ -227,15 +225,13 @@ |
227 | 225 | |
228 | 226 | void read_msi_msg(unsigned int irq, struct msi_msg *msg) |
229 | 227 | { |
230 | - struct irq_desc *desc = irq_to_desc(irq); | |
228 | + struct msi_desc *entry = get_irq_msi(irq); | |
231 | 229 | |
232 | - read_msi_msg_desc(desc, msg); | |
230 | + __read_msi_msg(entry, msg); | |
233 | 231 | } |
234 | 232 | |
235 | -void get_cached_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg) | |
233 | +void __get_cached_msi_msg(struct msi_desc *entry, struct msi_msg *msg) | |
236 | 234 | { |
237 | - struct msi_desc *entry = get_irq_desc_msi(desc); | |
238 | - | |
239 | 235 | /* Assert that the cache is valid, assuming that |
240 | 236 | * valid messages are not all-zeroes. */ |
241 | 237 | BUG_ON(!(entry->msg.address_hi | entry->msg.address_lo | |
242 | 238 | |
243 | 239 | |
244 | 240 | |
... | ... | @@ -246,15 +242,13 @@ |
246 | 242 | |
247 | 243 | void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg) |
248 | 244 | { |
249 | - struct irq_desc *desc = irq_to_desc(irq); | |
245 | + struct msi_desc *entry = get_irq_msi(irq); | |
250 | 246 | |
251 | - get_cached_msi_msg_desc(desc, msg); | |
247 | + __get_cached_msi_msg(entry, msg); | |
252 | 248 | } |
253 | 249 | |
254 | -void write_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg) | |
250 | +void __write_msi_msg(struct msi_desc *entry, struct msi_msg *msg) | |
255 | 251 | { |
256 | - struct msi_desc *entry = get_irq_desc_msi(desc); | |
257 | - | |
258 | 252 | if (entry->dev->current_state != PCI_D0) { |
259 | 253 | /* Don't touch the hardware now */ |
260 | 254 | } else if (entry->msi_attrib.is_msix) { |
261 | 255 | |
... | ... | @@ -292,9 +286,9 @@ |
292 | 286 | |
293 | 287 | void write_msi_msg(unsigned int irq, struct msi_msg *msg) |
294 | 288 | { |
295 | - struct irq_desc *desc = irq_to_desc(irq); | |
289 | + struct msi_desc *entry = get_irq_msi(irq); | |
296 | 290 | |
297 | - write_msi_msg_desc(desc, msg); | |
291 | + __write_msi_msg(entry, msg); | |
298 | 292 | } |
299 | 293 | |
300 | 294 | static void free_msi_irqs(struct pci_dev *dev) |
include/linux/msi.h
... | ... | @@ -10,13 +10,13 @@ |
10 | 10 | }; |
11 | 11 | |
12 | 12 | /* Helper functions */ |
13 | -struct irq_desc; | |
14 | 13 | struct irq_data; |
14 | +struct msi_desc; | |
15 | 15 | extern void mask_msi_irq(struct irq_data *data); |
16 | 16 | extern void unmask_msi_irq(struct irq_data *data); |
17 | -extern void read_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg); | |
18 | -extern void get_cached_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg); | |
19 | -extern void write_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg); | |
17 | +extern void __read_msi_msg(struct msi_desc *entry, struct msi_msg *msg); | |
18 | +extern void __get_cached_msi_msg(struct msi_desc *entry, struct msi_msg *msg); | |
19 | +extern void __write_msi_msg(struct msi_desc *entry, struct msi_msg *msg); | |
20 | 20 | extern void read_msi_msg(unsigned int irq, struct msi_msg *msg); |
21 | 21 | extern void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg); |
22 | 22 | extern void write_msi_msg(unsigned int irq, struct msi_msg *msg); |