Commit Graph

125 Commits

Author SHA1 Message Date
Dariusz Stojaczyk
7e0951d7f5 bdev_virtio: ensure thread safety for virtio_dev unregister
The io_device_unregister callback might be
deferred and called on a different core, but
the virtio device has to be released from
the same thread that created it. Hence, once
the unregister callback is called, it has
to send yet another msg to the vdev-owning
thread. Since all virtio devices are currently
created on the same thread, no mutexes are
needed. They will need to be introduced once
we publish the API to connect to virtio
controllers.

This patch also defers bdev_virtio module-
-finish until all virtio_devs are destroyed.

Change-Id: Iaafceefa1e862b839b5db8c6c4975bf51441a083
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/388835
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2017-11-27 12:18:24 -05:00
Dariusz Stojaczyk
ba9528c97b rte_virtio: bind virtqueues to spdk_threads instead of lcores
This will allow us to send a message
to a virtqueue via spdk_thread_send_msg.

Change-Id: I8502f27e74de107bc5e5ccf2939448896579acc2
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/388834
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-27 11:43:58 -05:00
Dariusz Stojaczyk
5e8ec497d4 bdev_virtio: use a single io_device per virtio_dev
We previously used a separate io_device
for each bdev created from a virtio_dev.
The new approach makes us reuse the same
io_channel for different bdevs on the same
core. It also provides a built-in safety
check for freeing virtio_dev only when
all io_channels on this device have been
closed.

Change-Id: Iaae66964f90aa3cef95ed2e261c6f3dfb2f26caa
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/388505
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-27 11:40:41 -05:00
Dariusz Stojaczyk
f7370b65bd rte_virtio: rename virtio_pci_ops to virtio_dev_ops
Removed another vtpci leftover.

Change-Id: I3bcc200a07ff82adf824c4a5579644ec906e86da
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385626
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
ec0b92faf2 rte_virtio: removed virtio_dev conversion macros
The vdev->ctx conversion is now
straighforward and doesn't need
any macro.

Change-Id: I88b0cf3fa5e95b93e5f69a0a3ae9508f9fac3683
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385625
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
d42de5c864 rte_virtio: renamed virtio_dev.h to virtio.h
This is a single header file that
provides access to all virtio initiator
capabilities. This is a preparation
to exporting rte_virtio as a separate
spdk lib. Also renamed virtio_dev.c.

Change-Id: If45a0cadc61943b6ffd87cf70a59321a83b238a6
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385624
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
9daed64edb rte_virtio/user: removed virtio_user_dev.h
It's contents have been moved to
virtio_user/vhost.h and virtio_dev.h.
The virtio_user_dev struct can't be hidden
in virtio_user.c (similarly to the virtio_hw),
due to another abstraction layer in virtio_user
- vhost-user and vhost-kernel. Even though only
vhost-user is implemented now, let's not close
the possibility to implement vhost-kernel in
the future. The vhost-user/vhost-kernel code
should probably be placed in separate files,
with the virtio_user_dev struct in common
vhost.h header.

Change-Id: I36ee96eff30b398dd129953a874513e727619f98
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385622
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
136eb1150a rte_virtio: removed virtio_user_dev.c
Moved it's contents to virtio_user.c.
Having this logic separated across
multiple files doesn't make much sense.

Change-Id: Ib2daaa56e1b3d755d9476abca247c7cbcfa7096b
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385621
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
ad1c9bd791 rte_virtio/user: use linux virtio includes
Removed internal copy of virtio
structures.

Change-Id: Ie66e6717e3313e089565189e5377491af793640a
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385620
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
21f46353a5 rte_virtio: remove vtpci references
Renamed all vtpci functions.
While here, also added some documentation.

Change-Id: Id24aaab8c5b556b969c60ee1c95b9d46936ea13d
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385426
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
38a22db999 rte_virtio: remove virtio_pci.h
virtio_hw struct definition is now hidden
in virtio_pci.c. The API to enumerate all
PCI devices is available through virtio_dev.h.

