mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 21:23:23 +00:00
vfio-mdev: move the mtty usage documentation
Move the documentation on how to use mtty to samples/vfio-mdev/README.rst as it is in no way related to the vfio API. This matches how the bpf and pktgen samples are documented. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/20230110091009.474427-4-hch@lst.de Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
8bf8c5ee1f
commit
0030d7d6ce
@ -270,106 +270,6 @@ these callbacks are supported in the TYPE1 IOMMU module. To enable them for
|
||||
other IOMMU backend modules, such as PPC64 sPAPR module, they need to provide
|
||||
these two callback functions.
|
||||
|
||||
Using the Sample Code
|
||||
=====================
|
||||
|
||||
mtty.c in samples/vfio-mdev/ directory is a sample driver program to
|
||||
demonstrate how to use the mediated device framework.
|
||||
|
||||
The sample driver creates an mdev device that simulates a serial port over a PCI
|
||||
card.
|
||||
|
||||
1. Build and load the mtty.ko module.
|
||||
|
||||
This step creates a dummy device, /sys/devices/virtual/mtty/mtty/
|
||||
|
||||
Files in this device directory in sysfs are similar to the following::
|
||||
|
||||
# tree /sys/devices/virtual/mtty/mtty/
|
||||
/sys/devices/virtual/mtty/mtty/
|
||||
|-- mdev_supported_types
|
||||
| |-- mtty-1
|
||||
| | |-- available_instances
|
||||
| | |-- create
|
||||
| | |-- device_api
|
||||
| | |-- devices
|
||||
| | `-- name
|
||||
| `-- mtty-2
|
||||
| |-- available_instances
|
||||
| |-- create
|
||||
| |-- device_api
|
||||
| |-- devices
|
||||
| `-- name
|
||||
|-- mtty_dev
|
||||
| `-- sample_mtty_dev
|
||||
|-- power
|
||||
| |-- autosuspend_delay_ms
|
||||
| |-- control
|
||||
| |-- runtime_active_time
|
||||
| |-- runtime_status
|
||||
| `-- runtime_suspended_time
|
||||
|-- subsystem -> ../../../../class/mtty
|
||||
`-- uevent
|
||||
|
||||
2. Create a mediated device by using the dummy device that you created in the
|
||||
previous step::
|
||||
|
||||
# echo "83b8f4f2-509f-382f-3c1e-e6bfe0fa1001" > \
|
||||
/sys/devices/virtual/mtty/mtty/mdev_supported_types/mtty-2/create
|
||||
|
||||
3. Add parameters to qemu-kvm::
|
||||
|
||||
-device vfio-pci,\
|
||||
sysfsdev=/sys/bus/mdev/devices/83b8f4f2-509f-382f-3c1e-e6bfe0fa1001
|
||||
|
||||
4. Boot the VM.
|
||||
|
||||
In the Linux guest VM, with no hardware on the host, the device appears
|
||||
as follows::
|
||||
|
||||
# lspci -s 00:05.0 -xxvv
|
||||
00:05.0 Serial controller: Device 4348:3253 (rev 10) (prog-if 02 [16550])
|
||||
Subsystem: Device 4348:3253
|
||||
Physical Slot: 5
|
||||
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
|
||||
Stepping- SERR- FastB2B- DisINTx-
|
||||
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
|
||||
<TAbort- <MAbort- >SERR- <PERR- INTx-
|
||||
Interrupt: pin A routed to IRQ 10
|
||||
Region 0: I/O ports at c150 [size=8]
|
||||
Region 1: I/O ports at c158 [size=8]
|
||||
Kernel driver in use: serial
|
||||
00: 48 43 53 32 01 00 00 02 10 02 00 07 00 00 00 00
|
||||
10: 51 c1 00 00 59 c1 00 00 00 00 00 00 00 00 00 00
|
||||
20: 00 00 00 00 00 00 00 00 00 00 00 00 48 43 53 32
|
||||
30: 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 00 00
|
||||
|
||||
In the Linux guest VM, dmesg output for the device is as follows:
|
||||
|
||||
serial 0000:00:05.0: PCI INT A -> Link[LNKA] -> GSI 10 (level, high) -> IRQ 10
|
||||
0000:00:05.0: ttyS1 at I/O 0xc150 (irq = 10) is a 16550A
|
||||
0000:00:05.0: ttyS2 at I/O 0xc158 (irq = 10) is a 16550A
|
||||
|
||||
|
||||
5. In the Linux guest VM, check the serial ports::
|
||||
|
||||
# setserial -g /dev/ttyS*
|
||||
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
|
||||
/dev/ttyS1, UART: 16550A, Port: 0xc150, IRQ: 10
|
||||
/dev/ttyS2, UART: 16550A, Port: 0xc158, IRQ: 10
|
||||
|
||||
6. Using minicom or any terminal emulation program, open port /dev/ttyS1 or
|
||||
/dev/ttyS2 with hardware flow control disabled.
|
||||
|
||||
7. Type data on the minicom terminal or send data to the terminal emulation
|
||||
program and read the data.
|
||||
|
||||
Data is loop backed from hosts mtty driver.
|
||||
|
||||
8. Destroy the mediated device that you created::
|
||||
|
||||
# echo 1 > /sys/bus/mdev/devices/83b8f4f2-509f-382f-3c1e-e6bfe0fa1001/remove
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
|
100
samples/vfio-mdev/README.rst
Normal file
100
samples/vfio-mdev/README.rst
Normal file
@ -0,0 +1,100 @@
|
||||
Using the mtty vfio-mdev sample code
|
||||
====================================
|
||||
|
||||
mtty is a sample vfio-mdev driver that demonstrates how to use the mediated
|
||||
device framework.
|
||||
|
||||
The sample driver creates an mdev device that simulates a serial port over a PCI
|
||||
card.
|
||||
|
||||
1. Build and load the mtty.ko module.
|
||||
|
||||
This step creates a dummy device, /sys/devices/virtual/mtty/mtty/
|
||||
|
||||
Files in this device directory in sysfs are similar to the following::
|
||||
|
||||
# tree /sys/devices/virtual/mtty/mtty/
|
||||
/sys/devices/virtual/mtty/mtty/
|
||||
|-- mdev_supported_types
|
||||
| |-- mtty-1
|
||||
| | |-- available_instances
|
||||
| | |-- create
|
||||
| | |-- device_api
|
||||
| | |-- devices
|
||||
| | `-- name
|
||||
| `-- mtty-2
|
||||
| |-- available_instances
|
||||
| |-- create
|
||||
| |-- device_api
|
||||
| |-- devices
|
||||
| `-- name
|
||||
|-- mtty_dev
|
||||
| `-- sample_mtty_dev
|
||||
|-- power
|
||||
| |-- autosuspend_delay_ms
|
||||
| |-- control
|
||||
| |-- runtime_active_time
|
||||
| |-- runtime_status
|
||||
| `-- runtime_suspended_time
|
||||
|-- subsystem -> ../../../../class/mtty
|
||||
`-- uevent
|
||||
|
||||
2. Create a mediated device by using the dummy device that you created in the
|
||||
previous step::
|
||||
|
||||
# echo "83b8f4f2-509f-382f-3c1e-e6bfe0fa1001" > \
|
||||
/sys/devices/virtual/mtty/mtty/mdev_supported_types/mtty-2/create
|
||||
|
||||
3. Add parameters to qemu-kvm::
|
||||
|
||||
-device vfio-pci,\
|
||||
sysfsdev=/sys/bus/mdev/devices/83b8f4f2-509f-382f-3c1e-e6bfe0fa1001
|
||||
|
||||
4. Boot the VM.
|
||||
|
||||
In the Linux guest VM, with no hardware on the host, the device appears
|
||||
as follows::
|
||||
|
||||
# lspci -s 00:05.0 -xxvv
|
||||
00:05.0 Serial controller: Device 4348:3253 (rev 10) (prog-if 02 [16550])
|
||||
Subsystem: Device 4348:3253
|
||||
Physical Slot: 5
|
||||
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
|
||||
Stepping- SERR- FastB2B- DisINTx-
|
||||
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
|
||||
<TAbort- <MAbort- >SERR- <PERR- INTx-
|
||||
Interrupt: pin A routed to IRQ 10
|
||||
Region 0: I/O ports at c150 [size=8]
|
||||
Region 1: I/O ports at c158 [size=8]
|
||||
Kernel driver in use: serial
|
||||
00: 48 43 53 32 01 00 00 02 10 02 00 07 00 00 00 00
|
||||
10: 51 c1 00 00 59 c1 00 00 00 00 00 00 00 00 00 00
|
||||
20: 00 00 00 00 00 00 00 00 00 00 00 00 48 43 53 32
|
||||
30: 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 00 00
|
||||
|
||||
In the Linux guest VM, dmesg output for the device is as follows:
|
||||
|
||||
serial 0000:00:05.0: PCI INT A -> Link[LNKA] -> GSI 10 (level, high) -> IRQ 10
|
||||
0000:00:05.0: ttyS1 at I/O 0xc150 (irq = 10) is a 16550A
|
||||
0000:00:05.0: ttyS2 at I/O 0xc158 (irq = 10) is a 16550A
|
||||
|
||||
|
||||
5. In the Linux guest VM, check the serial ports::
|
||||
|
||||
# setserial -g /dev/ttyS*
|
||||
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
|
||||
/dev/ttyS1, UART: 16550A, Port: 0xc150, IRQ: 10
|
||||
/dev/ttyS2, UART: 16550A, Port: 0xc158, IRQ: 10
|
||||
|
||||
6. Using minicom or any terminal emulation program, open port /dev/ttyS1 or
|
||||
/dev/ttyS2 with hardware flow control disabled.
|
||||
|
||||
7. Type data on the minicom terminal or send data to the terminal emulation
|
||||
program and read the data.
|
||||
|
||||
Data is loop backed from hosts mtty driver.
|
||||
|
||||
8. Destroy the mediated device that you created::
|
||||
|
||||
# echo 1 > /sys/bus/mdev/devices/83b8f4f2-509f-382f-3c1e-e6bfe0fa1001/remove
|
||||
|
Loading…
x
Reference in New Issue
Block a user