Hi Frank,

[auto build test ERROR on robh/for-next]
[also build test ERROR on v4.11-rc8 next-20170428]
[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/frowand-list-gmail-com/of-remove-phandle-properties-from-expanded-device-tree/20170426-000149
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: s390-allmodconfig (attached as .config)
compiler: s390x-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=s390 

All errors (new ones prefixed by >>):

   In file included from include/linux/kobject.h:21:0,
                    from include/linux/device.h:17,
                    from include/linux/node.h:17,
                    from include/linux/cpu.h:16,
                    from drivers/of/base.c:25:
   drivers/of/base.c: In function '__of_add_phandle_sysfs':
>> drivers/of/base.c:198:23: error: 'pp' undeclared (first use in this function)
     sysfs_bin_attr_init(&pp->attr);
                          ^
   include/linux/sysfs.h:54:3: note: in definition of macro 'sysfs_attr_init'
     (attr)->key = &__key;    \
      ^~~~
   drivers/of/base.c:198:2: note: in expansion of macro 'sysfs_bin_attr_init'
     sysfs_bin_attr_init(&pp->attr);
     ^~~~~~~~~~~~~~~~~~~
   drivers/of/base.c:198:23: note: each undeclared identifier is reported only 
once for each function it appears in
     sysfs_bin_attr_init(&pp->attr);
                          ^
   include/linux/sysfs.h:54:3: note: in definition of macro 'sysfs_attr_init'
     (attr)->key = &__key;    \
      ^~~~
   drivers/of/base.c:198:2: note: in expansion of macro 'sysfs_bin_attr_init'
     sysfs_bin_attr_init(&pp->attr);
     ^~~~~~~~~~~~~~~~~~~

vim +/pp +198 drivers/of/base.c

    19   */
    20  
    21  #define pr_fmt(fmt)     "OF: " fmt
    22  
    23  #include <linux/console.h>
    24  #include <linux/ctype.h>
  > 25  #include <linux/cpu.h>
    26  #include <linux/module.h>
    27  #include <linux/of.h>
    28  #include <linux/of_device.h>
    29  #include <linux/of_graph.h>
    30  #include <linux/spinlock.h>
    31  #include <linux/slab.h>
    32  #include <linux/string.h>
    33  #include <linux/proc_fs.h>
    34  
    35  #include "of_private.h"
    36  
    37  LIST_HEAD(aliases_lookup);
    38  
    39  struct device_node *of_root;
    40  EXPORT_SYMBOL(of_root);
    41  struct device_node *of_chosen;
    42  struct device_node *of_aliases;
    43  struct device_node *of_stdout;
    44  static const char *of_stdout_options;
    45  
    46  struct kset *of_kset;
    47  
    48  /*
    49   * Used to protect the of_aliases, to hold off addition of nodes to 
sysfs.
    50   * This mutex must be held whenever modifications are being made to the
    51   * device tree. The of_{attach,detach}_node() and
    52   * of_{add,remove,update}_property() helpers make sure this happens.
    53   */
    54  DEFINE_MUTEX(of_mutex);
    55  
    56  /* use when traversing tree through the child, sibling,
    57   * or parent members of struct device_node.
    58   */
    59  DEFINE_RAW_SPINLOCK(devtree_lock);
    60  
    61  int of_n_addr_cells(struct device_node *np)
    62  {
    63          const __be32 *ip;
    64  
    65          do {
    66                  if (np->parent)
    67                          np = np->parent;
    68                  ip = of_get_property(np, "#address-cells", NULL);
    69                  if (ip)
    70                          return be32_to_cpup(ip);
    71          } while (np->parent);
    72          /* No #address-cells property for the root node */
    73          return OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
    74  }
    75  EXPORT_SYMBOL(of_n_addr_cells);
    76  
    77  int of_n_size_cells(struct device_node *np)
    78  {
    79          const __be32 *ip;
    80  
    81          do {
    82                  if (np->parent)
    83                          np = np->parent;
    84                  ip = of_get_property(np, "#size-cells", NULL);
    85                  if (ip)
    86                          return be32_to_cpup(ip);
    87          } while (np->parent);
    88          /* No #size-cells property for the root node */
    89          return OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
    90  }
    91  EXPORT_SYMBOL(of_n_size_cells);
    92  
    93  #ifdef CONFIG_NUMA
    94  int __weak of_node_to_nid(struct device_node *np)
    95  {
    96          return NUMA_NO_NODE;
    97  }
    98  #endif
    99  
   100  #ifndef CONFIG_OF_DYNAMIC
   101  static void of_node_release(struct kobject *kobj)
   102  {
   103          /* Without CONFIG_OF_DYNAMIC, no nodes gets freed */
   104  }
   105  #endif /* CONFIG_OF_DYNAMIC */
   106  
   107  struct kobj_type of_node_ktype = {
   108          .release = of_node_release,
   109  };
   110  
   111  static ssize_t of_node_property_read(struct file *filp, struct kobject 
*kobj,
   112                                  struct bin_attribute *bin_attr, char 
*buf,
   113                                  loff_t offset, size_t count)
   114  {
   115          struct property *pp = container_of(bin_attr, struct property, 
attr);
   116          return memory_read_from_buffer(buf, count, &offset, pp->value, 
pp->length);
   117  }
   118  
   119  static ssize_t of_node_phandle_read(struct file *filp, struct kobject 
*kobj,
   120                                  struct bin_attribute *bin_attr, char 
*buf,
   121                                  loff_t offset, size_t count)
   122  {
   123          phandle phandle;
   124          struct device_node *np;
   125  
   126          np = container_of(bin_attr, struct device_node, attr_phandle);
   127          phandle = cpu_to_be32(np->phandle);
   128          return memory_read_from_buffer(buf, count, &offset, &phandle,
   129                                         sizeof(phandle));
   130  }
   131  
   132  /* always return newly allocated name, caller must free after use */
   133  static const char *safe_name(struct kobject *kobj, const char 
*orig_name)
   134  {
   135          const char *name = orig_name;
   136          struct kernfs_node *kn;
   137          int i = 0;
   138  
   139          /* don't be a hero. After 16 tries give up */
   140          while (i < 16 && (kn = sysfs_get_dirent(kobj->sd, name))) {
   141                  sysfs_put(kn);
   142                  if (name != orig_name)
   143                          kfree(name);
   144                  name = kasprintf(GFP_KERNEL, "%s#%i", orig_name, ++i);
   145          }
   146  
   147          if (name == orig_name) {
   148                  name = kstrdup(orig_name, GFP_KERNEL);
   149          } else {
   150                  pr_warn("Duplicate name in %s, renamed to \"%s\"\n",
   151                          kobject_name(kobj), name);
   152          }
   153          return name;
   154  }
   155  
   156  int __of_add_property_sysfs(struct device_node *np, struct property *pp)
   157  {
   158          int rc;
   159  
   160          /* Important: Don't leak passwords */
   161          bool secure = strncmp(pp->name, "security-", 9) == 0;
   162  
   163          if (!IS_ENABLED(CONFIG_SYSFS))
   164                  return 0;
   165  
   166          if (!of_kset || !of_node_is_attached(np))
   167                  return 0;
   168  
   169          sysfs_bin_attr_init(&pp->attr);
   170          pp->attr.attr.name = safe_name(&np->kobj, pp->name);
   171          pp->attr.attr.mode = secure ? S_IRUSR : S_IRUGO;
   172          pp->attr.size = secure ? 0 : pp->length;
   173          pp->attr.read = of_node_property_read;
   174  
   175          rc = sysfs_create_bin_file(&np->kobj, &pp->attr);
   176          WARN(rc, "error adding attribute %s to node %s\n", pp->name, 
np->full_name);
   177          return rc;
   178  }
   179  
   180  /*
   181   * In the imported device tree (fdt), phandle is a property.  In the
   182   * internal data structure it is instead stored in the struct 
device_node.
   183   * Make phandle visible in sysfs as if it was a property.
   184   */
   185  int __of_add_phandle_sysfs(struct device_node *np)
   186  {
   187          int rc;
   188  
   189          if (!IS_ENABLED(CONFIG_SYSFS))
   190                  return 0;
   191  
   192          if (!of_kset || !of_node_is_attached(np))
   193                  return 0;
   194  
   195          if (!np->phandle || np->phandle == 0xffffffff)
   196                  return 0;
   197  
 > 198          sysfs_bin_attr_init(&pp->attr);
   199          np->attr_phandle.attr.name = "phandle";
   200          np->attr_phandle.attr.mode = 0444;
   201          np->attr_phandle.size = sizeof(np->phandle);

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to