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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).