From: Wen Congyang <wency@cn.fujitsu.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
Isaku Yamahata <yamahata@valinux.co.jp>,
Avi Kivity <avi@redhat.com>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] pci: add standard bridge device
Date: Thu, 08 Sep 2011 14:15:33 +0800 [thread overview]
Message-ID: <4E685D85.6030806@cn.fujitsu.com> (raw)
In-Reply-To: <20110907115223.GD9337@redhat.com>
At 09/07/2011 07:52 PM, Michael S. Tsirkin Write:
> On Wed, Sep 07, 2011 at 12:39:09PM +0800, Wen Congyang wrote:
>> At 09/06/2011 03:45 PM, Avi Kivity Write:
>>> On 09/06/2011 06:06 AM, Wen Congyang wrote:
>>>>> Use the uio driver -
>>>>> http://docs.blackfin.uclinux.org/kernel/generated/uio-howto/. You
>>>> just
>>>>> mmap() the BAR from userspace and play with it.
>>>>
>>>> When I try to bind ivshmem to uio_pci_generic, I get the following
>>>> messages:
>>>> uio_pci_generic 0000:01:01.0: No IRQ assigned to device: no support
>>>> for interrupts?
>>>>
>>>
>>> No idea what this means.
>>
>> PCI 3.0 6.2.4
>> For x86 based PCs, the values in this register correspond to IRQ numbers (0-15) of the standard dual
>> 8259 configuration. The value 255 is defined as meaning "unknown" or "no connection" to the interrupt
>> controller. Values between 15 and 254 are reserved.
>>
>> The register is interrupt line.
>>
>> I read the config of this device, the interrupt line is 0. It means that it uses the IRQ0.
>>
>> The following is the uio_pci_generic's code:
>> static int __devinit probe(struct pci_dev *pdev,
>> const struct pci_device_id *id)
>> {
>> struct uio_pci_generic_dev *gdev;
>> int err;
>>
>> err = pci_enable_device(pdev);
>> if (err) {
>> dev_err(&pdev->dev, "%s: pci_enable_device failed: %d\n",
>> __func__, err);
>> return err;
>> }
>>
>> if (!pdev->irq) {
>> dev_warn(&pdev->dev, "No IRQ assigned to device: "
>> "no support for interrupts?\n");
>> pci_disable_device(pdev);
>> return -ENODEV;
>> }
>> ...
>> }
>>
>> This function will be called when we write 'domain:bus:slot.function' to /sys/bus/pci/drivers/uio_pci_generic/bind.
>> pdev->irq is 0, it means the device uses IRQ0. But we refuse it. I do not why.
>>
>> To Michael S. Tsirkin
>> This code is writen by you. Do you know why you check whether pdev->irq is 0?
>>
>> Thanks
>> Wen Congyang
>>
>>>
>
> Well I see this in linux:
>
> /*
> * Read interrupt line and base address registers.
> * The architecture-dependent code can tweak these, of course.
> */
> static void pci_read_irq(struct pci_dev *dev)
> {
> unsigned char irq;
>
> pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
> dev->pin = irq;
> if (irq)
> pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
> dev->irq = irq;
> }
>
> Thus a device without an interrupt pin will get irq set to 0,
> and this seems the right way to detect such devices.
> I don't think PCI devices really use IRQ0 in practice,
> its probably used for PC things. More likely the system is
> misconfigured. Try lspci -vv to see what went wrong.
Yes, the PCI device shoulde not use IRQ0. I debug qemu's code, and find the
PCI_INTERRUPT_LINE register is not set by qemu:
=============
Hardware watchpoint 6: ((uint8_t *) 0x164e410)[0x3c]
Old value = 0 '\000'
New value = 10 '\n'
pci_default_write_config (d=0x1653ed0, addr=60, val=10, l=1) at /home/wency/source/qemu/hw/pci.c:1115
1115 d->config[addr + i] &= ~(val & w1cmask); /* W1C: Write 1 to Clear */
Missing separate debuginfos, use: debuginfo-install cyrus-sasl-gssapi-2.1.23-8.el6.x86_64 cyrus-sasl-md5-2.1.23-8.el6.x86_64 cyrus-sasl-plain-2.1.23-8.el6.x86_64 db4-4.7.25-16.el6.x86_64
(gdb) bt
#0 pci_default_write_config (d=0x1653ed0, addr=60, val=10, l=1) at /home/wency/source/qemu/hw/pci.c:1115
#1 0x00000000004d5827 in pci_host_config_write_common (pci_dev=0x1653ed0, addr=60, limit=256, val=10, len=1) at /home/wency/source/qemu/hw/pci_host.c:54
#2 0x00000000004d5939 in pci_data_write (s=0x15f95a0, addr=2147502140, val=10, len=1) at /home/wency/source/qemu/hw/pci_host.c:75
#3 0x00000000004d5b19 in pci_host_data_write (handler=0x15f9570, addr=3324, val=10, len=1) at /home/wency/source/qemu/hw/pci_host.c:125
#4 0x000000000063ee06 in ioport_simple_writeb (opaque=0x15f9570, addr=3324, value=10) at /home/wency/source/qemu/rwhandler.c:48
#5 0x0000000000470db9 in ioport_write (index=0, address=3324, data=10) at ioport.c:81
#6 0x00000000004717bc in cpu_outb (addr=3324, val=10 '\n') at ioport.c:273
#7 0x00000000005ef25d in kvm_handle_io (port=3324, data=0x7ffff7ff8000, direction=1, size=1, count=1) at /home/wency/source/qemu/kvm-all.c:834
#8 0x00000000005ef7e6 in kvm_cpu_exec (env=0x13da0d0) at /home/wency/source/qemu/kvm-all.c:976
#9 0x00000000005c1a7b in qemu_kvm_cpu_thread_fn (arg=0x13da0d0) at /home/wency/source/qemu/cpus.c:661
#10 0x00000032864077e1 in start_thread () from /lib64/libpthread.so.0
#11 0x00000032858e68ed in clone () from /lib64/libc.so.6
=============
If I put ivshmem on bus 0, the PCI_INTERRUPT_LINE register can be set. So I guess this register is set by bios.
I use the newest seabios, and PCI_INTERRUPT_LINE register is not set if the deivce is not on bus0.
# lspci -vv
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
Subsystem: Red Hat, Inc Qemu virtual machine
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
Subsystem: Red Hat, Inc Qemu virtual machine
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-
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] (prog-if 80 [Master])
Subsystem: Red Hat, Inc Qemu virtual machine
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-
Latency: 0
Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable) [size=1]
Region 4: I/O ports at d100 [size=16]
Kernel driver in use: ata_piix
Kernel modules: ata_piix
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
Subsystem: Red Hat, Inc Qemu virtual machine
Physical Slot: 1
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 9
Kernel driver in use: piix4_smbus
Kernel modules: i2c-piix4
00:02.0 VGA compatible controller: Cirrus Logic GD 5446 (prog-if 00 [VGA controller])
Subsystem: Red Hat, Inc Device 1100
Physical Slot: 2
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Region 0: Memory at fc000000 (32-bit, prefetchable) [size=32M]
Region 1: Memory at f8020000 (32-bit, non-prefetchable) [size=4K]
Expansion ROM at f8000000 [disabled] [size=64K]
Kernel modules: cirrusfb
00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 20)
Subsystem: Red Hat, Inc Device 1100
Physical Slot: 3
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 11
Region 0: I/O ports at d000 [size=256]
Region 1: Memory at f8021000 (32-bit, non-prefetchable) [size=256]
Expansion ROM at f8010000 [disabled] [size=64K]
Kernel driver in use: 8139cp
Kernel modules: 8139too, 8139cp
00:08.0 PCI bridge: Red Hat, Inc. Device 0001 (prog-if 00 [Normal decode])
Physical Slot: 8
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
I/O behind bridge: 0000c000-0000cfff
Memory behind bridge: f0000000-f7ffffff
Prefetchable memory behind bridge: fe000000-fe0fffff
Secondary status: 66MHz+ FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
01:01.0 RAM memory: Red Hat, Inc Device 1110
Subsystem: Red Hat, Inc Device 1100
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 0
Region 0: Memory at f4000000 (32-bit, non-prefetchable) [disabled] [size=256]
Region 2: Memory at f0000000 (32-bit, non-prefetchable) [disabled] [size=32M]
Kernel modules: virtio_pci
01:01.1 RAM memory: Red Hat, Inc Device 1110
Subsystem: Red Hat, Inc Device 1100
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 0
Region 0: Memory at f4001000 (32-bit, non-prefetchable) [disabled] [size=256]
Region 2: Memory at f2000000 (32-bit, non-prefetchable) [disabled] [size=32M]
Kernel modules: virtio_pci
>
next prev parent reply other threads:[~2011-09-08 6:16 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-04 9:43 [Qemu-devel] [PATCH] pci: add standard bridge device Michael S. Tsirkin
2011-07-05 13:29 ` Isaku Yamahata
2011-07-05 13:43 ` Michael S. Tsirkin
2011-08-17 8:37 ` Wen Congyang
2011-08-18 3:22 ` Wen Congyang
2011-08-18 15:15 ` Avi Kivity
2011-08-19 5:12 ` Wen Congyang
2011-08-19 15:26 ` Avi Kivity
2011-08-22 3:13 ` Wen Congyang
2011-08-22 6:23 ` Avi Kivity
2011-09-02 1:32 ` Wen Congyang
2011-09-02 2:56 ` Wen Congyang
2011-09-04 8:25 ` Avi Kivity
2011-09-06 3:06 ` Wen Congyang
2011-09-06 7:45 ` Avi Kivity
2011-09-07 4:39 ` Wen Congyang
2011-09-07 11:52 ` Michael S. Tsirkin
2011-09-08 6:15 ` Wen Congyang [this message]
2011-09-08 7:26 ` Wen Congyang
2011-09-08 9:43 ` Gerd Hoffmann
2011-09-08 9:58 ` Wen Congyang
2011-09-08 10:42 ` Michael S. Tsirkin
2011-09-08 11:03 ` Wen Congyang
2011-09-08 11:13 ` Michael S. Tsirkin
2011-09-09 6:43 ` Wen Congyang
2011-09-09 7:12 ` Michael S. Tsirkin
2011-09-09 7:24 ` Wen Congyang
2011-09-09 7:34 ` Michael S. Tsirkin
2011-09-09 7:35 ` Wen Congyang
2011-08-26 9:43 ` Michael S. Tsirkin
2011-08-28 7:50 ` Avi Kivity
2011-08-28 11:41 ` Michael S. Tsirkin
2011-08-28 13:10 ` Avi Kivity
2011-08-28 13:42 ` Michael S. Tsirkin
2011-08-28 13:53 ` Avi Kivity
2011-09-04 12:30 ` Michael S. Tsirkin
2011-09-04 12:40 ` Avi Kivity
2011-09-04 13:01 ` Michael S. Tsirkin
2011-09-04 13:05 ` Avi Kivity
2011-09-04 13:09 ` Avi Kivity
2011-09-04 13:41 ` Michael S. Tsirkin
2011-09-04 13:55 ` Avi Kivity
2011-09-04 14:21 ` Michael S. Tsirkin
2011-09-04 14:36 ` Avi Kivity
2011-09-04 14:54 ` Michael S. Tsirkin
2011-09-04 15:14 ` Avi Kivity
2011-09-04 15:24 ` Michael S. Tsirkin
2011-09-04 15:37 ` Avi Kivity
2011-09-04 15:45 ` Michael S. Tsirkin
2011-09-04 15:46 ` Avi Kivity
2011-09-04 16:19 ` Michael S. Tsirkin
2011-09-04 16:22 ` Avi Kivity
2011-09-04 17:03 ` Michael S. Tsirkin
2011-09-05 5:36 ` Avi Kivity
2011-09-04 15:26 ` Michael S. Tsirkin
2011-09-04 15:42 ` Avi Kivity
2011-09-04 15:46 ` Michael S. Tsirkin
2011-09-04 15:49 ` Avi Kivity
2011-09-04 16:20 ` Michael S. Tsirkin
2011-08-26 9:57 ` Michael S. Tsirkin
2011-09-04 17:11 ` Michael S. Tsirkin
2011-09-05 8:17 ` Markus Armbruster
2011-09-05 9:38 ` Michael S. Tsirkin
2011-09-05 9:53 ` Gerd Hoffmann
2011-09-05 11:40 ` Michael S. Tsirkin
2011-09-06 9:18 ` Markus Armbruster
[not found] ` <4E801927.8020708@cn.fujitsu.com>
[not found] ` <20110926070824.GB5860@redhat.com>
[not found] ` <4EAF4AFD.6040102@cn.fujitsu.com>
[not found] ` <20111101084439.GA11958@redhat.com>
2011-11-01 8:49 ` Wen Congyang
2011-11-01 11:48 ` Michael S. Tsirkin
2011-11-02 1:00 ` Wen Congyang
2011-11-02 2:15 ` Isaku Yamahata
2011-11-02 2:38 ` Wen Congyang
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=4E685D85.6030806@cn.fujitsu.com \
--to=wency@cn.fujitsu.com \
--cc=avi@redhat.com \
--cc=kwolf@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yamahata@valinux.co.jp \
/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.