[POWERPC] node local IOMMU tables
Allocate IOMMU tables local to the relevant node. Signed-off-by: Anton Blanchard <anton@samba.org> Acked-by: Olof Johansson <olof@lixom.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:

committed by
Paul Mackerras

parent
357518fa34
commit
ca1588e71b
@@ -418,10 +418,11 @@ void iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist,
|
||||
* Build a iommu_table structure. This contains a bit map which
|
||||
* is used to manage allocation of the tce space.
|
||||
*/
|
||||
struct iommu_table *iommu_init_table(struct iommu_table *tbl)
|
||||
struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
|
||||
{
|
||||
unsigned long sz;
|
||||
static int welcomed = 0;
|
||||
struct page *page;
|
||||
|
||||
/* Set aside 1/4 of the table for large allocations. */
|
||||
tbl->it_halfpoint = tbl->it_size * 3 / 4;
|
||||
@@ -429,10 +430,10 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl)
|
||||
/* number of bytes needed for the bitmap */
|
||||
sz = (tbl->it_size + 7) >> 3;
|
||||
|
||||
tbl->it_map = (unsigned long *)__get_free_pages(GFP_ATOMIC, get_order(sz));
|
||||
if (!tbl->it_map)
|
||||
page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz));
|
||||
if (!page)
|
||||
panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
|
||||
|
||||
tbl->it_map = page_address(page);
|
||||
memset(tbl->it_map, 0, sz);
|
||||
|
||||
tbl->it_hint = 0;
|
||||
|
@@ -60,9 +60,9 @@ static void __init iommu_vio_init(void)
|
||||
vio_iommu_table = veth_iommu_table;
|
||||
vio_iommu_table.it_offset += veth_iommu_table.it_size;
|
||||
|
||||
if (!iommu_init_table(&veth_iommu_table))
|
||||
if (!iommu_init_table(&veth_iommu_table, -1))
|
||||
printk("Virtual Bus VETH TCE table failed.\n");
|
||||
if (!iommu_init_table(&vio_iommu_table))
|
||||
if (!iommu_init_table(&vio_iommu_table, -1))
|
||||
printk("Virtual Bus VIO TCE table failed.\n");
|
||||
}
|
||||
#endif
|
||||
@@ -98,7 +98,7 @@ static struct iommu_table *vio_build_iommu_table(struct vio_dev *dev)
|
||||
tbl->it_busno = 0;
|
||||
tbl->it_type = TCE_VB;
|
||||
|
||||
return iommu_init_table(tbl);
|
||||
return iommu_init_table(tbl, -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user