Hi,
Looking at the current code swiotlb is initialized for 64bit kernels
only when the max_pfn value is greater than 4G (MAX_DMA32_PFN value).
So in cases when the initial memory is less than 4GB the kernel boots
without enabling swiotlb, when we hotadd memory to such a kernel and go
beyond the 4G limit, swiotlb is still disabled. As a result when any
32bit devices start using this newly added memory beyond 4G, the kernel
starts spitting error messages like below or in some cases it causes
kernel panics.
1. Enable swiotlb for all 64bit kernels which have memory hot-add
support.
2. Instead of checking the max_pfn value in pci_swiotlb_detect, check
for max_hotpluggable_pfn (or some such) value. Though I don't see such a
value readily available. I could parse the SRAT and get hotplug memory
information but that will make swiotlb detection logic a little too
complex. A quick look around srat_xx.c files and the acpi_memhotplug
module didn't find any useful API that could be used directly either.
So was wondering if any of you are aware of an easy way to get such
information ?