CC: [email protected]
CC: [email protected]
TO: Martin Krastev <[email protected]>
CC: Zack Rusin <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   1c52283265a462a100ae63ddf58b4e5884acde86
commit: 7a7a933edd6c3a6d5d64e08093f2d564104cefcd drm/vmwgfx: Introduce VMware 
mks-guest-stats
date:   8 months ago
:::::: branch date: 11 hours ago
:::::: commit date: 8 months ago
compiler: aarch64-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


cppcheck possible warnings: (new ones prefixed by >>, may not real problems)

>> drivers/message/fusion/mptbase.c:2888:3: warning: Variable 'i' is modified 
>> but its new value is never used. [unreadVariable]
     i++;
     ^
>> drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:1024:37: warning: Uninitialized 
>> variable: pdesc [uninitvar]
    struct page *pages_stat[ARRAY_SIZE(pdesc->statPPNs)];
                                       ^
   drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:1025:37: warning: Uninitialized 
variable: pdesc [uninitvar]
    struct page *pages_info[ARRAY_SIZE(pdesc->infoPPNs)];
                                       ^
   drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:1026:37: warning: Uninitialized 
variable: pdesc [uninitvar]
    struct page *pages_strs[ARRAY_SIZE(pdesc->strsPPNs)];
                                       ^
   drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:1040:34: warning: Uninitialized 
