tree:
https://github.com/Freescale/linux-fslc pr/344
head: 2cbb55e591febb414b623269d61d4444113c285f
commit: 3ea2de8648ea6ecd86e527bdd5993740e8bc7cef [9435/18956] virtio: Add
virtio-over-ivshmem transport driver
config: ia64-randconfig-s032-20210520 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
#
https://github.com/Freescale/linux-fslc/commit/3ea2de8648ea6ecd86e527bdd5...
git remote add freescale-fslc
https://github.com/Freescale/linux-fslc
git fetch --no-tags freescale-fslc pr/344
git checkout 3ea2de8648ea6ecd86e527bdd5993740e8bc7cef
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
> drivers/virtio/virtio_ivshmem.c:119:55: sparse: sparse:
restricted __le32 degrades to integer
> drivers/virtio/virtio_ivshmem.c:140:42: sparse: sparse: incorrect type in assignment
(different base types) @@ expected unsigned short [usertype] @@ got restricted
__le16 [usertype] @@
drivers/virtio/virtio_ivshmem.c:140:42: sparse: expected
unsigned short [usertype]
drivers/virtio/virtio_ivshmem.c:140:42: sparse: got restricted __le16 [usertype]
> drivers/virtio/virtio_ivshmem.c:142:42: sparse: sparse: incorrect
type in assignment (different base types) @@ expected unsigned int [usertype] @@
got restricted __le32 [usertype] @@
drivers/virtio/virtio_ivshmem.c:142:42:
sparse: expected unsigned int [usertype]
drivers/virtio/virtio_ivshmem.c:142:42: sparse: got restricted __le32 [usertype]
> drivers/virtio/virtio_ivshmem.c:144:42: sparse: sparse: incorrect
type in assignment (different base types) @@ expected unsigned long long [usertype] @@
got restricted __le64 [usertype] @@
drivers/virtio/virtio_ivshmem.c:144:42:
sparse: expected unsigned long long [usertype]
drivers/virtio/virtio_ivshmem.c:144:42: sparse: got restricted __le64 [usertype]
> drivers/virtio/virtio_ivshmem.c:188:19: sparse: sparse: incorrect
type in assignment (different base types) @@ expected restricted __le16 [usertype] w
@@ got unsigned short [usertype] @@
drivers/virtio/virtio_ivshmem.c:188:19:
sparse: expected restricted __le16 [usertype] w
drivers/virtio/virtio_ivshmem.c:188:19: sparse: got unsigned short [usertype]
> drivers/virtio/virtio_ivshmem.c:192:19: sparse: sparse: incorrect
type in assignment (different base types) @@ expected restricted __le32 [usertype] l
@@ got unsigned int [usertype] @@
drivers/virtio/virtio_ivshmem.c:192:19:
sparse: expected restricted __le32 [usertype] l
drivers/virtio/virtio_ivshmem.c:192:19: sparse: got unsigned int [usertype]
> drivers/virtio/virtio_ivshmem.c:196:19: sparse: sparse: incorrect
type in assignment (different base types) @@ expected restricted __le64 [usertype] q
@@ got unsigned long long [usertype] @@
drivers/virtio/virtio_ivshmem.c:196:19: sparse: expected restricted __le64 [usertype]
q
drivers/virtio/virtio_ivshmem.c:196:19: sparse: got unsigned long long [usertype]
> drivers/virtio/virtio_ivshmem.c:233:20: sparse: sparse: incorrect
type in initializer (different base types) @@ expected unsigned int [usertype] gen @@
got restricted __le32 [addressable] __val @@
drivers/virtio/virtio_ivshmem.c:233:20: sparse: expected unsigned int [usertype] gen
drivers/virtio/virtio_ivshmem.c:233:20: sparse: got restricted __le32 [addressable]
__val
drivers/virtio/virtio_ivshmem.c:236:55: sparse: sparse: restricted __le32 degrades to
integer
> drivers/virtio/virtio_ivshmem.c:243:21: sparse: sparse: incorrect
type in assignment (different base types) @@ expected unsigned int [usertype] gen @@
got restricted __le32 [addressable] __val @@
drivers/virtio/virtio_ivshmem.c:243:21: sparse: expected unsigned int [usertype] gen
drivers/virtio/virtio_ivshmem.c:243:21: sparse: got restricted __le32 [addressable]
__val
drivers/virtio/virtio_ivshmem.c:336:13: sparse: sparse: restricted __le32 degrades to
integer
> drivers/virtio/virtio_ivshmem.c:405:14: sparse: sparse: incorrect
type in assignment (different base types) @@ expected unsigned int size @@ got
restricted __le16 [usertype] queue_size @@
drivers/virtio/virtio_ivshmem.c:405:14: sparse: expected unsigned int size
drivers/virtio/virtio_ivshmem.c:405:14: sparse: got restricted __le16 [usertype]
queue_size
> drivers/virtio/virtio_ivshmem.c:411:29: sparse: sparse: incorrect
type in assignment (different base types) @@ expected unsigned int device_vector @@
got restricted __le16 [usertype] queue_device_vector @@
drivers/virtio/virtio_ivshmem.c:411:29: sparse: expected unsigned int device_vector
drivers/virtio/virtio_ivshmem.c:411:29: sparse: got restricted __le16 [usertype]
queue_device_vector
drivers/virtio/virtio_ivshmem.c:865:34: sparse: sparse: restricted __le32 degrades to
integer
> drivers/virtio/virtio_ivshmem.c:889:63: sparse: sparse: incorrect
type in argument 1 (different base types) @@ expected unsigned long size @@ got
restricted __le32 [usertype] size @@
drivers/virtio/virtio_ivshmem.c:889:63:
sparse: expected unsigned long size
drivers/virtio/virtio_ivshmem.c:889:63: sparse: got restricted __le32 [usertype]
size
drivers/virtio/virtio_ivshmem.c:900:36: sparse: sparse: restricted __le32 degrades to
integer
> drivers/virtio/virtio_ivshmem.c:908:16: sparse: sparse: incorrect
type in argument 1 (different base types) @@ expected unsigned int [usertype] value @@
got restricted __le32 [usertype] @@
drivers/virtio/virtio_ivshmem.c:908:16:
sparse: expected unsigned int [usertype] value
drivers/virtio/virtio_ivshmem.c:908:16: sparse: got restricted __le32 [usertype]
drivers/virtio/virtio_ivshmem.c: note: in included file (through
arch/ia64/include/asm/io.h, arch/ia64/include/asm/smp.h, include/linux/smp.h, ...):
include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1
(different base types) @@ expected unsigned int [usertype] value @@ got restricted
__le32 [usertype] @@
include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value
include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype]
include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1
(different base types) @@ expected unsigned int [usertype] value @@ got restricted
__le32 [usertype] @@
include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value
include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype]
include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1
(different base types) @@ expected unsigned int [usertype] value @@ got restricted
__le32 [usertype] @@
include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value
include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype]
include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32
include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32
include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1
(different base types) @@ expected unsigned int [usertype] value @@ got restricted
__le32 [usertype] @@
include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value
include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype]
include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1
(different base types) @@ expected unsigned int [usertype] value @@ got restricted
__le32 [usertype] @@
include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value
include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype]
include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1
(different base types) @@ expected unsigned int [usertype] value @@ got restricted
__le32 [usertype] @@
include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value
include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype]
include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 1
(different base types) @@ expected unsigned int [usertype] value @@ got restricted
__le32 [usertype] @@
include/asm-generic/io.h:225:22: sparse: expected unsigned int [usertype] value
include/asm-generic/io.h:225:22: sparse: got restricted __le32 [usertype]
vim +119 drivers/virtio/virtio_ivshmem.c
115
116 static bool vi_synchronize_reg_write(struct virtio_ivshmem_device *vi_dev)
117 {
118 while (READ_ONCE(vi_dev->virtio_header->write_transaction)) {
119 if (READ_ONCE(*vi_dev->peer_state) != VIRTIO_STATE_READY) {
120 dev_err_ratelimited(&vi_dev->pci_dev->dev,
121 "backend failed!");
122 return false;
123 }
124 cpu_relax();
125 }
126 return true;
127 }
128
129 static bool vi_reg_write(struct virtio_ivshmem_device *vi_dev, unsigned int reg,
130 u64 value, unsigned int size)
131 {
132 u8 *reg_area = (u8 *)vi_dev->virtio_header;
133
134 if (!vi_synchronize_reg_write(vi_dev))
135 return false;
136
137 if (size == 1)
138 *(u8 *)(reg_area + reg) = (u8)value;
139 else if (size == 2)
140 *(u16 *)(reg_area + reg) = cpu_to_le16((u16)value);
141 else if (size == 4)
142 *(u32 *)(reg_area + reg) = cpu_to_le32((u32)value);
143 else if (size == 8)
144 *(u64 *)(reg_area + reg) = cpu_to_le64(value);
145 else
146 BUG();
147 virt_wmb();
148
149 vi_dev->virtio_header->write_transaction = cpu_to_le32(reg);
150 virt_wmb();
151
152 writel((vi_dev->peer_id << 16),
&vi_dev->ivshm_regs->doorbell);
153
154 return true;
155 }
156
157 static bool vi_reg_write16(struct virtio_ivshmem_device *vi_dev,
158 unsigned int reg, u32 value)
159 {
160 return vi_reg_write(vi_dev, reg, value, 2);
161 }
162
163 static bool vi_reg_write32(struct virtio_ivshmem_device *vi_dev,
164 unsigned int reg, u32 value)
165 {
166 return vi_reg_write(vi_dev, reg, value, 4);
167 }
168
169 static bool vi_reg_write64(struct virtio_ivshmem_device *vi_dev,
170 unsigned int reg, u64 value)
171 {
172 return vi_reg_write(vi_dev, reg, value, 8);
173 }
174
175 static void vi_get(struct virtio_device *vdev, unsigned offset,
176 void *buf, unsigned len)
177 {
178 struct virtio_ivshmem_device *vi_dev = to_virtio_ivshmem_device(vdev);
179 __le16 w;
180 __le32 l;
181 __le64 q;
182
183 switch (len) {
184 case 1:
185 *(u8 *)buf = *(u8 *)(vi_dev->virtio_header->config + offset);
186 break;
187 case 2:
188 w = *(u16 *)(vi_dev->virtio_header->config + offset);
189 *(u16 *)buf = le16_to_cpu(w);
190 break;
191 case 4:
192 l = *(u32 *)(vi_dev->virtio_header->config + offset);
193 *(u32 *)buf = le32_to_cpu(l);
194 break;
195 case 8:
196 q = *(u64 *)(vi_dev->virtio_header->config + offset);
197 *(u64 *)buf = le64_to_cpu(q);
198 break;
199 default:
200 BUG();
201 }
202 }
203
204 static void vi_set(struct virtio_device *vdev, unsigned offset,
205 const void *buf, unsigned len)
206 {
207 u64 value;
208
209 switch (len) {
210 case 1:
211 value = *(u8 *)buf;
212 break;
213 case 2:
214 value = *(u16 *)buf;
215 break;
216 case 4:
217 value = *(u32 *)buf;
218 break;
219 case 8:
220 value = *(u64 *)buf;
221 break;
222 default:
223 BUG();
224 }
225 vi_reg_write(to_virtio_ivshmem_device(vdev),
226 offsetof(struct virtio_ivshmem_header, config) + offset,
227 value, len);
228 }
229
230 static u32 vi_generation(struct virtio_device *vdev)
231 {
232 struct virtio_ivshmem_device *vi_dev = to_virtio_ivshmem_device(vdev);
233 u32 gen =
READ_ONCE(vi_dev->virtio_header->config_generation);
234
235 while (gen & 1) {
236 if (READ_ONCE(*vi_dev->peer_state) != VIRTIO_STATE_READY) {
237 dev_err_ratelimited(&vi_dev->pci_dev->dev,
238 "backend failed!");
239 return 0;
240 }
241 cpu_relax();
242
243 gen =
READ_ONCE(vi_dev->virtio_header->config_generation);
244 }
245 return gen;
246 }
247
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org