Change-Id: Ib9c968732d9f78204e9664c426ad99542cfe8c93
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385425
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
f69d819fae rte_virtio: move vtpci code to virtio_dev.c/.h
The vtpci layer is about to be removed.
This is only 1:1 code move, all functions
will be renamed/refactored in future patches.

Change-Id: I63c1b30fdaf6eff2e5d8bf60e62c87c2cb9f2b15
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385424
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
a8c375ad77 rte_virtio: remove vtpci_internal
Now that legacy PCI support has
been dropped, we can safely assume
there's only one backend type
per device. So the vtpci_internal
- containing process-local data -
can be removed.

Change-Id: I15d87a280b74318c7a44ee60ce3408756d1f5a69
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385423
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
79f99ccce0 rte_virtio: add virtio_dev->ctx field
This patch initiates the removal
of the vtpci layer from rte_virtio.

The general idea is to provide separate
virtio_dev_construct and virtio_dev_init
functions. construct would just allocate
and setup the struct data. init would
be the one to start the device via
MMIO/vhost-user. virtio_dev_construct
takes 2 params - backend ops and backend
context. The context is kept as void*
and can be cast to proper structs inside
backend ops callbacks.

Change-Id: I1d6d92e1cf09b9d0c9fa4fd2cb70203e3fc7e65b
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/387553
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
d2fd8dd93c rte_virtio/user: operate on virtio_dev structs where possible
We currently pass virtio_user_dev as
an argument to various function in belief
they will access the virtio_dev via
virtio_user_dev->vdev field. However,
this field is about to be removed soon.

This patch is a mid-step towards a bigger
change. See the next patch for details.

Change-Id: Ie684aa1614d9777d79d350bbfda79effe2a2d5f6
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385422
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
bcaaae7e8c rte_virtio/user: inline virtio_user_dev_uninit function
It's been only used in 1 place.

Change-Id: I0b7c9cdb809a6946eda5ee361362dec86e57b4ef
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385623
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
da5ba48996 rte_virtio: move vtpci reset out of virtio_dev_free
This is required for future changes.
The general idea is to provide separate
virtio_dev_construct and virtio_dev_init
functions. construct would just allocate
and setup the struct data, while init
would be the one to start the device via
MMIO/vhost-user. If we want to destruct
a non-initialized device, there's no
need to do a reset.

Change-Id: Ib8ce56169e86e43fba8fcd1bf6c2a5b12ed99966
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385421
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
191b45d056 rte_virtio: remove interrupt-related callbacks
Even though config change intrrupt
handlers are still required, we need
them only for real PCI devices.
They should be handled internally
in vhost_pci.

However, current QEMU implementation
doesn't ever change SCSI PCI config,
so no interrupt handler is required
for now.

We might want to add it together with
Virtio-Blk, as PCI config will change
there with each resize.

Change-Id: Iece024cd31c788857ce900385e289758ca3f5948
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385304
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
6a026a1ebf rte_virtio: remove vtpci_reinit_complete()
It's been only used in 1 place.

Change-Id: I3e933d3fb0816ea30f983fb3de69ce49238c3b72
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385303
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
2017-11-21 17:21:00 -05:00
Dariusz Stojaczyk
c138dfe229 dpdk: include rte_config.h where necessary
DPDK 17.11 removed all rte_config.h includes
from rte_*.h headers, meaning we should either
use gcc param -include rte_config.h (just
like DPDK does), or include this file before
each other rte_*.h include. Since we're using
the latter approach in many places already,
I decided to follow it.

While here, also removed rte_vdev.h dependency
from rte_virtio/virtio_user.c. It's not used
anyway.

Change-Id: I865ee9f828211c03a60fd0446f7a418d5dddd140
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/387653
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2017-11-15 17:52:05 -05:00
Dariusz Stojaczyk
3c293a883c rte_virtio: remove legacy PCI device support
Legacy PCI code is hard to maintain
and compiles with DPDK 17.05 only.
If we ever need this functionality
in SPDK, we should first add proper
env/pci layer for direct UIO/VFIO
communication, and then revisit this
topic.

