1. 19 11月, 2012 1 次提交
  2. 02 11月, 2012 2 次提交
    • J
      xen-pciback: reject out of range inputs · b3e40b72
      Jan Beulich 提交于
      This add checks for out of range numbers (including in cases where the
      folding of slot and function into a single value could yield false
      matches).
      
      It also removes the bogus field width restrictions in str_to_quirk() -
      nowhere else in the driver this is being done, and hence this function
      could reject input the equivalent of which would be happily accepted
      in other places (in particular, "0x" prefixes causing the effective
      width of the actual number to be either zero or less than what would be
      required to cover the full range of valid values). Note that for the
      moment this second part is cosmetic only, as the kernel's sscanf()
      currently ignores the field widths, but a patch to overcome this is on
      its way.
      Signed-off-by: NJan Beulich <jbeulich@suse.com>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      b3e40b72
    • J
      xen-pciback: simplify and tighten parsing of device IDs · 5b71fbdc
      Jan Beulich 提交于
      Now that at least one of the conformance problems of the kernel's
      sscanf() was addressed (commit da99075c),
      we can improve the parsing done in xen-pciback both in terms of code
      readability and correctness (in particular properly rejecting input
      strings not well formed).
      Signed-off-by: NJan Beulich <jbeulich@suse.com>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      5b71fbdc
  3. 26 9月, 2012 1 次提交
    • K
      xen/pciback: Restore the PCI config space after an FLR. · c341ca45
      Konrad Rzeszutek Wilk 提交于
      When we do an FLR, or D0->D3_hot we may lose the BARs as the
      device has turned itself off (and on). This means the device cannot
      function unless the pci_restore_state is called - which it is
      when the PCI device is unbound from the Xen PCI backend driver.
      For PV guests it ends up calling pci_enable_device / pci_enable_msi[x]
      which does the proper steps
      
      That however is not happening if a HVM guest is run as QEMU
      deals with PCI configuration space. QEMU also requires that the
      device be "parked"  under the ownership of a pci-stub driver to
      guarantee that the PCI device is not being used. Hence we
      follow the same incantation as pci_reset_function does - by
      doing an FLR, then restoring the PCI configuration space.
      
      The result of this patch is that when you run lspci, you get
      now this:
      
      -       Region 0: [virtual] Memory at fe8c0000 (32-bit, non-prefetchable) [size=128K]
      -       Region 1: [virtual] Memory at fe800000 (32-bit, non-prefetchable) [size=512K]
      +       Region 0: Memory at fe8c0000 (32-bit, non-prefetchable) [size=128K]
      +       Region 1: Memory at fe800000 (32-bit, non-prefetchable) [size=512K]
              Region 2: I/O ports at c000 [size=32]
      -       Region 3: [virtual] Memory at fe8e0000 (32-bit, non-prefetchable) [size=16K]
      +       Region 3: Memory at fe8e0000 (32-bit, non-prefetchable) [size=16K]
      
      The [virtual] means that lspci read those entries from SysFS but when
      it read them from the device it got a different value (0xfffffff).
      
      CC: stable@vger.kernel.org #only for 3.5, 3.6
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      c341ca45
  4. 25 9月, 2012 1 次提交
  5. 18 9月, 2012 1 次提交
    • J
      xen-pciback: support wild cards in slot specifications · c3cb4709
      Jan Beulich 提交于
      Particularly for hiding sets of SR-IOV devices, specifying them all
      individually is rather cumbersome. Therefore, allow function and slot
      numbers to be replaced by a wildcard character ('*').
      
      Unfortunately this gets complicated by the in-kernel sscanf()
      implementation not being really standard conformant - matching of
      plain text tails cannot be checked by the caller (a patch to overcome
      this will be sent shortly, and a follow-up patch for simplifying the
      code is planned to be sent when that fixed went upstream).
      Signed-off-by: NJan Beulich <jbeulich@suse.com>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      c3cb4709
  6. 08 9月, 2012 1 次提交
  7. 06 9月, 2012 1 次提交
    • K
      xen/pciback: Fix proper FLR steps. · 80ba77df
      Konrad Rzeszutek Wilk 提交于
      When we do FLR and save PCI config we did it in the wrong order.
      The end result was that if a PCI device was unbind from
      its driver, then binded to xen-pciback, and then back to its
      driver we would get:
      
      > lspci -s 04:00.0
      04:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
      13:42:12 # 4 :~/
      > echo "0000:04:00.0" > /sys/bus/pci/drivers/pciback/unbind
      > modprobe e1000e
      e1000e: Intel(R) PRO/1000 Network Driver - 2.0.0-k
      e1000e: Copyright(c) 1999 - 2012 Intel Corporation.
      e1000e 0000:04:00.0: Disabling ASPM L0s L1
      e1000e 0000:04:00.0: enabling device (0000 -> 0002)
      xen: registering gsi 48 triggering 0 polarity 1
      Already setup the GSI :48
      e1000e 0000:04:00.0: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
      e1000e: probe of 0000:04:00.0 failed with error -2
      
      This fixes it by first saving the PCI configuration space, then
      doing the FLR.
      Reported-by: NRen, Yongjie <yongjie.ren@intel.com>
      Reported-and-Tested-by: NTobias Geiger <tobias.geiger@vido.info>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      CC: stable@vger.kernel.org
      80ba77df
  8. 15 2月, 2012 1 次提交
  9. 04 2月, 2012 1 次提交
  10. 13 1月, 2012 1 次提交
  11. 08 1月, 2012 2 次提交
  12. 20 10月, 2011 2 次提交
  13. 22 9月, 2011 1 次提交
    • J
      xen/pciback: miscellaneous adjustments · 402c5e15
      Jan Beulich 提交于
      This is a minor bugfix and a set of small cleanups; as it is not clear
      whether this needs splitting into pieces (and if so, at what
      granularity), it is a single combined patch.
      - add a missing return statement to an error path in
        kill_domain_by_device()
      - use pci_is_enabled() rather than raw atomic_read()
      - remove a bogus attempt to zero-terminate an already zero-terminated
        string
      - #define DRV_NAME once uniformly in the shared local header
      - make DRIVER_ATTR() variables static
      - eliminate a pointless use of list_for_each_entry_safe()
      - add MODULE_ALIAS()
      - a little bit of constification
      - adjust a few messages
      - remove stray semicolons from inline function definitions
      Signed-off-by: NJan Beulich <jbeulich@suse.com>
      [v1: Dropped the resource_size fix, altered the description]
      [v2: Fixed cleanpatch.pl comments]
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      402c5e15
  14. 20 7月, 2011 5 次提交
    • K
      xen/pciback: Drop two backends, squash and cleanup some code. · a92336a1
      Konrad Rzeszutek Wilk 提交于
       - Remove the slot and controller controller backend as they
         are not used.
       - Document the find pciback_[read|write]_config_[byte|word|dword]
         to make it easier to find.
       - Collapse the code from conf_space_capability_msi into pciback_ops.c
       - Collapse conf_space_capability_[pm|vpd].c in conf_space_capability.c
         [and remove the conf_space_capability.h file]
       - Rename all visible functions from pciback to xen_pcibk.
       - Rename all the printk/pr_info, etc that use the "pciback" to say
         "xen-pciback".
       - Convert functions that are not referenced outside the code to be
         static to save on name space.
       - Do the same thing for structures that are internal to the driver.
       - Run checkpatch.pl after the renames and fixup its warnings and
         fix any compile errors caused by the variable rename
       - Cleanup any structs that checkpath.pl commented about or just
         look odd.
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      a92336a1
    • K
      xen/pciback: Allocate IRQ handler for device that is shared with guest. · 0513fe9e
      Konrad Rzeszutek Wilk 提交于
      If the device that is to be shared with a guest is a level device and
      the IRQ is shared with the initial domain we need to take actions.
      Mainly we install a dummy IRQ handler that will ACK on the interrupt
      line so as to not have the initial domain disable the interrupt line.
      
      This dummy IRQ handler is not enabled when the device MSI/MSI-X lines
      are set, nor for edge interrupts. And also not for level interrupts
      that are not shared amongst devices. Lastly, if the user passes
      to the guest all of the PCI devices on the shared line the we won't
      install the dummy handler either.
      
      There is also SysFS instrumentation to check its state and turn
      IRQ ACKing on/off if necessary.
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      0513fe9e
    • K
      xen/pciback: Register the owner (domain) of the PCI device. · 6221a9b2
      Konrad Rzeszutek Wilk 提交于
      When the front-end and back-end start negotiating we register
      the domain that will use the PCI device. Furthermore during shutdown
      of guest or unbinding of the PCI device (and unloading of module)
      from pciback we unregister the domain owner.
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      6221a9b2
    • K
      xen/pciback: Cleanup the driver based on checkpatch warnings and errors. · 8bfd4e02
      Konrad Rzeszutek Wilk 提交于
      Checkpatch found some extra warnings and errors. This mega
      patch fixes them all in one big swoop. We also spruce
      up the pcistub_ids to use DEFINE_PCI_DEVICE_TABLE macro
      (suggested by Jan Beulich).
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      8bfd4e02
    • K
      xen/pciback: xen pci backend driver. · 30edc14b
      Konrad Rzeszutek Wilk 提交于
      This is the host side counterpart to the frontend driver in
      drivers/pci/xen-pcifront.c. The PV protocol is also implemented by
      frontend drivers in other OSes too, such as the BSDs.
      
      The PV protocol is rather simple. There is page shared with the guest,
      which has the 'struct xen_pci_sharedinfo' embossed in it. The backend
      has a thread that is kicked every-time the structure is changed and
      based on the operation field it performs specific tasks:
      
       XEN_PCI_OP_conf_[read|write]:
         Read/Write 0xCF8/0xCFC filtered data. (conf_space*.c)
         Based on which field is probed, we either enable/disable the PCI
         device, change power state, read VPD, etc. The major goal of this
         call is to provide a Physical IRQ (PIRQ) to the guest.
      
         The PIRQ is Xen hypervisor global IRQ value irrespective of the IRQ
         is tied in to the IO-APIC, or is a vector. For GSI type
         interrupts, the PIRQ==GSI holds. For MSI/MSI-X the
         PIRQ value != Linux IRQ number (thought PIRQ==vector).
      
         Please note, that with Xen, all interrupts (except those level shared ones)
         are injected directly to the guest - there is no host interaction.
      
       XEN_PCI_OP_[enable|disable]_msi[|x] (pciback_ops.c)
         Enables/disables the MSI/MSI-X capability of the device. These operations
         setup the MSI/MSI-X vectors for the guest and pass them to the frontend.
      
         When the device is activated, the interrupts are directly injected in the
         guest without involving the host.
      
       XEN_PCI_OP_aer_[detected|resume|mmio|slotreset]: In case of failure,
        perform the appropriate AER commands on the guest. Right now that is
        a cop-out - we just kill the guest.
      
      Besides implementing those commands, it can also
      
       - hide a PCI device from the host. When booting up, the user can specify
         xen-pciback.hide=(1:0:0)(BDF..) so that host does not try to use the
         device.
      
      The driver was lifted from linux-2.6.18.hg tree and fixed up
      so that it could compile under v3.0. Per suggestion from Jesse Barnes
      moved the driver to drivers/xen/xen-pciback.
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      30edc14b