From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:1024:37: warning: Uninitialized variable: pdesc [uninitvar]
Date: Sun, 23 Jan 2022 05:51:51 +0800 [thread overview]
Message-ID: <202201230446.MgsaPDeX-lkp@intel.com> (raw)
[-- 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
reply other threads:[~2022-01-22 21:51 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202201230446.MgsaPDeX-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.