tree:   git://people.freedesktop.org/~gabbayo/linux habanalabs-next
head:   aaebb2539ebbebac78f31df2d6ea9f463a27cb8c
commit: 0778d45ef52dd3b9bc92765de7e7f97a80224a06 [23/24] habanalabs: add new 
IOCTL for debug, tracing and profiling
config: i386-randconfig-x018-201913 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        git checkout 0778d45ef52dd3b9bc92765de7e7f97a80224a06
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   In file included from include/linux/kernel.h:11:0,
                    from include/linux/list.h:9,
                    from include/linux/kobject.h:19,
                    from include/linux/cdev.h:5,
                    from drivers/misc/habanalabs/habanalabs.h:16,
                    from drivers/misc/habanalabs/habanalabs_ioctl.c:9:
   drivers/misc/habanalabs/habanalabs_ioctl.c: In function 'debug_coresight':
   drivers/misc/habanalabs/habanalabs_ioctl.c:149:29: warning: cast to pointer 
from integer of different size [-Wint-to-pointer-cast]
      if (copy_from_user(input, (void __user *)args->input_ptr,
                                ^
   include/linux/compiler.h:58:30: note: in definition of macro '__trace_if'
     if (__builtin_constant_p(!!(cond)) ? !!(cond) :   \
                                 ^~~~
>> drivers/misc/habanalabs/habanalabs_ioctl.c:149:3: note: in expansion of 
>> macro 'if'
      if (copy_from_user(input, (void __user *)args->input_ptr,
      ^~
   drivers/misc/habanalabs/habanalabs_ioctl.c:149:29: warning: cast to pointer 
from integer of different size [-Wint-to-pointer-cast]
      if (copy_from_user(input, (void __user *)args->input_ptr,
                                ^
   include/linux/compiler.h:58:42: note: in definition of macro '__trace_if'
     if (__builtin_constant_p(!!(cond)) ? !!(cond) :   \
                                             ^~~~
>> drivers/misc/habanalabs/habanalabs_ioctl.c:149:3: note: in expansion of 
>> macro 'if'
      if (copy_from_user(input, (void __user *)args->input_ptr,
      ^~
   drivers/misc/habanalabs/habanalabs_ioctl.c:149:29: warning: cast to pointer 
from integer of different size [-Wint-to-pointer-cast]
      if (copy_from_user(input, (void __user *)args->input_ptr,
                                ^
   include/linux/compiler.h:69:16: note: in definition of macro '__trace_if'
      ______r = !!(cond);     \
                   ^~~~
>> drivers/misc/habanalabs/habanalabs_ioctl.c:149:3: note: in expansion of 
>> macro 'if'
      if (copy_from_user(input, (void __user *)args->input_ptr,
      ^~
   drivers/misc/habanalabs/habanalabs_ioctl.c:179:20: warning: cast to pointer 
from integer of different size [-Wint-to-pointer-cast]
      if (copy_to_user((void __user *)args->output_ptr, output,
                       ^
   include/linux/compiler.h:58:30: note: in definition of macro '__trace_if'
     if (__builtin_constant_p(!!(cond)) ? !!(cond) :   \
                                 ^~~~
   drivers/misc/habanalabs/habanalabs_ioctl.c:179:3: note: in expansion of 
macro 'if'
      if (copy_to_user((void __user *)args->output_ptr, output,
      ^~
   drivers/misc/habanalabs/habanalabs_ioctl.c:179:20: warning: cast to pointer 
from integer of different size [-Wint-to-pointer-cast]
      if (copy_to_user((void __user *)args->output_ptr, output,
                       ^
   include/linux/compiler.h:58:42: note: in definition of macro '__trace_if'
     if (__builtin_constant_p(!!(cond)) ? !!(cond) :   \
                                             ^~~~
   drivers/misc/habanalabs/habanalabs_ioctl.c:179:3: note: in expansion of 
macro 'if'
      if (copy_to_user((void __user *)args->output_ptr, output,
      ^~
   drivers/misc/habanalabs/habanalabs_ioctl.c:179:20: warning: cast to pointer 
from integer of different size [-Wint-to-pointer-cast]
      if (copy_to_user((void __user *)args->output_ptr, output,
                       ^
   include/linux/compiler.h:69:16: note: in definition of macro '__trace_if'
      ______r = !!(cond);     \
                   ^~~~
   drivers/misc/habanalabs/habanalabs_ioctl.c:179:3: note: in expansion of 
macro 'if'
      if (copy_to_user((void __user *)args->output_ptr, output,
      ^~

vim +/if +149 drivers/misc/habanalabs/habanalabs_ioctl.c

     2  
     3  /*
     4   * Copyright 2016-2019 HabanaLabs, Ltd.
     5   * All Rights Reserved.
     6   */
     7  
     8  #include <uapi/misc/habanalabs.h>
   > 9  #include "habanalabs.h"
    10  
    11  #include <linux/fs.h>
    12  #include <linux/uaccess.h>
    13  #include <linux/slab.h>
    14  
    15  static u32 hl_debug_struct_size[HL_DEBUG_OP_TIMESTAMP + 1] = {
    16          [HL_DEBUG_OP_ETR] = sizeof(struct hl_debug_params_etr),
    17          [HL_DEBUG_OP_ETF] = sizeof(struct hl_debug_params_etf),
    18          [HL_DEBUG_OP_STM] = sizeof(struct hl_debug_params_stm),
    19          [HL_DEBUG_OP_FUNNEL] = 0,
    20          [HL_DEBUG_OP_BMON] = sizeof(struct hl_debug_params_bmon),
    21          [HL_DEBUG_OP_SPMU] = sizeof(struct hl_debug_params_spmu),
    22          [HL_DEBUG_OP_TIMESTAMP] = 0
    23  
    24  };
    25  
    26  static int device_status_info(struct hl_device *hdev, struct 
hl_info_args *args)
    27  {
    28          struct hl_info_device_status dev_stat = {0};
    29          u32 size = args->return_size;
    30          void __user *out = (void __user *) (uintptr_t) 
args->return_pointer;
    31  
    32          if ((!size) || (!out))
    33                  return -EINVAL;
    34  
    35          dev_stat.status = hl_device_status(hdev);
    36  
    37          return copy_to_user(out, &dev_stat,
    38                          min((size_t)size, sizeof(dev_stat))) ? -EFAULT 
: 0;
    39  }
    40  
    41  static int hw_ip_info(struct hl_device *hdev, struct hl_info_args *args)
    42  {
    43          struct hl_info_hw_ip_info hw_ip = {0};
    44          u32 size = args->return_size;
    45          void __user *out = (void __user *) (uintptr_t) 
args->return_pointer;
    46          struct asic_fixed_properties *prop = &hdev->asic_prop;
    47          u64 sram_kmd_size, dram_kmd_size;
    48  
    49          if ((!size) || (!out))
    50                  return -EINVAL;
    51  
    52          sram_kmd_size = (prop->sram_user_base_address -
    53                                  prop->sram_base_address);
    54          dram_kmd_size = (prop->dram_user_base_address -
    55                                  prop->dram_base_address);
    56  
    57          hw_ip.device_id = hdev->asic_funcs->get_pci_id(hdev);
    58          hw_ip.sram_base_address = prop->sram_user_base_address;
    59          hw_ip.dram_base_address = prop->dram_user_base_address;
    60          hw_ip.tpc_enabled_mask = prop->tpc_enabled_mask;
    61          hw_ip.sram_size = prop->sram_size - sram_kmd_size;
    62          hw_ip.dram_size = prop->dram_size - dram_kmd_size;
    63          if (hw_ip.dram_size > 0)
    64                  hw_ip.dram_enabled = 1;
    65          hw_ip.num_of_events = prop->num_of_events;
    66          memcpy(hw_ip.armcp_version,
    67                  prop->armcp_info.armcp_version, VERSION_MAX_LEN);
    68          hw_ip.armcp_cpld_version = 
__le32_to_cpu(prop->armcp_info.cpld_version);
    69          hw_ip.psoc_pci_pll_nr = prop->psoc_pci_pll_nr;
    70          hw_ip.psoc_pci_pll_nf = prop->psoc_pci_pll_nf;
    71          hw_ip.psoc_pci_pll_od = prop->psoc_pci_pll_od;
    72          hw_ip.psoc_pci_pll_div_factor = prop->psoc_pci_pll_div_factor;
    73  
    74          return copy_to_user(out, &hw_ip,
    75                  min((size_t)size, sizeof(hw_ip))) ? -EFAULT : 0;
    76  }
    77  
    78  static int hw_events_info(struct hl_device *hdev, struct hl_info_args 
*args)
    79  {
    80          u32 size, max_size = args->return_size;
    81          void __user *out = (void __user *) (uintptr_t) 
args->return_pointer;
    82          void *arr;
    83  
    84          if ((!max_size) || (!out))
    85                  return -EINVAL;
    86  
    87          arr = hdev->asic_funcs->get_events_stat(hdev, &size);
    88  
    89          return copy_to_user(out, arr, min(max_size, size)) ? -EFAULT : 
0;
    90  }
    91  
    92  static int dram_usage_info(struct hl_device *hdev, struct hl_info_args 
*args)
    93  {
    94          struct hl_info_dram_usage dram_usage = {0};
    95          u32 max_size = args->return_size;
    96          void __user *out = (void __user *) (uintptr_t) 
args->return_pointer;
    97          struct asic_fixed_properties *prop = &hdev->asic_prop;
    98          u64 dram_kmd_size;
    99  
   100          if ((!max_size) || (!out))
   101                  return -EINVAL;
   102  
   103          dram_kmd_size = (prop->dram_user_base_address -
   104                                  prop->dram_base_address);
   105          dram_usage.dram_free_mem = (prop->dram_size - dram_kmd_size) -
   106                                          
atomic64_read(&hdev->dram_used_mem);
   107          dram_usage.ctx_dram_mem = 
atomic64_read(&hdev->user_ctx->dram_phys_mem);
   108  
   109          return copy_to_user(out, &dram_usage,
   110                  min((size_t) max_size, sizeof(dram_usage))) ? -EFAULT : 
0;
   111  }
   112  
   113  static int hw_idle(struct hl_device *hdev, struct hl_info_args *args)
   114  {
   115          struct hl_info_hw_idle hw_idle = {0};
   116          u32 max_size = args->return_size;
   117          void __user *out = (void __user *) (uintptr_t) 
args->return_pointer;
   118  
   119          if ((!max_size) || (!out))
   120                  return -EINVAL;
   121  
   122          hw_idle.is_idle = hdev->asic_funcs->is_device_idle(hdev, NULL, 
0);
   123  
   124          return copy_to_user(out, &hw_idle,
   125                  min((size_t) max_size, sizeof(hw_idle))) ? -EFAULT : 0;
   126  }
   127  
   128  static int debug_coresight(struct hl_device *hdev, struct hl_debug_args 
*args)
   129  {
   130          struct hl_debug_params *params;
   131          void *input = NULL, *output = NULL;
   132          int rc;
   133  
   134          params = kzalloc(sizeof(*params), GFP_KERNEL);
   135          if (!params)
   136                  return -ENOMEM;
   137  
   138          params->reg_idx = args->reg_idx;
   139          params->enable = args->enable;
   140          params->op = args->op;
   141  
   142          if (args->input_ptr && args->input_size) {
   143                  input = kzalloc(args->input_size, GFP_KERNEL);
   144                  if (!input) {
   145                          rc = -ENOMEM;
   146                          goto out;
   147                  }
   148  
 > 149                  if (copy_from_user(input, (void __user 
 > *)args->input_ptr,
   150                                  args->input_size)) {
   151                          dev_err(hdev->dev,
   152                                  "copy from user failed in debug 
ioctl\n");
   153                          rc = -EFAULT;
   154                          goto out;
   155                  }
   156  
   157                  params->input = input;
   158          }
   159  
   160          if (args->output_ptr && args->output_size) {
   161                  output = kzalloc(args->output_size, GFP_KERNEL);
   162                  if (!output) {
   163                          rc = -ENOMEM;
   164                          goto out;
   165                  }
   166  
   167                  params->output = output;
   168                  params->output_size = args->output_size;
   169          }
   170  
   171          rc = hdev->asic_funcs->debug_coresight(hdev, params);
   172          if (rc) {
   173                  dev_err(hdev->dev,
   174                          "debug coresight operation failed %d\n", rc);
   175                  goto out;
   176          }
   177  
   178          if (output) {
   179                  if (copy_to_user((void __user *)args->output_ptr, 
output,
   180                                  args->output_size)) {
   181                          dev_err(hdev->dev,
   182                                  "copy to user failed in debug ioctl\n");
   183                          rc = -EFAULT;
   184                          goto out;
   185                  }
   186          }
   187  
   188  out:
   189          kfree(params);
   190          kfree(output);
   191          kfree(input);
   192  
   193          return rc;
   194  }
   195  

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

Attachment: .config.gz
Description: application/gzip

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to