diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/i86pc/io/immu.c | 6 | ||||
-rw-r--r-- | usr/src/uts/i86pc/io/immu_dvma.c | 4 | ||||
-rw-r--r-- | usr/src/uts/i86pc/io/immu_intrmap.c | 5 | ||||
-rw-r--r-- | usr/src/uts/i86pc/io/immu_qinv.c | 15 | ||||
-rw-r--r-- | usr/src/uts/i86pc/sys/immu.h | 2 |
5 files changed, 21 insertions, 11 deletions
diff --git a/usr/src/uts/i86pc/io/immu.c b/usr/src/uts/i86pc/io/immu.c index 2dec5c40cf..da2fdad9d4 100644 --- a/usr/src/uts/i86pc/io/immu.c +++ b/usr/src/uts/i86pc/io/immu.c @@ -849,8 +849,10 @@ immu_subsystems_setup(void) immu_regs_setup(&immu_list); /* subsequent code needs this first */ immu_dvma_setup(&immu_list); - immu_intrmap_setup(&immu_list); - immu_qinv_setup(&immu_list); + if (immu_qinv_setup(&immu_list) == DDI_SUCCESS) + immu_intrmap_setup(&immu_list); + else + immu_intrmap_enable = B_FALSE; mutex_exit(&immu_lock); } diff --git a/usr/src/uts/i86pc/io/immu_dvma.c b/usr/src/uts/i86pc/io/immu_dvma.c index 94a9d118e2..59ce95439a 100644 --- a/usr/src/uts/i86pc/io/immu_dvma.c +++ b/usr/src/uts/i86pc/io/immu_dvma.c @@ -88,13 +88,13 @@ extern struct memlist *phys_install; static ddi_dma_attr_t immu_dma_attr = { DMA_ATTR_V0, 0U, - 0xffffffffU, + 0xffffffffffffffffULL, 0xffffffffU, MMU_PAGESIZE, /* MMU page aligned */ 0x1, 0x1, 0xffffffffU, - 0xffffffffU, + 0xffffffffffffffffULL, 1, 4, 0 diff --git a/usr/src/uts/i86pc/io/immu_intrmap.c b/usr/src/uts/i86pc/io/immu_intrmap.c index e47a16414f..8c98573bc0 100644 --- a/usr/src/uts/i86pc/io/immu_intrmap.c +++ b/usr/src/uts/i86pc/io/immu_intrmap.c @@ -280,6 +280,7 @@ alloc_tbl_multi_entries(intrmap_t *intrmap, uint_t cnt) bitset_add(&intrmap->intrmap_map, idx + i); } mutex_exit(&intrmap->intrmap_lock); + break; } mutex_exit(&intrmap->intrmap_lock); @@ -305,13 +306,13 @@ init_unit(immu_t *immu) ddi_dma_attr_t intrmap_dma_attr = { DMA_ATTR_V0, 0U, - 0xffffffffU, + 0xffffffffffffffffULL, 0xffffffffU, MMU_PAGESIZE, /* page aligned */ 0x1, 0x1, 0xffffffffU, - 0xffffffffU, + 0xffffffffffffffffULL, 1, 4, 0 diff --git a/usr/src/uts/i86pc/io/immu_qinv.c b/usr/src/uts/i86pc/io/immu_qinv.c index 64e87bcadd..a3384a7340 100644 --- a/usr/src/uts/i86pc/io/immu_qinv.c +++ b/usr/src/uts/i86pc/io/immu_qinv.c @@ -502,13 +502,13 @@ qinv_setup(immu_t *immu) ddi_dma_attr_t qinv_dma_attr = { DMA_ATTR_V0, 0U, - 0xffffffffU, + 0xffffffffffffffffULL, 0xffffffffU, MMU_PAGESIZE, /* page aligned */ 0x1, 0x1, 0xffffffffU, - 0xffffffffU, + 0xffffffffffffffffULL, 1, 4, 0 @@ -651,21 +651,28 @@ queue_table_handle_failed: /* * initialize invalidation request queue structure. */ -void +int immu_qinv_setup(list_t *listp) { immu_t *immu; + int nerr; if (immu_qinv_enable == B_FALSE) { - return; + return (DDI_FAILURE); } + nerr = 0; immu = list_head(listp); for (; immu; immu = list_next(listp, immu)) { if (qinv_setup(immu) == DDI_SUCCESS) { immu->immu_qinv_setup = B_TRUE; + } else { + nerr++; + break; } } + + return (nerr > 0 ? DDI_FAILURE : DDI_SUCCESS); } void diff --git a/usr/src/uts/i86pc/sys/immu.h b/usr/src/uts/i86pc/sys/immu.h index 72e7a956a8..db9732c8a7 100644 --- a/usr/src/uts/i86pc/sys/immu.h +++ b/usr/src/uts/i86pc/sys/immu.h @@ -861,7 +861,7 @@ int immu_intr_handler(immu_t *immu); /* immu_qinv.c interfaces */ -void immu_qinv_setup(list_t *immu_list); +int immu_qinv_setup(list_t *immu_list); void immu_qinv_startup(immu_t *immu); void immu_qinv_shutdown(immu_t *immu); void immu_qinv_destroy(list_t *immu_list); |