mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

iommu_mem_notifier() is invoked when RAM is dynamically added/removed. This notifier call is responsible to add/remove TCEs from the Dynamic DMA Window (DDW) when TCEs are pre-mapped. TCEs are pre-mapped only for RAM and not for persistent memory (pmemory). For DMA buffers in pmemory, TCEs are dynamically mapped when the device driver instructs to do so. The issue is 'daxctl' command is capable of adding pmemory as "System RAM" after LPAR boot. The command to do so is - daxctl reconfigure-device --mode=system-ram dax0.0 --force This will dynamically add pmemory range to LPAR RAM eventually invoking iommu_mem_notifier(). The address range of pmemory is way beyond the Max RAM that the LPAR can have. Which means, this range is beyond the DDW created for the device, at device initialization time. As a result when TCEs are pre-mapped for the pmemory range, by iommu_mem_notifier(), PHYP HCALL returns H_PARAMETER. This failed the command, daxctl, to add pmemory as RAM. The solution is to not pre-map TCEs for pmemory. Signed-off-by: Gaurav Batra <gbatra@linux.ibm.com> Tested-by: Donet Tom <donettom@linux.ibm.com> Reviewed-by: Donet Tom <donettom@linux.ibm.com> Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com> Link: https://patch.msgid.link/20250130183854.92258-1-gbatra@linux.ibm.com
42 lines
902 B
C
42 lines
902 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Written by Kanoj Sarcar (kanoj@sgi.com) Aug 99
|
|
*
|
|
* PowerPC64 port:
|
|
* Copyright (C) 2002 Anton Blanchard, IBM Corp.
|
|
*/
|
|
#ifndef _ASM_MMZONE_H_
|
|
#define _ASM_MMZONE_H_
|
|
#ifdef __KERNEL__
|
|
|
|
#include <linux/cpumask.h>
|
|
|
|
/*
|
|
* generic non-linear memory support:
|
|
*
|
|
* 1) we will not split memory into more chunks than will fit into the
|
|
* flags field of the struct page
|
|
*/
|
|
|
|
#ifdef CONFIG_NUMA
|
|
|
|
/*
|
|
* Following are specific to this numa platform.
|
|
*/
|
|
|
|
extern int numa_cpu_lookup_table[];
|
|
extern cpumask_var_t node_to_cpumask_map[];
|
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
|
extern unsigned long max_pfn;
|
|
u64 memory_hotplug_max(void);
|
|
u64 hot_add_drconf_memory_max(void);
|
|
#else
|
|
#define memory_hotplug_max() memblock_end_of_DRAM()
|
|
#endif
|
|
|
|
#else
|
|
#define memory_hotplug_max() memblock_end_of_DRAM()
|
|
#endif /* CONFIG_NUMA */
|
|
|
|
#endif /* __KERNEL__ */
|
|
#endif /* _ASM_MMZONE_H_ */
|