* Re: [PATCH 1/3] virtio: update reset callback to return status
[not found] <20210407120924.133294-1-mgurtovoy@nvidia.com>
@ 2021-04-07 13:44 ` Cornelia Huck
[not found] ` <20210407120924.133294-2-mgurtovoy@nvidia.com>
2021-04-07 17:51 ` [PATCH 1/3] virtio: update reset callback to return status kernel test robot
2 siblings, 0 replies; 3+ messages in thread
From: Cornelia Huck @ 2021-04-07 13:44 UTC (permalink / raw)
To: Max Gurtovoy; +Cc: kvm, mst, virtualization, nitzanc, oren
On Wed, 7 Apr 2021 12:09:22 +0000
Max Gurtovoy <mgurtovoy@nvidia.com> wrote:
> The reset device operation, usually is an operation that might fail from
> various reasons. For example, the controller might be in a bad state and
> can't answer to any request. Usually, the paravirt SW based virtio
> devices always succeed in reset operation but this is not the case for
> HW based virtio devices.
>
> This commit is also a preparation for adding a timeout mechanism for
> resetting virtio devices.
>
> Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
> ---
> drivers/remoteproc/remoteproc_virtio.c | 3 ++-
> drivers/virtio/virtio.c | 22 +++++++++++++++-------
> drivers/virtio/virtio_mmio.c | 3 ++-
> drivers/virtio/virtio_pci_legacy.c | 3 ++-
> drivers/virtio/virtio_pci_modern.c | 3 ++-
> drivers/virtio/virtio_vdpa.c | 3 ++-
> include/linux/virtio_config.h | 5 +++--
> 7 files changed, 28 insertions(+), 14 deletions(-)
You missed drivers/s390/virtio/virtio_ccw.c.
virtio_ccw_reset() should probably return -ENOMEM on allocation failure
and forward the return code of ccw_io_helper().
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/3] virito_pci: add timeout to reset device operation
[not found] ` <20210407120924.133294-2-mgurtovoy@nvidia.com>
@ 2021-04-07 13:45 ` Michael S. Tsirkin
0 siblings, 0 replies; 3+ messages in thread
From: Michael S. Tsirkin @ 2021-04-07 13:45 UTC (permalink / raw)
To: Max Gurtovoy; +Cc: nitzanc, oren, kvm, virtualization
On Wed, Apr 07, 2021 at 12:09:23PM +0000, Max Gurtovoy wrote:
> According to the spec after writing 0 to device_status, the driver MUST
> wait for a read of device_status to return 0 before reinitializing the
> device. In case we have a device that won't return 0, the reset
> operation will loop forever and cause the host/vm to stuck. Set timeout
> for 3 minutes before giving up on the device.
>
> Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
> ---
> drivers/virtio/virtio_pci_modern.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
> index cc3412a96a17..dcee616e8d21 100644
> --- a/drivers/virtio/virtio_pci_modern.c
> +++ b/drivers/virtio/virtio_pci_modern.c
> @@ -162,6 +162,7 @@ static int vp_reset(struct virtio_device *vdev)
> {
> struct virtio_pci_device *vp_dev = to_vp_device(vdev);
> struct virtio_pci_modern_device *mdev = &vp_dev->mdev;
> + unsigned long timeout = jiffies + msecs_to_jiffies(180000);
>
> /* 0 status means a reset. */
> vp_modern_set_status(mdev, 0);
> @@ -169,9 +170,16 @@ static int vp_reset(struct virtio_device *vdev)
> * device_status to return 0 before reinitializing the device.
> * This will flush out the status write, and flush in device writes,
> * including MSI-X interrupts, if any.
> + * Set a timeout before giving up on the device.
> */
> - while (vp_modern_get_status(mdev))
> + while (vp_modern_get_status(mdev)) {
> + if (time_after(jiffies, timeout)) {
> + dev_err(&vdev->dev, "virtio: device not ready. "
> + "Aborting. Try again later\n");
> + return -EAGAIN;
> + }
> msleep(1);
> + }
> /* Flush pending VQ/configuration callbacks. */
> vp_synchronize_vectors(vdev);
> return 0;
Problem is everyone just ignores the return code from reset.
Timing out like that has a chance to cause a lot of trouble
if the device remains active - we need to make reset robust.
What exactly is going on with the device that
get status never returns 0? E.g. maybe it's in a state
where it's returning all 1's because it's wedged permanently -
using that would be better...
> --
> 2.25.4
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/3] virtio: update reset callback to return status
[not found] <20210407120924.133294-1-mgurtovoy@nvidia.com>
2021-04-07 13:44 ` [PATCH 1/3] virtio: update reset callback to return status Cornelia Huck
[not found] ` <20210407120924.133294-2-mgurtovoy@nvidia.com>
@ 2021-04-07 17:51 ` kernel test robot
2 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2021-04-07 17:51 UTC (permalink / raw)
To: Max Gurtovoy, mst, kvm, virtualization, jasowang
Cc: Max Gurtovoy, clang-built-linux, nitzanc, kbuild-all, oren
[-- Attachment #1: Type: text/plain, Size: 10757 bytes --]
Hi Max,
I love your patch! Yet something to improve:
[auto build test ERROR on vhost/linux-next]
[also build test ERROR on linus/master v5.12-rc6 next-20210407]
[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/Max-Gurtovoy/virtio-update-reset-callback-to-return-status/20210407-201026
base: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git linux-next
config: s390-randconfig-r032-20210407 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project c060945b23a1c54d4b2a053ff4b093a2277b303d)
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 s390 cross compiling tool for clang build
# apt-get install binutils-s390x-linux-gnu
# https://github.com/0day-ci/linux/commit/74d4580725028f138a4713e8594f9068e9c83805
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Max-Gurtovoy/virtio-update-reset-callback-to-return-status/20210407-201026
git checkout 74d4580725028f138a4713e8594f9068e9c83805
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
#define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
^
include/uapi/linux/swab.h:119:21: note: expanded from macro '__swab32'
___constant_swab32(x) : \
^
include/uapi/linux/swab.h:19:12: note: expanded from macro '___constant_swab32'
(((__u32)(x) & (__u32)0x000000ffUL) << 24) | \
^
In file included from drivers/s390/virtio/virtio_ccw.c:12:
In file included from include/linux/memblock.h:14:
In file included from arch/s390/include/asm/dma.h:5:
In file included from arch/s390/include/asm/io.h:80:
include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
#define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
^
include/uapi/linux/swab.h:119:21: note: expanded from macro '__swab32'
___constant_swab32(x) : \
^
include/uapi/linux/swab.h:20:12: note: expanded from macro '___constant_swab32'
(((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \
^
In file included from drivers/s390/virtio/virtio_ccw.c:12:
In file included from include/linux/memblock.h:14:
In file included from arch/s390/include/asm/dma.h:5:
In file included from arch/s390/include/asm/io.h:80:
include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
#define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
^
include/uapi/linux/swab.h:119:21: note: expanded from macro '__swab32'
___constant_swab32(x) : \
^
include/uapi/linux/swab.h:21:12: note: expanded from macro '___constant_swab32'
(((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \
^
In file included from drivers/s390/virtio/virtio_ccw.c:12:
In file included from include/linux/memblock.h:14:
In file included from arch/s390/include/asm/dma.h:5:
In file included from arch/s390/include/asm/io.h:80:
include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
#define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
^
include/uapi/linux/swab.h:119:21: note: expanded from macro '__swab32'
___constant_swab32(x) : \
^
include/uapi/linux/swab.h:22:12: note: expanded from macro '___constant_swab32'
(((__u32)(x) & (__u32)0xff000000UL) >> 24)))
^
In file included from drivers/s390/virtio/virtio_ccw.c:12:
In file included from include/linux/memblock.h:14:
In file included from arch/s390/include/asm/dma.h:5:
In file included from arch/s390/include/asm/io.h:80:
include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
#define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
^
include/uapi/linux/swab.h:120:12: note: expanded from macro '__swab32'
__fswab32(x))
^
In file included from drivers/s390/virtio/virtio_ccw.c:12:
In file included from include/linux/memblock.h:14:
In file included from arch/s390/include/asm/dma.h:5:
In file included from arch/s390/include/asm/io.h:80:
include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writeb(value, PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
__raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
~~~~~~~~~~ ^
include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
readsb(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
readsw(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
readsl(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
writesb(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
writesw(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
writesl(PCI_IOBASE + addr, buffer, count);
~~~~~~~~~~ ^
>> drivers/s390/virtio/virtio_ccw.c:1016:11: error: incompatible function pointer types initializing 'int (*)(struct virtio_device *)' with an expression of type 'void (struct virtio_device *)' [-Werror,-Wincompatible-function-pointer-types]
.reset = virtio_ccw_reset,
^~~~~~~~~~~~~~~~
20 warnings and 1 error generated.
vim +1016 drivers/s390/virtio/virtio_ccw.c
971bedca26e037 drivers/s390/virtio/virtio_ccw.c Cornelia Huck 2019-01-21 1008
0db1dba5dfaf70 drivers/s390/virtio/virtio_ccw.c Bhumika Goyal 2017-01-14 1009 static const struct virtio_config_ops virtio_ccw_config_ops = {
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1010 .get_features = virtio_ccw_get_features,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1011 .finalize_features = virtio_ccw_finalize_features,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1012 .get = virtio_ccw_get_config,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1013 .set = virtio_ccw_set_config,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1014 .get_status = virtio_ccw_get_status,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1015 .set_status = virtio_ccw_set_status,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 @1016 .reset = virtio_ccw_reset,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1017 .find_vqs = virtio_ccw_find_vqs,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1018 .del_vqs = virtio_ccw_del_vqs,
971bedca26e037 drivers/s390/virtio/virtio_ccw.c Cornelia Huck 2019-01-21 1019 .bus_name = virtio_ccw_bus_name,
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1020 };
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1021
7e64e0597fd67c drivers/s390/kvm/virtio_ccw.c Cornelia Huck 2012-12-14 1022
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 16026 bytes --]
[-- Attachment #3: Type: text/plain, Size: 183 bytes --]
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-04-07 17:52 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20210407120924.133294-1-mgurtovoy@nvidia.com>
2021-04-07 13:44 ` [PATCH 1/3] virtio: update reset callback to return status Cornelia Huck
[not found] ` <20210407120924.133294-2-mgurtovoy@nvidia.com>
2021-04-07 13:45 ` [PATCH 2/3] virito_pci: add timeout to reset device operation Michael S. Tsirkin
2021-04-07 17:51 ` [PATCH 1/3] virtio: update reset callback to return status kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).