CC: [email protected]
CC: [email protected]
TO: Jason Wang <[email protected]>
CC: "Michael S. Tsirkin" <[email protected]>

Hi Jason,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   ed8780e3f2ecc82645342d070c6b4e530532e680
commit: 20c384f1ea1a0bc7320bc445c72dd02d2970d594 vhost: refine vhost and vringh 
kconfig
date:   7 months ago
:::::: branch date: 14 hours ago
:::::: commit date: 7 months ago
config: sh-randconfig-s031-20201028 (attached as .config)
compiler: sh4-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-56-gc09e8239-dirty
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=20c384f1ea1a0bc7320bc445c72dd02d2970d594
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 20c384f1ea1a0bc7320bc445c72dd02d2970d594
        # 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__' ARCH=sh 

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


"sparse warnings: (new ones prefixed by >>)"
   drivers/vhost/vhost.c:1603:13: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected unsigned int const *__gu_addr @@     
got unsigned int [noderef] [usertype] <asn:1> *idxp @@
>> drivers/vhost/vhost.c:1603:13: sparse:     expected unsigned int const 
>> *__gu_addr
   drivers/vhost/vhost.c:1603:13: sparse:     got unsigned int [noderef] 
[usertype] <asn:1> *idxp
   drivers/vhost/vhost.c:1603:13: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@     expected void const volatile [noderef] 
<asn:1> * @@     got unsigned int const *__gu_addr @@
   drivers/vhost/vhost.c:1603:13: sparse:     expected void const volatile 
[noderef] <asn:1> *
>> drivers/vhost/vhost.c:1603:13: sparse:     got unsigned int const *__gu_addr
   drivers/vhost/vhost.c:1800:21: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int const *__gu_addr @@     got int 
[noderef] <asn:1> * @@
>> drivers/vhost/vhost.c:1800:21: sparse:     expected int const *__gu_addr
   drivers/vhost/vhost.c:1800:21: sparse:     got int [noderef] <asn:1> *
   drivers/vhost/vhost.c:1800:21: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@     expected void const volatile [noderef] 
<asn:1> * @@     got int const *__gu_addr @@
   drivers/vhost/vhost.c:1800:21: sparse:     expected void const volatile 
[noderef] <asn:1> *
>> drivers/vhost/vhost.c:1800:21: sparse:     got int const *__gu_addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:937:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] <asn:1> * @@
   drivers/vhost/vhost.c:937:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:937:16: sparse:     got restricted __virtio16 
[noderef] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:922:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] [usertype] <asn:1> * @@
   drivers/vhost/vhost.c:922:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:922:16: sparse:     got restricted __virtio16 
[noderef] [usertype] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:1014:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] <asn:1> * @@
   drivers/vhost/vhost.c:1014:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:1014:16: sparse:     got restricted __virtio16 
[noderef] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:989:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] <asn:1> * @@
   drivers/vhost/vhost.c:989:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:989:16: sparse:     got restricted __virtio16 
[noderef] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:995:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] <asn:1> * @@
   drivers/vhost/vhost.c:995:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:995:16: sparse:     got restricted __virtio16 
[noderef] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:944:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] <asn:1> * @@
   drivers/vhost/vhost.c:944:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:944:16: sparse:     got restricted __virtio16 
[noderef] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:1002:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] <asn:1> * @@
   drivers/vhost/vhost.c:1002:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:1002:16: sparse:     got restricted __virtio16 
[noderef] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:1008:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] [usertype] <asn:1> * @@
   drivers/vhost/vhost.c:1008:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:1008:16: sparse:     got restricted __virtio16 
[noderef] [usertype] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:989:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] <asn:1> * @@
   drivers/vhost/vhost.c:989:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:989:16: sparse:     got restricted __virtio16 
[noderef] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *
   drivers/vhost/vhost.c:989:16: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void *addr @@     got restricted 
__virtio16 [noderef] <asn:1> * @@
   drivers/vhost/vhost.c:989:16: sparse:     expected void *addr
   drivers/vhost/vhost.c:989:16: sparse:     got restricted __virtio16 
[noderef] <asn:1> *
   drivers/vhost/vhost.c:900:42: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void [noderef] <asn:1> *addr @@     
got void *addr @@
   drivers/vhost/vhost.c:900:42: sparse:     expected void [noderef] <asn:1> 
*addr
   drivers/vhost/vhost.c:900:42: sparse:     got void *addr
   drivers/vhost/vhost.c:753:17: sparse: sparse: incorrect type in return 
