* drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:1024:37: warning: Uninitialized variable: pdesc [uninitvar]
@ 2022-01-22 21:51 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-01-22 21:51 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 13351 bytes --]
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Martin Krastev <krastevm@vmware.com>
CC: Zack Rusin <zackr@vmware.com>
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 <lkp@intel.com>
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/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-01-22 21:51 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-22 21:51 drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:1024:37: warning: Uninitialized variable: pdesc [uninitvar] kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.