Change-Id: I25622c16f467633e01003c9edbb7e6f297c68a86
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385302
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2017-11-15 17:52:05 -05:00
Daniel Verkamp
872fdc8e41 bdev/virtio: check if unmap is supported via VPD page
As part of the SCSI target scan, request the Block Thin Provisioning VPD
page to determine if the target device supports Unmap, and report it via
the io_type_supported bdev callback.

Change-Id: Id2fdaf3a2cae72e6356a862d40ff772f9d12d144
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/384131
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
2017-10-30 12:17:50 -04:00
Daniel Verkamp
5304beccd3 bdev/virtio: move scan results into a structure
This prepares for adding more steps to the scanning phase.  Each step
will put its results into the scan info struct, and the final
alloc_virtio_disk() call will copy the info to the allocated disk at the
end of each target scan.

Change-Id: I836ada42e25c817bb1998328cb592acac25be08d
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/384130
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
2017-10-30 12:17:50 -04:00
Dariusz Stojaczyk
5447fb12a9 bdev_virtio: fix scan inquiry alloc_len
Some devices expect alloc_len
to be the same as payload len.

Kernel vhost-scsi reports:
Expected Transfer Length: 256 does
not match SCSI CDB Length: 255 for
SAM Opcode: 0x12.

Change-Id: I499290c207b77be6757441da002f9fcc9eebcecd
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/383779
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-10-27 13:07:25 -04:00
Dariusz Stojaczyk
cfa668375b bdev_virtio: retry sending scan requests
Scan requests will be re-sent
if non-critical failure has
happened.

This is actually required, as
some Virtio SCSI devices require
a dummy request to clear it's
POWER ON OCCURED unit attention
status after Virtio device init.
The very first request might fail
with asc = 0x29 (POWER ON, RESET,
OR BUS RESET OCCURED), but
subsequent requests will be
processed correctly.

Change-Id: I809bfe7952062995078f33dccb92192d722e6574
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/383689
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-10-27 13:07:25 -04:00
Dariusz Stojaczyk
071cc42c7b bdev_virtio: remove internal README.md
The *TODO* section was outdated. Most of
this README's contents have been already
moved to doc/virtio.md and doc/bdev.md.

Change-Id: I2f2108afdc543276c9f08ae053ccebdbd6b1a229
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/384054
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-27 11:02:48 -04:00
Dariusz Stojaczyk
a17d431612 bdev_virtio: fix setting name for modern pci devices
It used to be NULL.

Fixes: a85a4452
("bdev_virtio/rpc: add construct_virtio_user_scsi_bdev")

Change-Id: I490b41571e5667cf95b59b2e316006d1ef7381e8
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/383892
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-10-26 15:09:57 -04:00
Pawel Wodkowski
a85a4452f3 bdev_virtio/rpc: add construct_virtio_user_scsi_bdev
Change-Id: I2a351442ead0874d98bdfb23079a723d7665dbb1
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/381186
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-10-25 18:31:56 -04:00
Daniel Verkamp
d822c2055e rte_virtio: check payload size in vhost_user_read
Make sure the recv() can't write beyond the end of the msg buffer.

Change-Id: Ibc4bb51ac3a1c2a027a458d59356b7a5496eca7e
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/383646
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
2017-10-25 18:30:18 -04:00
Daniel Verkamp
22077b210b rte_virtio: use size_t/ssize_t in vhost_user_read
Use the correct size types (rather than int) for values passed to and
returned from recv().

Change-Id: I2d38eed63e2d9c9f056d1053e156088fd361c88b
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/383645
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
2017-10-25 18:30:18 -04:00
Daniel Verkamp
e50cc5fd45 scripts/check_format: check trailing whitespace
Fix up the two existing instances of trailing whitespace in text files,
and add a check to enforce that no new trailing whitespace is added.

