Re: [PATCH v1 2/9] drivers: hv: dxgkrnl: Open device object, adapter enumeration, dxgdevice, dxgcontext creation

From: kernel test robot
Date: Thu Jan 13 2022 - 02:44:52 EST


Hi Iouri,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.16 next-20220113]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Iouri-Tarassov/drivers-hv-dxgkrnl-Driver-overview/20220113-035836
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git e3084ed48fd6b661fe434da0cb36d7d6706cf27f
config: arm64-randconfig-r032-20220113 (https://download.01.org/0day-ci/archive/20220113/202201131549.w952i85x-lkp@xxxxxxxxx/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d1021978b8e7e35dcc30201ca1731d64b5a602a8)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/0day-ci/linux/commit/91a8d0866d1c0efc52ca8e1cb504e0ec15c979e2
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Iouri-Tarassov/drivers-hv-dxgkrnl-Driver-overview/20220113-035836
git checkout 91a8d0866d1c0efc52ca8e1cb504e0ec15c979e2
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/hv/dxgkrnl/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

>> drivers/hv/dxgkrnl/hmgr.c:85:5: warning: no previous prototype for function 'get_instance' [-Wmissing-prototypes]
u32 get_instance(struct d3dkmthandle h)
^
drivers/hv/dxgkrnl/hmgr.c:85:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
u32 get_instance(struct d3dkmthandle h)
^
static
>> drivers/hv/dxgkrnl/hmgr.c:172:6: warning: no previous prototype for function 'print_status' [-Wmissing-prototypes]
void print_status(struct hmgrtable *table)
^
drivers/hv/dxgkrnl/hmgr.c:172:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void print_status(struct hmgrtable *table)
^
static
>> drivers/hv/dxgkrnl/hmgr.c:551:21: warning: no previous prototype for function 'hmgrtable_get_entry_type' [-Wmissing-prototypes]
enum hmgrentry_type hmgrtable_get_entry_type(struct hmgrtable *table,
^
drivers/hv/dxgkrnl/hmgr.c:551:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
enum hmgrentry_type hmgrtable_get_entry_type(struct hmgrtable *table,
^
static
drivers/hv/dxgkrnl/hmgr.c:167:20: warning: unused function 'is_empty' [-Wunused-function]
static inline bool is_empty(struct hmgrtable *table)
^
4 warnings generated.
--
>> drivers/hv/dxgkrnl/dxgadapter.c:261:6: warning: no previous prototype for function 'dxgdevice_mark_destroyed' [-Wmissing-prototypes]
void dxgdevice_mark_destroyed(struct dxgdevice *device)
^
drivers/hv/dxgkrnl/dxgadapter.c:261:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void dxgdevice_mark_destroyed(struct dxgdevice *device)
^
static
1 warning generated.


vim +/get_instance +85 drivers/hv/dxgkrnl/hmgr.c

84
> 85 u32 get_instance(struct d3dkmthandle h)
86 {
87 return (h.v & HMGRHANDLE_INSTANCE_MASK) >> HMGRHANDLE_INSTANCE_SHIFT;
88 }
89
90 static bool is_handle_valid(struct hmgrtable *table, struct d3dkmthandle h,
91 bool ignore_destroyed, enum hmgrentry_type t)
92 {
93 u32 index = get_index(h);
94 u32 unique = get_unique(h);
95 struct hmgrentry *entry;
96
97 if (index >= table->table_size) {
98 pr_err("%s Invalid index %x %d\n", __func__, h.v, index);
99 return false;
100 }
101
102 entry = &table->entry_table[index];
103 if (unique != entry->unique) {
104 pr_err("%s Invalid unique %x %d %d %d %p",
105 __func__, h.v, unique, entry->unique,
106 index, entry->object);
107 return false;
108 }
109
110 if (entry->destroyed && !ignore_destroyed) {
111 pr_err("%s Invalid destroyed", __func__);
112 return false;
113 }
114
115 if (entry->type == HMGRENTRY_TYPE_FREE) {
116 pr_err("%s Entry is freed %x %d", __func__, h.v, index);
117 return false;
118 }
119
120 if (t != HMGRENTRY_TYPE_FREE && t != entry->type) {
121 pr_err("%s type mismatch %x %d %d", __func__, h.v,
122 t, entry->type);
123 return false;
124 }
125
126 return true;
127 }
128
129 static struct d3dkmthandle build_handle(u32 index, u32 unique, u32 instance)
130 {
131 struct d3dkmthandle handle;
132
133 handle.v = (index << HMGRHANDLE_INDEX_SHIFT) & HMGRHANDLE_INDEX_MASK;
134 handle.v |= (unique << HMGRHANDLE_UNIQUE_SHIFT) &
135 HMGRHANDLE_UNIQUE_MASK;
136 handle.v |= (instance << HMGRHANDLE_INSTANCE_SHIFT) &
137 HMGRHANDLE_INSTANCE_MASK;
138
139 return handle;
140 }
141
142 inline u32 hmgrtable_get_used_entry_count(struct hmgrtable *table)
143 {
144 DXGKRNL_ASSERT(table->table_size >= table->free_count);
145 return (table->table_size - table->free_count);
146 }
147
148 bool hmgrtable_mark_destroyed(struct hmgrtable *table, struct d3dkmthandle h)
149 {
150 if (!is_handle_valid(table, h, false, HMGRENTRY_TYPE_FREE))
151 return false;
152
153 table->entry_table[get_index(h)].destroyed = true;
154 return true;
155 }
156
157 bool hmgrtable_unmark_destroyed(struct hmgrtable *table, struct d3dkmthandle h)
158 {
159 if (!is_handle_valid(table, h, true, HMGRENTRY_TYPE_FREE))
160 return true;
161
162 DXGKRNL_ASSERT(table->entry_table[get_index(h)].destroyed);
163 table->entry_table[get_index(h)].destroyed = 0;
164 return true;
165 }
166
167 static inline bool is_empty(struct hmgrtable *table)
168 {
169 return (table->free_count == table->table_size);
170 }
171
> 172 void print_status(struct hmgrtable *table)
173 {
174 int i;
175
176 dev_dbg(dxgglobaldev, "hmgrtable head, tail %p %d %d\n",
177 table, table->free_handle_list_head,
178 table->free_handle_list_tail);
179 if (table->entry_table == NULL)
180 return;
181 for (i = 0; i < 3; i++) {
182 if (table->entry_table[i].type != HMGRENTRY_TYPE_FREE)
183 dev_dbg(dxgglobaldev, "hmgrtable entry %p %d %p\n",
184 table, i, table->entry_table[i].object);
185 else
186 dev_dbg(dxgglobaldev, "hmgrtable entry %p %d %d %d\n",
187 table, i,
188 table->entry_table[i].next_free_index,
189 table->entry_table[i].prev_free_index);
190 }
191 }
192

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx