OpenCloudOS-Kernel/drivers/acpi
Davidlohr Bueso 1156b4418d memregion: Add cpu_cache_invalidate_memregion() interface
With CXL security features, and CXL dynamic provisioning, global CPU
cache flushing nvdimm requirements are no longer specific to that
subsystem, even beyond the scope of security_ops. CXL will need such
semantics for features not necessarily limited to persistent memory.

The functionality this is enabling is to be able to instantaneously
secure erase potentially terabytes of memory at once and the kernel
needs to be sure that none of the data from before the erase is still
present in the cache. It is also used when unlocking a memory device
where speculative reads and firmware accesses could have cached poison
from before the device was unlocked. Lastly this facility is used when
mapping new devices, or new capacity into an established physical
address range. I.e. when the driver switches DeviceA mapping AddressX to
DeviceB mapping AddressX then any cached data from DeviceA:AddressX
needs to be invalidated.

This capability is typically only used once per-boot (for unlock), or
once per bare metal provisioning event (secure erase), like when handing
off the system to another tenant or decommissioning a device. It may
also be used for dynamic CXL region provisioning.

Users must first call cpu_cache_has_invalidate_memregion() to know
whether this functionality is available on the architecture. On x86 this
respects the constraints of when wbinvd() is tolerable. It is already
the case that wbinvd() is problematic to allow in VMs due its global
performance impact and KVM, for example, has been known to just trap and
ignore the call. With confidential computing guest execution of wbinvd()
may even trigger an exception. Given guests should not be messing with
the bare metal address map via CXL configuration changes
cpu_cache_has_invalidate_memregion() returns false in VMs.

