All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 06/13] block: Support driver specific options in drive_init()
Date: Thu, 14 Mar 2013 16:11:07 -0500	[thread overview]
Message-ID: <87boal7klw.fsf@codemonkey.ws> (raw)
In-Reply-To: <1363099279-403-7-git-send-email-kwolf@redhat.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=us-ascii, Size: 23808 bytes --]

Kevin Wolf <kwolf@redhat.com> writes:

> Any non-default -drive options are now passed down to the block drivers.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> Reviewed-by: Eric Blake <eblake@redhat.com>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

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 (root@ccnode4) (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 <tigran@aivazian.fsnet.co.uk>, 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 tsbogend@alpha.franken.de
[    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: dm-devel@redhat.com
[    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„\x05\x7f'
		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

  reply	other threads:[~2013-03-14 21:11 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-12 14:41 [Qemu-devel] [PULL 00/13] Block patches Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 01/13] block: Add options QDict to .bdrv_open() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 02/13] block: Add options QDict to bdrv_open() prototype Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 03/13] Add qdict_clone_shallow() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 04/13] block: Add options QDict to bdrv_open_common() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 05/13] qemu-option: Add qemu_opts_absorb_qdict() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 06/13] block: Support driver specific options in drive_init() Kevin Wolf
2013-03-14 21:11   ` Anthony Liguori [this message]
2013-03-12 14:41 ` [Qemu-devel] [PATCH 07/13] qcow2: Allow lazy refcounts to be enabled on the command line Kevin Wolf
2013-03-14 14:45   ` Eric Blake
2013-03-14 15:00     ` Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 08/13] qcow2: flush refcount cache correctly in alloc_refcount_block() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 09/13] qcow2: flush refcount cache correctly in qcow2_write_snapshots() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 10/13] qcow2: set L2 cache dependency in qcow2_alloc_bytes() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 11/13] qcow2: flush in qcow2_update_snapshot_refcount() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 12/13] qcow2: drop flush in update_cluster_refcount() Kevin Wolf
2013-03-12 14:41 ` [Qemu-devel] [PATCH 13/13] qcow2: drop unnecessary flush in qcow2_update_snapshot_refcount() Kevin Wolf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87boal7klw.fsf@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.