diff options
| author | Yuri Pankov <yuri.pankov@nexenta.com> | 2018-02-04 01:18:42 +0300 |
|---|---|---|
| committer | Richard Lowe <richlowe@richlowe.net> | 2018-02-04 19:19:14 +0000 |
| commit | fcebcf2bde9c499fa119ba1d185c1d9dd8db8c31 (patch) | |
| tree | 5cd77cd4934aa7bf532b5d17cfbd218577059655 /usr/src/uts/common/xen/io/xpvd.c | |
| parent | ff074caab09347cf7a3028cad320325b14d826ce (diff) | |
| download | illumos-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.c | 23 |
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; |
