diff options
author | Sree Vemuri <sree.lakshmi.vemuri@oracle.com> | 2010-04-21 21:55:12 -0700 |
---|---|---|
committer | Sree Vemuri <sree.lakshmi.vemuri@oracle.com> | 2010-04-21 21:55:12 -0700 |
commit | 7c18cbb1c3de6cbb7674959dd3923911deaece51 (patch) | |
tree | 84069ae8962fd1c1b3fa3a2daca3da3a1ba17ea3 /usr/src | |
parent | f13665b74929ad1a68b91752d22bdef43785eb70 (diff) | |
download | illumos-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.c | 25 |
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); } /* |