Print this page
OS-2366 ddi_periodic_add(9F) is entirely rubbish


2228 #if defined(__amd64) && !defined(__xpv)
2229         /*
2230          * Intel IOMMU has been setup/initialized in ddi_impl.c
2231          * Start it up now.
2232          */
2233         immu_startup();
2234 #endif
2235 
2236         PRM_POINT("Enabling interrupts");
2237         (*picinitf)();
2238         sti();
2239 #if defined(__xpv)
2240         ASSERT(CPU->cpu_m.mcpu_vcpu_info->evtchn_upcall_mask == 0);
2241         xen_late_startup();
2242 #endif
2243 
2244         (void) add_avsoftintr((void *)&softlevel1_hdl, 1, softlevel1,
2245             "softlevel1", NULL, NULL); /* XXX to be moved later */
2246 
2247         /*
2248          * Register these software interrupts for ddi timer.
2249          * Software interrupts up to the level 10 are supported.
2250          */
2251         for (i = DDI_IPL_1; i <= DDI_IPL_10; i++) {
2252                 char name[sizeof ("timer_softintr") + 2];
2253                 (void) sprintf(name, "timer_softintr%02d", i);



2254                 (void) add_avsoftintr((void *)&softlevel_hdl[i-1], i,
2255                     (avfunc)timer_softintr, name, (caddr_t)(uintptr_t)i, NULL);

2256         }
2257 
2258 #if !defined(__xpv)
2259         if (modload("drv", "amd_iommu") < 0) {
2260                 PRM_POINT("No AMD IOMMU present\n");
2261         } else if (ddi_hold_installed_driver(ddi_name_to_major(
2262             "amd_iommu")) == NULL) {
2263                 prom_printf("ERROR: failed to attach AMD IOMMU\n");
2264         }
2265 #endif
2266         post_startup_cpu_fixups();
2267 
2268         PRM_POINT("startup_end() done");
2269 }
2270 
2271 /*
2272  * Don't remove the following 2 variables.  They are necessary
2273  * for reading the hostid from the legacy file (/kernel/misc/sysinit).
2274  */
2275 char *_hs1107 = hw_serial;




2228 #if defined(__amd64) && !defined(__xpv)
2229         /*
2230          * Intel IOMMU has been setup/initialized in ddi_impl.c
2231          * Start it up now.
2232          */
2233         immu_startup();
2234 #endif
2235 
2236         PRM_POINT("Enabling interrupts");
2237         (*picinitf)();
2238         sti();
2239 #if defined(__xpv)
2240         ASSERT(CPU->cpu_m.mcpu_vcpu_info->evtchn_upcall_mask == 0);
2241         xen_late_startup();
2242 #endif
2243 
2244         (void) add_avsoftintr((void *)&softlevel1_hdl, 1, softlevel1,
2245             "softlevel1", NULL, NULL); /* XXX to be moved later */
2246 
2247         /*
2248          * Register software interrupt handlers for ddi_periodic_add(9F).
2249          * Software interrupts up to the level 10 are supported.
2250          */
2251         for (i = DDI_IPL_1; i <= DDI_IPL_10; i++) {
2252                 /*
2253                  * The constant string "ddi_periodic", below, is only used to
2254                  * print debugging information.  Generating a dynamic string
2255                  * for each soft level is a waste of kernel memory.
2256                  */
2257                 (void) add_avsoftintr((void *)&softlevel_hdl[i-1], i,
2258                     (avfunc)ddi_periodic_softintr, "ddi_periodic",
2259                     (caddr_t)(uintptr_t)i, NULL);
2260         }
2261 
2262 #if !defined(__xpv)
2263         if (modload("drv", "amd_iommu") < 0) {
2264                 PRM_POINT("No AMD IOMMU present\n");
2265         } else if (ddi_hold_installed_driver(ddi_name_to_major(
2266             "amd_iommu")) == NULL) {
2267                 prom_printf("ERROR: failed to attach AMD IOMMU\n");
2268         }
2269 #endif
2270         post_startup_cpu_fixups();
2271 
2272         PRM_POINT("startup_end() done");
2273 }
2274 
2275 /*
2276  * Don't remove the following 2 variables.  They are necessary
2277  * for reading the hostid from the legacy file (/kernel/misc/sysinit).
2278  */
2279 char *_hs1107 = hw_serial;