summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorSree Vemuri <sree.lakshmi.vemuri@oracle.com>2010-04-21 21:55:12 -0700
committerSree Vemuri <sree.lakshmi.vemuri@oracle.com>2010-04-21 21:55:12 -0700
commit7c18cbb1c3de6cbb7674959dd3923911deaece51 (patch)
tree84069ae8962fd1c1b3fa3a2daca3da3a1ba17ea3 /usr/src
parentf13665b74929ad1a68b91752d22bdef43785eb70 (diff)
downloadillumos-gate-7c18cbb1c3de6cbb7674959dd3923911deaece51.tar.gz
6923030 NOTICE: ds_get_hv_pri failed: 0x1 is seen on LDOM guest booting
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/sun4v/io/ds_pri.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/usr/src/uts/sun4v/io/ds_pri.c b/usr/src/uts/sun4v/io/ds_pri.c
index 8e5b03cd3a..5912bbfcda 100644
--- a/usr/src/uts/sun4v/io/ds_pri.c
+++ b/usr/src/uts/sun4v/io/ds_pri.c
@@ -19,8 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/*
@@ -265,7 +264,8 @@ _fini(void)
ddi_soft_state_fini(&ds_pri_statep);
- (void) hsvc_unregister(&pboot_hsvc);
+ if (hsvc_pboot_available)
+ (void) hsvc_unregister(&pboot_hsvc);
return (retval);
}
@@ -360,7 +360,7 @@ ds_pri_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
* See if we can get the static hv pri data. Static pri data
* is only available for privileged domains.
*/
- if (hsvc_pboot_available == B_TRUE) {
+ if (hsvc_pboot_available) {
if ((status = ds_get_hv_pri(sp)) != 0) {
cmn_err(CE_NOTE, "ds_get_hv_pri failed: 0x%lx", status);
}
@@ -889,14 +889,21 @@ ds_get_hv_pri(ds_pri_state_t *sp)
*/
pri_size = 0LL;
status = hv_mach_pri((uint64_t)0, &pri_size);
- DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri pri size: 0x%lx\n", pri_size);
- if (pri_size == 0)
- return (1);
-
if (status == H_ENOTSUPPORTED || status == H_ENOACCESS) {
+ /*
+ * hv_mach_pri() is not supported on a guest domain.
+ * Unregister pboot API group to prevent failures.
+ */
+ (void) hsvc_unregister(&pboot_hsvc);
+ hsvc_pboot_available = B_FALSE;
DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri service is not "
"available. errorno: 0x%lx\n", status);
- return (status);
+ return (0);
+ } else if (pri_size == 0) {
+ return (1);
+ } else {
+ DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri pri size: 0x%lx\n",
+ pri_size);
}
/*