expression (different address spaces) @@     expected void [noderef] <asn:1> * 
@@     got void * @@
   drivers/vhost/vhost.c:753:17: sparse:     expected void [noderef] <asn:1> *
   drivers/vhost/vhost.c:753:17: sparse:     got void *

vim +1603 drivers/vhost/vhost.c

feebcaeac79ad86 Jason Wang         2019-05-24  1566  
feebcaeac79ad86 Jason Wang         2019-05-24  1567  static long 
vhost_vring_set_num_addr(struct vhost_dev *d,
feebcaeac79ad86 Jason Wang         2019-05-24  1568                             
     struct vhost_virtqueue *vq,
feebcaeac79ad86 Jason Wang         2019-05-24  1569                             
     unsigned int ioctl,
feebcaeac79ad86 Jason Wang         2019-05-24  1570                             
     void __user *argp)
feebcaeac79ad86 Jason Wang         2019-05-24  1571  {
feebcaeac79ad86 Jason Wang         2019-05-24  1572     long r;
feebcaeac79ad86 Jason Wang         2019-05-24  1573  
feebcaeac79ad86 Jason Wang         2019-05-24  1574     mutex_lock(&vq->mutex);
feebcaeac79ad86 Jason Wang         2019-05-24  1575  
feebcaeac79ad86 Jason Wang         2019-05-24  1576     switch (ioctl) {
feebcaeac79ad86 Jason Wang         2019-05-24  1577     case 
VHOST_SET_VRING_NUM:
feebcaeac79ad86 Jason Wang         2019-05-24  1578             r = 
vhost_vring_set_num(d, vq, argp);
feebcaeac79ad86 Jason Wang         2019-05-24  1579             break;
feebcaeac79ad86 Jason Wang         2019-05-24  1580     case 
VHOST_SET_VRING_ADDR:
feebcaeac79ad86 Jason Wang         2019-05-24  1581             r = 
vhost_vring_set_addr(d, vq, argp);
feebcaeac79ad86 Jason Wang         2019-05-24  1582             break;
feebcaeac79ad86 Jason Wang         2019-05-24  1583     default:
feebcaeac79ad86 Jason Wang         2019-05-24  1584             BUG();
feebcaeac79ad86 Jason Wang         2019-05-24  1585     }
feebcaeac79ad86 Jason Wang         2019-05-24  1586  
feebcaeac79ad86 Jason Wang         2019-05-24  1587     
mutex_unlock(&vq->mutex);
feebcaeac79ad86 Jason Wang         2019-05-24  1588  
feebcaeac79ad86 Jason Wang         2019-05-24  1589     return r;
feebcaeac79ad86 Jason Wang         2019-05-24  1590  }
26b36604523f4a6 Sonny Rao          2018-03-14  1591  long 
vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1592  {
cecb46f194460d2 Al Viro            2012-08-27  1593     struct file *eventfp, 
*filep = NULL;
cecb46f194460d2 Al Viro            2012-08-27  1594     bool pollstart = false, 
pollstop = false;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1595     struct eventfd_ctx *ctx 
= NULL;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1596     u32 __user *idxp = argp;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1597     struct vhost_virtqueue 
*vq;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1598     struct 
vhost_vring_state s;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1599     struct vhost_vring_file 
f;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1600     u32 idx;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1601     long r;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1602  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14 @1603     r = get_user(idx, idxp);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1604     if (r < 0)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1605             return r;
0f3d9a17469d71b Krishna Kumar      2010-05-25  1606     if (idx >= d->nvqs)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1607             return -ENOBUFS;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1608  
ff002269a4ee9c7 Jason Wang         2018-10-30  1609     idx = 
array_index_nospec(idx, d->nvqs);
3ab2e420ec1caf4 Asias He           2013-04-27  1610     vq = d->vqs[idx];
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1611  
feebcaeac79ad86 Jason Wang         2019-05-24  1612     if (ioctl == 
VHOST_SET_VRING_NUM ||
feebcaeac79ad86 Jason Wang         2019-05-24  1613         ioctl == 
VHOST_SET_VRING_ADDR) {
feebcaeac79ad86 Jason Wang         2019-05-24  1614             return 
vhost_vring_set_num_addr(d, vq, ioctl, argp);
feebcaeac79ad86 Jason Wang         2019-05-24  1615     }
feebcaeac79ad86 Jason Wang         2019-05-24  1616  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1617     mutex_lock(&vq->mutex);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1618  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1619     switch (ioctl) {
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1620     case 
VHOST_SET_VRING_BASE:
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1621             /* Moving base 
with an active backend?
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1622              * You don't 
want to do that. */
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1623             if 
(vq->private_data) {
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1624                     r = 
-EBUSY;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1625                     break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1626             }
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1627             if 
(copy_from_user(&s, argp, sizeof s)) {
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1628                     r = 
-EFAULT;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1629                     break;
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1630             }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1631             if (s.num > 
0xffff) {
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1632                     r = 
-EINVAL;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1633                     break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1634             }
8d65843c44269c2 Jason Wang         2017-07-27  1635             
vq->last_avail_idx = s.num;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1636             /* Forget the 
cached index value. */
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1637             vq->avail_idx = 
vq->last_avail_idx;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1638             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1639     case 
VHOST_GET_VRING_BASE:
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1640             s.index = idx;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1641             s.num = 
vq->last_avail_idx;
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1642             if 
(copy_to_user(argp, &s, sizeof s))
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1643                     r = 
-EFAULT;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1644             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1645     case 
VHOST_SET_VRING_KICK:
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1646             if 
(copy_from_user(&f, argp, sizeof f)) {
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1647                     r = 
-EFAULT;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1648                     break;
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1649             }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1650             eventfp = f.fd 
== -1 ? NULL : eventfd_fget(f.fd);
535297a6ae4c3b7 Michael S. Tsirkin 2010-03-17  1651             if 
(IS_ERR(eventfp)) {
535297a6ae4c3b7 Michael S. Tsirkin 2010-03-17  1652                     r = 
PTR_ERR(eventfp);
535297a6ae4c3b7 Michael S. Tsirkin 2010-03-17  1653                     break;
535297a6ae4c3b7 Michael S. Tsirkin 2010-03-17  1654             }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1655             if (eventfp != 
vq->kick) {
cecb46f194460d2 Al Viro            2012-08-27  1656                     
pollstop = (filep = vq->kick) != NULL;
cecb46f194460d2 Al Viro            2012-08-27  1657                     
pollstart = (vq->kick = eventfp) != NULL;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1658             } else
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1659                     filep = 
eventfp;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1660             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1661     case 
VHOST_SET_VRING_CALL:
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1662             if 
(copy_from_user(&f, argp, sizeof f)) {
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1663                     r = 
-EFAULT;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1664                     break;
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1665             }
e050c7d93f4adb2 Eric Biggers       2018-01-06  1666             ctx = f.fd == 
-1 ? NULL : eventfd_ctx_fdget(f.fd);
e050c7d93f4adb2 Eric Biggers       2018-01-06  1667             if 
(IS_ERR(ctx)) {
e050c7d93f4adb2 Eric Biggers       2018-01-06  1668                     r = 
PTR_ERR(ctx);
535297a6ae4c3b7 Michael S. Tsirkin 2010-03-17  1669                     break;
535297a6ae4c3b7 Michael S. Tsirkin 2010-03-17  1670             }
e050c7d93f4adb2 Eric Biggers       2018-01-06  1671             swap(ctx, 
vq->call_ctx);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1672             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1673     case 
VHOST_SET_VRING_ERR:
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1674             if 
(copy_from_user(&f, argp, sizeof f)) {
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1675                     r = 
-EFAULT;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1676                     break;
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1677             }
09f332a589232f5 Eric Biggers       2018-01-06  1678             ctx = f.fd == 
-1 ? NULL : eventfd_ctx_fdget(f.fd);
09f332a589232f5 Eric Biggers       2018-01-06  1679             if 
(IS_ERR(ctx)) {
09f332a589232f5 Eric Biggers       2018-01-06  1680                     r = 
PTR_ERR(ctx);
535297a6ae4c3b7 Michael S. Tsirkin 2010-03-17  1681                     break;
535297a6ae4c3b7 Michael S. Tsirkin 2010-03-17  1682             }
09f332a589232f5 Eric Biggers       2018-01-06  1683             swap(ctx, 
vq->error_ctx);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1684             break;
2751c9882b94729 Greg Kurz          2015-04-24  1685     case 
VHOST_SET_VRING_ENDIAN:
2751c9882b94729 Greg Kurz          2015-04-24  1686             r = 
vhost_set_vring_endian(vq, argp);
2751c9882b94729 Greg Kurz          2015-04-24  1687             break;
2751c9882b94729 Greg Kurz          2015-04-24  1688     case 
VHOST_GET_VRING_ENDIAN:
2751c9882b94729 Greg Kurz          2015-04-24  1689             r = 
vhost_get_vring_endian(vq, idx, argp);
2751c9882b94729 Greg Kurz          2015-04-24  1690             break;
030881372460654 Jason Wang         2016-03-04  1691     case 
VHOST_SET_VRING_BUSYLOOP_TIMEOUT:
030881372460654 Jason Wang         2016-03-04  1692             if 
(copy_from_user(&s, argp, sizeof(s))) {
030881372460654 Jason Wang         2016-03-04  1693                     r = 
-EFAULT;
030881372460654 Jason Wang         2016-03-04  1694                     break;
030881372460654 Jason Wang         2016-03-04  1695             }
030881372460654 Jason Wang         2016-03-04  1696             
vq->busyloop_timeout = s.num;
030881372460654 Jason Wang         2016-03-04  1697             break;
030881372460654 Jason Wang         2016-03-04  1698     case 
VHOST_GET_VRING_BUSYLOOP_TIMEOUT:
030881372460654 Jason Wang         2016-03-04  1699             s.index = idx;
030881372460654 Jason Wang         2016-03-04  1700             s.num = 
vq->busyloop_timeout;
030881372460654 Jason Wang         2016-03-04  1701             if 
(copy_to_user(argp, &s, sizeof(s)))
030881372460654 Jason Wang         2016-03-04  1702                     r = 
-EFAULT;
030881372460654 Jason Wang         2016-03-04  1703             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1704     default:
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1705             r = 
-ENOIOCTLCMD;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1706     }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1707  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1708     if (pollstop && 
vq->handle_kick)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1709             
vhost_poll_stop(&vq->poll);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1710  
e050c7d93f4adb2 Eric Biggers       2018-01-06  1711     if 
(!IS_ERR_OR_NULL(ctx))
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1712             
eventfd_ctx_put(ctx);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1713     if (filep)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1714             fput(filep);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1715  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1716     if (pollstart && 
vq->handle_kick)
2b8b328b61c7999 Jason Wang         2013-01-28  1717             r = 
vhost_poll_start(&vq->poll, vq->kick);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1718  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1719     
mutex_unlock(&vq->mutex);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1720  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1721     if (pollstop && 
vq->handle_kick)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1722             
vhost_poll_flush(&vq->poll);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1723     return r;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1724  }
6ac1afbf6132df0 Asias He           2013-05-06  1725  
EXPORT_SYMBOL_GPL(vhost_vring_ioctl);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1726  
6b1e6cc7855b09a Jason Wang         2016-06-23  1727  int 
vhost_init_device_iotlb(struct vhost_dev *d, bool enabled)
6b1e6cc7855b09a Jason Wang         2016-06-23  1728  {
6b1e6cc7855b09a Jason Wang         2016-06-23  1729     struct vhost_umem 
*niotlb, *oiotlb;
6b1e6cc7855b09a Jason Wang         2016-06-23  1730     int i;
6b1e6cc7855b09a Jason Wang         2016-06-23  1731  
6b1e6cc7855b09a Jason Wang         2016-06-23  1732     niotlb = 
vhost_umem_alloc();
6b1e6cc7855b09a Jason Wang         2016-06-23  1733     if (!niotlb)
6b1e6cc7855b09a Jason Wang         2016-06-23  1734             return -ENOMEM;
6b1e6cc7855b09a Jason Wang         2016-06-23  1735  
6b1e6cc7855b09a Jason Wang         2016-06-23  1736     oiotlb = d->iotlb;
6b1e6cc7855b09a Jason Wang         2016-06-23  1737     d->iotlb = niotlb;
6b1e6cc7855b09a Jason Wang         2016-06-23  1738  
6b1e6cc7855b09a Jason Wang         2016-06-23  1739     for (i = 0; i < 
d->nvqs; ++i) {
b13f9c6364373a1 Jason Wang         2018-08-08  1740             struct 
vhost_virtqueue *vq = d->vqs[i];
b13f9c6364373a1 Jason Wang         2018-08-08  1741  
b13f9c6364373a1 Jason Wang         2018-08-08  1742             
mutex_lock(&vq->mutex);
b13f9c6364373a1 Jason Wang         2018-08-08  1743             vq->iotlb = 
niotlb;
b13f9c6364373a1 Jason Wang         2018-08-08  1744             
__vhost_vq_meta_reset(vq);
b13f9c6364373a1 Jason Wang         2018-08-08  1745             
mutex_unlock(&vq->mutex);
6b1e6cc7855b09a Jason Wang         2016-06-23  1746     }
6b1e6cc7855b09a Jason Wang         2016-06-23  1747  
6b1e6cc7855b09a Jason Wang         2016-06-23  1748     
vhost_umem_clean(oiotlb);
6b1e6cc7855b09a Jason Wang         2016-06-23  1749  
6b1e6cc7855b09a Jason Wang         2016-06-23  1750     return 0;
6b1e6cc7855b09a Jason Wang         2016-06-23  1751  }
6b1e6cc7855b09a Jason Wang         2016-06-23  1752  
EXPORT_SYMBOL_GPL(vhost_init_device_iotlb);
6b1e6cc7855b09a Jason Wang         2016-06-23  1753  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1754  /* Caller must have device 
mutex */
935cdee7ee15956 Michael S. Tsirkin 2012-12-06  1755  long 
vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1756  {
d25cc43c6775bff Eric Biggers       2018-01-06  1757     struct eventfd_ctx *ctx;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1758     u64 p;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1759     long r;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1760     int i, fd;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1761  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1762     /* If you are not the 
owner, you can become one */
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1763     if (ioctl == 
VHOST_SET_OWNER) {
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1764             r = 
vhost_dev_set_owner(d);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1765             goto done;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1766     }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1767  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1768     /* You must be the 
owner to do anything else */
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1769     r = 
vhost_dev_check_owner(d);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1770     if (r)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1771             goto done;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1772  
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1773     switch (ioctl) {
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1774     case 
VHOST_SET_MEM_TABLE:
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1775             r = 
vhost_set_memory(d, argp);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1776             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1777     case VHOST_SET_LOG_BASE:
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1778             if 
(copy_from_user(&p, argp, sizeof p)) {
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1779                     r = 
-EFAULT;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1780                     break;
7ad9c9d27048547 Takuya Yoshikawa   2010-05-27  1781             }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1782             if 
((u64)(unsigned long)p != p) {
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1783                     r = 
-EFAULT;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1784                     break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1785             }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1786             for (i = 0; i < 
d->nvqs; ++i) {
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1787                     struct 
vhost_virtqueue *vq;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1788                     void 
__user *base = (void __user *)(unsigned long)p;
3ab2e420ec1caf4 Asias He           2013-04-27  1789                     vq = 
d->vqs[i];
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1790                     
mutex_lock(&vq->mutex);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1791                     /* If 
ring is inactive, will check when it's enabled. */
ea16c51433510f7 Michael S. Tsirkin 2014-06-05  1792                     if 
(vq->private_data && !vq_log_access_ok(vq, base))
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1793                             
r = -EFAULT;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1794                     else
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1795                             
vq->log_base = base;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1796                     
mutex_unlock(&vq->mutex);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1797             }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1798             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1799     case VHOST_SET_LOG_FD:
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14 @1800             r = 
get_user(fd, (int __user *)argp);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1801             if (r < 0)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1802                     break;
d25cc43c6775bff Eric Biggers       2018-01-06  1803             ctx = fd == -1 
? NULL : eventfd_ctx_fdget(fd);
d25cc43c6775bff Eric Biggers       2018-01-06  1804             if 
(IS_ERR(ctx)) {
d25cc43c6775bff Eric Biggers       2018-01-06  1805                     r = 
PTR_ERR(ctx);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1806                     break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1807             }
d25cc43c6775bff Eric Biggers       2018-01-06  1808             swap(ctx, 
d->log_ctx);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1809             for (i = 0; i < 
d->nvqs; ++i) {
3ab2e420ec1caf4 Asias He           2013-04-27  1810                     
mutex_lock(&d->vqs[i]->mutex);
3ab2e420ec1caf4 Asias He           2013-04-27  1811                     
d->vqs[i]->log_ctx = d->log_ctx;
3ab2e420ec1caf4 Asias He           2013-04-27  1812                     
mutex_unlock(&d->vqs[i]->mutex);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1813             }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1814             if (ctx)
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1815                     
eventfd_ctx_put(ctx);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1816             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1817     default:
935cdee7ee15956 Michael S. Tsirkin 2012-12-06  1818             r = 
-ENOIOCTLCMD;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1819             break;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1820     }
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1821  done:
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1822     return r;
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1823  }
6ac1afbf6132df0 Asias He           2013-05-06  1824  
EXPORT_SYMBOL_GPL(vhost_dev_ioctl);
3a4d5c94e959359 Michael S. Tsirkin 2010-01-14  1825  

:::::: The code at line 1603 was first introduced by commit
:::::: 3a4d5c94e959359ece6d6b55045c3f046677f55c vhost_net: a kernel-level 
virtio server

:::::: TO: Michael S. Tsirkin <[email protected]>
:::::: CC: David S. Miller <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to