Change-Id: I2197bed69bb356142aa6d2e4e8261c7434dd358b
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/383291
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-24 17:35:23 -04:00
Daniel Verkamp
ba90c8876e rte_virtio: use spdk/stdinc.h
Replace POSIX and standard C #includes with the central SPDK stdinc.h
and remove the rte_virtio exclusion from header checking in
scripts/check_format.sh

Change-Id: Ie53d11de7cd9a51c59957e3c500bd8b9b4c4bc5e
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/383003
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-24 17:19:44 -04:00
Daniel Verkamp
94678ad9ee rte_virtio: reformat with check_format.sh
Remove the exclusion of the rte_virtio code from scripts/check_format.sh
since we will be maintaining this code going forward (unlike rte_vhost,
which we intend to keep up to date with upstream DPDK).

Change-Id: I30c186e566ca777dff552a36af53443d197a8824
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/383002
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-24 17:19:44 -04:00
Daniel Verkamp
f26983fa07 rte_virtio: move pci_dump_json_config out of #ifdef
pci_dump_json_config() is used for both legacy and modern PCI virtio
devices, so move it out of the #ifdef PCI_LEGACY_SUPPORT so it is
available when building against older DPDK versions.

Change-Id: I986f9e6a81abda64d77f954b15807d06e35d1748
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/383487
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
2017-10-23 15:35:14 -04:00
Dariusz Stojaczyk
fb99e9e644 rte_virtio: disable legacy PCI for dpdk < 17.05-rc4
17.05-rc4 is the version e.g.
rte_pci_ioport_read function was
introduced in. The bdev_virtio
module previously did not compile
with older DPDK versions.

Change-Id: Ib96d5d7934166acc552515b02bfba25b71929438
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382829
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-10-23 12:33:58 -04:00
Pawel Wodkowski
17a302a138 bdev_virtio/rpc: implement dump json config RPC
Change-Id: Ieb0e69743da893659538c37c37d6ee8802080b86
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/381986
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-19 19:05:01 -04:00
Dariusz Stojaczyk
97a3b814e0 rte_virtio: fix vdev->max_queues
We interpeted max request queue
count as number of all queues.
It did not take into account
eventq and controlq.

This patch also fixes overall
max_queues negotiation for
modern PCI devices.

Fixes 8b0a4a3 ("bdev_virtio: implement multiqueue")

Change-Id: I834cb973772ca5946ac26d18bd3eeb2783f48ea9
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382816
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-10-19 13:00:51 -04:00
Dariusz Stojaczyk
770dcb0006 rte_virtio: fix setting NEXT flag for the last chain descriptor
It was wrongly assumed that
each READ will contain at least
one iovec. This could potentially
corrupt the desc array.

Change-Id: I48ca7efbe4bea897e0ad16184452bddcf3daf49b
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/383009
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
2017-10-19 10:56:21 -04:00
Dariusz Stojaczyk
a922e9f302 bdev_virtio: add xmit_pkt error handling for target scan
Only the initial xmit_pkt is checked
against an error, the subsequent
xmits are just asserted. As scan
messages are sent 1-by-1 if the first
request (containing 3 iovectors) has
been enqueued successfully so should
the next ones.

Change-Id: Ie102256a42ef1c67132d606af90ab96771adba10
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382784
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-19 10:56:21 -04:00
Dariusz Stojaczyk
f35ca8f7df bdev_virtio: properly handle full-queue scenario
In case of not enough free descriptors
the bdev_virtio will fail the I/O with
NOMEM status.

Change-Id: I1cb0cd5453ff70468898bc8e414b53b9c64dbe50
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382783
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
2017-10-19 10:56:21 -04:00
Dariusz Stojaczyk
c6ba3fe473 bdev_virtio: set unique name for the bdevs
Previously all bdevs were using
hardcoded name Virtio0.

Change-Id: Ib990027a0edd4e200aa4b6f4689ccb9e0824a9c3
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382926
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
2017-10-19 00:34:12 -04:00
Dariusz Stojaczyk
3070826140 bdev_virtio: explicitly return -1 on channel creation failure
This doesn't change any behavior
as queue_idx was always either
0 or -1, but makes it clear that
this function always returns
-1 on error. This is required
by current io_channel implementation.

