diff options
Diffstat (limited to 'kernel/irq/msi.c')
-rw-r--r-- | kernel/irq/msi.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c index 19e9dfbe97fa..8a3e872798f3 100644 --- a/kernel/irq/msi.c +++ b/kernel/irq/msi.c | |||
@@ -18,20 +18,42 @@ | |||
18 | /* Temparory solution for building, will be removed later */ | 18 | /* Temparory solution for building, will be removed later */ |
19 | #include <linux/pci.h> | 19 | #include <linux/pci.h> |
20 | 20 | ||
21 | struct msi_desc *alloc_msi_entry(struct device *dev) | 21 | /** |
22 | * alloc_msi_entry - Allocate an initialize msi_entry | ||
23 | * @dev: Pointer to the device for which this is allocated | ||
24 | * @nvec: The number of vectors used in this entry | ||
25 | * @affinity: Optional pointer to an affinity mask array size of @nvec | ||
26 | * | ||
27 | * If @affinity is not NULL then a an affinity array[@nvec] is allocated | ||
28 | * and the affinity masks from @affinity are copied. | ||
29 | */ | ||
30 | struct msi_desc * | ||
31 | alloc_msi_entry(struct device *dev, int nvec, const struct cpumask *affinity) | ||
22 | { | 32 | { |
23 | struct msi_desc *desc = kzalloc(sizeof(*desc), GFP_KERNEL); | 33 | struct msi_desc *desc; |
34 | |||
35 | desc = kzalloc(sizeof(*desc), GFP_KERNEL); | ||
24 | if (!desc) | 36 | if (!desc) |
25 | return NULL; | 37 | return NULL; |
26 | 38 | ||
27 | INIT_LIST_HEAD(&desc->list); | 39 | INIT_LIST_HEAD(&desc->list); |
28 | desc->dev = dev; | 40 | desc->dev = dev; |
41 | desc->nvec_used = nvec; | ||
42 | if (affinity) { | ||
43 | desc->affinity = kmemdup(affinity, | ||
44 | nvec * sizeof(*desc->affinity), GFP_KERNEL); | ||
45 | if (!desc->affinity) { | ||
46 | kfree(desc); | ||
47 | return NULL; | ||
48 | } | ||
49 | } | ||
29 | 50 | ||
30 | return desc; | 51 | return desc; |
31 | } | 52 | } |
32 | 53 | ||
33 | void free_msi_entry(struct msi_desc *entry) | 54 | void free_msi_entry(struct msi_desc *entry) |
34 | { | 55 | { |
56 | kfree(entry->affinity); | ||
35 | kfree(entry); | 57 | kfree(entry); |
36 | } | 58 | } |
37 | 59 | ||