summaryrefslogtreecommitdiffstats
path: root/sys/dev/virtio
Commit message (Collapse)AuthorAgeFilesLines
* MFC r270063 (vtnet)bryanv2014-08-241-0/+37
| | | | | The vtnet changes were not originally merged in r270252 since r268480 and r268481 had not been MFC'ed.
* MFC r268481:bryanv2014-08-222-65/+155
| | | | | | | | | | | | Rework when the Tx queue completion interrupt is enabled The Tx interrupt is now kept disabled in the common case, only enabled when the number of free descriptors in the queue falls below a threshold. Transmitted frames are cleared from the VQ before subsequent transmit, or in the watchdog timer. This was a very big performance improvement for an experimental Netmap bhyve backend.
* MFC r268480:bryanv2014-08-212-0/+8
| | | | Add accessor to get the number of free descriptors in the virtqueue
* MFC 260847,264055,264867:jhb2014-07-211-0/+231
| | | | | | | - Add a very simple virtio_random(4) driver for FreeBSD guests to harvest entropy from hypervisors. - Add support to bhyve for the virtio RNG entropy-source device to provide entry to bhyve guests.
* MFC r267520, r267521, r267522, r267523, r267524:bryanv2014-06-298-42/+39
| | | | | | | | | | - Remove two write-only local variables - Remove unused element in the vtnet_rxq structure - Remove kernel specific macro out of the VirtIO PCI header file - Move the VIRTIO_RING_F_* defines out of virtqueue.h into virtio_config.h - Make the feature negotiation code easier to follow - Force two byte alignment for all control message headers
* MFC r267313:bryanv2014-06-171-1/+1
| | | | Always append new bios to the tail of the queue, instead of sorting them
* MFC r266951:bryanv2014-06-106-54/+125
| | | | | | | | Split the virtio.h header file into multiple files Reorganize the previous contexts of the file as it is in Linux. The eventual goal is to install the header files and share them between the kernel and bhyve.
* MFC svn 267065 and 267187luigi2014-06-091-2/+1
| | | | | | | | | | | | | | make sure ifp->if_transmit returns 0 if a buffer is enqueued. This should also be merged to stable/9. After this fix, drivers still known to have this bug are igxbe/ixv and i40e. Drivers using if_transmit are correct, and so are most of the other drivers that reassing if_transmit. Among other things, this bug causes panics when using netmap emulation on top of generic drivers.
* MFC r261150, r261151, r261164, r261166, r261167, r261168, r261394, r261395:bryanv2014-05-032-86/+129
| | | | | | | | | | | | - Read and write the MAC address in the config space byte by byte - Also include the mbuf's csum_flags in an assert message - Remove stray space - Move duplicated transmit start code into a single function - Avoid queue unlock followed by relock when the enable interrupt race is lost - Check for a full virtqueue in the multiqueue transmit path - Do not place the sglist used for Rx/Tx on the stack - Use m_defrag() instead of m_collapse() to compact a long mbuf chain
* MFC r261147:bryanv2014-05-031-34/+64
| | | | | | Remove spaces before tabs in the function prototype list MFC r261149: Read each field of the configuration individually
* MFC r260583: Add unmapped IO support to virtio_scsi(4)bryanv2014-01-181-1/+4
|
* MFC r260582: Add unmapped IO support to virtio_blk(4)bryanv2014-01-181-3/+4
|
* MFC r260566: Remove incorrect bit shift when assigning the LUN request fieldbryanv2014-01-181-1/+1
|
* Do not hold the vtnet Rx queue lock when calling up into the stackbryanv2013-10-051-2/+6
| | | | | | This matches other similar drivers and avoids various LOR warnings. Approved by: re (marius)
* Complete any pending Tx frames before attempting the next transmitbryanv2013-09-032-0/+10
| | | | | | Also complete pending frames in the watchdog function when the EVENT_IDX feature was negotiated just in case the completion interrupt was postponed.
* Fix unintended compiler constant foldingbryanv2013-09-031-2/+2
| | | | Pointed out by: dim@
* Fix build with gcceadler2013-09-011-1/+1
| | | | | Reported by: Michael Butler <imb@protected-networks.net> Reviewed by: jilles
* Import multiqueue VirtIO net driver from my user/bryanv/vtnetmq branchbryanv2013-09-012-1326/+2540
| | | | | | This is a significant rewrite of much of the previous driver; lots of misc. cleanup was also performed, and support for a few other minor features was also added.
* Sync VirtIO net device header file from recent Linuxbryanv2013-09-011-3/+46
|
* Add optional VirtIO device method for post-attach notificationsbryanv2013-09-012-1/+15
| | | | | This is called after the parent device (ie virito_pci) has completed the device attachment/initialization.
* Add support for postponing VirtIO virtqueue interruptsbryanv2013-09-012-12/+32
| | | | | | | | | | Partial support for the EVENT_IDX feature was added a while ago, but this commit adds an interface for the device driver to hint how long (in terms of descriptors) the next interrupt should be delayed. The first user of this will be used to reduce VirtIO net's Tx completion interrupts.
* Different consumers of the struct vm_page abuse pageq member to keepkib2013-08-101-4/+4
| | | | | | | | | | | | | | | | | additional information, when the page is guaranteed to not belong to a paging queue. Usually, this results in a lot of type casts which make reasoning about the code correctness harder. Sometimes m->object is used instead of pageq, which could cause real and confusing bugs if non-NULL m->object is leaked. See r141955 and r253140 for examples. Change the pageq member into a union containing explicitly-typed members. Use them instead of type-punning or abusing m->object in x86 pmaps, uma and vm_page_alloc_contig(). Requested and reviewed by: alc Sponsored by: The FreeBSD Foundation
* Merge virtio_scsi change from projects/virtiobryanv2013-07-041-10/+3
| | | | | | | | | | | | | | | r252680: Fix SIM lock not owned panic The CAM locking requirements of registering an async callback has changed so the SIM lock must be held. Remove code that explicitly dropped the lock around the register. Also return CAM_SEL_TIMEOUT instead of CAM_TID_INVALID for bad targets to avoid a lot console spam during bus scans. MFC after: 1 month
* Merge virtio_pci changes from projects/virtiobryanv2013-07-043-201/+242
| | | | | | | | | | | | | | | | | | | | | | | This commit is primarily a significant cleanup to the interrupt allocation code that had gotten a bit jumbled from having to support per-vq MSIX, shared MSIX, MSI, and legacy style interrupts. Contains projects/virtio commits: r246064: virtio_pci: Rewrite allocation of interrupts r246065: virtio_pci: Remove spaces before a tab r246066: virtio_pci: Dynamically allocate the virtqueue array r246304: virtio_pci: Clean up after failed virtqueue alloc attempt r246305: virtio_pci: Move no interrupt check into the PCI interrupt handlers r246308: virtio_pci: Remove unused variable MFC after: 1 month
* Merge virtio changes from projects/virtiobryanv2013-07-0413-48/+41
| | | | | | | | | | | | | | | | | | | | | Contains projects/virtio commits: r245738: virtio: Minor man page tweaks r246060: virtio: Cleanup feature description printing r246306: virtio: Remove old debugging flag r247238: virtio: Remove PRIx64 macros from format strings r247239: virtio: Constify some fields r247240: virtio: Minor code simplifications r249962: virtio: Update to my freebsd.org email address MFC after: 1 month
* Merge vtnet changes from projects/virtiobryanv2013-07-041-2/+2
| | | | | | | | | | | | | | Minor changes to the network driver. A multiqueue driver that is a significant rewrite will be in merged shortly. Contains projects/virtio commits: r246058: vtnet: Move an mbuf ASSERT to the calling function r246059: vtnet: Tweak ASSERT message MFC after: 1 month
* Merge virtio_balloon changes from projects/virtiobryanv2013-07-041-23/+21
| | | | | | | | | | | | | | | | | | | Contains projects/virtio commits: r245717: virtio_balloon: Make the softc lock a regular mutex r245718: virtio_balloon: Remove two unuseful ASSERTs r245719: virtio_balloon: More verbose ASSERT messages r245720: virtio_balloon: Simplify lowmem handling in vtballoon_inflate() r252530: virtio_balloon: Use just a kthread instead of dedciated kproc r252568: virtio_balloon: Need to use kthread_exit() after r252530 MFC after: 1 month
* Merge several virtio_blk changes from projects/virtiobryanv2013-07-042-26/+240
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The notable changes of this commit are support for disk resizing and chases updates to the spec regarding write caching. Contains projects/virtio commits: r245713: virtio_blk: Replace __FUNCTION__ with __func__ r245714: virtio_blk: Use more consistent mutex name r245715: virtio_blk: Print device name too if failed to reinit during dump r245716: virtio_blk: Remove an unuseful ASSERT r245723: virtio_blk: Record the vendor and device information r245724: virtio_blk: Add resize support r245726: virtio_blk: More verbose ASSERT messages r245730: virtio_blk: Tweak resize announcement message r246061: virtio_blk: Do not always read entire config r246062: virtio_blk: Use topology to set the stripe size/offset r246307: virtio_blk: Correct stripe offset calculation r246063: virtio_blk: Add support for write cache enable feature r246303: virtio_blk: Expand a comment r252529: virtio_blk: Improve write cache handling r252681: virtio_blk: Remove unneeded curly braces MFC after: 1 month
* Convert VirtIO to use ithreads instead of taskqueuesbryanv2013-07-0410-275/+110
| | | | | | | | | | | | | | | | | | | | | | Contains projects/virtio commits: r245709: Each VirtIO device was scheduling its own taskqueue(9) to do the off-level interrupt handling. ithreads(9) is the more nature way to do this. The primary motivation for this work to better support network multiqueue. r245710: virtio: Change virtqueue intr handlers to return void r245711: virtio_blk: Remove interrupt taskqueue r245721: vtnet: Remove interrupt taskqueue r245722: virtio_scsi: Remove interrupt taskqueue r245747: vtnet: Remove taskqueue fields missed in r245721 MFC after: 1 month
* Merge r250802 from bryanv/vtnetmq - Fix setting of the Rx filtersbryanv2013-06-151-2/+2
| | | | | | | | QEMU 1.4 made the descriptor requirement stricter - the size of buffer descriptor must exactly match the number of MAC addresses provided. PR: kern/178955 MFC after: 5 days
* MFprojects/camlock r248982:mav2013-04-141-1/+1
| | | | | | | | Stop abusing xpt_periph in random plases that really have no periph related to CCB, for example, bus scanning. NULL value is fine in such cases and it is correctly logged in debug messages as "noperiph". If at some point we need some real XPT periphs (alike to pmpX now), quite likely they will be per-bus, and not a single global instance as xpt_periph now.
* Only set the barrier flag if the feature was negotiatedbryanv2013-03-051-8/+41
| | | | | | | | | | | | | When the VirtIO barrier feature is not negotiated, the driver must enforce the proper ordering for BIO_ORDERED BIOs. All the in-flight BIOs must complete before starting the BIO, and the ordered BIO must complete before subsequent BIOs can start. Also fix a few whitespace nits. Reported by: neel Approved by: grehan (mentor) MFC after: 3 days
* Reform the busdma API so that new types may be added without modifyingkib2013-02-121-18/+21
| | | | | | | | | | | | | | | | | | | | | every architecture's busdma_machdep.c. It is done by unifying the bus_dmamap_load_buffer() routines so that they may be called from MI code. The MD busdma is then given a chance to do any final processing in the complete() callback. The cam changes unify the bus_dmamap_load* handling in cam drivers. The arm and mips implementations are updated to track virtual addresses for sync(). Previously this was done in a type specific way. Now it is done in a generic way by recording the list of virtuals in the map. Submitted by: jeff (sponsored by EMC/Isilon) Reviewed by: kan (previous version), scottl, mjacob (isp(4), no objections for target mode changes) Discussed with: ian (arm changes) Tested by: marius (sparc64), mips (jmallet), isci(4) on x86 (jharris), amd64 (Fabian Keil <freebsd-listen@fabiankeil.de>)
* virtio: Start taskqueues threads after attach cannot failbryanv2012-12-143-12/+9
| | | | | | | | | | If virtio_setup_intr() failed during boot, we would hang in taskqueue_free() -> taskqueue_terminate() for all the taskq threads to terminate. This will never happen since the scheduler is not running by this point. Reported by: neel, grehan Approved by: grehan (mentor)
* virtio_scsi: Remove duplicated linesbryanv2012-12-121-4/+1
| | | | | | | These must have been accidently copied from the if statement a few lines later. Also remove parameter name from function prototype. Approved by: grehan (mentor)
* Mechanically substitute flags from historic mbuf allocator withglebius2012-12-041-3/+3
| | | | malloc(9) flags in sys/dev.
* Fix build with PAE enabled. I doubt any code uses CAM_SCATTER_VALID ormav2012-10-121-2/+4
| | | | CAM_DATA_PHYS, or they ever correctly worked, but make this build at least.
* Virtio SCSI drivergrehan2012-10-115-0/+2742
| | | | | Submitted by: Bryan Venteicher bryanv at daemoninthecloset dot org Reviewed by: grehan
* Patch from Bryan to fix a virtqueue issue:grehan2012-10-111-4/+3
| | | | | | | | | | | virtqueue: Fix non-indirect virtqueues We really must walk the entire descriptor chain in order to append the to be free'd chain to the existing free chain. Submitted by: Bryan Venteicher (bryanv@daemoninthecloset.org) Reported by: cognet
* Revert previous commit...kevlo2012-10-101-1/+1
| | | | Pointyhat to: kevlo (myself)
* Prefer NULL over 0 for pointerskevlo2012-10-091-1/+1
|
* No need to leak these into the includer's namespace.grehan2012-09-131-0/+6
| | | | Submitted by: Bryan Venteicher bryanv at daemoninthecloset org
* Relax requirement of certain mb()sgrehan2012-09-131-2/+2
| | | | Submitted by: Bryan Venteicher bryanv at daemoninthecloset org
* Various VirtIO improvementsgrehan2012-07-1110-345/+532
| | | | | | | | | | | | | | | | | | | | | | | PCI: - Properly handle interrupt fallback from MSIX to MSI to legacy. The host may not have sufficient resources to support MSIX, so we must be able to fallback to legacy interrupts. - Add interface to get the (sub) vendor and device IDs. - Rename flags to VTPCI_FLAG_* like other VirtIO drivers. Block: - No longer allocate vtblk_requests from separate UMA zone. malloc(9) from M_DEVBUF is sufficient. Assert segment counts at allocation. - More verbose error and debug messages. Network: - Remove stray write once variable. Virtqueue: - Shuffle code around in preparation of converting the mb()s to the appropriate atomic(9) operations. - Only walk the descriptor chain when freeing if INVARIANTS is defined since the result is only KASSERT()ed. Submitted by: Bryan Venteicher (bryanv@daemoninthecloset.org)
* Do not include <sys/types.h> in the local headers. The .c files includingobrien2012-07-036-12/+0
| | | | them have already included <sys/param.h> before these headers are included.
* Sync with Bryan Venteicher's virtio git repo:grehan2012-04-161-1/+3
| | | | | | | d04e609bdd1973cc7d2e8b38b7dcfae057b0962d virtio_blk: Use correct temporary variable in vtblk_poll_request Obtained from: Bryan Venteicher bryanv at daemoninthecloset dot org
* Catch up with Bryan Venteicher's virtio git repo:grehan2012-04-147-102/+254
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | a8af6270bd96be6ccd86f70b60fa6512b710e4f0 virtio_blk: Include function name in panic string cbdb03a694b76c5253d7ae3a59b9995b9afbb67a virtio_balloon: Do the notify outside of the lock By the time we return from virtqueue_notify(), the descriptor will be in the used ring so we shouldn't have to sleep. 10ba392e60692529a5cbc1e9987e4064e0128447 virtio: Use DEVMETHOD_END 80cbcc4d6552cac758be67f0c99c36f23ce62110 virtqueue: Add support for VIRTIO_F_RING_EVENT_IDX This can be used to reduce the number of guest/host and host/guest interrupts by delaying the interrupt until a certain index value is reached. Actual use by the network driver will come along later. 8fc465969acc0c58477153e4c3530390db436c02 virtqueue: Simplify virtqueue_nused() Since the values just wrap naturally at UINT16_MAX, we can just subtract the two values directly, rather than doing 2's complement math. a8aa22f25959e2767d006cd621b69050e7ffb0ae virtio_blk: Remove debugging crud from 75dd732a There seems to be an issue with Qemu (or FreeBSD VirtIO) that sets the PCI register space for the device config to bogus values. This only seems to happen after unloading and reloading the module. d404800661cb2a9769c033f8a50b2133934501aa virtio_blk: Use better variable name 75dd732a97743d96e7c63f7ced3c2169696dadd3 virtio_blk: Partially revert 92ba40e65 Just use the virtqueue to determine if any requests are still inflight. 06661ed66b7a9efaea240f99f414c368f1bbcdc7 virtio_blk: error if allowed too few segments Should never happen unless the host provides use with a bogus seg_max value. 4b33e5085bc87a818433d7e664a0a2c8f56a1a89 virtio_blk: Sort function declarations 426b9f5cac892c9c64cc7631966461514f7e08c6 virtio_blk: Cleanup whitespace 617c23e12c61e3c2233d942db713c6b8ff0bd112 virtio_blk: Call disk_err() on error'd completed requests 081a5712d4b2e0abf273be4d26affcf3870263a9 virtio_blk: ASSERT the ready and inflight request queues are empty a9be2631a4f770a84145c18ee03a3f103bed4ca8 virtio_blk: Simplify check for too many segments At the cost of a small style violation. e00ec09da014f2e60cc75542d0ab78898672d521 virtio_blk: Add beginnings of suspend/resume Still not sure if we need to virtio_stop()/virtio_reinit() the device before/after a suspend. Don't start additional IO when marked as suspending. 47c71dc6ce8c238aa59ce8afd4bda5aa294bc884 virtio_blk: Panic when dealt an unhandled BIO cmd 1055544f90fb8c0cc6a2395f5b6104039606aafe virtio_blk: Add VQ enqueue/dequeue wrappers Wrapper functions managed the added/removing to the in-flight list of requests. Normally biodone() any completed IO when draining the virtqueue. 92ba40e65b3bb5e4acb9300ece711f1ea8f3f7f4 virtio_blk: Add in-flight list of requests 74f6d260e075443544522c0833dc2712dd93f49b virtio_blk: Rename VTBLK_FLAG_DETACHING to VTBLK_FLAG_DETACH 7aa549050f6fc6551c09c6362ed6b2a0728956ef virtio_blk: Finish all BIOs through vtblk_finish_bio() Also properly set bio_resid in the case of errors. Most geom_disk providers seem to do the same. 9eef6d0e6f7e5dd362f71ba097f2e2e4c3744882 Added function to translate VirtIO status to error code ef06adc337f31e1129d6d5f26de6d8d1be27bcd2 Reset dumping flag when given unexpected parameters 393b3e390c644193a2e392220dcc6a6c50b212d9 Added missing VTBLK_LOCK() in dump handler Obtained from: Bryan Venteicher bryanv at daemoninthecloset dot org
* Use pci_find_cap() instead of pci_find_extcap() to locate PCIjhb2012-03-031-2/+2
| | | | | | find capabilities as the latter API is deprecated for this purpose. MFC after: 2 weeks
* Catch up with Bryan Venteicher's virtio Hg repo:grehan2011-12-0610-79/+196
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | c162516 Remove vtblk_sector_size c162515 Wrap long license lines c162514 Remove vtblk_unit c162513 Wrap long lines in the license. c162512 Remove verbose messages when link goes up/down. A similar message is printed elsewhere as a result of if_link_state_change(). c162511 Explicity compare pointer to NULL c162510 Allocate the mac filter table at attach time. c162509 Add real BSD licenses to the header files copied from Linux. The chases upstream changes made in Linux awhile ago. c162508 Only notify if we actually dequeued something. c162507 Change a couple of if () { KASSERT(...) } to just KASSERTs. In non-debug kernels, the if() { } probably get optomized away, but I guess this is clearer. c162506 Remove VIRTIO_BLK_F_TOPOLOGY fields in the config. TOPOLOGY has since been removed from the spec, and the FreeBSD didn't really do anything with the fields anyways. c162505 Move vtblk_enqueue_request() outside the locks when getting the ident. c162504 Remove soon to be uneeded trylock during dump [1]. http://lists.freebsd.org/pipermail/freebsd-current/2011-November/029226.html c162503 Remove emtpy line c162502 Drop frame if cannot allocate a vtnet_tx_header. If we don't, we set OACTIVE, but if there are no other frames in flight, vtnet_txeof() will never be called to unset OACTIVE. The interface would have to be down/up'ed in order to become usable. We could be cuter here and only do this if the virtqueue is emtpy, but its probably not worth the complication. c162501 Start mbuf replacement loop at 1 for clarity Obtained from: Bryan Venteicher bryanv at daemoninthecloset dot org
* Import virtio base, PCI front-end, and net/block/balloon drivers.grehan2011-11-1816-0/+7654
Tested on Qemu/KVM, VirtualBox, and BHyVe. Currently built as modules-only on i386/amd64. Man pages not yet hooked up, pending review. Submitted by: Bryan Venteicher bryanv at daemoninthecloset dot org Reviewed by: bz MFC after: 4 weeks or so
OpenPOWER on IntegriCloud