[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] linux-3.9-rc0 regression from 3.8 SATA controller not detected under xen



Wednesday, February 27, 2013, 8:28:10 PM, you wrote:

> On Wed, Feb 27, 2013 at 06:50:59PM +0100, Sander Eikelenboom wrote:
>> 
>> Wednesday, February 27, 2013, 1:54:31 PM, you wrote:
>> 
>> >>>> On 27.02.13 at 12:46, Sander Eikelenboom <linux@xxxxxxxxxxxxxx> wrote:
>> >>   [   89.338827] ahci: probe of 0000:00:11.0 failed with error -22
>> 
>> > Which is -EINVAL. With nothing else printed, I'm afraid you need to
>> > find the origin of this return value by instrumenting the involved
>> > call tree.
>> 
>> Just wondering, is multiple msi's per device actually supported by xen ?

> That is very good question. I know we support MSI-X b/c 1GB or 10GB NICs
> use them and they work great with Xen.

> BTW, this is merge:
> ommit 5800700f66678ea5c85e7d62b138416070bf7f60
> Merge: 266d7ad af8d102
> Author: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Date:   Tue Feb 19 19:07:27 2013 -0800

>     Merge branch 'x86-apic-for-linus' of 
> git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
>     
>     Pull x86/apic changes from Ingo Molnar:
>      "Main changes:
>     
>        - Multiple MSI support added to the APIC, PCI and AHCI code - acked
>          by all relevant maintainers, by Alexander Gordeev.
>     
>          The advantage is that multiple AHCI ports can have multiple MSI
>          irqs assigned, and can thus spread to multiple CPUs.
>     
>          [ Drivers can make use of this new facility via the
>            pci_enable_msi_block_auto() method ]


Ahh yes, i have added some debug info to ahci.c:

  [   36.778395] SE | bus: 'pci': really_probe: probing driver ahci with device 
0000:00:11.0
  [   36.809777] really_probe: pinctrl_bind_pins(0000:00:11.0) ret: 0
  [   36.835136] ahci 0000:00:11.0: SE | ahci_init_one start 
  [   36.858284] ahci 0000:00:11.0: version 3.0
  [   36.877840] xen: registering gsi 19 triggering 0 polarity 1
  [   36.901791] xen: --> pirq=19 -> irq=19 (gsi=19)
  (XEN) [2013-02-27 19:43:07] IOAPIC[0]: Set PCI routing entry (6-19 -> 0x99 -> 
IRQ 19 Mode:1 Active:1)
 [   36.949293] ahci 0000:00:11.0: SE | pcim_enable_device(pdev) rc:0
  [   36.974714] ahci 0000:00:11.0: SE pcim_iomap_regions_request_all(pdev, 1 
<< ahci_pci_bar, DRV_NAME)  rc:0
  [   37.010706] ahci 0000:00:11.0: SE pci_enable_msi_block_auto(pdev, &maxvec) 
rc:4
  [   37.039878] ahci 0000:00:11.0: SE | n_msis: 4
  [   37.060115] ahci 0000:00:11.0: SE | ahci_configure_dma_masks(pdev, 
hpriv->cap & HOST_CAP_64)  rc:0
  [   37.094135] ahci 0000:00:11.0: SE | ahci_pci_reset_controller(host)  rc:0
  [   37.121658] ahci 0000:00:11.0: AHCI 0001.0200 32 slots 4 ports 6 Gbps 0xf 
impl SATA mode
  [   37.153118] ahci 0000:00:11.0: flags: 64bit ncq sntf ilck pm led clo pmp 
pio slum part 
  [   37.184265] ahci 0000:00:11.0: SE | me here 1 
  [   37.204568] ahci 0000:00:11.0: SE | n_msis(4) host->n_ports(4) irq:121
  [   37.231748] ahci 0000:00:11.0: SE | ata_host_start(host) rc:0
  [   37.256222] ahci 0000:00:11.0: SE | devm_request_threaded_irq i:0  rc:0
  [   37.283023] ahci 0000:00:11.0: SE | devm_request_threaded_irq i:1  rc:-22
  [   37.310344] really_probe: dev->bus->probe(0000:00:11.0) ret: -22
  [   37.335467] ahci: probe of 0000:00:11.0 failed with error -22
  [   37.359552] really_probe: 0000:00:11.0 done ret: 0

So it bails out at the second devm_request_threaded_irq in:

int ahci_host_activate(struct ata_host *host, int irq, unsigned int n_msis)
{
        int i, rc;

        dev_err(host->dev, "SE | n_msis(%d) host->n_ports(%d) irq:%d\n",n_msis 
, host->n_ports,irq);
        /* Sharing Last Message among several ports is not supported */
        if (n_msis < host->n_ports){
                dev_err(host->dev, "SE | uhoh n_msis(%d) < host->n_ports(%d) 
irq:%d\n",n_msis , host->n_ports,irq);
                return -EINVAL;
        }
        rc = ata_host_start(host);
        dev_err(host->dev, "SE | ata_host_start(host) rc:%d\n",rc);
        if (rc)
                return rc;

        for (i = 0; i < host->n_ports; i++) {
                rc = devm_request_threaded_irq(host->dev,
                        irq + i, ahci_hw_interrupt, ahci_thread_fn, IRQF_SHARED,
                        dev_driver_string(host->dev), host->ports[i]);
                dev_err(host->dev, "SE | devm_request_threaded_irq i:%d  
rc:%d\n",i,rc);
                if (rc)
                        goto out_free_irqs;
        }




> With MSI per device, the hypercall that ends up happening is:
> PHYSDEVOP_map_pirq with:

>    map_irq.domid = domid;
>    map_irq.type = MAP_PIRQ_TYPE_MSI_SEG;
>    map_irq.index = -1;
>    map_irq.pirq = -1;
>    map_irq.bus = dev->bus->number |
>                  (pci_domain_nr(dev->bus) << 16);
>    map_irq.devfn = dev->devfn;

> Which would imply that we are doing this call multiple times?
> (This is xen_initdom_setup_msi_irqs).

> It looks like pci_enable_msi_block_auto is the multiple MSI one
> and it should perculate down to xen_initdom_setup_msi_irqs.
> Granted the xen_init.. does not do anything with the 'nvec' call.

> So could I ask you try out your hunch by doing three things:
>  1). Instrument xen_initdom_setup_msi_irqs to see if the
>      nvec has anything but 1 and in its loop instrument to
>      see if it has more than on MSI attribute?

>  2). The ahci driver has ahci_init_interrupts which only does
>    the multiple MSI thing if AHCI_HFLAG_NO_MSI is not set.
>     If you edit drivers/ata/ahci ahci_port_info for the SB600 (or 700?)
>     to have AHCI_HFLAG_NO_MSI flag (you probably want to do this
>     seperatly from 1).
>  3). Checkout before merge 5800700f66678ea5c85e7d62b138416070bf7f60
>     and try 266d7ad7f4fe2f44b91561f5b812115c1b3018ab? 
>> 
>> --
>> Sander
>> 
>> > Jan
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@xxxxxxxxxxxxx
>> http://lists.xen.org/xen-devel
>> 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.