€•Í;Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ*/translations/zh_CN/arch/arm64/cpu-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/zh_TW/arch/arm64/cpu-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/it_IT/arch/arm64/cpu-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ja_JP/arch/arm64/cpu-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ko_KR/arch/arm64/cpu-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/sp_SP/arch/arm64/cpu-hotplug”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒD/var/lib/git/docbuild/linux/Documentation/arch/arm64/cpu-hotplug.rst”h KubhŒtarget”“”)”}”(hŒ.. _cpuhp_index:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ cpuhp-index”uh1h´h KhhhžhhŸh³ubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒCPU Hotplug and ACPI”h]”hŒCPU Hotplug and ACPI”…””}”(hhÉhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÇhhÄhžhhŸh³h KubhŒ paragraph”“”)”}”(hŒåCPU hotplug in the arm64 world is commonly used to describe the kernel taking CPUs online/offline using PSCI. This document is about ACPI firmware allowing CPUs that were not available during boot to be added to the system later.”h]”hŒåCPU hotplug in the arm64 world is commonly used to describe the kernel taking CPUs online/offline using PSCI. This document is about ACPI firmware allowing CPUs that were not available during boot to be added to the system later.”…””}”(hhÙhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h KhhÄhžhubhØ)”}”(hŒL``possible`` and ``present`` refer to the state of the CPU as seen by linux.”h]”(hŒliteral”“”)”}”(hŒ ``possible``”h]”hŒpossible”…””}”(hhíhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhhçubhŒ and ”…””}”(hhçhžhhŸNh Nubhì)”}”(hŒ ``present``”h]”hŒpresent”…””}”(hhÿhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhhçubhŒ0 refer to the state of the CPU as seen by linux.”…””}”(hhçhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K hhÄhžhubhÃ)”}”(hhh]”(hÈ)”}”(hŒ:CPU Hotplug on physical systems - CPUs not present at boot”h]”hŒ:CPU Hotplug on physical systems - CPUs not present at boot”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÇhjhžhhŸh³h KubhØ)”}”(hŒâPhysical systems need to mark a CPU that is ``possible`` but not ``present`` as being ``present``. An example would be a dual socket machine, where the package in one of the sockets can be replaced while the system is running.”h]”(hŒ,Physical systems need to mark a CPU that is ”…””}”(hj(hžhhŸNh Nubhì)”}”(hŒ ``possible``”h]”hŒpossible”…””}”(hj0hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj(ubhŒ but not ”…””}”(hj(hžhhŸNh Nubhì)”}”(hŒ ``present``”h]”hŒpresent”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj(ubhŒ as being ”…””}”(hj(hžhhŸNh Nubhì)”}”(hŒ ``present``”h]”hŒpresent”…””}”(hjThžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj(ubhŒ. An example would be a dual socket machine, where the package in one of the sockets can be replaced while the system is running.”…””}”(hj(hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h KhjhžhubhØ)”}”(hŒThis is not supported.”h]”hŒThis is not supported.”…””}”(hjlhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h KhjhžhubhØ)”}”(hŒèIn the arm64 world CPUs are not a single device but a slice of the system. There are no systems that support the physical addition (or removal) of CPUs while the system is running, and ACPI is not able to sufficiently describe them.”h]”hŒèIn the arm64 world CPUs are not a single device but a slice of the system. There are no systems that support the physical addition (or removal) of CPUs while the system is running, and ACPI is not able to sufficiently describe them.”…””}”(hjzhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h KhjhžhubhØ)”}”(hŒÊe.g. New CPUs come with new caches, but the platform's cache topology is described in a static table, the PPTT. How caches are shared between CPUs is not discoverable, and must be described by firmware.”h]”hŒÌe.g. New CPUs come with new caches, but the platform’s cache topology is described in a static table, the PPTT. How caches are shared between CPUs is not discoverable, and must be described by firmware.”…””}”(hjˆhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h KhjhžhubhØ)”}”(hX8e.g. The GIC redistributor for each CPU must be accessed by the driver during boot to discover the system wide supported features. ACPI's MADT GICC structures can describe a redistributor associated with a disabled CPU, but can't describe whether the redistributor is accessible, only that it is not 'always on'.”h]”hX@e.g. The GIC redistributor for each CPU must be accessed by the driver during boot to discover the system wide supported features. ACPI’s MADT GICC structures can describe a redistributor associated with a disabled CPU, but can’t describe whether the redistributor is accessible, only that it is not ‘always on’.”…””}”(hj–hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K!hjhžhubhØ)”}”(hŒDarm64's ACPI tables assume that everything described is ``present``.”h]”(hŒ:arm64’s ACPI tables assume that everything described is ”…””}”(hj¤hžhhŸNh Nubhì)”}”(hŒ ``present``”h]”hŒpresent”…””}”(hj¬hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj¤ubhŒ.”…””}”(hj¤hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K'hjhžhubeh}”(h]”Œ8cpu-hotplug-on-physical-systems-cpus-not-present-at-boot”ah ]”h"]”Œ:cpu hotplug on physical systems - cpus not present at boot”ah$]”h&]”uh1hÂhhÄhžhhŸh³h KubhÃ)”}”(hhh]”(hÈ)”}”(hŒ9CPU Hotplug on virtual systems - CPUs not enabled at boot”h]”hŒ9CPU Hotplug on virtual systems - CPUs not enabled at boot”…””}”(hjÏhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÇhjÌhžhhŸh³h K+ubhØ)”}”(hŒµVirtual systems have the advantage that all the properties the system will ever have can be described at boot. There are no power-domain considerations as such devices are emulated.”h]”hŒµVirtual systems have the advantage that all the properties the system will ever have can be described at boot. There are no power-domain considerations as such devices are emulated.”…””}”(hjÝhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K-hjÌhžhubhØ)”}”(hX„CPU Hotplug on virtual systems is supported. It is distinct from physical CPU Hotplug as all resources are described as ``present``, but CPUs may be marked as disabled by firmware. Only the CPU's online/offline behaviour is influenced by firmware. An example is where a virtual machine boots with a single CPU, and additional CPUs are added once a cloud orchestrator deploys the workload.”h]”(hŒxCPU Hotplug on virtual systems is supported. It is distinct from physical CPU Hotplug as all resources are described as ”…””}”(hjëhžhhŸNh Nubhì)”}”(hŒ ``present``”h]”hŒpresent”…””}”(hjóhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjëubhX, but CPUs may be marked as disabled by firmware. Only the CPU’s online/offline behaviour is influenced by firmware. An example is where a virtual machine boots with a single CPU, and additional CPUs are added once a cloud orchestrator deploys the workload.”…””}”(hjëhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K1hjÌhžhubhØ)”}”(hŒFFor a virtual machine, the VMM (e.g. Qemu) plays the part of firmware.”h]”hŒFFor a virtual machine, the VMM (e.g. Qemu) plays the part of firmware.”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K8hjÌhžhubhØ)”}”(hŒ©Virtual hotplug is implemented as a firmware policy affecting which CPUs can be brought online. Firmware can enforce its policy via PSCI's return codes. e.g. ``DENIED``.”h]”(hŒ Virtual hotplug is implemented as a firmware policy affecting which CPUs can be brought online. Firmware can enforce its policy via PSCI’s return codes. e.g. ”…””}”(hjhžhhŸNh Nubhì)”}”(hŒ ``DENIED``”h]”hŒDENIED”…””}”(hj!hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjubhŒ.”…””}”(hjhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K:hjÌhžhubhØ)”}”(hXThe ACPI tables must describe all the resources of the virtual machine. CPUs that firmware wishes to disable either from boot (or later) should not be ``enabled`` in the MADT GICC structures, but should have the ``online capable`` bit set, to indicate they can be enabled later. The boot CPU must be marked as ``enabled``. The 'always on' GICR structure must be used to describe the redistributors.”h]”(hŒ—The ACPI tables must describe all the resources of the virtual machine. CPUs that firmware wishes to disable either from boot (or later) should not be ”…””}”(hj9hžhhŸNh Nubhì)”}”(hŒ ``enabled``”h]”hŒenabled”…””}”(hjAhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj9ubhŒ2 in the MADT GICC structures, but should have the ”…””}”(hj9hžhhŸNh Nubhì)”}”(hŒ``online capable``”h]”hŒonline capable”…””}”(hjShžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj9ubhŒP bit set, to indicate they can be enabled later. The boot CPU must be marked as ”…””}”(hj9hžhhŸNh Nubhì)”}”(hŒ ``enabled``”h]”hŒenabled”…””}”(hjehžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj9ubhŒR. The ‘always on’ GICR structure must be used to describe the redistributors.”…””}”(hj9hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K>hjÌhžhubhØ)”}”(hX&CPUs described as ``online capable`` but not ``enabled`` can be set to enabled by the DSDT's Processor object's _STA method. On virtual systems the _STA method must always report the CPU as ``present``. Changes to the firmware policy can be notified to the OS via device-check or eject-request.”h]”(hŒCPUs described as ”…””}”(hj}hžhhŸNh Nubhì)”}”(hŒ``online capable``”h]”hŒonline capable”…””}”(hj…hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj}ubhŒ but not ”…””}”(hj}hžhhŸNh Nubhì)”}”(hŒ ``enabled``”h]”hŒenabled”…””}”(hj—hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj}ubhŒŠ can be set to enabled by the DSDT’s Processor object’s _STA method. On virtual systems the _STA method must always report the CPU as ”…””}”(hj}hžhhŸNh Nubhì)”}”(hŒ ``present``”h]”hŒpresent”…””}”(hj©hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj}ubhŒ]. Changes to the firmware policy can be notified to the OS via device-check or eject-request.”…””}”(hj}hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h KEhjÌhžhubhØ)”}”(hX†CPUs described as ``enabled`` in the static table, should not have their _STA modified dynamically by firmware. Soft-restart features such as kexec will re-read the static properties of the system from these static tables, and may malfunction if these no longer describe the running system. Linux will re-discover the dynamic properties of the system from the _STA method later during boot.”h]”(hŒCPUs described as ”…””}”(hjÁhžhhŸNh Nubhì)”}”(hŒ ``enabled``”h]”hŒenabled”…””}”(hjÉhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjÁubhXi in the static table, should not have their _STA modified dynamically by firmware. Soft-restart features such as kexec will re-read the static properties of the system from these static tables, and may malfunction if these no longer describe the running system. Linux will re-discover the dynamic properties of the system from the _STA method later during boot.”…””}”(hjÁhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h KJhjÌhžhubeh}”(h]”Œ7cpu-hotplug-on-virtual-systems-cpus-not-enabled-at-boot”ah ]”h"]”Œ9cpu hotplug on virtual systems - cpus not enabled at boot”ah$]”h&]”uh1hÂhhÄhžhhŸh³h K+ubeh}”(h]”(Œcpu-hotplug-and-acpi”hÁeh ]”h"]”(Œcpu hotplug and acpi”Œ cpuhp_index”eh$]”h&]”uh1hÂhhhžhhŸh³h KŒexpect_referenced_by_name”}”jïh¶sŒexpect_referenced_by_id”}”hÁh¶subeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h³uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÇNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h³Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”hÁ]”h¶asŒnameids”}”(jïhÁjîjëjÉjÆjæjãuŒ nametypes”}”(jïˆjî‰jɉjæ‰uh}”(hÁhÄjëhÄjÆjjãjÌuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)”}”(hhh]”hØ)”}”(hhh]”hŒ1Hyperlink target "cpuhp-index" is not referenced.”…””}”hjƒsbah}”(h]”h ]”h"]”h$]”h&]”uh1h×hj€ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”h³Œline”Kuh1j~ubaŒ transformer”NŒ include_log”]”Œ decoration”Nhžhub.