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


 101 #include <sys/thread.h>
 102 #include <sys/sysconf.h>
 103 #include <sys/vm_machparam.h>
 104 #include <sys/archsystm.h>
 105 #include <sys/machsystm.h>
 106 #include <vm/hat.h>
 107 #include <vm/hat_i86.h>
 108 #include <sys/pmem.h>
 109 #include <sys/smp_impldefs.h>
 110 #include <sys/x86_archext.h>
 111 #include <sys/cpuvar.h>
 112 #include <sys/segments.h>
 113 #include <sys/clconf.h>
 114 #include <sys/kobj.h>
 115 #include <sys/kobj_lex.h>
 116 #include <sys/cpc_impl.h>
 117 #include <sys/cpu_module.h>
 118 #include <sys/smbios.h>
 119 #include <sys/debug_info.h>
 120 #include <sys/bootinfo.h>
 121 #include <sys/ddi_timer.h>
 122 #include <sys/systeminfo.h>
 123 #include <sys/multiboot.h>
 124 
 125 #ifdef  __xpv
 126 
 127 #include <sys/hypervisor.h>
 128 #include <sys/xen_mmu.h>
 129 #include <sys/evtchn_impl.h>
 130 #include <sys/gnttab.h>
 131 #include <sys/xpv_panic.h>
 132 #include <xen/sys/xenbus_comms.h>
 133 #include <xen/public/physdev.h>
 134 
 135 extern void xen_late_startup(void);
 136 
 137 struct xen_evt_data cpu0_evt_data;
 138 
 139 #else   /* __xpv */
 140 #include <sys/memlist_impl.h>
 141 


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




 101 #include <sys/thread.h>
 102 #include <sys/sysconf.h>
 103 #include <sys/vm_machparam.h>
 104 #include <sys/archsystm.h>
 105 #include <sys/machsystm.h>
 106 #include <vm/hat.h>
 107 #include <vm/hat_i86.h>
 108 #include <sys/pmem.h>
 109 #include <sys/smp_impldefs.h>
 110 #include <sys/x86_archext.h>
 111 #include <sys/cpuvar.h>
 112 #include <sys/segments.h>
 113 #include <sys/clconf.h>
 114 #include <sys/kobj.h>
 115 #include <sys/kobj_lex.h>
 116 #include <sys/cpc_impl.h>
 117 #include <sys/cpu_module.h>
 118 #include <sys/smbios.h>
 119 #include <sys/debug_info.h>
 120 #include <sys/bootinfo.h>
 121 #include <sys/ddi_periodic.h>
 122 #include <sys/systeminfo.h>
 123 #include <sys/multiboot.h>
 124 
 125 #ifdef  __xpv
 126 
 127 #include <sys/hypervisor.h>
 128 #include <sys/xen_mmu.h>
 129 #include <sys/evtchn_impl.h>
 130 #include <sys/gnttab.h>
 131 #include <sys/xpv_panic.h>
 132 #include <xen/sys/xenbus_comms.h>
 133 #include <xen/public/physdev.h>
 134 
 135 extern void xen_late_startup(void);
 136 
 137 struct xen_evt_data cpu0_evt_data;
 138 
 139 #else   /* __xpv */
 140 #include <sys/memlist_impl.h>
 141 


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                 (void) add_avsoftintr((void *)&softlevel_hdl[i-1], i,
2253                     (avfunc)ddi_periodic_softintr, "ddi_periodic",
2254                     (caddr_t)(uintptr_t)i, NULL);
2255         }
2256 
2257 #if !defined(__xpv)
2258         if (modload("drv", "amd_iommu") < 0) {
2259                 PRM_POINT("No AMD IOMMU present\n");
2260         } else if (ddi_hold_installed_driver(ddi_name_to_major(
2261             "amd_iommu")) == NULL) {
2262                 prom_printf("ERROR: failed to attach AMD IOMMU\n");
2263         }
2264 #endif
2265         post_startup_cpu_fixups();
2266 
2267         PRM_POINT("startup_end() done");
2268 }
2269 
2270 /*
2271  * Don't remove the following 2 variables.  They are necessary