On Thu, Apr 9, 2020 at 7:33 AM Liu, Jingqi <jingqi....@intel.com> wrote: > > On 4/8/2020 5:42 PM, Joao Martins wrote: > > On 4/8/20 3:25 AM, Liu, Jingqi wrote: > >> On 4/8/2020 2:28 AM, Joao Martins wrote: > >>> On 4/7/20 5:55 PM, Dan Williams wrote: > >>>> On Tue, Apr 7, 2020 at 4:01 AM Joao Martins <joao.m.mart...@oracle.com> > >>>> wrote: > >>>>> Perhaps, you meant instead: > >>>>> > >>>>> /sys/dev/char/%d:%d/align > >>>>> > >>>> Hmm, are you sure that's working? > >>> It is, except that I made the slight mistake of testing with a bunch of > >>> wip > >>> patches on top which one of them actually adds the 'align' to child dax > >>> device. > >>> > >>> Argh, my apologies - and thanks for noticing. > >>> > >>>> I expect the alignment to be found > >>>> in the region device: > >>>> > >>>> /sys/class/dax: > >>>> /sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0012:00/ndbus1/region1/dax1.1/dax1.0 > >>>> $(readlink -f /sys/dev/char/253\:263)/../align > >>>> $(readlink -f /sys/dev/char/253\:263)/device/align > >>>> > >>>> > >>>> /sys/bus/dax: > >>>> /sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0012:00/ndbus1/region1/dax1.0/dax1.0 > >>>> $(readlink -f /sys/dev/char/253\:265)/../align > >>>> $(readlink -f /sys/dev/char/253\:265)/device/align <-- No such file > >>>> > >>>> The use of the /sys/dev/char/%d:%d/device is only supported by the > >>>> deprecated /sys/class/dax. > >> Hi Dan, > >> > >> Thanks for your comments. > >> > >> Seems it is a mistake. > >> > >> It should be: $(readlink -f /sys/dev/char/253\:263)/../../align > >> > > Hmm, perhaps you have an extra '../' in the path? This works for me: > > > > # ls $(readlink -f /sys/dev/char/252\:0/../align) > > /sys/devices/platform/e820_pmem/ndbus0/region0/dax0.0/dax0.0/../align > > # cat $(readlink -f /sys/dev/char/252\:0)/../align > > 2097152 > > # cat /sys/dev/char/252\:0/../align > > 2097152 > > Hi Joao, > > Hmm, I need to have an extra '../' in the path. The details are as follows: > > # ll /dev/dax2.0 > crw------- 1 root root 251, 5 Mar 20 13:35 /dev/dax2.0 > # uname -r > 5.6.0-rc1-00044-gb19e8c684703 > # readlink -f /sys/dev/char/251\:5/ > /sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0012:00/ndbus0/region2/dax2.1/dax/dax2.0 > # ls $(readlink -f /sys/dev/char/251\:5)/../align > ls: cannot access > '/sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0012:00/ndbus0/region2/dax2.1/dax/dax2.0/../align': > No such file or directory > # ls $(readlink -f /sys/dev/char/251\:5)/../dax_region/align > ls: cannot access > '/sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0012:00/ndbus0/region2/dax2.1/dax/dax2.0/../dax_region/align': > No such file or directory > # ls $(readlink -f /sys/dev/char/251\:5)/../../align > /sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0012:00/ndbus0/region2/dax2.1/dax/dax2.0/../../align > # ls $(readlink -f /sys/dev/char/251\:5)/../../dax_region/align > /sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0012:00/ndbus0/region2/dax2.1/dax/dax2.0/../../dax_region/align > # lsmod|grep pmem > dax_pmem_compat 16384 0 > device_dax 20480 1 dax_pmem_compat > dax_pmem_core 16384 1 dax_pmem_compat > # lsmod|grep dax > dax_pmem_compat 16384 0 > device_dax 20480 1 dax_pmem_compat > dax_pmem_core 16384 1 dax_pmem_compat > > Seems some configurations are different ? > > Can you share your info as above ? Thanks.
Alternatively maybe you can use libdaxctl that automatically handles the ABI differences between compat-dax-class and dax-bus layouts? I didn't recommend it before because I was not sure about qemu's policy about taking on new library dependencies, but with libdaxctl you could do something like (untested): path = g_strdup_printf("/sys/dev/char/%d:%d", major(st.st_rdev), minor(st.st_rdev)); rpath = realpath(path, NULL); daxctl_region_foreach(ctx, region) if (strstr(daxctl_region_get_path(region), rpath)) { align = daxctl_region_get_align(region); break; }