Hi Or,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on char-misc/char-misc-testing]
[also build test ERROR on v4.16-rc2 next-20180223]
[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/Or-Idgar/drivers-virt-vm_gen_counter-initial-driver-implementation/20180224-112017
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/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=sh 

All error/warnings (new ones prefixed by >>):

   drivers/misc/vmgenid.c: In function 'generation_id_show':
>> drivers/misc/vmgenid.c:35:10: error: implicit declaration of function 
>> 'acpi_os_map_iomem'; did you mean 'acpi_os_read_iomem'? 
>> [-Werror=implicit-function-declaration]
     uuidp = acpi_os_map_iomem(phy_addr, sizeof(uuid_t));
             ^~~~~~~~~~~~~~~~~
             acpi_os_read_iomem
>> drivers/misc/vmgenid.c:35:8: warning: assignment makes pointer from integer 
>> without a cast [-Wint-conversion]
     uuidp = acpi_os_map_iomem(phy_addr, sizeof(uuid_t));
           ^
>> drivers/misc/vmgenid.c:40:2: error: implicit declaration of function 
>> 'acpi_os_unmap_iomem'; did you mean 'acpi_os_read_iomem'? 
>> [-Werror=implicit-function-declaration]
     acpi_os_unmap_iomem(uuidp, sizeof(uuid_t));
     ^~~~~~~~~~~~~~~~~~~
     acpi_os_read_iomem
   drivers/misc/vmgenid.c: In function 'raw_show':
   drivers/misc/vmgenid.c:51:8: warning: assignment makes pointer from integer 
without a cast [-Wint-conversion]
     uuidp = acpi_os_map_iomem(phy_addr, sizeof(uuid_t));
           ^
   drivers/misc/vmgenid.c: In function 'acpi_vmgenid_add':
>> drivers/misc/vmgenid.c:103:29: error: dereferencing pointer to incomplete 
>> type 'struct acpi_device'
     retval = get_vmgenid(device->handle);
                                ^~
   drivers/misc/vmgenid.c: At top level:
>> drivers/misc/vmgenid.c:115:36: error: array type has incomplete element type 
>> 'struct acpi_device_id'
    static const struct acpi_device_id vmgenid_ids[] = {
                                       ^~~~~~~~~~~
>> drivers/misc/vmgenid.c:120:15: error: variable 'acpi_vmgenid_driver' has 
>> initializer but incomplete type
    static struct acpi_driver acpi_vmgenid_driver = {
                  ^~~~~~~~~~~
>> drivers/misc/vmgenid.c:121:3: error: 'struct acpi_driver' has no member 
>> named 'name'
     .name = "vm_gen_counter",
      ^~~~
>> drivers/misc/vmgenid.c:121:10: warning: excess elements in struct initializer
     .name = "vm_gen_counter",
             ^~~~~~~~~~~~~~~~
   drivers/misc/vmgenid.c:121:10: note: (near initialization for 
'acpi_vmgenid_driver')
>> drivers/misc/vmgenid.c:122:3: error: 'struct acpi_driver' has no member 
>> named 'ids'
     .ids = vmgenid_ids,
      ^~~
   drivers/misc/vmgenid.c:122:9: warning: excess elements in struct initializer
     .ids = vmgenid_ids,
            ^~~~~~~~~~~
   drivers/misc/vmgenid.c:122:9: note: (near initialization for 
'acpi_vmgenid_driver')
>> drivers/misc/vmgenid.c:123:3: error: 'struct acpi_driver' has no member 
>> named 'owner'
     .owner = THIS_MODULE,
      ^~~~~
   In file included from include/linux/linkage.h:7:0,
                    from include/linux/kernel.h:7,
                    from include/linux/list.h:9,
                    from include/linux/module.h:9,
                    from drivers/misc/vmgenid.c:14:
   include/linux/export.h:35:21: warning: excess elements in struct initializer
    #define THIS_MODULE (&__this_module)
                        ^
>> drivers/misc/vmgenid.c:123:11: note: in expansion of macro 'THIS_MODULE'
     .owner = THIS_MODULE,
              ^~~~~~~~~~~
   include/linux/export.h:35:21: note: (near initialization for 
'acpi_vmgenid_driver')
    #define THIS_MODULE (&__this_module)
                        ^
>> drivers/misc/vmgenid.c:123:11: note: in expansion of macro 'THIS_MODULE'
     .owner = THIS_MODULE,
              ^~~~~~~~~~~
>> drivers/misc/vmgenid.c:124:3: error: 'struct acpi_driver' has no member 
>> named 'ops'
     .ops = {
      ^~~
>> drivers/misc/vmgenid.c:124:9: error: extra brace group at end of initializer
     .ops = {
            ^
   drivers/misc/vmgenid.c:124:9: note: (near initialization for 
'acpi_vmgenid_driver')
   drivers/misc/vmgenid.c:124:9: warning: excess elements in struct initializer
   drivers/misc/vmgenid.c:124:9: note: (near initialization for 
'acpi_vmgenid_driver')
   drivers/misc/vmgenid.c: In function 'vmgenid_init':
>> drivers/misc/vmgenid.c:132:9: error: implicit declaration of function 
>> 'acpi_bus_register_driver'; did you mean 'acpi_nvs_register'? 
>> [-Werror=implicit-function-declaration]
     return acpi_bus_register_driver(&acpi_vmgenid_driver);
            ^~~~~~~~~~~~~~~~~~~~~~~~
            acpi_nvs_register
   drivers/misc/vmgenid.c: In function 'vmgenid_exit':
>> drivers/misc/vmgenid.c:137:2: error: implicit declaration of function 
>> 'acpi_bus_unregister_driver'; did you mean 'bus_unregister_notifier'? 
>> [-Werror=implicit-function-declaration]
     acpi_bus_unregister_driver(&acpi_vmgenid_driver);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~
     bus_unregister_notifier
   drivers/misc/vmgenid.c: At top level:
>> drivers/misc/vmgenid.c:120:27: error: storage size of 'acpi_vmgenid_driver' 
>> isn't known
    static struct acpi_driver acpi_vmgenid_driver = {
                              ^~~~~~~~~~~~~~~~~~~
   drivers/misc/vmgenid.c:115:36: warning: 'vmgenid_ids' defined but not used 
[-Wunused-variable]
    static const struct acpi_device_id vmgenid_ids[] = {
                                       ^~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +35 drivers/misc/vmgenid.c

  > 14  #include <linux/module.h>
    15  #include <linux/kernel.h>
    16  #include <linux/acpi.h>
    17  #include <linux/uuid.h>
    18  
    19  MODULE_LICENSE("GPL");
    20  MODULE_AUTHOR("Or Idgar <orid...@gmail.com>");
    21  MODULE_AUTHOR("Gal Hammer <gham...@redhat.com>");
    22  MODULE_DESCRIPTION("Virtual Machine Generation ID");
    23  MODULE_VERSION("0.1");
    24  
    25  ACPI_MODULE_NAME("vmgenid");
    26  
    27  static u64 phy_addr;
    28  
    29  static ssize_t generation_id_show(struct device *_d,
    30                                struct device_attribute *attr, char *buf)
    31  {
    32          uuid_t *uuidp;
    33          ssize_t result;
    34  
  > 35          uuidp = acpi_os_map_iomem(phy_addr, sizeof(uuid_t));
    36          if (!uuidp)
    37                  return -EFAULT;
    38  
    39          result = sprintf(buf, "%pUl\n", uuidp);
  > 40          acpi_os_unmap_iomem(uuidp, sizeof(uuid_t));
    41          return result;
    42  }
    43  static DEVICE_ATTR_RO(generation_id);
    44  
    45  static ssize_t raw_show(struct device *_d,
    46                          struct device_attribute *attr,
    47                                char *buf)
    48  {
    49          uuid_t *uuidp;
    50  
  > 51          uuidp = acpi_os_map_iomem(phy_addr, sizeof(uuid_t));
    52          if (!uuidp)
    53                  return -EFAULT;
    54          memcpy(buf, uuidp, sizeof(uuid_t));
    55          acpi_os_unmap_iomem(uuidp, sizeof(uuid_t));
    56          return sizeof(uuid_t);
    57  }
    58  static DEVICE_ATTR_RO(raw);
    59  
    60  static struct attribute *vmgenid_attrs[] = {
    61          &dev_attr_generation_id.attr,
    62          &dev_attr_raw.attr,
    63          NULL,
    64  };
    65  static const struct attribute_group vmgenid_group = {
    66          .name = "vm_gen_counter",
    67          .attrs = vmgenid_attrs,
    68  };
    69  
    70  static int get_vmgenid(acpi_handle handle)
    71  {
    72          int i;
    73          struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
    74          acpi_status status;
    75          union acpi_object *pss;
    76          union acpi_object *element;
    77  
    78          status = acpi_evaluate_object(handle, "ADDR", NULL, &buffer);
    79          if (ACPI_FAILURE(status)) {
    80                  ACPI_EXCEPTION((AE_INFO, status, "Evaluating _ADDR"));
    81                  return -ENODEV;
    82          }
    83          pss = buffer.pointer;
    84          if (!pss || pss->type != ACPI_TYPE_PACKAGE || 
pss->package.count != 2)
    85                  return -EFAULT;
    86  
    87          phy_addr = 0;
    88          for (i = 0; i < pss->package.count; i++) {
    89                  element = &(pss->package.elements[i]);
    90                  if (element->type != ACPI_TYPE_INTEGER)
    91                          return -EFAULT;
    92                  phy_addr |= element->integer.value << i*32;
    93          }
    94          return 0;
    95  }
    96  
    97  static int acpi_vmgenid_add(struct acpi_device *device)
    98  {
    99          int retval;
   100  
   101          if (!device)
   102                  return -EINVAL;
 > 103          retval = get_vmgenid(device->handle);
   104          if (retval < 0)
   105                  return retval;
   106          return sysfs_create_group(hypervisor_kobj, &vmgenid_group);
   107  }
   108  
   109  static int acpi_vmgenid_remove(struct acpi_device *device)
   110  {
   111          sysfs_remove_group(hypervisor_kobj, &vmgenid_group);
   112          return 0;
   113  }
   114  
 > 115  static const struct acpi_device_id vmgenid_ids[] = {
   116          {"QEMUVGID", 0},
   117          {"", 0},
   118  };
   119  
 > 120  static struct acpi_driver acpi_vmgenid_driver = {
 > 121          .name = "vm_gen_counter",
 > 122          .ids = vmgenid_ids,
 > 123          .owner = THIS_MODULE,
 > 124          .ops = {
   125                  .add = acpi_vmgenid_add,
   126                  .remove = acpi_vmgenid_remove,
   127          }
   128  };
   129  
   130  static int __init vmgenid_init(void)
   131  {
 > 132          return acpi_bus_register_driver(&acpi_vmgenid_driver);
   133  }
   134  
   135  static void __exit vmgenid_exit(void)
   136  {
 > 137          acpi_bus_unregister_driver(&acpi_vmgenid_driver);
   138  }
   139  

---
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