[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 06/13] block: Support driver specific options in
From: |
Anthony Liguori |
Subject: |
Re: [Qemu-devel] [PATCH 06/13] block: Support driver specific options in drive_init() |
Date: |
Thu, 14 Mar 2013 16:11:07 -0500 |
User-agent: |
Notmuch/0.13.2+93~ged93d79 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu) |
Kevin Wolf <address@hidden> writes:
> Any non-default -drive options are now passed down to the block drivers.
>
> Signed-off-by: Kevin Wolf <address@hidden>
> Reviewed-by: Eric Blake <address@hidden>
> Reviewed-by: Stefan Hajnoczi <address@hidden>
According to git-bisect, this breaks virtio-blk serial property. Here's
the output from qemu-test:
Using RANDOM seed 26105
Formatting '.tmp-32392/disk.img', fmt=qcow2 size=10737418240 encryption=off
cluster_size=65536 lazy_refcounts=off
/home/aliguori/build/qemu/x86_64-softmmu/qemu-system-x86_64 -kernel
/usr/local/share/qemu-jeos/kernel-x86_64-pc -initrd
.tmp-32392/initramfs-32392.img.gz -device isa-debug-exit -append console=ttyS0
seed=26105 -nographic -enable-kvm -drive
file=.tmp-32392/disk.img,if=none,id=drive-virtio-disk0,format=raw,cache=none,serial=0123456789abcdefghi
-device
virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0
-pidfile .tmp-32392/pidfile-32392.pid -qmp
unix:.tmp-32392/qmpsock-32392.sock,server,nowait
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 3.4.0 (address@hidden) (gcc version 4.6.4 20120830
(prerelease) (GCC) ) #2 SMP Mon Dec 3 19:40:41 CST 2012
[ 0.000000] Command line: console=ttyS0 seed=26105
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
[ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 0000000007ffe000 (usable)
[ 0.000000] BIOS-e820: 0000000007ffe000 - 0000000008000000 (reserved)
[ 0.000000] BIOS-e820: 00000000feffc000 - 00000000ff000000 (reserved)
[ 0.000000] BIOS-e820: 00000000fffc0000 - 0000000100000000 (reserved)
[ 0.000000] NX (Execute Disable) protection: active
[ 0.000000] DMI 2.4 present.
[ 0.000000] No AGP bridge found
[ 0.000000] last_pfn = 0x7ffe max_arch_pfn = 0x400000000
[ 0.000000] PAT not supported by CPU.
[ 0.000000] found SMP MP-table at [ffff8800000fdaf0] fdaf0
[ 0.000000] init_memory_mapping: 0000000000000000-0000000007ffe000
[ 0.000000] RAMDISK: 07f58000 - 07ff0000
[ 0.000000] ACPI: RSDP 00000000000fd990 00014 (v00 BOCHS )
[ 0.000000] ACPI: RSDT 0000000007ffe4b0 00034 (v01 BOCHS BXPCRSDT 00000001
BXPC 00000001)
[ 0.000000] ACPI: FACP 0000000007ffff80 00074 (v01 BOCHS BXPCFACP 00000001
BXPC 00000001)
[ 0.000000] ACPI: DSDT 0000000007ffe4f0 011A9 (v01 BXPC BXDSDT 00000001
INTL 20100528)
[ 0.000000] ACPI: FACS 0000000007ffff40 00040
[ 0.000000] ACPI: SSDT 0000000007fff800 00735 (v01 BOCHS BXPCSSDT 00000001
BXPC 00000001)
[ 0.000000] ACPI: APIC 0000000007fff6e0 00078 (v01 BOCHS BXPCAPIC 00000001
BXPC 00000001)
[ 0.000000] ACPI: HPET 0000000007fff6a0 00038 (v01 BOCHS BXPCHPET 00000001
BXPC 00000001)
[ 0.000000] No NUMA configuration found
[ 0.000000] Faking a node at 0000000000000000-0000000007ffe000
[ 0.000000] Initmem setup node 0 0000000000000000-0000000007ffe000
[ 0.000000] NODE_DATA [0000000007ff7000 - 0000000007ffafff]
[ 0.000000] Zone PFN ranges:
[ 0.000000] DMA 0x00000010 -> 0x00001000
[ 0.000000] DMA32 0x00001000 -> 0x00100000
[ 0.000000] Normal empty
[ 0.000000] Movable zone start PFN for each node
[ 0.000000] Early memory PFN ranges
[ 0.000000] 0: 0x00000010 -> 0x0000009f
[ 0.000000] 0: 0x00000100 -> 0x00007ffe
[ 0.000000] ACPI: PM-Timer IO Port: 0xb008
[ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])
[ 0.000000] ACPI: IOAPIC (id[0x00] address[0xfec00000] gsi_base[0])
[ 0.000000] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)
[ 0.000000] Using ACPI (MADT) for SMP configuration information
[ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000
[ 0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs
[ 0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000
[ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000f0000
[ 0.000000] PM: Registered nosave memory: 00000000000f0000 - 0000000000100000
[ 0.000000] Allocating PCI resources starting at 8000000 (gap:
8000000:f6ffc000)
[ 0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:1
nr_node_ids:1
[ 0.000000] PERCPU: Embedded 26 pages/cpu @ffff880007c00000 s77056 r8192
d21248 u2097152
[ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total
pages: 32136
[ 0.000000] Policy zone: DMA32
[ 0.000000] Kernel command line: console=ttyS0 seed=26105
[ 0.000000] PID hash table entries: 512 (order: 0, 4096 bytes)
[ 0.000000] Checking aperture...
[ 0.000000] No AGP bridge found
[ 0.000000] Memory: 113188k/131064k available (7532k kernel code, 452k
absent, 17424k reserved, 5454k data, 584k init)
[ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=1,
Nodes=1
[ 0.000000] Hierarchical RCU implementation.
[ 0.000000] NR_IRQS:4352 nr_irqs:256 16
[ 0.000000] Console: colour VGA+ 80x25
[ 0.000000] console [ttyS0] enabled
[ 0.000000] Fast TSC calibration using PIT
[ 0.000000] Detected 2933.141 MHz processor.
[ 0.003001] Calibrating delay loop (skipped), value calculated using timer
frequency.. 5866.28 BogoMIPS (lpj=2933141)
[ 0.004335] pid_max: default: 32768 minimum: 301
[ 0.005029] Security Framework initialized
[ 0.005539] SELinux: Initializing.
[ 0.006026] Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)
[ 0.007027] Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
[ 0.007817] Mount-cache hash table entries: 256
[ 0.008122] Initializing cgroup subsys cpuacct
[ 0.009002] Initializing cgroup subsys freezer
[ 0.009567] mce: CPU supports 10 MCE banks
[ 0.010206] SMP alternatives: switching to UP code
[ 0.019659] Freeing SMP alternatives: 24k freed
[ 0.020008] ACPI: Core revision 20120320
[ 0.022372] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[ 0.033188] CPU0: Intel QEMU Virtual CPU version 1.4.50 stepping 03
[ 0.033997] Performance Events: unsupported p6 CPU model 2 no PMU driver,
software events only.
[ 0.034065] Brought up 1 CPUs
[ 0.034407] Total of 1 processors activated (5866.28 BogoMIPS).
[ 0.035380] kworker/u:0 used greatest stack depth: 6368 bytes left
[ 0.036066] RTC time: 5:32:36, date: 03/15/13
[ 0.036595] NET: Registered protocol family 16
[ 0.037246] ACPI: bus type pci registered
[ 0.038049] kworker/u:0 used greatest stack depth: 6304 bytes left
[ 0.039011] PCI: Using configuration type 1 for base access
[ 0.039870] kworker/u:0 used greatest stack depth: 5968 bytes left
[ 0.040276] kworker/u:0 used greatest stack depth: 5536 bytes left
[ 0.046505] bio: create slab <bio-0> at 0
[ 0.047133] ACPI: Added _OSI(Module Device)
[ 0.047623] ACPI: Added _OSI(Processor Device)
[ 0.048001] ACPI: Added _OSI(3.0 _SCP Extensions)
[ 0.048534] ACPI: Added _OSI(Processor Aggregator Device)
[ 0.050713] ACPI: Interpreter enabled
[ 0.050999] ACPI: (supports S0 S3 S4 S5)
[ 0.051525] ACPI: Using IOAPIC for interrupt routing
[ 0.055088] ACPI: No dock devices found.
[ 0.055537] PCI: Using host bridge windows from ACPI; if necessary, use
"pci=nocrs" and report a bug
[ 0.056065] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[ 0.057083] pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7]
[ 0.058011] pci_root PNP0A03:00: host bridge window [io 0x0d00-0xffff]
[ 0.059000] pci_root PNP0A03:00: host bridge window [mem
0x000a0000-0x000bffff]
[ 0.059826] pci_root PNP0A03:00: host bridge window [mem
0x80000000-0xfebfffff]
[ 0.060033] PCI host bridge to bus 0000:00
[ 0.061006] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7]
[ 0.061997] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff]
[ 0.062692] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff]
[ 0.062996] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfffff]
[ 0.069435] pci 0000:00:01.3: quirk: [io 0xb000-0xb03f] claimed by PIIX4
ACPI
[ 0.070009] pci 0000:00:01.3: quirk: [io 0xb100-0xb10f] claimed by PIIX4 SMB
[ 0.094617] pci0000:00: Unable to request _OSC control (_OSC support mask:
0x1e)
[ 0.097206] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)
[ 0.098028] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)
[ 0.098799] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)
[ 0.099248] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)
[ 0.100225] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)
[ 0.101133] vgaarb: device added:
PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none
[ 0.101997] vgaarb: loaded
[ 0.102314] vgaarb: bridge control possible 0000:00:02.0
[ 0.103078] SCSI subsystem initialized
[ 0.103682] usbcore: registered new interface driver usbfs
[ 0.104027] usbcore: registered new interface driver hub
[ 0.105033] usbcore: registered new device driver usb
[ 0.105750] Advanced Linux Sound Architecture Driver Version 1.0.25.
[ 0.105997] PCI: Using ACPI for IRQ routing
[ 0.107288] cfg80211: Calling CRDA to update world regulatory domain
[ 0.108086] NetLabel: Initializing
[ 0.108482] NetLabel: domain hash size = 128
[ 0.108999] NetLabel: protocols = UNLABELED CIPSOv4
[ 0.109572] NetLabel: unlabeled traffic allowed by default
[ 0.110073] HPET: 3 timers in total, 0 timers will be used for per-cpu timer
[ 0.111012] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
[ 0.112028] hpet0: 3 comparators, 64-bit 100.000000 MHz counter
[ 0.118003] Switching to clocksource hpet
[ 0.119594] pnp: PnP ACPI init
[ 0.119953] ACPI: bus type pnp registered
[ 0.121314] pnp: PnP ACPI: found 8 devices
[ 0.121817] ACPI: ACPI bus type pnp unregistered
[ 0.130081] NET: Registered protocol family 2
[ 0.130657] IP route cache hash table entries: 1024 (order: 1, 8192 bytes)
[ 0.131565] TCP established hash table entries: 4096 (order: 4, 65536 bytes)
[ 0.132452] TCP bind hash table entries: 4096 (order: 4, 65536 bytes)
[ 0.133220] TCP: Hash tables configured (established 4096 bind 4096)
[ 0.133937] TCP: reno registered
[ 0.134345] UDP hash table entries: 128 (order: 0, 4096 bytes)
[ 0.135085] UDP-Lite hash table entries: 128 (order: 0, 4096 bytes)
[ 0.135831] NET: Registered protocol family 1
[ 0.136464] RPC: Registered named UNIX socket transport module.
[ 0.137180] RPC: Registered udp transport module.
[ 0.137757] RPC: Registered tcp transport module.
[ 0.138326] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.139129] pci 0000:00:00.0: Limiting direct PCI/PCI transfers
[ 0.139814] pci 0000:00:01.0: PIIX3: Enabling Passive Release
[ 0.140565] pci 0000:00:01.0: Activating ISA DMA hang workarounds
[ 0.141380] Trying to unpack rootfs image as initramfs...
[ 0.150640] Freeing initrd memory: 608k freed
[ 0.151590] microcode: CPU0 sig=0x623, pf=0x0, revision=0x1
[ 0.152307] microcode: Microcode Update Driver: v2.00 <address@hidden>,
Peter Oruba
[ 0.153645] audit: initializing netlink socket (disabled)
[ 0.154311] type=2000 audit(1363325556.153:1): initialized
[ 0.172729] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[ 0.176730] VFS: Disk quotas dquot_6.5.2
[ 0.177317] Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 0.178637] NFS: Registering the id_resolver key type
[ 0.179501] msgmni has been set to 222
[ 0.180358] Block layer SCSI generic (bsg) driver version 0.4 loaded (major
253)
[ 0.181246] io scheduler noop registered
[ 0.181705] io scheduler deadline registered
[ 0.182316] io scheduler cfq registered (default)
[ 0.182968] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[ 0.183688] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[ 0.184528] acpiphp: Slot [3] registered
[ 0.185069] acpiphp: Slot [4] registered
[ 0.185572] acpiphp: Slot [5] registered
[ 0.186110] acpiphp: Slot [6] registered
[ 0.186616] acpiphp: Slot [7] registered
[ 0.187154] acpiphp: Slot [8] registered
[ 0.187657] acpiphp: Slot [9] registered
[ 0.188195] acpiphp: Slot [10] registered
[ 0.188709] acpiphp: Slot [11] registered
[ 0.189257] acpiphp: Slot [12] registered
[ 0.189816] acpiphp: Slot [13] registered
[ 0.190362] acpiphp: Slot [14] registered
[ 0.190878] acpiphp: Slot [15] registered
[ 0.191477] acpiphp: Slot [16] registered
[ 0.191987] acpiphp: Slot [17] registered
[ 0.192540] acpiphp: Slot [18] registered
[ 0.193086] acpiphp: Slot [19] registered
[ 0.193640] acpiphp: Slot [20] registered
[ 0.194187] acpiphp: Slot [21] registered
[ 0.194742] acpiphp: Slot [22] registered
[ 0.195290] acpiphp: Slot [23] registered
[ 0.195797] acpiphp: Slot [24] registered
[ 0.196346] acpiphp: Slot [25] registered
[ 0.196861] acpiphp: Slot [26] registered
[ 0.197452] acpiphp: Slot [27] registered
[ 0.197962] acpiphp: Slot [28] registered
[ 0.198517] acpiphp: Slot [29] registered
[ 0.199068] acpiphp: Slot [30] registered
[ 0.199580] acpiphp: Slot [31] registered
[ 0.200289] input: Power Button as
/devices/LNXSYSTM:00/LNXPWRBN:00/input/input0
[ 0.201178] ACPI: Power Button [PWRF]
[ 0.203226] ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 11
[ 0.205056] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[ 0.471590] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.496552] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.497596] Non-volatile memory driver v1.3
[ 0.498115] Linux agpgart interface v0.103
[ 0.498758] [drm] Initialized drm 1.1.0 20060810
[ 0.499330] [drm:i915_init] *ERROR* drm/i915 can't work without intel_agp
module!
[ 0.501775] brd: module loaded
[ 0.503062] loop: module loaded
[ 0.506804] vda: unknown partition table
[ 0.508880] DC390: clustering now enabled by default. If you get problems
load
[ 0.510423] with "disable_clustering=1" and report to maintainers
[ 0.511723] megasas: 00.00.06.14-rc1 Fri. Jan. 6 17:00:00 PDT 2012
[ 0.513783] scsi0 : ata_piix
[ 0.514260] scsi1 : ata_piix
[ 0.514674] ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xc080 irq 14
[ 0.515490] ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xc088 irq 15
[ 0.517372] pcnet32: pcnet32.c:v1.35 21.Apr.2008 address@hidden
[ 0.518267] e100: Intel(R) PRO/100 Network Driver, 3.5.24-k2-NAPI
[ 0.518999] e100: Copyright(c) 1999-2006 Intel Corporation
[ 0.519692] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
[ 0.520570] e1000: Copyright (c) 1999-2006 Intel Corporation.
[ 0.521348] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 10
[ 0.818823] ata2.00: ATAPI: QEMU DVD-ROM, 1.4.50, max UDMA/100
[ 0.819915] ata2.00: configured for MWDMA2
[ 0.820892] scsi 1:0:0:0: CD-ROM QEMU QEMU DVD-ROM 1.4.
PQ: 0 ANSI: 5
[ 0.822640] sr0: scsi3-mmc drive: 4x/4x cd/rw xa/form2 tray
[ 0.823315] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 0.824467] sr 1:0:0:0: Attached scsi generic sg0 type 5
[ 0.850040] e1000 0000:00:03.0: eth0: (PCI:33MHz:32-bit) 52:54:00:12:34:56
[ 0.850891] e1000 0000:00:03.0: eth0: Intel(R) PRO/1000 Network Connection
[ 0.851750] sky2: driver version 1.30
[ 0.852495] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.853319] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.854106] uhci_hcd: USB Universal Host Controller Interface driver
[ 0.854910] usbcore: registered new interface driver usblp
[ 0.855617] Initializing USB Mass Storage driver...
[ 0.856242] usbcore: registered new interface driver usb-storage
[ 0.856921] USB Mass Storage support registered.
[ 0.857567] usbcore: registered new interface driver libusual
[ 0.858337] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at
0x60,0x64 irq 1,12
[ 0.859890] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 0.860503] serio: i8042 AUX port at 0x60,0x64 irq 12
[ 0.861260] mousedev: PS/2 mouse device common for all mice
[ 0.862317] input: AT Translated Set 2 keyboard as
/devices/platform/i8042/serio0/input/input1
[ 0.863440] rtc_cmos 00:01: RTC can wake from S4
[ 0.866320] rtc_cmos 00:01: rtc core: registered rtc_cmos as rtc0
[ 0.867146] rtc0: alarms up to one day, 114 bytes nvram, hpet irqs
[ 0.868095] device-mapper: ioctl: 4.22.0-ioctl (2011-10-19) initialised:
address@hidden
[ 0.869143] cpuidle: using governor ladder
[ 0.869618] cpuidle: using governor menu
[ 0.870103] EFI Variables Facility v0.08 2004-May-17
[ 0.871534] usbcore: registered new interface driver usbhid
[ 0.872203] usbhid: USB HID core driver
[ 0.873144] Netfilter messages via NETLINK v0.30.
[ 0.873690] nf_conntrack version 0.5.0 (889 buckets, 3556 max)
[ 0.874481] ctnetlink v0.93: registering with nfnetlink.
[ 0.875199] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 0.875822] TCP: cubic registered
[ 0.876243] Initializing XFRM netlink socket
[ 0.876940] NET: Registered protocol family 10
[ 0.877667] ip6_tables: (C) 2000-2006 Netfilter Core Team
[ 0.878329] IPv6 over IPv4 tunneling driver
[ 0.878955] NET: Registered protocol family 17
[ 0.879504] Registering the dns_resolver key type
[ 0.880219] registered taskstats version 1
[ 0.880864] Magic number: 5:114:517
[ 0.881356] console [netcon0] enabled
[ 0.881782] netconsole: network logging started
[ 0.882361] ALSA device list:
[ 0.882723] No soundcards found.
[ 0.884214] Freeing unused kernel memory: 584k freed
[ 0.884907] Write protecting the kernel read-only data: 12288k
[ 0.887218] Freeing unused kernel memory: 640k freed
[ 0.891939] Freeing unused kernel memory: 1724k freed
Setting guest RANDOM seed to 26105
*** Running tests ***
[1;32m/tests/virtio-blk-drive-serial.sh[0m
Running test /tests/virtio-blk-drive-serial.sh...drive has wrong serial!
Expected '0123456789abcdefghi', got '8'
FAILED (2)
Regards,
Anthony Liguori
> ---
> blockdev.c | 69
> +++++++++++++++++++++++++++++++++++++++++++++++++++++---------
> 1 file changed, 59 insertions(+), 10 deletions(-)
>
> diff --git a/blockdev.c b/blockdev.c
> index d679174..d0fd1e2 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -22,6 +22,7 @@
> #include "sysemu/arch_init.h"
>
> static QTAILQ_HEAD(drivelist, DriveInfo) drives =
> QTAILQ_HEAD_INITIALIZER(drives);
> +extern QemuOptsList qemu_common_drive_opts;
>
> static const char *const if_name[IF_COUNT] = {
> [IF_NONE] = "none",
> @@ -287,7 +288,7 @@ static bool do_check_io_limits(BlockIOLimit *io_limits,
> Error **errp)
> return true;
> }
>
> -DriveInfo *drive_init(QemuOpts *opts, BlockInterfaceType block_default_type)
> +DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType
> block_default_type)
> {
> const char *buf;
> const char *file = NULL;
> @@ -310,10 +311,36 @@ DriveInfo *drive_init(QemuOpts *opts,
> BlockInterfaceType block_default_type)
> bool copy_on_read;
> int ret;
> Error *error = NULL;
> + QemuOpts *opts;
> + QDict *bs_opts;
> + const char *id;
>
> translation = BIOS_ATA_TRANSLATION_AUTO;
> media = MEDIA_DISK;
>
> + /* Check common options by copying from all_opts to opts, all other
> options
> + * are stored in bs_opts. */
> + id = qemu_opts_id(all_opts);
> + opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, &error);
> + if (error_is_set(&error)) {
> + qerror_report_err(error);
> + error_free(error);
> + return NULL;
> + }
> +
> + bs_opts = qdict_new();
> + qemu_opts_to_qdict(all_opts, bs_opts);
> + qemu_opts_absorb_qdict(opts, bs_opts, &error);
> + if (error_is_set(&error)) {
> + qerror_report_err(error);
> + error_free(error);
> + return NULL;
> + }
> +
> + if (id) {
> + qdict_del(bs_opts, "id");
> + }
> +
> /* extract parameters */
> bus_id = qemu_opt_get_number(opts, "bus", 0);
> unit_id = qemu_opt_get_number(opts, "unit", -1);
> @@ -564,7 +591,7 @@ DriveInfo *drive_init(QemuOpts *opts, BlockInterfaceType
> block_default_type)
> dinfo->heads = heads;
> dinfo->secs = secs;
> dinfo->trans = translation;
> - dinfo->opts = opts;
> + dinfo->opts = all_opts;
> dinfo->refcount = 1;
> dinfo->serial = serial;
> QTAILQ_INSERT_TAIL(&drives, dinfo, next);
> @@ -587,17 +614,20 @@ DriveInfo *drive_init(QemuOpts *opts,
> BlockInterfaceType block_default_type)
> case IF_MTD:
> break;
> case IF_VIRTIO:
> + {
> /* add virtio block device */
> - opts = qemu_opts_create_nofail(qemu_find_opts("device"));
> + QemuOpts *devopts;
> + devopts = qemu_opts_create_nofail(qemu_find_opts("device"));
> if (arch_type == QEMU_ARCH_S390X) {
> - qemu_opt_set(opts, "driver", "virtio-blk-s390");
> + qemu_opt_set(devopts, "driver", "virtio-blk-s390");
> } else {
> - qemu_opt_set(opts, "driver", "virtio-blk-pci");
> + qemu_opt_set(devopts, "driver", "virtio-blk-pci");
> }
> - qemu_opt_set(opts, "drive", dinfo->id);
> + qemu_opt_set(devopts, "drive", dinfo->id);
> if (devaddr)
> - qemu_opt_set(opts, "addr", devaddr);
> + qemu_opt_set(devopts, "addr", devaddr);
> break;
> + }
> default:
> abort();
> }
> @@ -635,7 +665,9 @@ DriveInfo *drive_init(QemuOpts *opts, BlockInterfaceType
> block_default_type)
> error_report("warning: disabling copy_on_read on readonly drive");
> }
>
> - ret = bdrv_open(dinfo->bdrv, file, NULL, bdrv_flags, drv);
> + ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv);
> + bs_opts = NULL;
> +
> if (ret < 0) {
> if (ret == -EMEDIUMTYPE) {
> error_report("could not open disk image %s: not in %s format",
> @@ -649,9 +681,14 @@ DriveInfo *drive_init(QemuOpts *opts, BlockInterfaceType
> block_default_type)
>
> if (bdrv_key_required(dinfo->bdrv))
> autostart = 0;
> +
> + qemu_opts_del(opts);
> +
> return dinfo;
>
> err:
> + qemu_opts_del(opts);
> + QDECREF(bs_opts);
> bdrv_delete(dinfo->bdrv);
> g_free(dinfo->id);
> QTAILQ_REMOVE(&drives, dinfo, next);
> @@ -1461,9 +1498,9 @@ BlockJobInfoList *qmp_query_block_jobs(Error **errp)
> return dummy.next;
> }
>
> -QemuOptsList qemu_drive_opts = {
> +QemuOptsList qemu_common_drive_opts = {
> .name = "drive",
> - .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
> + .head = QTAILQ_HEAD_INITIALIZER(qemu_common_drive_opts.head),
> .desc = {
> {
> .name = "bus",
> @@ -1582,3 +1619,15 @@ QemuOptsList qemu_drive_opts = {
> { /* end of list */ }
> },
> };
> +
> +QemuOptsList qemu_drive_opts = {
> + .name = "drive",
> + .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
> + .desc = {
> + /*
> + * no elements => accept any params
> + * validation will happen later
> + */
> + { /* end of list */ }
> + },
> +};
> --
> 1.8.1.4
- [Qemu-devel] [PULL 00/13] Block patches, Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 04/13] block: Add options QDict to bdrv_open_common(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 01/13] block: Add options QDict to .bdrv_open(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 02/13] block: Add options QDict to bdrv_open() prototype, Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 08/13] qcow2: flush refcount cache correctly in alloc_refcount_block(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 06/13] block: Support driver specific options in drive_init(), Kevin Wolf, 2013/03/12
- Re: [Qemu-devel] [PATCH 06/13] block: Support driver specific options in drive_init(),
Anthony Liguori <=
- [Qemu-devel] [PATCH 03/13] Add qdict_clone_shallow(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 05/13] qemu-option: Add qemu_opts_absorb_qdict(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 09/13] qcow2: flush refcount cache correctly in qcow2_write_snapshots(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 11/13] qcow2: flush in qcow2_update_snapshot_refcount(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 10/13] qcow2: set L2 cache dependency in qcow2_alloc_bytes(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 07/13] qcow2: Allow lazy refcounts to be enabled on the command line, Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 12/13] qcow2: drop flush in update_cluster_refcount(), Kevin Wolf, 2013/03/12
- [Qemu-devel] [PATCH 13/13] qcow2: drop unnecessary flush in qcow2_update_snapshot_refcount(), Kevin Wolf, 2013/03/12