1727 err = nvlist_add_string(attr_list, "fob",
1728 ((pdp->xd_xsdev.frontend == 1) ? "frontend" : "backend"));
1729 if (err != DDI_SUCCESS)
1730 goto failure;
1731
1732 switch (hpc) {
1733 case XEN_HP_ADD:
1734 err = ddi_log_sysevent(dip, DDI_VENDOR_SUNW, "EC_xendev",
1735 "add", attr_list, &eid, DDI_NOSLEEP);
1736 break;
1737 case XEN_HP_REMOVE:
1738 err = ddi_log_sysevent(dip, DDI_VENDOR_SUNW, "EC_xendev",
1739 "remove", attr_list, &eid, DDI_NOSLEEP);
1740 break;
1741 default:
1742 err = DDI_FAILURE;
1743 goto failure;
1744 }
1745
1746 failure:
1747 if (attr_list != NULL)
1748 nvlist_free(attr_list);
1749
1750 return (err);
1751 }
1752
1753 /* ARGSUSED */
1754 static void
1755 i_xvdi_probe_path_cb(struct xenbus_watch *w, const char **vec,
1756 unsigned int len)
1757 {
1758 char *path;
1759
1760 if (xendev_dip == NULL)
1761 xendev_dip = ddi_find_devinfo("xpvd", -1, 0);
1762
1763 path = i_ddi_strdup((char *)vec[XS_WATCH_PATH], KM_SLEEP);
1764
1765 (void) ddi_taskq_dispatch(DEVI(xendev_dip)->devi_taskq,
1766 i_xvdi_probe_path_handler, (void *)path, DDI_SLEEP);
1767 }
|
1727 err = nvlist_add_string(attr_list, "fob",
1728 ((pdp->xd_xsdev.frontend == 1) ? "frontend" : "backend"));
1729 if (err != DDI_SUCCESS)
1730 goto failure;
1731
1732 switch (hpc) {
1733 case XEN_HP_ADD:
1734 err = ddi_log_sysevent(dip, DDI_VENDOR_SUNW, "EC_xendev",
1735 "add", attr_list, &eid, DDI_NOSLEEP);
1736 break;
1737 case XEN_HP_REMOVE:
1738 err = ddi_log_sysevent(dip, DDI_VENDOR_SUNW, "EC_xendev",
1739 "remove", attr_list, &eid, DDI_NOSLEEP);
1740 break;
1741 default:
1742 err = DDI_FAILURE;
1743 goto failure;
1744 }
1745
1746 failure:
1747 nvlist_free(attr_list);
1748
1749 return (err);
1750 }
1751
1752 /* ARGSUSED */
1753 static void
1754 i_xvdi_probe_path_cb(struct xenbus_watch *w, const char **vec,
1755 unsigned int len)
1756 {
1757 char *path;
1758
1759 if (xendev_dip == NULL)
1760 xendev_dip = ddi_find_devinfo("xpvd", -1, 0);
1761
1762 path = i_ddi_strdup((char *)vec[XS_WATCH_PATH], KM_SLEEP);
1763
1764 (void) ddi_taskq_dispatch(DEVI(xendev_dip)->devi_taskq,
1765 i_xvdi_probe_path_handler, (void *)path, DDI_SLEEP);
1766 }
|