tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   0644f186fc9d77bb5bd198369e59fb28927a3692
commit: 25d47027e1003546bfd8964b4423cb39bc2d53e9 platform/x86: dell-smbios: 
Link all dell-smbios-* modules together
date:   7 weeks ago
config: x86_64-randconfig-b0-04271930 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        git checkout 25d47027e1003546bfd8964b4423cb39bc2d53e9
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/platform/x86/dell-smbios-wmi.o: In function `run_smbios_call':
>> drivers/platform/x86/dell-smbios-wmi.c:66: undefined reference to 
>> `wmidev_evaluate_method'
   drivers/platform/x86/dell-smbios-wmi.o: In function `dell_smbios_wmi_probe':
>> drivers/platform/x86/dell-smbios-wmi.c:157: undefined reference to 
>> `dell_wmi_get_descriptor_valid'
>> drivers/platform/x86/dell-smbios-wmi.c:167: undefined reference to 
>> `dell_wmi_get_size'
>> drivers/platform/x86/dell-smbios-wmi.c:171: undefined reference to 
>> `dell_wmi_get_hotfix'
>> drivers/platform/x86/dell-smbios-wmi.c:182: undefined reference to 
>> `set_required_buffer_size'
   drivers/platform/x86/dell-smbios-wmi.o: In function `init_dell_smbios_wmi':
>> drivers/platform/x86/dell-smbios-wmi.c:271: undefined reference to 
>> `__wmi_driver_register'
   drivers/platform/x86/dell-smbios-wmi.o: In function `exit_dell_smbios_wmi':