Change-Id: I2b613ab9ff1e48d5b4aee0cd499bbc0a04cb765c
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382927
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
2017-10-19 00:33:06 -04:00
Cunyin Chang
23ec116cbb bdev/virtio: Fix the compile bug.
Change-Id: I790b5cc9147182e106ac6d1fbd66ab95c4beec01
Signed-off-by: Cunyin Chang <cunyin.chang@intel.com>
Reviewed-on: https://review.gerrithub.io/383038
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-19 00:02:09 -04:00
Daniel Verkamp
8eef5183d3 bdev: remove spdk_bdev_poller_start() lcore option
Always start bdev pollers on the calling core.

This removes the lcore concept from the bdev poller abstraction and
simplifies the job of spdk_bdev_initialize() callers providing their own
poller and event implementations.

All callers except the NVMe bdev hotplug poller already used the current
core as the parameter.  The NVMe HotplugPollCore option was undocumented
and unused in any of the tests or example configuration files, so it
should be safe to remove.

Change-Id: I93b466e1e58901b8785c40cbe296fa46c157850f
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/382857
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-18 20:28:29 -04:00
Dariusz Stojaczyk
19ddb108de bdev_virtio: implement controlq and RESETs
A single thread that initialized
bdev_virtio subsystem will be used
to poll control queues for all
virtio devices.

Every io_channel will put it's e.g.
RESET requests to the controlq MP-SC
spdk_ring. The controlq poller will
dequeue these requests and put them
into the virtio queue. The same
poller will then poll for completions
and send them to proper threads
that submitted given requests.

Change-Id: I90ae7c5d76dc89cc52ff69cf2a60e27a9314557c
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382201
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-10-18 13:08:45 -04:00
Dariusz Stojaczyk
eba48d825c rte_virtio: add missing if() brackets
Some error messages were printed
outside of the error-checking
if() condition.

Fixes: bd273d4 ("rte_vhost: replace strerror() with spdk_strerror_r()")

Change-Id: Icf965ae56ffc2e0970572308b38607ac63cdb1f2
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382943
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
2017-10-18 13:00:34 -04:00
Daniel Verkamp
80b44ea20f rte_virtio: remove unused PCI ID #defines
These #defines are not currently used, and they have equivalents already
defined in spdk/pci_ids.h:

VIRTIO_PCI_VENDORID == SPDK_PCI_VID_VIRTIO
VIRTIO_PCI_DEVICEID_SCSI_MODERN == PCI_DEVICE_ID_VIRTIO_SCSI_MODERN

Change-Id: I0016ab0a26f4aa7ff4a5ee10f66da867b590e0e6
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/382734
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-17 15:26:43 -04:00
Daniel Verkamp
3501062e53 bdev/virtio: clean up unused/duplicate #includes
Change-Id: Ia0dcddd29f75938cad6e7bfe23ab64909ecc1669
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/382733
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-17 15:26:43 -04:00
Daniel Verkamp
bd273d4789 rte_vhost: replace strerror() with spdk_strerror_r()
strerror() is potentially not thread safe; use the thread-safe SPDK
wrapper instead.

Change-Id: I5f6f4b0b19a0298b07f71f05aee4574e8b21f5fa
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/382732
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2017-10-17 15:26:43 -04:00
Dariusz Stojaczyk
f67dddc6f4 bdev_virtio: fix memleak on init failure
This patch also introduces
vq->poller_ctx. It will be later
reused for per-virtqueue task pools
to allow multiple threads using
the same virtqueue.

Since at the time of scanning there
is no I/O traffic, this field is
now being used to keep scan base
pointer. It has to be freed if an
initialization error occurs.

Change-Id: Ia54ee6c8402d38218dc811b4994761105d17269a
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/382199
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
2017-10-17 15:21:09 -04:00