summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/xen/io/xpvd.c
diff options
context:
space:
mode:
authorYuri Pankov <yuri.pankov@nexenta.com>2018-02-04 01:18:42 +0300
committerRichard Lowe <richlowe@richlowe.net>2018-02-04 19:19:14 +0000
commitfcebcf2bde9c499fa119ba1d185c1d9dd8db8c31 (patch)
tree5cd77cd4934aa7bf532b5d17cfbd218577059655 /usr/src/uts/common/xen/io/xpvd.c
parentff074caab09347cf7a3028cad320325b14d826ce (diff)
downloadillumos-joyent-fcebcf2bde9c499fa119ba1d185c1d9dd8db8c31.tar.gz
9023 port Delphix Xen-related fixes
Contributed by: Paul Dagnelie <paul.dagnelie@delphix.com> Contributed by: Sebastien Roy <seb@delphix.com> Reviewed by: Evan Layton <evan.layton@nexenta.com> Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com> Reviewed by: Robert Mustacchi <rm@joyent.com> Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src/uts/common/xen/io/xpvd.c')
-rw-r--r--usr/src/uts/common/xen/io/xpvd.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/usr/src/uts/common/xen/io/xpvd.c b/usr/src/uts/common/xen/io/xpvd.c
index fe17d423c9..343f8254ba 100644
--- a/usr/src/uts/common/xen/io/xpvd.c
+++ b/usr/src/uts/common/xen/io/xpvd.c
@@ -26,6 +26,7 @@
/*
* Copyright 2012 Garrett D'Amore <garrett@damore.org>. All rights reserved.
+ * Copyright (c) 2014 by Delphix. All rights reserved.
* Copyright 2017 Nexenta Systems, Inc.
*/
@@ -696,7 +697,7 @@ xpvd_disable_intr(dev_info_t *rdip, ddi_intr_handle_impl_t *hdlp, int inum)
/*ARGSUSED*/
static int
xpvd_ctlops(dev_info_t *dip, dev_info_t *rdip,
- ddi_ctl_enum_t ctlop, void *arg, void *result)
+ ddi_ctl_enum_t ctlop, void *arg, void *result)
{
switch (ctlop) {
case DDI_CTLOPS_REPORTDEV:
@@ -772,11 +773,20 @@ xpvd_name_child(dev_info_t *child, char *addr, int addrlen)
ddi_prop_free(domain);
/*
- * Use "unit-address" property (frontend/softdev drivers).
+ * Use "vdev" and "unit-address" properties (frontend/softdev drivers).
+ * At boot time, only the vdev property is available on xdf disks.
*/
if (ddi_prop_lookup_string(DDI_DEV_T_ANY, child, DDI_PROP_DONTPASS,
- "unit-address", &prop_str) != DDI_PROP_SUCCESS)
- return (DDI_FAILURE);
+ "unit-address", &prop_str) != DDI_PROP_SUCCESS) {
+ if (ddi_prop_lookup_int_array(DDI_DEV_T_ANY, child,
+ DDI_PROP_DONTPASS, "vdev", &vdev,
+ &nvdev) != DDI_PROP_SUCCESS)
+ return (DDI_FAILURE);
+ ASSERT(nvdev == 1);
+ (void) snprintf(addr, addrlen, "%d", vdev[0]);
+ ddi_prop_free(vdev);
+ return (DDI_SUCCESS);
+ }
(void) strlcpy(addr, prop_str, addrlen);
ddi_prop_free(prop_str);
return (DDI_SUCCESS);
@@ -793,6 +803,9 @@ xpvd_initchild(dev_info_t *child)
*/
if (ndi_dev_is_persistent_node(child) == 0) {
ddi_set_parent_data(child, NULL);
+ if (xpvd_name_child(child, addr, sizeof (addr)) != DDI_SUCCESS)
+ return (DDI_FAILURE);
+ ddi_set_name_addr(child, addr);
/*
* Try to merge the properties from this prototype
@@ -916,7 +929,7 @@ done:
*/
static int
xpvd_bus_config(dev_info_t *parent, uint_t flag, ddi_bus_config_op_t op,
- void *arg, dev_info_t **childp)
+ void *arg, dev_info_t **childp)
{
int circ;
char *cname = NULL;