I'm sponsoring the following case on behalf of Michael Corcoran. The proposal I believe qualifies for self-review approval but I can upgrade this upgrade should anyone think otherwise.
The case requests minor binding only as there is no intention to back-port these interfaces. ------------------ 1. Introduction 1.1. Project/Component Working Name: CPU hotplug for x86 systems 1.2. Name of Document Author/Supplier: Author: Geeta Krishna <geetanjali.krishna at intel.com> Gerry Liu <jiang.liu at intel.com> 1.3 Date of This Document: 06 August, 2009 4. Technical Description Name: PSMI extension for state save and restore Submitter: Geeta Krishna Owner: Geeta Krishna Interest: Status: waiting fast-track Background: Previous cases on Intel PSMI interface: PSARC 1993/042 Solaris/x86 MP Support PSARC 1994/441 PSMI for Power PC PSARC 1995/422 PSMI Extensions PSARC 1997/310 PSMI Version 1.2 PSARC 2004/239 x86 PSMI Extensions for Higher Resolution Timer PSARC 2004/418 SM Extension for soft poweroff on Solaris x86 PSARC 2005/091 PSMI Extension for ADII PSARC 2006/632 PSMI extension for state save and restore Proposal: 1. New control entry point is needed for supporting CPU hotplug operations. A CPU control entry point will be added to psm_ops structure and the PSM version will be incremented to 1.7 from 1.6. The CPU control entry point and relative data structure are defined as below: typedef enum psm_cpu_op_e { PSM_CPU_ADD = 1, PSM_CPU_REMOVE, PSM_CPU_STOP } psm_cpu_op_t; typedef struct psm_cpu_request { psm_cpu_op_t pcr_cmd; union { struct { processorid_t cpuid; void *argp; } cpu_add; struct { processorid_t cpuid; } cpu_remove; struct { processorid_t cpuid; void *ctx; } cpu_stop; } req; } psm_cpu_request_t; int (*psm_cpu_ops)(psm_cpu_request_t *reqp); This CPU control interface supports following operations : PSM_CPU_ADD: add a logical CPU to PSM layer and allocate processor id. PSM_CPU_REMOVE: remove a logical CPU from PSM layer and free processor id. PSM_CPU_STOP: power off logical CPU. 2. Enhancement to platform dependent interfaces To support CPU hotplug, following interfaces and data structure will be added to platform dependent interfaces in uts/i86pc/sys/machsystm.h. typedef enum mach_cpu_add_arg_type { MACH_CPU_ARG_LOCAL_APIC, MACH_CPU_ARG_LOCAL_X2APIC, } mach_cpu_add_arg_type_t; typedef struct mach_cpu_add_arg { mach_cpu_add_arg_type_t type; union { struct { uint32_t apic_id; uint32_t proc_id; } apic; } arg; } mach_cpu_add_arg_t; extern int mach_cpu_stop(cpu_t *, void *); extern int mach_cpu_add(mach_cpu_add_arg_t *, processorid_t *); extern int mach_cpu_remove(processorid_t); These interfaces will call psm_cpu_ops in psm_ops. The new *psm_ops* structure will be in effect if PSMI_1_7 is defined. PSMI_1_7 will include the extensions defined in PSMI_1_6 interface. Backward binary compatibility for the PSM will be preserved through the check of version of PSM in the kernel. Interface levels: The project exports the following interfaces: PSMI Interface changes for version 1.7: Interface: Classification Comments psm_cpu_ops Consolidation Private psm_ops struct member 6. Resources and Schedule 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: ON 6.5. ARC review type: FastTrack 6.6. ARC Exposure: open