My question is just for curiosity, I'm not a developer of MacOS Thunderbolt drivers so I have no experience with that.
I've come across this page about thunderbolt drivers and IOMMU on MacOS. From what I've understood, when the driver asks for a memory address, the address obtained is not physical but it is a virtual address mapped by the IOMMU. I think this is due to the security risks of using DMA without a IOMMU. However there are some option for a driver to bypass remapping, for example calling an IODMACommand object’s initWithSpecification method with mappingOptions set to kBypassed. However in the page it is said that calling a method like that to obtain an unmapped physical address and use that for DMA will break the driver.
So my question is: in a thunderbolt driver, what's the purpose of asking for unmapped physical address if that address cannot be used for DMA?
Sorry if this question may seem dumb, but like I said I've no experience with this kind of stuffs, I'm just very curious.
What's the purpose of bypassing remapping in Thunderbolt driver?
276 views Asked by namerand At
1
There are 1 answers
Related Questions in MACOS
- Error installing Nativescript on Mac M2 Sonoma 14.4.1
- macOS - Most secure way of a GUI SUDO_ASKPASS
- When using onDrag in SwiftUI on Mac how can I detect when the dragged object has been released anywhere?
- Why does Hugo generate different taxonomy-related HTML on different OS's?
- ZSH function parameters conundrum
- how to make read only file/directory in Mac writable
- macOS BigSur - Unable to run bundled php version or brew php 8
- 9 Digit Addresses in Hexadecimal System in MacOS
- MacOS Bash-Script: while read p and echo
- How to make a range for tail rows on a categorized table in Numbers with JXA scripts?
- Cannot build a basic project with curl on Mac (M2) for Raspberry Pi Pico
- How to recover deleted files from create vite react project
- Can't run built SFML project from Xcode template
- React Native - RealmJS - Linker command failed with exit code 1
- How can I manually add a keyboard shortcut to a Shortcut Action Service directly via the system files, without going through the System Prefs GUI?
Related Questions in DMA
- STM32 ADC DMA low raw/Voltage readings
- the end of the I/O operation is notified to the system by an interrupt.how much system time do the mentioned operations occupy?
- Use Nvidia as DMA devices is possible?
- Does the Direct Memory Access (DMA) interfere with the execution of user program execution?
- A breakpoint instruction (__debugbreak() statement or a similar call) was executed in p.exe
- How to use DMAMUX generated events to trigger another DMA request?
- How to use DMA memory to memory in stm32h723zgt6?
- Cache issue when creating shared memory between kernel space and user space
- DMA buf import into Vulkan
- stm32 cubeIDE DMA DAC noise on DAC output
- STM32F4 Serial Port Forwarding Architecture
- STM32 ADC: Continuous conversion (DMA) vs. discontinuous conversion accuracy
- AMD IOMMU IO_PAGE_FAULT
- T-Display-S3-long FreeRTOS Memory allocation fails while there is heap space available
- Arduino Pro Portenta H7 I2S and DMA
Related Questions in IOKIT
- How can I access IOPSCopyPowerSourcesInfo from the IOKit framework in my SwiftUI iOS internal app
- How to directly access physical addresses or convert to virtual address on macOS for Apple silicon?
- How do you create a custom OSObject subclass in a DriverKit driver?
- Possible leak of an IOBufferMemoryDescriptor in DriverKit driver
- Unable to import IOKit in an iOS framework
- DriverKit Driver is failing to launch on iPadOS due to an entitlements check failure, what am I missing?
- Issue retrieving buffer from the device on a custom device driver in MacOS
- Crash using CFDictionarySetValue in Swift
- Linker error with c file and .h header file
- lldb - attach to target Mac over ethernet after a kernel panic
- temperature was not able to be retrieved
- How to get device id or any other unique id for each mouse event on Mac
- Functions of IOUserSCSIPeripheralDeviceType00 class in SCSIPeripheralsDriverKit always return kIOReturnUnsupported (0xe00002c7)
- Unloading a kext after macOS 11 Big Sur
- How to develop a DEXT for sending vendor SCSI commands to a USB mass storage device using USBDriverKit?
Related Questions in KERNEL-EXTENSION
- Is it possible to develop a Transparent Data Encryption(TDE) system on macOS now?
- How to directly access physical addresses or convert to virtual address on macOS for Apple silicon?
- Issue retrieving buffer from the device on a custom device driver in MacOS
- lldb - attach to target Mac over ethernet after a kernel panic
- Unloading a kext after macOS 11 Big Sur
- How to delete potential malware files in sbin/bin system directory on Mac M1?
- Is it feasible to write a macOS kernel-extension for Ventura?
- How to store kext parameters between runs?
- How to register a key in the IORegistry and react to its change in the kext?
- Unable to load kext "Authenticating extension failed"
- MacOS kext panic “Request address is greater than 32 bits”
- (SQLITE3/KEXT) Want to revoke my MacOS trust on installer, so it prompts me again about allowing what I previously allowed (and don't want to now)
- "Failed to bind" while loading a kernel extension on macOS 13 Ventura
- How can we open a hard drive using kernel extension in Mac OSx?
- Where we can find log file of KEXTs in Mac OS?
Related Questions in IOMMU
- PCIe MSI Interrupts directly into Userspace with VFIO & IOMMU
- AMD IOMMU IO_PAGE_FAULT
- Cannot open /dev/vfio/noiommu-0: Operation not permitted
- How to ensure continuous physical memory address with IOMMU?
- DPDK EAL error when using IOVA-VA memory mode
- VFIO PCIe BAR write won't work. Register value falls back when program execution finished
- I'm a bit confused how memory mapped I/O works on a Raspberry pi
- How to add VFIO-IOMMU in KVM virtual machine (Aarch64)?
- Reading 0 when reading SMMUv2 registers from user space in Linux
- How does memory mapped I/O (MMIO) work on ARM architectures?
- Create an IOMMU entry in Linux
- how is 'stream ID' or 'iommu specifier' determined in PCIe root complex mode?
- How to configure IOMMU protection for my hypervisor?
- PCIe DMA aarch64 0x10 Translation Fault
- with IOMMU, why don't we have to pin the DMA buffer pages?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
There's really no reason to do this in a Thunderbolt driver because as you say the Thunderbolt device only gets to "see" addresses in the IOMMU's virtual address space.
You'd use unmapped addresses if you were writing a driver for something that interfaces with system memory using real physical addresses from the perspective of the CPU. There's not much opportunity for 3rd party developers to do this type of thing on a real Mac, but when writing drivers for (para-)virtualised "hardware" in VMs, or presumably, when writing drivers for Hackintoshes, there are certainly situations where you're talking to a real or virtual device or service which is not "behind" an IOMMU - usually, this means anything not on any PCIe bus.
For example, I used the
kIOMemoryMapperNoneoption toIOMemoryDescriptor:: getPhysicalSegment()in my driver for the Virtio memory balloon. The memory balloon device is really some code on the VM host which operates on VM-CPU-physical page addresses, so if there's a (virtualised) IOMMU in the virtual machine system, sending the memory balloon "mapped" physical addresses would not have the intended result.