qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: kvm@vger.kernel.org, "Michael S. Tsirkin" <mst@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	qemu-devel@nongnu.org,
	Alex Williamson <alex.williamson@redhat.com>,
	Avi Kivity <avi@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 4/4] kvm: i386: Add classic PCI device assignment
Date: Tue, 28 Aug 2012 02:30:39 +0200	[thread overview]
Message-ID: <503C112F.7060307@web.de> (raw)
In-Reply-To: <CAAu8pHu7XZ4OStiKG78X2TuHd2RaJ08FTq5coDPRWbDbi9UBBQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4242 bytes --]

Hi Blue,

thanks for the review. I addressed most of them, the others a commented
below.

On 2012-08-27 20:56, Blue Swirl wrote:
>> +typedef struct AssignedDevice {
>> +    PCIDevice dev;
>> +    PCIHostDeviceAddress host;
>> +    uint32_t dev_id;
>> +    uint32_t features;
>> +    int intpin;
>> +    AssignedDevRegion v_addrs[PCI_NUM_REGIONS - 1];
>> +    PCIDevRegions real_device;
>> +    PCIINTxRoute intx_route;
>> +    AssignedIRQType assigned_irq_type;
>> +    struct {
>> +#define ASSIGNED_DEVICE_CAP_MSI (1 << 0)
>> +#define ASSIGNED_DEVICE_CAP_MSIX (1 << 1)
>> +        uint32_t available;
>> +#define ASSIGNED_DEVICE_MSI_ENABLED (1 << 0)
>> +#define ASSIGNED_DEVICE_MSIX_ENABLED (1 << 1)
>> +#define ASSIGNED_DEVICE_MSIX_MASKED (1 << 2)
>> +        uint32_t state;
>> +    } cap;
>> +    uint8_t emulate_config_read[PCI_CONFIG_SPACE_SIZE];
>> +    uint8_t emulate_config_write[PCI_CONFIG_SPACE_SIZE];
>> +    int msi_virq_nr;
>> +    int *msi_virq;
>> +    MSIXTableEntry *msix_table;
>> +    target_phys_addr_t msix_table_addr;
>> +    uint16_t msix_max;
>> +    MemoryRegion mmio;
>> +    char *configfd_name;
> 
> const? Not if this would mean more casts.

DEFINE_PROP_STRING, where this is used, doesn't allow this.

...
>> +    } else {
>> +        uint32_t port = addr + dev_region->u.r_baseport;
>> +
>> +        if (data) {
>> +            DEBUG("out data=%lx, size=%d, e_phys=%lx, host=%x\n",
>> +                  *data, size, addr, port);
>> +            switch (size) {
>> +            case 1:
>> +                outb(*data, port);
>> +                break;
>> +            case 2:
>> +                outw(*data, port);
>> +                break;
>> +            case 4:
>> +                outl(*data, port);
>> +                break;
> 
> Maybe add case 8: and default: with abort(), also below.

PIO is never 8 bytes long, the generic layer protects us.

...
>> +
>> +    fclose(f);
>> +
>> +    /* read and fill vendor ID */
>> +    v = get_real_vendor_id(dir, &id);
>> +    if (v) {
>> +        return 1;
>> +    }
>> +    pci_dev->dev.config[0] = id & 0xff;
>> +    pci_dev->dev.config[1] = (id & 0xff00) >> 8;
>> +
>> +    /* read and fill device ID */
>> +    v = get_real_device_id(dir, &id);
>> +    if (v) {
>> +        return 1;
>> +    }
>> +    pci_dev->dev.config[2] = id & 0xff;
>> +    pci_dev->dev.config[3] = (id & 0xff00) >> 8;
>> +
>> +    pci_word_test_and_clear_mask(pci_dev->emulate_config_write + PCI_COMMAND,
>> +                                 PCI_COMMAND_MASTER | PCI_COMMAND_INTX_DISABLE);
>> +
>> +    dev->region_number = r;
>> +    return 0;
>> +}
> 
> Pretty long function, how about refactoring?

Possibly, but I'd prefer to do such changes in-tree, after the more
important refactoring on MSI[-X] is done.

...
>> +    if (ctrl_byte & PCI_MSI_FLAGS_ENABLE) {
>> +        uint8_t *pos = pci_dev->config + pci_dev->msi_cap;
>> +        MSIMessage msg;
>> +        int virq;
>> +
>> +        msg.address = pci_get_long(pos + PCI_MSI_ADDRESS_LO);
>> +        msg.data = pci_get_word(pos + PCI_MSI_DATA_32);
>> +        virq = kvm_irqchip_add_msi_route(kvm_state, msg);
>> +        if (virq < 0) {
>> +            perror("assigned_dev_update_msi: kvm_irqchip_add_msi_route");
>> +            return;
>> +        }
>> +
>> +        assigned_dev->msi_virq = g_malloc(sizeof(*assigned_dev->msi_virq));
> 
> Is this ever freed?

Yep, in free_msi_virqs. If you think you spotted a path where this is
not the case, let me know.

...
>> +
>> +static Property da_properties[] = {
> 
> const?

Nope, properties must remain writable.

> 
>> +    DEFINE_PROP_PCI_HOST_DEVADDR("host", AssignedDevice, host),
>> +    DEFINE_PROP_BIT("prefer_msi", AssignedDevice, features,
>> +                    ASSIGNED_DEVICE_PREFER_MSI_BIT, false),
>> +    DEFINE_PROP_BIT("share_intx", AssignedDevice, features,
>> +                    ASSIGNED_DEVICE_SHARE_INTX_BIT, true),
>> +    DEFINE_PROP_INT32("bootindex", AssignedDevice, bootindex, -1),
>> +    DEFINE_PROP_STRING("configfd", AssignedDevice, configfd_name),
>> +    DEFINE_PROP_END_OF_LIST(),
>> +};
>> +

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 259 bytes --]

  parent reply	other threads:[~2012-08-28  0:30 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-27  6:28 [Qemu-devel] [PATCH 0/4] uq/master: Add classic PCI device assignment Jan Kiszka
2012-08-27  6:28 ` [Qemu-devel] [PATCH 1/4] kvm: Introduce kvm_irqchip_update_msi_route Jan Kiszka
2012-08-27  6:28 ` [Qemu-devel] [PATCH 2/4] kvm: Introduce kvm_has_intx_set_mask Jan Kiszka
2012-08-27  6:28 ` [Qemu-devel] [PATCH 3/4] kvm: i386: Add services required for PCI device assignment Jan Kiszka
2012-08-27  6:28 ` [Qemu-devel] [PATCH 4/4] kvm: i386: Add classic " Jan Kiszka
2012-08-27 12:07   ` Andreas Färber
2012-08-27 12:15     ` Jan Kiszka
2012-08-28 21:26       ` Peter Maydell
2012-08-29  8:47         ` Jan Kiszka
2012-08-29  8:49           ` Peter Maydell
2012-08-29  8:50             ` Jan Kiszka
2012-09-03 15:59             ` Avi Kivity
2012-09-04  3:31               ` Alex Williamson
2012-08-28 12:57     ` Anthony Liguori
2012-08-29 14:08       ` Andreas Färber
2012-08-29 18:32         ` Anthony Liguori
2012-09-04 21:00         ` Anthony Liguori
2012-09-05 15:26           ` Avi Kivity
2012-09-05 15:29             ` Michael S. Tsirkin
2012-09-05 15:41             ` Anthony Liguori
2012-09-05 15:52               ` Avi Kivity
2012-09-05 19:04               ` Blue Swirl
2012-09-05 19:22                 ` Anthony Liguori
2012-09-05 19:38                   ` Blue Swirl
2012-09-05 20:46                     ` Anthony Liguori
2012-09-10 15:33                       ` Andreas Färber
2012-09-06  3:42                     ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
2012-09-08  7:54                       ` Blue Swirl
2012-09-05 19:24                 ` [Qemu-devel] " Eric Blake
2012-09-05 19:43                   ` Blue Swirl
2012-09-06  8:44                 ` Avi Kivity
2012-09-08  8:06                   ` Blue Swirl
2012-09-08  9:28                     ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
2012-09-08 10:16                       ` Blue Swirl
2012-09-08 12:13                         ` Alexander Graf
2012-09-08 12:30                           ` Blue Swirl
2012-09-08 14:59                             ` Alexander Graf
2012-08-27 18:56   ` [Qemu-devel] " Blue Swirl
2012-08-27 19:01     ` Michael S. Tsirkin
2012-08-27 19:06       ` Blue Swirl
2012-08-28  0:30     ` Jan Kiszka [this message]
2012-09-03 16:06       ` Avi Kivity
2012-08-28  7:35     ` Michael Tokarev
2012-08-28 17:01       ` Blue Swirl
2012-08-28 17:28         ` Michael S. Tsirkin
2012-08-28 17:38           ` Blue Swirl
2012-08-28 19:31             ` Anthony Liguori
2012-08-28 19:49               ` malc
2012-08-28 20:06               ` Blue Swirl
2012-08-28 21:51                 ` Anthony Liguori
2012-09-01  9:20                   ` Blue Swirl
2012-08-29  8:27               ` Markus Armbruster
2012-09-03 16:14                 ` Avi Kivity
2012-09-03 19:32                   ` Blue Swirl
2012-09-04  8:32                     ` Avi Kivity
2012-09-04 19:27                       ` Blue Swirl
2012-09-04 21:28                         ` Michael S. Tsirkin
2012-09-05 19:09                           ` Blue Swirl
2012-08-28 11:02   ` [Qemu-devel] [PATCH v2 " Jan Kiszka
2012-08-28 21:49     ` Michael S. Tsirkin
2012-08-29  8:44       ` Jan Kiszka
2012-08-29 10:35         ` Michael S. Tsirkin
2012-08-30 18:30     ` [Qemu-devel] [PATCH v3 " Jan Kiszka
2012-09-06  8:44       ` Jan Kiszka
2012-09-06  8:49         ` Michael S. Tsirkin
2012-09-06 16:06         ` Andreas Färber
2012-09-06 16:16           ` Jan Kiszka
2012-09-08  7:55           ` Blue Swirl
2012-09-09 14:13         ` Avi Kivity
2012-09-10  9:26           ` Jan Kiszka
2012-09-10 12:30             ` Avi Kivity
2012-08-28 15:04   ` [Qemu-devel] [PATCH " Michael S. Tsirkin
2012-08-29 10:50     ` Jan Kiszka

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=503C112F.7060307@web.de \
    --to=jan.kiszka@web.de \
    --cc=alex.williamson@redhat.com \
    --cc=avi@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=mtosatti@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 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).