mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 14:42:08 +02:00
iommu/amd: Use iommu_alloc_pages_node_sz() for the IRT
Use the actual size of the irq_table allocation, limiting to 128 due to the HW alignment needs. Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/22-v4-c8663abbb606+3f7-iommu_pages_jgg@nvidia.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
5087f663c2
commit
c3b42b6ffa
|
|
@ -314,6 +314,7 @@
|
|||
#define DTE_IRQ_REMAP_INTCTL (2ULL << 60)
|
||||
#define DTE_IRQ_REMAP_ENABLE 1ULL
|
||||
|
||||
#define DTE_INTTAB_ALIGNMENT 128
|
||||
#define DTE_INTTABLEN_MASK (0xfULL << 1)
|
||||
#define DTE_INTTABLEN_VALUE_512 9ULL
|
||||
#define DTE_INTTABLEN_512 (DTE_INTTABLEN_VALUE_512 << 1)
|
||||
|
|
|
|||
|
|
@ -3129,7 +3129,7 @@ static struct irq_remap_table *get_irq_table(struct amd_iommu *iommu, u16 devid)
|
|||
return table;
|
||||
}
|
||||
|
||||
static struct irq_remap_table *__alloc_irq_table(int nid, int order)
|
||||
static struct irq_remap_table *__alloc_irq_table(int nid, size_t size)
|
||||
{
|
||||
struct irq_remap_table *table;
|
||||
|
||||
|
|
@ -3137,7 +3137,8 @@ static struct irq_remap_table *__alloc_irq_table(int nid, int order)
|
|||
if (!table)
|
||||
return NULL;
|
||||
|
||||
table->table = iommu_alloc_pages_node(nid, GFP_KERNEL, order);
|
||||
table->table = iommu_alloc_pages_node_sz(
|
||||
nid, GFP_KERNEL, max(DTE_INTTAB_ALIGNMENT, size));
|
||||
if (!table->table) {
|
||||
kfree(table);
|
||||
return NULL;
|
||||
|
|
@ -3191,7 +3192,6 @@ static struct irq_remap_table *alloc_irq_table(struct amd_iommu *iommu,
|
|||
struct irq_remap_table *new_table = NULL;
|
||||
struct amd_iommu_pci_seg *pci_seg;
|
||||
unsigned long flags;
|
||||
int order = get_order(get_irq_table_size(max_irqs));
|
||||
int nid = iommu && iommu->dev ? dev_to_node(&iommu->dev->dev) : NUMA_NO_NODE;
|
||||
u16 alias;
|
||||
|
||||
|
|
@ -3211,7 +3211,7 @@ static struct irq_remap_table *alloc_irq_table(struct amd_iommu *iommu,
|
|||
spin_unlock_irqrestore(&iommu_table_lock, flags);
|
||||
|
||||
/* Nothing there yet, allocate new irq remapping table */
|
||||
new_table = __alloc_irq_table(nid, order);
|
||||
new_table = __alloc_irq_table(nid, get_irq_table_size(max_irqs));
|
||||
if (!new_table)
|
||||
return NULL;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user