While this global cache invalidation facility, is exported to modules,
since NVDIMM and CXL support can be built as a module, it is not for
general use. The intent is that this facility is not available outside
of specific "device-memory" use cases. To make that expectation as clear
as possible the API is scoped to a new "DEVMEM" module namespace that
only the NVDIMM and CXL subsystems are expected to import.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: x86@kernel.org
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Tested-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
Co-developed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2022-11-14 10:07:22 -08:00
..
acpica Revert "ACPICA: executer/exsystem: Warn about sleeps greater than 10 ms" 2022-05-21 18:02:26 +02:00
apei ACPI: APEI: Fix integer overflow in ghes_estatus_pool_init() 2022-10-13 20:40:09 +02:00
arm64 iommu: Add gfp parameter to iommu_alloc_resv_region 2022-10-21 10:49:32 +02:00
dptf ACPI: DPTF: Drop stale link from Kconfig help 2022-09-28 17:26:25 +02:00
nfit memregion: Add cpu_cache_invalidate_memregion() interface 2022-11-14 10:07:22 -08:00
numa ACPI: NUMA: Add CXL CFMWS 'nodes' to the possible nodes set 2022-10-21 16:14:59 -07:00
pmic ACPI: PMIC: xpower: Fix _TMP ACPI errors 2021-12-08 15:34:57 +01:00
x86 ACPI: x86: Add another system to quirk list for forcing StorageD3Enable 2022-10-28 17:34:59 +02:00
Kconfig platform-drivers-x86 for v6.1-1 2022-10-05 10:38:24 -07:00
Makefile ACPI: processor: Split out thermal initialization from ACPI PSS 2022-06-29 18:51:22 +02:00
ac.c ACPI: AC: Remove the leftover struct acpi_ac_bl 2022-09-24 18:22:59 +02:00
acpi_adxl.c
acpi_amba.c Merge branches 'acpi-ec', 'acpi-ac', 'acpi-fan', 'acpi-video' and 'acpi-amba' 2022-10-03 19:59:47 +02:00
acpi_apd.c ACPI: APD: Use the helper acpi_dev_get_memory_resources() 2022-09-10 18:22:24 +02:00
acpi_cmos_rtc.c ACPI: cmos_rtc: Using pr_fmt() and remove PREFIX 2021-06-07 15:36:45 +02:00
acpi_configfs.c ACPI: configfs: Make get_header() to return error pointer 2021-07-16 19:20:28 +02:00
acpi_dbg.c ACPI: debug: Remove the not used function 2020-11-17 18:12:34 +01:00
acpi_extlog.c ACPI: extlog: Handle multiple records 2022-10-13 20:43:10 +02:00
acpi_fpdt.c ACPI: tables: FPDT: Don't call acpi_os_map_memory() on invalid phys address 2022-09-10 18:18:34 +02:00
acpi_ipmi.c ACPI: IPMI: replace usage of found with dedicated list iterator variable 2022-03-25 18:01:40 +01:00
acpi_lpat.c
acpi_lpit.c Revert "ACPI / PM: LPIT: Register sysfs attributes based on FADT" 2022-07-15 20:04:07 +02:00
acpi_lpss.c Merge branch 'acpi-uid' 2022-10-03 20:09:22 +02:00
acpi_memhotplug.c ACPI: memhotplug: use a single static memory group for a single memory device 2021-09-08 11:50:23 -07:00
acpi_pad.c ACPI: Add perf low power callback 2022-04-05 10:24:38 +02:00
acpi_pcc.c ACPI: PCC: Fix unintentional integer overflow 2022-10-26 13:33:31 +02:00
acpi_platform.c Merge branches 'acpi-scan', 'acpi-bus' and 'acpi-platform' 2022-09-30 20:28:22 +02:00
acpi_pnp.c ACPI: PNP: remove duplicated BRI0A49 and BDP3336 entries 2021-09-24 18:12:15 +02:00
acpi_processor.c ACPI: processor: Replace deprecated CPU-hotplug functions 2021-08-04 20:25:54 +02:00
acpi_tad.c ACPI: Use DEVICE_ATTR_<RW|RO|WO> macros 2021-01-22 16:17:19 +01:00
acpi_video.c platform-drivers-x86 for v6.1-1 2022-10-05 10:38:24 -07:00
acpi_watchdog.c ACPI: watchdog: Replace open coded variant of resource_union() 2020-11-17 18:06:29 +01:00
battery.c ACPI: battery: Make "not-charging" the default on no charging or full info 2022-05-06 20:37:51 +02:00
bgrt.c ACPI: BGRT: use static for BGRT_SHOW kobj_attribute defines 2022-04-22 16:55:33 +02:00
blacklist.c ACPI: blacklist: Unify the message printing 2021-06-07 15:36:45 +02:00
bus.c Merge branches 'acpi-misc', 'acpi-tools' and 'acpi-docs' 2022-10-03 20:03:49 +02:00
button.c ACPI: button: Add DMI quirk for Lenovo Yoga 9 (14INTL5) 2021-08-25 19:57:01 +02:00
container.c ACPI: container: Use acpi_dev_for_each_child() 2022-06-20 20:33:05 +02:00
cppc_acpi.c ACPI: CPPC: Disable FIE if registers in PCC regions 2022-09-24 18:43:46 +02:00
custom_method.c ACPI: custom_method: fix a possible memory leak 2021-04-28 19:17:54 +02:00
debugfs.c ACPI: debugfs: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00
device_pm.c Merge branches 'acpi-apei', 'acpi-wakeup', 'acpi-reboot' and 'acpi-thermal' 2022-10-10 18:11:11 +02:00
device_sysfs.c ACPI: bus: Drop driver member of struct acpi_device 2022-06-30 14:11:21 +02:00
dock.c ACPI: Use acpi_fetch_acpi_dev() instead of acpi_bus_get_device() 2021-12-17 18:45:51 +01:00
ec.c ACPI: EC: Drop unneeded result variable from ec_write() 2022-09-03 20:31:26 +02:00
ec_sys.c ACPI: EC: Mark the ec_sys write_support param as module_param_hw() 2021-12-01 20:19:30 +01:00
event.c Merge branches 'acpi-ec', 'acpi-apei', 'acpi-soc' and 'acpi-misc' 2021-06-29 15:51:25 +02:00
evged.c ACPI: GED: fix -Wformat 2020-11-09 19:25:20 +01:00
fan.h ACPI: DPTF: Support Meteor Lake 2022-05-25 15:37:07 +02:00
fan_attr.c ACPI: fan: Add additional attributes for fine grain control 2022-02-25 20:49:30 +01:00
fan_core.c ACPI: fan: Reorder symbols to get rid of a few forward declarations 2022-09-24 18:46:52 +02:00
glue.c ACPI: glue: Introduce acpi_find_child_by_adr() 2022-06-20 20:28:48 +02:00
hed.c ACPI: HED: Drop unused ACPI_MODULE_NAME() definition 2021-03-08 16:51:48 +01:00
internal.h ACPI: scan: Eliminate __acpi_device_add() 2022-08-23 18:19:27 +02:00
ioapic.c
irq.c Merge branches 'acpi-apei', 'acpi-wakeup', 'acpi-reboot' and 'acpi-thermal' 2022-10-10 18:11:11 +02:00
nvs.c Merge branches 'acpi-ec', 'acpi-apei', 'acpi-soc' and 'acpi-misc' 2021-06-29 15:51:25 +02:00
osi.c ACPI: OSI: Remove Linux-HPI-Hybrid-Graphics _OSI string 2022-08-25 20:18:17 +02:00
osl.c ACPI: OSL: Remove the helper for deactivating memory region 2022-04-27 20:44:55 +02:00
pci_irq.c ACPI: PCI: IRQ: Consolidate printing diagnostic messages 2021-03-08 16:51:08 +01:00
pci_link.c ACPI/PCI: Remove useless NULL pointer checks 2022-07-27 21:21:27 +02:00
pci_mcfg.c PCI: loongson: Add ACPI init support 2022-07-14 15:25:36 -05:00
pci_root.c ACPI: PCI: Fix device reference counting in acpi_get_pci_dev() 2022-10-19 13:28:30 +02:00
pci_slot.c ACPI: PCI: Remove unused ACPICA debug code 2020-09-25 18:25:51 +02:00
pfr_telemetry.c ACPI: pfr_telemetry: Fix info leak in pfrt_log_ioctl() 2022-01-10 16:36:45 +01:00
pfr_update.c ACPI: pfr_update: Fix return value check in pfru_write() 2022-01-06 18:53:31 +01:00
platform_profile.c ACPI: platform-profile: call sysfs_notify() from platform_profile_store() 2021-08-16 18:32:02 +02:00
power.c ACPI: scan: Eliminate __acpi_device_add() 2022-08-23 18:19:27 +02:00
pptt.c ACPI: PPTT: Leave the table mapped for the runtime usage 2022-07-22 10:04:43 +02:00
prmt.c ACPI: PRM: Change handler_addr type to void pointer 2022-06-30 17:35:45 +02:00
proc.c proc: remove PDE_DATA() completely 2022-01-22 08:33:37 +02:00
processor_core.c ACPI: processor: Remove dead ACPICA debug code 2020-09-25 18:25:51 +02:00
processor_driver.c ACPI: processor: Split out thermal initialization from ACPI PSS 2022-06-29 18:51:22 +02:00
processor_idle.c ACPI updates for 6.1-rc1 2022-10-03 13:19:53 -07:00
processor_pdc.c ACPI: processor: Get rid of ACPICA message printing 2021-03-08 16:51:19 +01:00
processor_perflib.c ACPI: processor_perflib: Cleanup print messages 2021-06-07 15:36:46 +02:00
processor_thermal.c ACPI: processor: Remove freq Qos request for all CPUs 2022-08-23 18:09:06 +02:00
processor_throttling.c Merge branches 'acpi-dptf' and 'acpi-messages' 2021-06-29 15:50:37 +02:00
property.c Merge branch 'acpi-dev' 2022-09-30 20:05:16 +02:00
reboot.c ACPI: reboot: Unify the message printing 2021-06-07 15:36:46 +02:00
resource.c ACPI: resource: Skip IRQ override on Asus Vivobook S5602ZA 2022-10-26 13:41:11 +02:00
sbs.c ACPI: Drop parent field from struct acpi_device 2022-08-24 20:55:24 +02:00
sbshc.c ACPI: Drop parent field from struct acpi_device 2022-08-24 20:55:24 +02:00
sbshc.h ACPI: Fix whitespace inconsistencies 2020-11-09 19:08:06 +01:00
scan.c ACPI: scan: Add LATT2021 to acpi_ignore_dep_ids[] 2022-10-26 13:44:13 +02:00
sleep.c PM: ACPI: reboot: Reinstate S5 for reboot 2022-10-04 15:59:36 +02:00
sleep.h ACPI: s2idle: Add a new ->check() callback for platform_s2idle_ops 2022-09-09 17:37:40 +02:00
spcr.c ACPI: SPCR: Add support for NVIDIA 16550-compatible port subtype 2022-04-13 20:37:29 +02:00
sysfs.c ACPI: sysfs: Fix BERT error region memory mapping 2022-04-13 19:58:14 +02:00
tables.c ACPI: tables: Make LAPIC_ADDR_OVR address readable in message 2022-03-25 18:11:42 +01:00
thermal.c ACPI: thermal: Drop some redundant code 2022-10-05 17:51:52 +02:00
tiny-power-button.c ACPI: tiny-power-button: Simplify the code using module_acpi_driver() 2020-11-17 18:12:34 +01:00
utils.c Merge branch 'acpi-uid' 2022-10-03 20:09:22 +02:00
video_detect.c ACPI: video: Fix missing native backlight on Chromebooks 2022-10-24 17:02:13 +02:00
viot.c iommu/dma: Make header private 2022-09-09 09:26:22 +02:00
wakeup.c ACPI: Fix whitespace inconsistencies 2020-11-09 19:08:06 +01:00