_sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/core-api/memory-hotplugmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/core-api/memory-hotplugmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/core-api/memory-hotplugmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/core-api/memory-hotplugmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/core-api/memory-hotplugmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/core-api/memory-hotplugmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhX/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/core-api/memory-hotplug.rsthKubh field_body)}(h*Documentation/core-api/memory-hotplug.rst h]h)}(h)Documentation/core-api/memory-hotplug.rsth]h)Documentation/core-api/memory-hotplug.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hjhhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhKubh)}(h*吴想成 Wu XiangCheng h]h)}(h)吴想成 Wu XiangCheng h](h吴想成 Wu XiangCheng <}(hjShhhNhNubj)}(hbobwxc@email.cnh]hbobwxc@email.cn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:bobwxc@email.cnuh1jhjSubh>}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjOubah}(h]h ]h"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtarget)}(h.. _cn_core-api_memory-hotplug:h]h}(h]h ]h"]h$]h&]refidcn-core-api-memory-hotpluguh1jhKhhhhhhubhsection)}(hhh](htitle)}(h内存热插拔h]h内存热插拔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h内存热拔插事件通知器h]h内存热拔插事件通知器}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h3热插拔事件被发送到一个通知队列中。h]h3热插拔事件被发送到一个通知队列中。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hC在 ``include/linux/memory.h`` 中定义了六种类型的通知:h](h在 }(hjhhhNhNubhliteral)}(h``include/linux/memory.h``h]hinclude/linux/memory.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% 中定义了六种类型的通知:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubhdefinition_list)}(hhh](hdefinition_list_item)}(hMEM_GOING_ONLINE 在新内存可用之前生成,以便能够为子系统处理内存做准备。页面分配器仍然无法从新 的内存中进行分配。 h](hterm)}(hMEM_GOING_ONLINEh]hMEM_GOING_ONLINE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubh definition)}(hhh]h)}(h在新内存可用之前生成,以便能够为子系统处理内存做准备。页面分配器仍然无法从新 的内存中进行分配。h]h在新内存可用之前生成,以便能够为子系统处理内存做准备。页面分配器仍然无法从新 的内存中进行分配。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj)}(h>MEM_CANCEL_ONLINE 如果MEM_GOING_ONLINE失败,则生成。 h](j)}(hMEM_CANCEL_ONLINEh]hMEM_CANCEL_ONLINE}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj%ubj)}(hhh]h)}(h+如果MEM_GOING_ONLINE失败,则生成。h]h+如果MEM_GOING_ONLINE失败,则生成。}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj7ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hZMEM_ONLINE 当内存成功上线时产生。回调可以从新的内存中分配页面。 h](j)}(h MEM_ONLINEh]h MEM_ONLINE}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK"hjTubj)}(hhh]h)}(hN当内存成功上线时产生。回调可以从新的内存中分配页面。h]hN当内存成功上线时产生。回调可以从新的内存中分配页面。}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjfubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhhhK"hjhhubj)}(hMEM_GOING_OFFLINE 在开始对内存进行下线处理时生成。从内存中的分配不再可能,但是一些要下线的内存 仍然在使用。回调可以用来释放一个子系统在指定内存块中已知的内存。 h](j)}(hMEM_GOING_OFFLINEh]hMEM_GOING_OFFLINE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK&hjubj)}(hhh]h)}(h在开始对内存进行下线处理时生成。从内存中的分配不再可能,但是一些要下线的内存 仍然在使用。回调可以用来释放一个子系统在指定内存块中已知的内存。h]h在开始对内存进行下线处理时生成。从内存中的分配不再可能,但是一些要下线的内存 仍然在使用。回调可以用来释放一个子系统在指定内存块中已知的内存。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK&hjhhubj)}(hMEM_CANCEL_OFFLINE 如果MEM_GOING_OFFLINE失败,则生成。来自我们试图离线的内存块中的内存又可以使 用了。 h](j)}(hMEM_CANCEL_OFFLINEh]hMEM_CANCEL_OFFLINE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK*hjubj)}(hhh]h)}(hr如果MEM_GOING_OFFLINE失败,则生成。来自我们试图离线的内存块中的内存又可以使 用了。h]hr如果MEM_GOING_OFFLINE失败,则生成。来自我们试图离线的内存块中的内存又可以使 用了。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK*hjhhubj)}(h.MEM_OFFLINE 在内存下线完成后生成。 h](j)}(h MEM_OFFLINEh]h MEM_OFFLINE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK-hjubj)}(hhh]h)}(h!在内存下线完成后生成。h]h!在内存下线完成后生成。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK-hjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(h:可以通过调用如下函数来注册一个回调程序:h]h:可以通过调用如下函数来注册一个回调程序:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjhhubh block_quote)}(h1hotplug_memory_notifier(callback_func, priority) h]h)}(h0hotplug_memory_notifier(callback_func, priority)h]h0hotplug_memory_notifier(callback_func, priority)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hj&ubah}(h]h ]h"]h$]h&]uh1j$hhhK1hjhhubh)}(hT优先级数值较高的回调函数在数值较低的回调函数之前被调用。h]hT优先级数值较高的回调函数在数值较低的回调函数之前被调用。}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubh)}(h)一个回调函数必须有以下原型::h]h(一个回调函数必须有以下原型:}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjhhubh literal_block)}(hSint callback_func( struct notifier_block *self, unsigned long action, void *arg);h]hSint callback_func( struct notifier_block *self, unsigned long action, void *arg);}hj\sbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jZhhhK7hjhhubh)}(h回调函数的第一个参数(self)是指向回调函数本身的通知器链块的一个指针。第二个参 数(action)是上述的事件类型之一。第三个参数(arg)传递一个指向 memory_notify结构体的指针::h]h回调函数的第一个参数(self)是指向回调函数本身的通知器链块的一个指针。第二个参 数(action)是上述的事件类型之一。第三个参数(arg)传递一个指向 memory_notify结构体的指针:}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjhhubj[)}(hstruct memory_notify { unsigned long start_pfn; unsigned long nr_pages; int status_change_nid_normal; int status_change_nid; }h]hstruct memory_notify { unsigned long start_pfn; unsigned long nr_pages; int status_change_nid_normal; int status_change_nid; }}hjzsbah}(h]h ]h"]h$]h&]jjjkuh1jZhhhK>hjhhubh bullet_list)}(hhh](h list_item)}(h/start_pfn是在线/离线内存的start_pfn。 h]h)}(h.start_pfn是在线/离线内存的start_pfn。h]h.start_pfn是在线/离线内存的start_pfn。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h+nr_pages是在线/离线内存的页数。 h]h)}(h*nr_pages是在线/离线内存的页数。h]h*nr_pages是在线/离线内存的页数。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hstatus_change_nid_normal是当nodemask的N_NORMAL_MEMORY被设置/清除时设置节 点id,如果是-1,则nodemask状态不改变。 h]h)}(hstatus_change_nid_normal是当nodemask的N_NORMAL_MEMORY被设置/清除时设置节 点id,如果是-1,则nodemask状态不改变。h]hstatus_change_nid_normal是当nodemask的N_NORMAL_MEMORY被设置/清除时设置节 点id,如果是-1,则nodemask状态不改变。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hXvstatus_change_nid是当nodemask的N_MEMORY被(将)设置/清除时设置的节点id。这 意味着一个新的(没上线的)节点通过联机获得新的内存,而一个节点失去了所有的内 存。如果这个值为-1,那么nodemask的状态就不会改变。 如果 status_changed_nid* >= 0,回调应该在必要时为节点创建/丢弃结构体。 h](h)}(hXstatus_change_nid是当nodemask的N_MEMORY被(将)设置/清除时设置的节点id。这 意味着一个新的(没上线的)节点通过联机获得新的内存,而一个节点失去了所有的内 存。如果这个值为-1,那么nodemask的状态就不会改变。h]hXstatus_change_nid是当nodemask的N_MEMORY被(将)设置/清除时设置的节点id。这 意味着一个新的(没上线的)节点通过联机获得新的内存,而一个节点失去了所有的内 存。如果这个值为-1,那么nodemask的状态就不会改变。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjubh)}(h\如果 status_changed_nid* >= 0,回调应该在必要时为节点创建/丢弃结构体。h]h\如果 status_changed_nid* >= 0,回调应该在必要时为节点创建/丢弃结构体。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKEhjhhubh)}(h回调程序应返回 ``include/linux/notifier.h`` 中定义的NOTIFY_DONE, NOTIFY_OK, NOTIFY_BAD, NOTIFY_STOP中的一个值。h](h回调程序应返回 }(hjhhhNhNubj)}(h``include/linux/notifier.h``h]hinclude/linux/notifier.h}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhN 中定义的NOTIFY_DONE, NOTIFY_OK, NOTIFY_BAD, NOTIFY_STOP中的一个值。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhjhhubh)}(h8NOTIFY_DONE和NOTIFY_OK对进一步处理没有影响。h]h8NOTIFY_DONE和NOTIFY_OK对进一步处理没有影响。}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjhhubh)}(hNOTIFY_BAD是作为对MEM_GOING_ONLINE、MEM_GOING_OFFLINE、MEM_ONLINE或MEM_OFFLINE 动作的回应,用于取消热插拔。它停止对通知队列的进一步处理。h]hNOTIFY_BAD是作为对MEM_GOING_ONLINE、MEM_GOING_OFFLINE、MEM_ONLINE或MEM_OFFLINE 动作的回应,用于取消热插拔。它停止对通知队列的进一步处理。}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjhhubh)}(h5NOTIFY_STOP停止对通知队列的进一步处理。h]h5NOTIFY_STOP停止对通知队列的进一步处理。}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhjhhubeh}(h]id2ah ]h"]内存热拔插事件通知器ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h 内部锁h]h 内部锁}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWhhhhhK]ubh)}(hm当添加/删除使用内存块设备(即普通RAM)的内存时,device_hotplug_lock应该被保持 为:h]hm当添加/删除使用内存块设备(即普通RAM)的内存时,device_hotplug_lock应该被保持 为:}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hjWhhubj)}(hhh](j)}(h针对在线/离线请求进行同步(例如,通过sysfs)。这样一来,内存块设备只有在内存 被完全添加后才能被用户空间访问(.online/.state属性)。而在删除内存时,我们知 道没有人在临界区。 h]h)}(h针对在线/离线请求进行同步(例如,通过sysfs)。这样一来,内存块设备只有在内存 被完全添加后才能被用户空间访问(.online/.state属性)。而在删除内存时,我们知 道没有人在临界区。h]h针对在线/离线请求进行同步(例如,通过sysfs)。这样一来,内存块设备只有在内存 被完全添加后才能被用户空间访问(.online/.state属性)。而在删除内存时,我们知 道没有人在临界区。}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjyubah}(h]h ]h"]h$]h&]uh1jhjvhhhhhNubj)}(hG与CPU热拔插或类似操作同步(例如ACPI和PPC相关操作) h]h)}(hF与CPU热拔插或类似操作同步(例如ACPI和PPC相关操作)h]hF与CPU热拔插或类似操作同步(例如ACPI和PPC相关操作)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhjubah}(h]h ]h"]h$]h&]uh1jhjvhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhKbhjWhhubh)}(h特别是,在添加内存和用户空间试图以比预期更快的速度上线该内存时,有可能出现锁反转, 使用device_hotplug_lock可以避免此情况:h]h特别是,在添加内存和用户空间试图以比预期更快的速度上线该内存时,有可能出现锁反转, 使用device_hotplug_lock可以避免此情况:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjWhhubj)}(hhh](j)}(hKdevice_online()将首先接受device_lock(),然后是mem_hotplug_lock。 h]h)}(hJdevice_online()将首先接受device_lock(),然后是mem_hotplug_lock。h]hJdevice_online()将首先接受device_lock(),然后是mem_hotplug_lock。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hadd_memory_resource()将首先使用mem_hotplug_lock,然后是device_lock()(在创 建设备时,在bus_add_device()期间)。 h]h)}(hadd_memory_resource()将首先使用mem_hotplug_lock,然后是device_lock()(在创 建设备时,在bus_add_device()期间)。h]hadd_memory_resource()将首先使用mem_hotplug_lock,然后是device_lock()(在创 建设备时,在bus_add_device()期间)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhKkhjWhhubh)}(hg由于在使用device_lock()之前,设备对用户空间是可见的,这可能导致锁的反转。h]hg由于在使用device_lock()之前,设备对用户空间是可见的,这可能导致锁的反转。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphjWhhubh)}(h内存的上线/下线应该通过device_online()/device_offline()完成————确保它与通过 sysfs进行的操作正确同步。建议持有device_hotplug_lock(例如,保护online_type)。h]h内存的上线/下线应该通过device_online()/device_offline()完成————确保它与通过 sysfs进行的操作正确同步。建议持有device_hotplug_lock(例如,保护online_type)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhjWhhubh)}(h当添加/删除/上线/下线内存或者添加/删除异构或设备内存时,我们应该始终持有写模式的 mem_hotplug_lock,以序列化内存热插拔(例如访问全局/区域变量)。h]h当添加/删除/上线/下线内存或者添加/删除异构或设备内存时,我们应该始终持有写模式的 mem_hotplug_lock,以序列化内存热插拔(例如访问全局/区域变量)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjWhhubh)}(h此外,mem_hotplug_lock(与device_hotplug_lock相反)在读取模式下允许一个相当 有效的get_online_mems/put_online_mems实现,所以访问内存的代码可以防止该内存 消失。h]h此外,mem_hotplug_lock(与device_hotplug_lock相反)在读取模式下允许一个相当 有效的get_online_mems/put_online_mems实现,所以访问内存的代码可以防止该内存 消失。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjWhhubeh}(h]id3ah ]h"] 内部锁ah$]h&]uh1jhjhhhhhK]ubeh}(h](jid1eh ]h"](内存热插拔cn_core-api_memory-hotplugeh$]h&]uh1jhhhhhhhKexpect_referenced_by_name}j<jsexpect_referenced_by_id}jjsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjferror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh، _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j]jasnameids}(j<jj;j8jTjQj3j0u nametypes}(j<j;jTj3uh}(jjj8jjQjj0jWu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jtKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h@Hyperlink target "cn-core-api-memory-hotplug" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourceh،lineKuh1juba transformerN include_log]