summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/i86pc/io/immu.c6
-rw-r--r--usr/src/uts/i86pc/io/immu_dvma.c4
-rw-r--r--usr/src/uts/i86pc/io/immu_intrmap.c5
-rw-r--r--usr/src/uts/i86pc/io/immu_qinv.c15
-rw-r--r--usr/src/uts/i86pc/sys/immu.h2
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);