>> drivers/platform/x86/dell-smbios-wmi.c:276: undefined reference to 
>> `wmi_driver_unregister'

vim +66 drivers/platform/x86/dell-smbios-wmi.c

1a258e67 Mario Limonciello 2017-11-01   48  
1a258e67 Mario Limonciello 2017-11-01   49  static int run_smbios_call(struct 
wmi_device *wdev)
1a258e67 Mario Limonciello 2017-11-01   50  {
1a258e67 Mario Limonciello 2017-11-01   51      struct acpi_buffer output = 
{ACPI_ALLOCATE_BUFFER, NULL};
1a258e67 Mario Limonciello 2017-11-01   52      struct wmi_smbios_priv *priv;
1a258e67 Mario Limonciello 2017-11-01   53      struct acpi_buffer input;
1a258e67 Mario Limonciello 2017-11-01   54      union acpi_object *obj;
1a258e67 Mario Limonciello 2017-11-01   55      acpi_status status;
1a258e67 Mario Limonciello 2017-11-01   56  
1a258e67 Mario Limonciello 2017-11-01   57      priv = 
dev_get_drvdata(&wdev->dev);
1a258e67 Mario Limonciello 2017-11-01   58      input.length = 
priv->req_buf_size - sizeof(u64);
1a258e67 Mario Limonciello 2017-11-01   59      input.pointer = &priv->buf->std;
1a258e67 Mario Limonciello 2017-11-01   60  
1a258e67 Mario Limonciello 2017-11-01   61      dev_dbg(&wdev->dev, 
"evaluating: %u/%u [%x,%x,%x,%x]\n",
1a258e67 Mario Limonciello 2017-11-01   62              
priv->buf->std.cmd_class, priv->buf->std.cmd_select,
1a258e67 Mario Limonciello 2017-11-01   63              
priv->buf->std.input[0], priv->buf->std.input[1],
1a258e67 Mario Limonciello 2017-11-01   64              
priv->buf->std.input[2], priv->buf->std.input[3]);
1a258e67 Mario Limonciello 2017-11-01   65  
1a258e67 Mario Limonciello 2017-11-01  @66      status = 
wmidev_evaluate_method(wdev, 0, 1, &input, &output);
1a258e67 Mario Limonciello 2017-11-01   67      if (ACPI_FAILURE(status))
1a258e67 Mario Limonciello 2017-11-01   68              return -EIO;
1a258e67 Mario Limonciello 2017-11-01   69      obj = (union acpi_object 
*)output.pointer;
1a258e67 Mario Limonciello 2017-11-01   70      if (obj->type != 
ACPI_TYPE_BUFFER) {
1a258e67 Mario Limonciello 2017-11-01   71              dev_dbg(&wdev->dev, 
"received type: %d\n", obj->type);
1a258e67 Mario Limonciello 2017-11-01   72              if (obj->type == 
ACPI_TYPE_INTEGER)
1a258e67 Mario Limonciello 2017-11-01   73                      
dev_dbg(&wdev->dev, "SMBIOS call failed: %llu\n",
1a258e67 Mario Limonciello 2017-11-01   74                              
obj->integer.value);
1a258e67 Mario Limonciello 2017-11-01   75              return -EIO;
1a258e67 Mario Limonciello 2017-11-01   76      }
1a258e67 Mario Limonciello 2017-11-01   77      memcpy(&priv->buf->std, 
obj->buffer.pointer, obj->buffer.length);
1a258e67 Mario Limonciello 2017-11-01   78      dev_dbg(&wdev->dev, "result: 
[%08x,%08x,%08x,%08x]\n",
1a258e67 Mario Limonciello 2017-11-01   79              
priv->buf->std.output[0], priv->buf->std.output[1],
1a258e67 Mario Limonciello 2017-11-01   80              
priv->buf->std.output[2], priv->buf->std.output[3]);
1a258e67 Mario Limonciello 2017-11-01   81  
1a258e67 Mario Limonciello 2017-11-01   82      return 0;
1a258e67 Mario Limonciello 2017-11-01   83  }
1a258e67 Mario Limonciello 2017-11-01   84  
1a258e67 Mario Limonciello 2017-11-01   85  int dell_smbios_wmi_call(struct 
calling_interface_buffer *buffer)
1a258e67 Mario Limonciello 2017-11-01   86  {
1a258e67 Mario Limonciello 2017-11-01   87      struct wmi_smbios_priv *priv;
1a258e67 Mario Limonciello 2017-11-01   88      size_t difference;
1a258e67 Mario Limonciello 2017-11-01   89      size_t size;
1a258e67 Mario Limonciello 2017-11-01   90      int ret;
1a258e67 Mario Limonciello 2017-11-01   91  
1a258e67 Mario Limonciello 2017-11-01   92      mutex_lock(&call_mutex);
1a258e67 Mario Limonciello 2017-11-01   93      priv = get_first_smbios_priv();
307ab2a9 Mario Limonciello 2017-11-05   94      if (!priv) {
307ab2a9 Mario Limonciello 2017-11-05   95              ret = -ENODEV;
307ab2a9 Mario Limonciello 2017-11-05   96              goto out_wmi_call;
307ab2a9 Mario Limonciello 2017-11-05   97      }
1a258e67 Mario Limonciello 2017-11-01   98  
1a258e67 Mario Limonciello 2017-11-01   99      size = sizeof(struct 
calling_interface_buffer);
1a258e67 Mario Limonciello 2017-11-01  100      difference = priv->req_buf_size 
- sizeof(u64) - size;
1a258e67 Mario Limonciello 2017-11-01  101  
1a258e67 Mario Limonciello 2017-11-01  102      memset(&priv->buf->ext, 0, 
difference);
1a258e67 Mario Limonciello 2017-11-01  103      memcpy(&priv->buf->std, buffer, 
size);
1a258e67 Mario Limonciello 2017-11-01  104      ret = 
run_smbios_call(priv->wdev);
1a258e67 Mario Limonciello 2017-11-01  105      memcpy(buffer, &priv->buf->std, 
size);
307ab2a9 Mario Limonciello 2017-11-05  106  out_wmi_call:
1a258e67 Mario Limonciello 2017-11-01  107      mutex_unlock(&call_mutex);
1a258e67 Mario Limonciello 2017-11-01  108  
1a258e67 Mario Limonciello 2017-11-01  109      return ret;
1a258e67 Mario Limonciello 2017-11-01  110  }
1a258e67 Mario Limonciello 2017-11-01  111  
f2645fa3 Mario Limonciello 2017-11-01  112  static long 
dell_smbios_wmi_filter(struct wmi_device *wdev, unsigned int cmd,
f2645fa3 Mario Limonciello 2017-11-01  113                                 
struct wmi_ioctl_buffer *arg)
f2645fa3 Mario Limonciello 2017-11-01  114  {
f2645fa3 Mario Limonciello 2017-11-01  115      struct wmi_smbios_priv *priv;
f2645fa3 Mario Limonciello 2017-11-01  116      int ret = 0;
f2645fa3 Mario Limonciello 2017-11-01  117  
f2645fa3 Mario Limonciello 2017-11-01  118      switch (cmd) {
f2645fa3 Mario Limonciello 2017-11-01  119      case DELL_WMI_SMBIOS_CMD:
f2645fa3 Mario Limonciello 2017-11-01  120              mutex_lock(&call_mutex);
f2645fa3 Mario Limonciello 2017-11-01  121              priv = 
dev_get_drvdata(&wdev->dev);
f2645fa3 Mario Limonciello 2017-11-01  122              if (!priv) {
f2645fa3 Mario Limonciello 2017-11-01  123                      ret = -ENODEV;
f2645fa3 Mario Limonciello 2017-11-01  124                      goto 
fail_smbios_cmd;
f2645fa3 Mario Limonciello 2017-11-01  125              }
f2645fa3 Mario Limonciello 2017-11-01  126              memcpy(priv->buf, arg, 
priv->req_buf_size);
f2645fa3 Mario Limonciello 2017-11-01  127              if 
(dell_smbios_call_filter(&wdev->dev, &priv->buf->std)) {
f2645fa3 Mario Limonciello 2017-11-01  128                      
dev_err(&wdev->dev, "Invalid call %d/%d:%8x\n",
f2645fa3 Mario Limonciello 2017-11-01  129                              
priv->buf->std.cmd_class,
f2645fa3 Mario Limonciello 2017-11-01  130                              
priv->buf->std.cmd_select,
f2645fa3 Mario Limonciello 2017-11-01  131                              
priv->buf->std.input[0]);
f2645fa3 Mario Limonciello 2017-11-01  132                      ret = -EFAULT;
f2645fa3 Mario Limonciello 2017-11-01  133                      goto 
fail_smbios_cmd;
f2645fa3 Mario Limonciello 2017-11-01  134              }
f2645fa3 Mario Limonciello 2017-11-01  135              ret = 
run_smbios_call(priv->wdev);
f2645fa3 Mario Limonciello 2017-11-01  136              if (ret)
f2645fa3 Mario Limonciello 2017-11-01  137                      goto 
fail_smbios_cmd;
f2645fa3 Mario Limonciello 2017-11-01  138              memcpy(arg, priv->buf, 
priv->req_buf_size);
f2645fa3 Mario Limonciello 2017-11-01  139  fail_smbios_cmd:
f2645fa3 Mario Limonciello 2017-11-01  140              
mutex_unlock(&call_mutex);
f2645fa3 Mario Limonciello 2017-11-01  141              break;
f2645fa3 Mario Limonciello 2017-11-01  142      default:
f2645fa3 Mario Limonciello 2017-11-01  143              ret = -ENOIOCTLCMD;
f2645fa3 Mario Limonciello 2017-11-01  144      }
f2645fa3 Mario Limonciello 2017-11-01  145      return ret;
f2645fa3 Mario Limonciello 2017-11-01  146  }
f2645fa3 Mario Limonciello 2017-11-01  147  
1a258e67 Mario Limonciello 2017-11-01  148  static int 
dell_smbios_wmi_probe(struct wmi_device *wdev)
1a258e67 Mario Limonciello 2017-11-01  149  {
4255c30f Mario Limonciello 2017-11-16  150      struct wmi_driver *wdriver =
4255c30f Mario Limonciello 2017-11-16  151              
container_of(wdev->dev.driver, struct wmi_driver, driver);
1a258e67 Mario Limonciello 2017-11-01  152      struct wmi_smbios_priv *priv;
4255c30f Mario Limonciello 2017-11-16  153      u32 hotfix;
1a258e67 Mario Limonciello 2017-11-01  154      int count;
1a258e67 Mario Limonciello 2017-11-01  155      int ret;
1a258e67 Mario Limonciello 2017-11-01  156  
868b8d33 Mario Limonciello 2017-11-09 @157      ret = 
dell_wmi_get_descriptor_valid();
868b8d33 Mario Limonciello 2017-11-09  158      if (ret)
868b8d33 Mario Limonciello 2017-11-09  159              return ret;
1a258e67 Mario Limonciello 2017-11-01  160  
1a258e67 Mario Limonciello 2017-11-01  161      priv = devm_kzalloc(&wdev->dev, 
sizeof(struct wmi_smbios_priv),
1a258e67 Mario Limonciello 2017-11-01  162                          GFP_KERNEL);
1a258e67 Mario Limonciello 2017-11-01  163      if (!priv)
1a258e67 Mario Limonciello 2017-11-01  164              return -ENOMEM;
1a258e67 Mario Limonciello 2017-11-01  165  
1a258e67 Mario Limonciello 2017-11-01  166      /* WMI buffer size will be 
either 4k or 32k depending on machine */
1a258e67 Mario Limonciello 2017-11-01 @167      if 
(!dell_wmi_get_size(&priv->req_buf_size))
1a258e67 Mario Limonciello 2017-11-01  168              return -EPROBE_DEFER;
1a258e67 Mario Limonciello 2017-11-01  169  
4255c30f Mario Limonciello 2017-11-16  170      /* some SMBIOS calls fail 
unless BIOS contains hotfix */
4255c30f Mario Limonciello 2017-11-16 @171      if 
(!dell_wmi_get_hotfix(&hotfix))
4255c30f Mario Limonciello 2017-11-16  172              return -EPROBE_DEFER;
4255c30f Mario Limonciello 2017-11-16  173      if (!hotfix) {
4255c30f Mario Limonciello 2017-11-16  174              dev_warn(&wdev->dev,
4255c30f Mario Limonciello 2017-11-16  175                      "WMI SMBIOS 
userspace interface not supported(%u), try upgrading to a newer BIOS\n",
4255c30f Mario Limonciello 2017-11-16  176                      hotfix);
4255c30f Mario Limonciello 2017-11-16  177              
wdriver->filter_callback = NULL;
4255c30f Mario Limonciello 2017-11-16  178      }
4255c30f Mario Limonciello 2017-11-16  179  
f2645fa3 Mario Limonciello 2017-11-01  180      /* add in the length object we 
will use internally with ioctl */
f2645fa3 Mario Limonciello 2017-11-01  181      priv->req_buf_size += 
sizeof(u64);
f2645fa3 Mario Limonciello 2017-11-01 @182      ret = 
set_required_buffer_size(wdev, priv->req_buf_size);
f2645fa3 Mario Limonciello 2017-11-01  183      if (ret)
f2645fa3 Mario Limonciello 2017-11-01  184              return ret;
f2645fa3 Mario Limonciello 2017-11-01  185  
1a258e67 Mario Limonciello 2017-11-01  186      count = 
get_order(priv->req_buf_size);
1a258e67 Mario Limonciello 2017-11-01  187      priv->buf = (void 
*)__get_free_pages(GFP_KERNEL, count);
1a258e67 Mario Limonciello 2017-11-01  188      if (!priv->buf)
1a258e67 Mario Limonciello 2017-11-01  189              return -ENOMEM;
1a258e67 Mario Limonciello 2017-11-01  190  
1a258e67 Mario Limonciello 2017-11-01  191      /* ID is used by dell-smbios to 
set priority of drivers */
1a258e67 Mario Limonciello 2017-11-01  192      wdev->dev.id = 1;
1a258e67 Mario Limonciello 2017-11-01  193      ret = 
dell_smbios_register_device(&wdev->dev, &dell_smbios_wmi_call);
1a258e67 Mario Limonciello 2017-11-01  194      if (ret)
1a258e67 Mario Limonciello 2017-11-01  195              goto fail_register;
1a258e67 Mario Limonciello 2017-11-01  196  
1a258e67 Mario Limonciello 2017-11-01  197      priv->wdev = wdev;
1a258e67 Mario Limonciello 2017-11-01  198      dev_set_drvdata(&wdev->dev, 
priv);
1a258e67 Mario Limonciello 2017-11-01  199      mutex_lock(&list_mutex);
1a258e67 Mario Limonciello 2017-11-01  200      list_add_tail(&priv->list, 
&wmi_list);
1a258e67 Mario Limonciello 2017-11-01  201      mutex_unlock(&list_mutex);
1a258e67 Mario Limonciello 2017-11-01  202  
1a258e67 Mario Limonciello 2017-11-01  203      return 0;
1a258e67 Mario Limonciello 2017-11-01  204  
1a258e67 Mario Limonciello 2017-11-01  205  fail_register:
1a258e67 Mario Limonciello 2017-11-01  206      free_pages((unsigned 
long)priv->buf, count);
1a258e67 Mario Limonciello 2017-11-01  207      return ret;
1a258e67 Mario Limonciello 2017-11-01  208  }
1a258e67 Mario Limonciello 2017-11-01  209  

:::::: The code at line 66 was first introduced by commit
:::::: 1a258e670434f404a4500b65ba1afea2c2b29bba platform/x86: dell-smbios-wmi: 
Add new WMI dispatcher driver

:::::: TO: Mario Limonciello <[email protected]>
:::::: CC: Darren Hart (VMware) <[email protected]>

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