On Tue, Aug 15, 2017 at 4:02 PM, kbuild test robot <l...@intel.com> wrote: > Hi Oliver, > > [auto build test ERROR on linux-nvdimm/libnvdimm-for-next] > [also build test ERROR on v4.13-rc5 next-20170811] > [if your patch is applied to the wrong git tree, please drop us a note to > help improve the system] > > url: > https://github.com/0day-ci/linux/commits/Dan-Williams/libnvdimm-export-supported-page-size-alignments/20170815-105258 > base: https://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm.git > libnvdimm-for-next > config: powerpc-allmodconfig (attached as .config) > compiler: powerpc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705 > reproduce: > wget > https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O > ~/bin/make.cross > chmod +x ~/bin/make.cross > # save the attached .config to linux build tree > make.cross ARCH=powerpc > > All error/warnings (new ones prefixed by >>): > > In file included from include/linux/mm.h:446:0, > from include/linux/memremap.h:3, > from drivers//nvdimm/pfn_devs.c:13: > drivers//nvdimm/pfn_devs.c: In function 'nd_pfn_supported_alignments': >>> include/linux/huge_mm.h:83:24: error: initializer element is not constant > #define HPAGE_PMD_SIZE ((1UL) << HPAGE_PMD_SHIFT) > ^ >>> drivers//nvdimm/pfn_devs.c:123:3: note: in expansion of macro >>> 'HPAGE_PMD_SIZE' > HPAGE_PMD_SIZE, > ^~~~~~~~~~~~~~ > include/linux/huge_mm.h:83:24: note: (near initialization for > 'supported_alignments[1]') > #define HPAGE_PMD_SIZE ((1UL) << HPAGE_PMD_SHIFT) > ^ >>> drivers//nvdimm/pfn_devs.c:123:3: note: in expansion of macro >>> 'HPAGE_PMD_SIZE' > HPAGE_PMD_SIZE, > ^~~~~~~~~~~~~~ > -- > In file included from include/linux/mm.h:446:0, > from include/linux/memremap.h:3, > from drivers/nvdimm/pfn_devs.c:13: > drivers/nvdimm/pfn_devs.c: In function 'nd_pfn_supported_alignments': >>> include/linux/huge_mm.h:83:24: error: initializer element is not constant > #define HPAGE_PMD_SIZE ((1UL) << HPAGE_PMD_SHIFT) > ^ > drivers/nvdimm/pfn_devs.c:123:3: note: in expansion of macro > 'HPAGE_PMD_SIZE' > HPAGE_PMD_SIZE, > ^~~~~~~~~~~~~~ > include/linux/huge_mm.h:83:24: note: (near initialization for > 'supported_alignments[1]') > #define HPAGE_PMD_SIZE ((1UL) << HPAGE_PMD_SHIFT) > ^ > drivers/nvdimm/pfn_devs.c:123:3: note: in expansion of macro > 'HPAGE_PMD_SIZE' > HPAGE_PMD_SIZE, > ^~~~~~~~~~~~~~ > > vim +/HPAGE_PMD_SIZE +123 drivers//nvdimm/pfn_devs.c > > > 13 #include <linux/memremap.h> > 14 #include <linux/blkdev.h> > 15 #include <linux/device.h> > 16 #include <linux/genhd.h> > 17 #include <linux/sizes.h> > 18 #include <linux/slab.h> > 19 #include <linux/fs.h> > 20 #include <linux/mm.h> > 21 #include "nd-core.h" > 22 #include "pfn.h" > 23 #include "nd.h" > 24 > 25 static void nd_pfn_release(struct device *dev) > 26 { > 27 struct nd_region *nd_region = to_nd_region(dev->parent); > 28 struct nd_pfn *nd_pfn = to_nd_pfn(dev); > 29 > 30 dev_dbg(dev, "%s\n", __func__); > 31 nd_detach_ndns(&nd_pfn->dev, &nd_pfn->ndns); > 32 ida_simple_remove(&nd_region->pfn_ida, nd_pfn->id); > 33 kfree(nd_pfn->uuid); > 34 kfree(nd_pfn); > 35 } > 36 > 37 static struct device_type nd_pfn_device_type = { > 38 .name = "nd_pfn", > 39 .release = nd_pfn_release, > 40 }; > 41 > 42 bool is_nd_pfn(struct device *dev) > 43 { > 44 return dev ? dev->type == &nd_pfn_device_type : false; > 45 } > 46 EXPORT_SYMBOL(is_nd_pfn); > 47 > 48 struct nd_pfn *to_nd_pfn(struct device *dev) > 49 { > 50 struct nd_pfn *nd_pfn = container_of(dev, struct nd_pfn, dev); > 51 > 52 WARN_ON(!is_nd_pfn(dev)); > 53 return nd_pfn; > 54 } > 55 EXPORT_SYMBOL(to_nd_pfn); > 56 > 57 static ssize_t mode_show(struct device *dev, > 58 struct device_attribute *attr, char *buf) > 59 { > 60 struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev); > 61 > 62 switch (nd_pfn->mode) { > 63 case PFN_MODE_RAM: > 64 return sprintf(buf, "ram\n"); > 65 case PFN_MODE_PMEM: > 66 return sprintf(buf, "pmem\n"); > 67 default: > 68 return sprintf(buf, "none\n"); > 69 } > 70 } > 71 > 72 static ssize_t mode_store(struct device *dev, > 73 struct device_attribute *attr, const char *buf, > size_t len) > 74 { > 75 struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev); > 76 ssize_t rc = 0; > 77 > 78 device_lock(dev); > 79 nvdimm_bus_lock(dev); > 80 if (dev->driver) > 81 rc = -EBUSY; > 82 else { > 83 size_t n = len - 1; > 84 > 85 if (strncmp(buf, "pmem\n", n) == 0 > 86 || strncmp(buf, "pmem", n) == 0) { > 87 nd_pfn->mode = PFN_MODE_PMEM; > 88 } else if (strncmp(buf, "ram\n", n) == 0 > 89 || strncmp(buf, "ram", n) == 0) > 90 nd_pfn->mode = PFN_MODE_RAM; > 91 else if (strncmp(buf, "none\n", n) == 0 > 92 || strncmp(buf, "none", n) == 0) > 93 nd_pfn->mode = PFN_MODE_NONE; > 94 else > 95 rc = -EINVAL; > 96 } > 97 dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__, > 98 rc, buf, buf[len - 1] == '\n' ? "" : "\n"); > 99 nvdimm_bus_unlock(dev); > 100 device_unlock(dev); > 101 > 102 return rc ? rc : len; > 103 } > 104 static DEVICE_ATTR_RW(mode); > 105 > 106 static ssize_t align_show(struct device *dev, > 107 struct device_attribute *attr, char *buf) > 108 { > 109 struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev); > 110 > 111 return sprintf(buf, "%ld\n", nd_pfn->align); > 112 } > 113 > 114 static const unsigned long *nd_pfn_supported_alignments(void) > 115 { > 116 /* > 117 * This needs to be a local variable because the *_SIZE macros > 118 * aren't always constants. > 119 */
I probably should have been clearer, "local" here really means "non-static". Otherwise the array could have been made a global. > 120 static const unsigned long supported_alignments[] = { > 121 PAGE_SIZE, > 122 #ifdef CONFIG_TRANSPARENT_HUGEPAGE > > 123 HPAGE_PMD_SIZE, > 124 #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD > 125 HPAGE_PUD_SIZE, > 126 #endif > 127 #endif > 128 0, > 129 }; > 130 > 131 return supported_alignments; > 132 } > 133 > > --- > 0-DAY kernel test infrastructure Open Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation _______________________________________________ Linux-nvdimm mailing list Linux-nvdimm@lists.01.org https://lists.01.org/mailman/listinfo/linux-nvdimm