On Mon, 23 Oct 2017 01:55:20 -0700
Dan Williams <dan.j.williams(a)intel.com> wrote:
On Sun, Oct 22, 2017 at 10:18 PM, Martin Schwidefsky
> On Fri, 20 Oct 2017 18:29:33 +0200
> Christoph Hellwig <hch(a)lst.de> wrote:
>> On Fri, Oct 20, 2017 at 08:23:02AM -0700, Dan Williams wrote:
>> > Yes, however it seems these drivers / platforms have been living with
>> > the lack of struct page for a long time. So they either don't use DAX,
>> > or they have a constrained use case that never triggers
>> > get_user_pages(). If it is the latter then they could introduce a new
>> > configuration option that bypasses the pfn_t_devmap() check in
>> > bdev_dax_supported() and fix up the get_user_pages() paths to fail.
>> > So, I'd like to understand how these drivers have been using DAX
>> > support without struct page to see if we need a workaround or we can
>> > go ahead delete this support. If the usage is limited to
>> > execute-in-place perhaps we can do a constrained ->direct_access() for
>> > just that case.
>> For axonram I doubt anyone is using it any more - it was a very for
>> the IBM Cell blades, which were produceѕ in a rather limited number.
>> And Cell basically seems to be dead as far as I can tell.
>> For S/390 Martin might be able to help out what the status of xpram
>> in general and DAX support in particular is.
> The goes back to the time where DAX was called XIP. The initial design
> point has been *not* to have struct pages for a large read-only memory
> area. There is a block device driver for z/VM that maps a DCSS segment
> somewhere in memore (no struct page!) with e.g. the complete /usr
> filesystem. The xpram driver is a different beast and has nothing to
> do with XIP/DAX.
> Now, if any there are very few users of the dcssblk driver out there.
> The idea to save a few megabyte for /usr never really took of.
> We have to look at our get_user_pages() implementation to see how hard
> it would be to make it fail if the target address is for an area without
> struct pages.
For read-only memory I think we can enable a subset of DAX, and
explicitly turn off the paths that require get_user_pages(). However,
I wonder if anyone has tested DAX with dcssblk because fork() requires
I did not test it recently, someone else might have. Gerald?
Looking at the code I see this in the s390 version of gup_pte_range:
mask = (write ? _PAGE_PROTECT : 0) | _PAGE_INVALID | _PAGE_SPECIAL;
if ((pte_val(pte) & mask) != 0)
The XIP code used the pte_mkspecial mechanics to make it work. As far as
I can see the pfn_t_devmap returns true for the DAX mappins, yes?
Then I would say that dcssblk and DAX currently do not work together.
"Reality continues to ruin my life." - Calvin.