On 16/04/17 04:32 PM, Benjamin Herrenschmidt wrote: >> I'll consider this. Given the fact I can use your existing >> get_dev_pagemap infrastructure to look up the p2pmem device this >> probably isn't as hard as I thought it would be anyway (we probably >> don't even need a page flag). We'd just have lookup the dev_pagemap, >> test if it's a p2pmem device, and if so, call a p2pmem_dma_map function >> which could apply the offset or do any other arch specific logic (if >> necessary). > > I'm still not 100% why do you need a "p2mem device" mind you ... Well, you don't "need" it but it is a design choice that I think makes a lot of sense for the following reasons: 1) p2pmem is in fact a device on the pci bus. A pci driver will need to set it up and create the device and thus it will have a natural parent pci device. Instantiating a struct device for it means it will appear in the device hierarchy and one can use that to reason about its position in the topology. 2) In order to create the struct pages we use the ZONE_DEVICE infrastructure which requires a struct device. (See devm_memremap_pages.) This amazingly gets us the get_dev_pagemap architecture which also uses a struct device. So by using a p2pmem device we can go from struct page to struct device to p2pmem device quickly and effortlessly. 3) You wouldn't want to use the pci's struct device because it doesn't really describe what's going on. For example, there may be multiple devices on the pci device in question: eg. an NVME card and some p2pmem. Or it could be a NIC with some p2pmem. Or it could just be p2pmem by itself. And the logic to figure out what memory is available and where the address is will be non-standard so it's really straightforward to have any pci driver just instantiate a p2pmem device. It is probably worth you reading the RFC patches at this point to get a better feel for this. Logan -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html