variable: pdesc [uninitvar]
    if (num_pages_stat > ARRAY_SIZE(pdesc->statPPNs) ||
                                    ^

vim +1024 drivers/gpu/drm/vmwgfx/vmwgfx_msg.c

7a7a933edd6c3a Martin Krastev 2021-06-09   993  
7a7a933edd6c3a Martin Krastev 2021-06-09   994  /**
7a7a933edd6c3a Martin Krastev 2021-06-09   995   * vmw_mksstat_add_ioctl: 
Creates a single userspace-originating mksGuestStat
7a7a933edd6c3a Martin Krastev 2021-06-09   996   * instance descriptor and 
registers that with the hypervisor.
7a7a933edd6c3a Martin Krastev 2021-06-09   997   *
7a7a933edd6c3a Martin Krastev 2021-06-09   998   * Create a hypervisor PFN 
mapping, containing a single mksGuestStat instance
7a7a933edd6c3a Martin Krastev 2021-06-09   999   * descriptor and pin the 
corresponding userspace pages.
7a7a933edd6c3a Martin Krastev 2021-06-09  1000   *
7a7a933edd6c3a Martin Krastev 2021-06-09  1001   * @dev: Identifies the drm 
device.
7a7a933edd6c3a Martin Krastev 2021-06-09  1002   * @data: Pointer to the ioctl 
argument.
7a7a933edd6c3a Martin Krastev 2021-06-09  1003   * @file_priv: Identifies the 
caller; unused.
7a7a933edd6c3a Martin Krastev 2021-06-09  1004   * Return: Zero on success, 
negative error code on error.
7a7a933edd6c3a Martin Krastev 2021-06-09  1005   */
7a7a933edd6c3a Martin Krastev 2021-06-09  1006  
7a7a933edd6c3a Martin Krastev 2021-06-09  1007  int 
vmw_mksstat_add_ioctl(struct drm_device *dev, void *data,
7a7a933edd6c3a Martin Krastev 2021-06-09  1008                                  
struct drm_file *file_priv)
7a7a933edd6c3a Martin Krastev 2021-06-09  1009  {
7a7a933edd6c3a Martin Krastev 2021-06-09  1010          struct 
drm_vmw_mksstat_add_arg *arg =
7a7a933edd6c3a Martin Krastev 2021-06-09  1011                  (struct 
drm_vmw_mksstat_add_arg *) data;
7a7a933edd6c3a Martin Krastev 2021-06-09  1012  
7a7a933edd6c3a Martin Krastev 2021-06-09  1013          struct vmw_private 
*const dev_priv = vmw_priv(dev);
7a7a933edd6c3a Martin Krastev 2021-06-09  1014  
7a7a933edd6c3a Martin Krastev 2021-06-09  1015          struct page *page;
7a7a933edd6c3a Martin Krastev 2021-06-09  1016          
MKSGuestStatInstanceDescriptor *pdesc;
7a7a933edd6c3a Martin Krastev 2021-06-09  1017          const size_t 
num_pages_stat = vmw_num_pages(arg->stat_len);
7a7a933edd6c3a Martin Krastev 2021-06-09  1018          const size_t 
num_pages_info = vmw_num_pages(arg->info_len);
7a7a933edd6c3a Martin Krastev 2021-06-09  1019          const size_t 
num_pages_strs = vmw_num_pages(arg->strs_len);
7a7a933edd6c3a Martin Krastev 2021-06-09  1020          long desc_len;
7a7a933edd6c3a Martin Krastev 2021-06-09  1021          long nr_pinned_stat;
7a7a933edd6c3a Martin Krastev 2021-06-09  1022          long nr_pinned_info;
7a7a933edd6c3a Martin Krastev 2021-06-09  1023          long nr_pinned_strs;
7a7a933edd6c3a Martin Krastev 2021-06-09 @1024          struct page 
*pages_stat[ARRAY_SIZE(pdesc->statPPNs)];
7a7a933edd6c3a Martin Krastev 2021-06-09  1025          struct page 
*pages_info[ARRAY_SIZE(pdesc->infoPPNs)];
7a7a933edd6c3a Martin Krastev 2021-06-09  1026          struct page 
*pages_strs[ARRAY_SIZE(pdesc->strsPPNs)];
7a7a933edd6c3a Martin Krastev 2021-06-09  1027          size_t i, slot;
7a7a933edd6c3a Martin Krastev 2021-06-09  1028  
7a7a933edd6c3a Martin Krastev 2021-06-09  1029          arg->id = -1;
7a7a933edd6c3a Martin Krastev 2021-06-09  1030  
7a7a933edd6c3a Martin Krastev 2021-06-09  1031          if (!arg->stat || 
!arg->info || !arg->strs)
7a7a933edd6c3a Martin Krastev 2021-06-09  1032                  return -EINVAL;
7a7a933edd6c3a Martin Krastev 2021-06-09  1033  
7a7a933edd6c3a Martin Krastev 2021-06-09  1034          if (!arg->stat_len || 
!arg->info_len || !arg->strs_len)
7a7a933edd6c3a Martin Krastev 2021-06-09  1035                  return -EINVAL;
7a7a933edd6c3a Martin Krastev 2021-06-09  1036  
7a7a933edd6c3a Martin Krastev 2021-06-09  1037          if (!arg->description)
7a7a933edd6c3a Martin Krastev 2021-06-09  1038                  return -EINVAL;
7a7a933edd6c3a Martin Krastev 2021-06-09  1039  
7a7a933edd6c3a Martin Krastev 2021-06-09  1040          if (num_pages_stat > 
ARRAY_SIZE(pdesc->statPPNs) ||
7a7a933edd6c3a Martin Krastev 2021-06-09  1041                  num_pages_info 
> ARRAY_SIZE(pdesc->infoPPNs) ||
7a7a933edd6c3a Martin Krastev 2021-06-09  1042                  num_pages_strs 
> ARRAY_SIZE(pdesc->strsPPNs))
7a7a933edd6c3a Martin Krastev 2021-06-09  1043                  return -EINVAL;
7a7a933edd6c3a Martin Krastev 2021-06-09  1044  
7a7a933edd6c3a Martin Krastev 2021-06-09  1045          /* Find an available 
slot in the mksGuestStats user array and reserve it */
7a7a933edd6c3a Martin Krastev 2021-06-09  1046          for (slot = 0; slot < 
ARRAY_SIZE(dev_priv->mksstat_user_pids); ++slot)
7a7a933edd6c3a Martin Krastev 2021-06-09  1047                  if 
(!atomic_cmpxchg(&dev_priv->mksstat_user_pids[slot], 0, MKSSTAT_PID_RESERVED))
7a7a933edd6c3a Martin Krastev 2021-06-09  1048                          break;
7a7a933edd6c3a Martin Krastev 2021-06-09  1049  
7a7a933edd6c3a Martin Krastev 2021-06-09  1050          if (slot == 
ARRAY_SIZE(dev_priv->mksstat_user_pids))
7a7a933edd6c3a Martin Krastev 2021-06-09  1051                  return -ENOSPC;
7a7a933edd6c3a Martin Krastev 2021-06-09  1052  
7a7a933edd6c3a Martin Krastev 2021-06-09  1053          
BUG_ON(dev_priv->mksstat_user_pages[slot]);
7a7a933edd6c3a Martin Krastev 2021-06-09  1054  
7a7a933edd6c3a Martin Krastev 2021-06-09  1055          /* Allocate a page for 
the instance descriptor */
7a7a933edd6c3a Martin Krastev 2021-06-09  1056          page = 
alloc_page(GFP_KERNEL | __GFP_ZERO);
7a7a933edd6c3a Martin Krastev 2021-06-09  1057  
7a7a933edd6c3a Martin Krastev 2021-06-09  1058          if (!page) {
7a7a933edd6c3a Martin Krastev 2021-06-09  1059                  
atomic_set(&dev_priv->mksstat_user_pids[slot], 0);
7a7a933edd6c3a Martin Krastev 2021-06-09  1060                  return -ENOMEM;
7a7a933edd6c3a Martin Krastev 2021-06-09  1061          }
7a7a933edd6c3a Martin Krastev 2021-06-09  1062  
7a7a933edd6c3a Martin Krastev 2021-06-09  1063          /* Set up the instance 
descriptor */
7a7a933edd6c3a Martin Krastev 2021-06-09  1064          pdesc = 
page_address(page);
7a7a933edd6c3a Martin Krastev 2021-06-09  1065  
7a7a933edd6c3a Martin Krastev 2021-06-09  1066          pdesc->reservedMBZ = 0;
7a7a933edd6c3a Martin Krastev 2021-06-09  1067          pdesc->statStartVA = 
arg->stat;
7a7a933edd6c3a Martin Krastev 2021-06-09  1068          pdesc->strsStartVA = 
arg->strs;
7a7a933edd6c3a Martin Krastev 2021-06-09  1069          pdesc->statLength = 
arg->stat_len;
7a7a933edd6c3a Martin Krastev 2021-06-09  1070          pdesc->infoLength = 
arg->info_len;
7a7a933edd6c3a Martin Krastev 2021-06-09  1071          pdesc->strsLength = 
arg->strs_len;
7a7a933edd6c3a Martin Krastev 2021-06-09  1072          desc_len = 
strncpy_from_user(pdesc->description, u64_to_user_ptr(arg->description),
7a7a933edd6c3a Martin Krastev 2021-06-09  1073                  
ARRAY_SIZE(pdesc->description) - 1);
7a7a933edd6c3a Martin Krastev 2021-06-09  1074  
7a7a933edd6c3a Martin Krastev 2021-06-09  1075          if (desc_len < 0) {
7a7a933edd6c3a Martin Krastev 2021-06-09  1076                  
atomic_set(&dev_priv->mksstat_user_pids[slot], 0);
7a7a933edd6c3a Martin Krastev 2021-06-09  1077                  return -EFAULT;
7a7a933edd6c3a Martin Krastev 2021-06-09  1078          }
7a7a933edd6c3a Martin Krastev 2021-06-09  1079  
7a7a933edd6c3a Martin Krastev 2021-06-09  1080          
reset_ppn_array(pdesc->statPPNs, ARRAY_SIZE(pdesc->statPPNs));
7a7a933edd6c3a Martin Krastev 2021-06-09  1081          
reset_ppn_array(pdesc->infoPPNs, ARRAY_SIZE(pdesc->infoPPNs));
7a7a933edd6c3a Martin Krastev 2021-06-09  1082          
reset_ppn_array(pdesc->strsPPNs, ARRAY_SIZE(pdesc->strsPPNs));
7a7a933edd6c3a Martin Krastev 2021-06-09  1083  
7a7a933edd6c3a Martin Krastev 2021-06-09  1084          /* Pin mksGuestStat 
user pages and store those in the instance descriptor */
7a7a933edd6c3a Martin Krastev 2021-06-09  1085          nr_pinned_stat = 
pin_user_pages(arg->stat, num_pages_stat, FOLL_LONGTERM, pages_stat, NULL);
7a7a933edd6c3a Martin Krastev 2021-06-09  1086          if (num_pages_stat != 
nr_pinned_stat)
7a7a933edd6c3a Martin Krastev 2021-06-09  1087                  goto 
err_pin_stat;
7a7a933edd6c3a Martin Krastev 2021-06-09  1088  
7a7a933edd6c3a Martin Krastev 2021-06-09  1089          for (i = 0; i < 
num_pages_stat; ++i)
7a7a933edd6c3a Martin Krastev 2021-06-09  1090                  
pdesc->statPPNs[i] = page_to_pfn(pages_stat[i]);
7a7a933edd6c3a Martin Krastev 2021-06-09  1091  
7a7a933edd6c3a Martin Krastev 2021-06-09  1092          nr_pinned_info = 
pin_user_pages(arg->info, num_pages_info, FOLL_LONGTERM, pages_info, NULL);
7a7a933edd6c3a Martin Krastev 2021-06-09  1093          if (num_pages_info != 
nr_pinned_info)
7a7a933edd6c3a Martin Krastev 2021-06-09  1094                  goto 
err_pin_info;
7a7a933edd6c3a Martin Krastev 2021-06-09  1095  
7a7a933edd6c3a Martin Krastev 2021-06-09  1096          for (i = 0; i < 
num_pages_info; ++i)
7a7a933edd6c3a Martin Krastev 2021-06-09  1097                  
pdesc->infoPPNs[i] = page_to_pfn(pages_info[i]);
7a7a933edd6c3a Martin Krastev 2021-06-09  1098  
7a7a933edd6c3a Martin Krastev 2021-06-09  1099          nr_pinned_strs = 
pin_user_pages(arg->strs, num_pages_strs, FOLL_LONGTERM, pages_strs, NULL);
7a7a933edd6c3a Martin Krastev 2021-06-09  1100          if (num_pages_strs != 
nr_pinned_strs)
7a7a933edd6c3a Martin Krastev 2021-06-09  1101                  goto 
err_pin_strs;
7a7a933edd6c3a Martin Krastev 2021-06-09  1102  
7a7a933edd6c3a Martin Krastev 2021-06-09  1103          for (i = 0; i < 
num_pages_strs; ++i)
7a7a933edd6c3a Martin Krastev 2021-06-09  1104                  
pdesc->strsPPNs[i] = page_to_pfn(pages_strs[i]);
7a7a933edd6c3a Martin Krastev 2021-06-09  1105  
7a7a933edd6c3a Martin Krastev 2021-06-09  1106          /* Send the descriptor 
to the host via a hypervisor call. The mksGuestStat
7a7a933edd6c3a Martin Krastev 2021-06-09  1107             pages will remain in 
use until the user requests a matching remove stats
7a7a933edd6c3a Martin Krastev 2021-06-09  1108             or a stats reset 
occurs. */
7a7a933edd6c3a Martin Krastev 2021-06-09  1109          
hypervisor_ppn_add((PPN64)page_to_pfn(page));
7a7a933edd6c3a Martin Krastev 2021-06-09  1110  
7a7a933edd6c3a Martin Krastev 2021-06-09  1111          
dev_priv->mksstat_user_pages[slot] = page;
7a7a933edd6c3a Martin Krastev 2021-06-09  1112          
atomic_set(&dev_priv->mksstat_user_pids[slot], current->pid);
7a7a933edd6c3a Martin Krastev 2021-06-09  1113  
7a7a933edd6c3a Martin Krastev 2021-06-09  1114          arg->id = slot;
7a7a933edd6c3a Martin Krastev 2021-06-09  1115  
7a7a933edd6c3a Martin Krastev 2021-06-09  1116          DRM_DEV_INFO(dev->dev, 
"pid=%d arg.description='%.*s' id=%lu\n", current->pid, (int)desc_len, 
pdesc->description, slot);
7a7a933edd6c3a Martin Krastev 2021-06-09  1117  
7a7a933edd6c3a Martin Krastev 2021-06-09  1118          return 0;
7a7a933edd6c3a Martin Krastev 2021-06-09  1119  
7a7a933edd6c3a Martin Krastev 2021-06-09  1120  err_pin_strs:
7a7a933edd6c3a Martin Krastev 2021-06-09  1121          if (nr_pinned_strs > 0)
7a7a933edd6c3a Martin Krastev 2021-06-09  1122                  
unpin_user_pages(pages_strs, nr_pinned_strs);
7a7a933edd6c3a Martin Krastev 2021-06-09  1123  
7a7a933edd6c3a Martin Krastev 2021-06-09  1124  err_pin_info:
7a7a933edd6c3a Martin Krastev 2021-06-09  1125          if (nr_pinned_info > 0)
7a7a933edd6c3a Martin Krastev 2021-06-09  1126                  
unpin_user_pages(pages_info, nr_pinned_info);
7a7a933edd6c3a Martin Krastev 2021-06-09  1127  
7a7a933edd6c3a Martin Krastev 2021-06-09  1128  err_pin_stat:
7a7a933edd6c3a Martin Krastev 2021-06-09  1129          if (nr_pinned_stat > 0)
7a7a933edd6c3a Martin Krastev 2021-06-09  1130                  
unpin_user_pages(pages_stat, nr_pinned_stat);
7a7a933edd6c3a Martin Krastev 2021-06-09  1131  
7a7a933edd6c3a Martin Krastev 2021-06-09  1132          
atomic_set(&dev_priv->mksstat_user_pids[slot], 0);
7a7a933edd6c3a Martin Krastev 2021-06-09  1133          __free_page(page);
7a7a933edd6c3a Martin Krastev 2021-06-09  1134          return -ENOMEM;
7a7a933edd6c3a Martin Krastev 2021-06-09  1135  }
7a7a933edd6c3a Martin Krastev 2021-06-09  1136  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to