352
353 static int
354 e_devid_do_discovery(void)
355 {
356 ASSERT(mutex_owned(&devid_discovery_mutex));
357
358 if (i_ddi_io_initialized() == 0) {
359 if (devid_discovery_boot > 0) {
360 devid_discovery_boot--;
361 return (1);
362 }
363 } else {
364 if (devid_discovery_postboot_always > 0)
365 return (1);
366 if (devid_discovery_postboot > 0) {
367 devid_discovery_postboot--;
368 return (1);
369 }
370 if (devid_discovery_secs > 0) {
371 if ((ddi_get_lbolt() - devid_last_discovery) >
372 drv_usectohz(devid_discovery_secs * MICROSEC)) {
373 return (1);
374 }
375 }
376 }
377
378 DEVID_LOG_DISC((CE_CONT, "devid_discovery: no discovery\n"));
379 return (0);
380 }
381
382 static void
383 e_ddi_devid_hold_by_major(major_t major)
384 {
385 DEVID_LOG_DISC((CE_CONT,
386 "devid_discovery: ddi_hold_installed_driver %d\n", major));
387
388 if (ddi_hold_installed_driver(major) == NULL)
389 return;
390
391 ddi_rele_driver(major);
392 }
|
352
353 static int
354 e_devid_do_discovery(void)
355 {
356 ASSERT(mutex_owned(&devid_discovery_mutex));
357
358 if (i_ddi_io_initialized() == 0) {
359 if (devid_discovery_boot > 0) {
360 devid_discovery_boot--;
361 return (1);
362 }
363 } else {
364 if (devid_discovery_postboot_always > 0)
365 return (1);
366 if (devid_discovery_postboot > 0) {
367 devid_discovery_postboot--;
368 return (1);
369 }
370 if (devid_discovery_secs > 0) {
371 if ((ddi_get_lbolt() - devid_last_discovery) >
372 drv_sectohz(devid_discovery_secs)) {
373 return (1);
374 }
375 }
376 }
377
378 DEVID_LOG_DISC((CE_CONT, "devid_discovery: no discovery\n"));
379 return (0);
380 }
381
382 static void
383 e_ddi_devid_hold_by_major(major_t major)
384 {
385 DEVID_LOG_DISC((CE_CONT,
386 "devid_discovery: ddi_hold_installed_driver %d\n", major));
387
388 if (ddi_hold_installed_driver(major) == NULL)
389 return;
390
391 ddi_rele_driver(major);
392 }
|