Mercurial > illumos > illumos-gate
changeset 3756:fb8fddb52b9f
6520116 kstat_create fails with namespace collision during device configure
author | krishnae |
---|---|
date | Sat, 03 Mar 2007 11:53:56 -0800 |
parents | 8708c35cb823 |
children | 180422ea4336 |
files | usr/src/uts/common/io/pcie_fault.c usr/src/uts/common/sys/pcie_impl.h usr/src/uts/sun4/io/px/px.c usr/src/uts/sun4/io/px/px_pci.c usr/src/uts/sun4u/io/pci/pci_pci.c |
diffstat | 5 files changed, 19 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/pcie_fault.c Sat Mar 03 08:20:50 2007 -0800 +++ b/usr/src/uts/common/io/pcie_fault.c Sat Mar 03 11:53:56 2007 -0800 @@ -190,7 +190,7 @@ /* Called during postattach to initalize FM lock */ void -pf_init(dev_info_t *dip, ddi_iblock_cookie_t ibc) +pf_init(dev_info_t *dip, ddi_iblock_cookie_t ibc, ddi_attach_cmd_t cmd) { pcie_ppd_t *ppd_p = pcie_get_ppd(dip); struct i_ddi_fmhdl *fmhdl = DEVI(dip)->devi_fmhdl; @@ -200,7 +200,10 @@ fmhdl->fh_cap |= cap; } else { ppd_p->ppd_fm_flags |= PF_IS_NH; - ddi_fm_init(dip, &cap, &ibc); + + if (cmd == DDI_ATTACH) + ddi_fm_init(dip, &cap, &ibc); + fmhdl = DEVI(dip)->devi_fmhdl; } @@ -216,7 +219,7 @@ /* undo OPL FMA lock, called at predetach */ void -pf_fini(dev_info_t *dip) +pf_fini(dev_info_t *dip, ddi_detach_cmd_t cmd) { pcie_ppd_t *ppd_p = pcie_get_ppd(dip); @@ -226,8 +229,10 @@ /* undo non-hardened drivers */ if (ppd_p->ppd_fm_flags & PF_IS_NH) { - ppd_p->ppd_fm_flags &= ~PF_IS_NH; - ddi_fm_fini(dip); + if (cmd == DDI_DETACH) { + ppd_p->ppd_fm_flags &= ~PF_IS_NH; + ddi_fm_fini(dip); + } } /* no other code should set the flag to false */
--- a/usr/src/uts/common/sys/pcie_impl.h Sat Mar 03 08:20:50 2007 -0800 +++ b/usr/src/uts/common/sys/pcie_impl.h Sat Mar 03 11:53:56 2007 -0800 @@ -194,8 +194,9 @@ uint32_t flag, uint32_t addr, pcie_req_id_t bdf); extern int pf_scan_fabric(dev_info_t *rpdip, ddi_fm_error_t *derr, pf_data_t *dq_p, int *dq_tail_p); -extern void pf_init(dev_info_t *dip, ddi_iblock_cookie_t ibc); -extern void pf_fini(dev_info_t *dip); +extern void pf_init(dev_info_t *dip, ddi_iblock_cookie_t ibc, + ddi_attach_cmd_t cmd); +extern void pf_fini(dev_info_t *dip, ddi_detach_cmd_t cmd); extern boolean_t pf_ready(dev_info_t *dip);
--- a/usr/src/uts/sun4/io/px/px.c Sat Mar 03 08:20:50 2007 -0800 +++ b/usr/src/uts/sun4/io/px/px.c Sat Mar 03 11:53:56 2007 -0800 @@ -1255,7 +1255,7 @@ if (as->cmd == DDI_ATTACH && as->result != DDI_SUCCESS) pcie_pm_release(dip); - pf_init(rdip, (void *)px_p->px_fm_ibc); + pf_init(rdip, (void *)px_p->px_fm_ibc, as->cmd); (void) pcie_postattach_child(rdip); @@ -1281,7 +1281,7 @@ } return (DDI_SUCCESS); case DDI_PRE: - pf_fini(rdip); + pf_fini(rdip, ds->cmd); return (DDI_SUCCESS); default: break;
--- a/usr/src/uts/sun4/io/px/px_pci.c Sat Mar 03 08:20:50 2007 -0800 +++ b/usr/src/uts/sun4/io/px/px_pci.c Sat Mar 03 11:53:56 2007 -0800 @@ -707,7 +707,7 @@ if (as->cmd == DDI_ATTACH && as->result != DDI_SUCCESS) pcie_pm_release(dip); - pf_init(rdip, (void *)pxb_p->pxb_fm_ibc); + pf_init(rdip, (void *)pxb_p->pxb_fm_ibc, as->cmd); /* * For hotplug-capable slots, we should explicitly @@ -739,7 +739,7 @@ ds = (struct detachspec *)arg; switch (ds->when) { case DDI_PRE: - pf_fini(rdip); + pf_fini(rdip, ds->cmd); return (DDI_SUCCESS); case DDI_POST:
--- a/usr/src/uts/sun4u/io/pci/pci_pci.c Sat Mar 03 08:20:50 2007 -0800 +++ b/usr/src/uts/sun4u/io/pci/pci_pci.c Sat Mar 03 11:53:56 2007 -0800 @@ -579,7 +579,7 @@ as = (struct attachspec *)arg; if ((ppb_p->parent_bus == PCIE_PCIECAP_DEV_TYPE_PCIE_DEV) && (as->when == DDI_POST)) - pf_init(rdip, ppb_p->fm_ibc); + pf_init(rdip, ppb_p->fm_ibc, as->cmd); return (DDI_SUCCESS); @@ -590,7 +590,7 @@ ds = (struct detachspec *)arg; if ((ppb_p->parent_bus == PCIE_PCIECAP_DEV_TYPE_PCIE_DEV) && (ds->when == DDI_PRE)) - pf_fini(rdip); + pf_fini(rdip, ds->cmd); return (DDI_SUCCESS);