Print this page
5253 kmem_alloc/kmem_zalloc won't fail with KM_SLEEP
5254 getrbuf won't fail with KM_SLEEP


5521         sysevent_attr_list_t *ev_attr_list = NULL;
5522 
5523         /*
5524          * only log ddi_remove_minor_node() calls outside the scope
5525          * of attach/detach reconfigurations and when the dip is
5526          * still initialized.
5527          */
5528         if (DEVI_IS_ATTACHING(dip) || DEVI_IS_DETACHING(dip) ||
5529             (i_ddi_node_state(dip) < DS_INITIALIZED)) {
5530                 return (DDI_SUCCESS);
5531         }
5532 
5533         i_ddi_di_cache_invalidate();
5534 
5535         ev = sysevent_alloc(EC_DEVFS, ESC_DEVFS_MINOR_REMOVE, EP_DDI, SE_SLEEP);
5536         if (ev == NULL) {
5537                 return (DDI_SUCCESS);
5538         }
5539 
5540         pathname = kmem_alloc(MAXPATHLEN, KM_SLEEP);
5541         if (pathname == NULL) {
5542                 sysevent_free(ev);
5543                 return (DDI_SUCCESS);
5544         }
5545 
5546         (void) ddi_pathname(dip, pathname);
5547         ASSERT(strlen(pathname));
5548         se_val.value_type = SE_DATA_TYPE_STRING;
5549         se_val.value.sv_string = pathname;
5550         if (sysevent_add_attr(&ev_attr_list, DEVFS_PATHNAME,
5551             &se_val, SE_SLEEP) != 0) {
5552                 kmem_free(pathname, MAXPATHLEN);
5553                 sysevent_free(ev);
5554                 return (DDI_SUCCESS);
5555         }
5556 
5557         kmem_free(pathname, MAXPATHLEN);
5558 
5559         /*
5560          * allow for NULL minor names
5561          */
5562         if (minor_name != NULL) {
5563                 se_val.value.sv_string = minor_name;
5564                 if (sysevent_add_attr(&ev_attr_list, DEVFS_MINOR_NAME,


7779                 /*FALLTHRU*/
7780         case DEVID_ENCAP:
7781                 if (nbytes == 0)
7782                         return (DDI_FAILURE);
7783                 if (id == NULL)
7784                         return (DDI_FAILURE);
7785                 break;
7786         case DEVID_FAB:
7787                 if (nbytes != 0)
7788                         return (DDI_FAILURE);
7789                 if (id != NULL)
7790                         return (DDI_FAILURE);
7791                 nbytes = sizeof (int) +
7792                     sizeof (struct timeval32) + sizeof (short);
7793                 sz += nbytes;
7794                 break;
7795         default:
7796                 return (DDI_FAILURE);
7797         }
7798 
7799         if ((i_devid = kmem_zalloc(sz, KM_SLEEP)) == NULL)
7800                 return (DDI_FAILURE);
7801 
7802         i_devid->did_magic_hi = DEVID_MAGIC_MSB;
7803         i_devid->did_magic_lo = DEVID_MAGIC_LSB;
7804         i_devid->did_rev_hi = DEVID_REV_MSB;
7805         i_devid->did_rev_lo = DEVID_REV_LSB;
7806         DEVID_FORMTYPE(i_devid, devid_type);
7807         DEVID_FORMLEN(i_devid, nbytes);
7808 
7809         /* Fill in driver name hint */
7810         driver_name = ddi_driver_name(dip);
7811         driver_len = strlen(driver_name);
7812         if (driver_len > DEVID_HINT_SIZE) {
7813                 /* Pick up last four characters of driver name */
7814                 driver_name += driver_len - DEVID_HINT_SIZE;
7815                 driver_len = DEVID_HINT_SIZE;
7816         }
7817 
7818         bcopy(driver_name, i_devid->did_driver, driver_len);
7819 
7820         /* Fill in id field */




5521         sysevent_attr_list_t *ev_attr_list = NULL;
5522 
5523         /*
5524          * only log ddi_remove_minor_node() calls outside the scope
5525          * of attach/detach reconfigurations and when the dip is
5526          * still initialized.
5527          */
5528         if (DEVI_IS_ATTACHING(dip) || DEVI_IS_DETACHING(dip) ||
5529             (i_ddi_node_state(dip) < DS_INITIALIZED)) {
5530                 return (DDI_SUCCESS);
5531         }
5532 
5533         i_ddi_di_cache_invalidate();
5534 
5535         ev = sysevent_alloc(EC_DEVFS, ESC_DEVFS_MINOR_REMOVE, EP_DDI, SE_SLEEP);
5536         if (ev == NULL) {
5537                 return (DDI_SUCCESS);
5538         }
5539 
5540         pathname = kmem_alloc(MAXPATHLEN, KM_SLEEP);




5541 
5542         (void) ddi_pathname(dip, pathname);
5543         ASSERT(strlen(pathname));
5544         se_val.value_type = SE_DATA_TYPE_STRING;
5545         se_val.value.sv_string = pathname;
5546         if (sysevent_add_attr(&ev_attr_list, DEVFS_PATHNAME,
5547             &se_val, SE_SLEEP) != 0) {
5548                 kmem_free(pathname, MAXPATHLEN);
5549                 sysevent_free(ev);
5550                 return (DDI_SUCCESS);
5551         }
5552 
5553         kmem_free(pathname, MAXPATHLEN);
5554 
5555         /*
5556          * allow for NULL minor names
5557          */
5558         if (minor_name != NULL) {
5559                 se_val.value.sv_string = minor_name;
5560                 if (sysevent_add_attr(&ev_attr_list, DEVFS_MINOR_NAME,


7775                 /*FALLTHRU*/
7776         case DEVID_ENCAP:
7777                 if (nbytes == 0)
7778                         return (DDI_FAILURE);
7779                 if (id == NULL)
7780                         return (DDI_FAILURE);
7781                 break;
7782         case DEVID_FAB:
7783                 if (nbytes != 0)
7784                         return (DDI_FAILURE);
7785                 if (id != NULL)
7786                         return (DDI_FAILURE);
7787                 nbytes = sizeof (int) +
7788                     sizeof (struct timeval32) + sizeof (short);
7789                 sz += nbytes;
7790                 break;
7791         default:
7792                 return (DDI_FAILURE);
7793         }
7794 
7795         i_devid = kmem_zalloc(sz, KM_SLEEP);

7796 
7797         i_devid->did_magic_hi = DEVID_MAGIC_MSB;
7798         i_devid->did_magic_lo = DEVID_MAGIC_LSB;
7799         i_devid->did_rev_hi = DEVID_REV_MSB;
7800         i_devid->did_rev_lo = DEVID_REV_LSB;
7801         DEVID_FORMTYPE(i_devid, devid_type);
7802         DEVID_FORMLEN(i_devid, nbytes);
7803 
7804         /* Fill in driver name hint */
7805         driver_name = ddi_driver_name(dip);
7806         driver_len = strlen(driver_name);
7807         if (driver_len > DEVID_HINT_SIZE) {
7808                 /* Pick up last four characters of driver name */
7809                 driver_name += driver_len - DEVID_HINT_SIZE;
7810                 driver_len = DEVID_HINT_SIZE;
7811         }
7812 
7813         bcopy(driver_name, i_devid->did_driver, driver_len);
7814 
7815         /* Fill in id field */