13 Jan, 2012

1 commit


09 Jan, 2012

1 commit


08 Jan, 2012

2 commits


05 Jan, 2012

1 commit

  • The 'name', 'owner', and 'mod_name' members are redundant with the
    identically named fields in the 'driver' sub-structure. Rather than
    switching each instance to specify these fields explicitly, introduce
    a macro to simplify this.

    Eliminate further redundancy by allowing the drvname argument to
    DEFINE_XENBUS_DRIVER() to be blank (in which case the first entry from
    the ID table will be used for .driver.name).

    Also eliminate the questionable xenbus_register_{back,front}end()
    wrappers - their sole remaining purpose was the checking of the
    'owner' field, proper setting of which shouldn't be an issue anymore
    when the macro gets used.

    v2: Restore DRV_NAME for the driver name in xen-pciback.

    Signed-off-by: Jan Beulich
    Cc: Jens Axboe
    Cc: Dmitry Torokhov
    Cc: Florian Tobias Schandinat
    Cc: Ian Campbell
    Cc: David S. Miller
    Signed-off-by: Konrad Rzeszutek Wilk

    Jan Beulich
     

01 Nov, 2011

1 commit


25 Oct, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1745 commits)
    dp83640: free packet queues on remove
    dp83640: use proper function to free transmit time stamping packets
    ipv6: Do not use routes from locally generated RAs
    |PATCH net-next] tg3: add tx_dropped counter
    be2net: don't create multiple RX/TX rings in multi channel mode
    be2net: don't create multiple TXQs in BE2
    be2net: refactor VF setup/teardown code into be_vf_setup/clear()
    be2net: add vlan/rx-mode/flow-control config to be_setup()
    net_sched: cls_flow: use skb_header_pointer()
    ipv4: avoid useless call of the function check_peer_pmtu
    TCP: remove TCP_DEBUG
    net: Fix driver name for mdio-gpio.c
    ipv4: tcp: fix TOS value in ACK messages sent from TIME_WAIT
    rtnetlink: Add missing manual netlink notification in dev_change_net_namespaces
    ipv4: fix ipsec forward performance regression
    jme: fix irq storm after suspend/resume
    route: fix ICMP redirect validation
    net: hold sock reference while processing tx timestamps
    tcp: md5: add more const attributes
    Add ethtool -g support to virtio_net
    ...

    Fix up conflicts in:
    - drivers/net/Kconfig:
    The split-up generated a trivial conflict with removal of a
    stale reference to Documentation/networking/net-modules.txt.
    Remove it from the new location instead.
    - fs/sysfs/dir.c:
    Fairly nasty conflicts with the sysfs rb-tree usage, conflicting
    with Eric Biederman's changes for tagged directories.

    Linus Torvalds
     

20 Oct, 2011

2 commits


29 Sep, 2011

1 commit


27 Sep, 2011

1 commit

  • Device drivers that create and destroy SR-IOV virtual functions via
    calls to pci_enable_sriov() and pci_disable_sriov can cause catastrophic
    failures if they attempt to destroy VFs while they are assigned to
    guest virtual machines. By adding a flag for use by the Xen PCI back
    to indicate that a device is assigned a device driver can check that
    flag and avoid destroying VFs while they are assigned and avoid system
    failures.

    Signed-off-by: Konrad Rzeszutek Wilk
    Signed-off-by: David S. Miller

    Konrad Rzeszutek Wilk
     

22 Sep, 2011

5 commits

  • Similar to the "xen/pciback: use mutex rather than spinlock in passthrough backend"
    this patch converts the vpci backend to use a mutex instead of
    a spinlock. Note that the code taking the lock won't ever get called
    from non-sleepable context

    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • The caller that orchestrates the state changes is xenwatch_thread
    and it takes a mutex. In our processing of Xenbus states we can take
    the luxery of going to sleep on a mutex, so lets do that and
    also fix this bug:

    BUG: sleeping function called from invalid context at /linux/kernel/mutex.c:271
    in_atomic(): 1, irqs_disabled(): 0, pid: 32, name: xenwatch
    2 locks held by xenwatch/32:
    #0: (xenwatch_mutex){......}, at: [] xenwatch_thread+0x4b/0x180
    #1: (&(&pdev->dev_lock)->rlock){......}, at: [] xen_pcibk_disconnect+0x1b/0x80
    Pid: 32, comm: xenwatch Not tainted 3.1.0-rc6-00015-g3ce340d #2
    Call Trace:
    [] __might_sleep+0x102/0x130
    [] mutex_lock_nested+0x2f/0x50
    [] unbind_from_irq+0x2c/0x1b0
    [] ? free_irq+0x56/0xb0
    [] unbind_from_irqhandler+0x1c/0x30
    [] xen_pcibk_disconnect+0x2b/0x80
    [] xen_pcibk_frontend_changed+0xe8/0x140
    [] xenbus_otherend_changed+0xd2/0x150
    [] ? get_parent_ip+0x11/0x50
    [] frontend_changed+0x10/0x20
    [] xenwatch_thread+0xb2/0x180

    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • 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: Jan Beulich
    [v1: Dropped the resource_size fix, altered the description]
    [v2: Fixed cleanpatch.pl comments]
    Signed-off-by: Konrad Rzeszutek Wilk

    Jan Beulich
     
  • To accommodate the call to the callback function from
    __xen_pcibk_publish_pci_roots(), which so far dropped and the re-
    acquired the lock without checking that the list didn't actually
    change, convert the code to use a mutex instead (observing that the
    code taking the lock won't ever get called from non-sleepable
    context).

    As a result, drop the bogus use of list_for_each_entry_safe() and
    remove the inappropriate dropping of the lock.

    Signed-off-by: Jan Beulich
    Signed-off-by: Konrad Rzeszutek Wilk

    Jan Beulich
     
  • Use resource_size function on resource object
    instead of explicit computation.

    The semantic patch that makes this output is available
    in scripts/coccinelle/api/resource_size.cocci.

    More information about semantic patching is available at
    http://coccinelle.lip6.fr/

    Signed-off-by: Thomas Meyer
    Signed-off-by: Konrad Rzeszutek Wilk

    Thomas Meyer
     

27 Jul, 2011

1 commit


20 Jul, 2011

13 commits

  • …N_PCIDEV_BACKEND_VPCI

    .. compile options. This way the user can decide during runtime whether they
    want the default 'vpci' (virtual pci passthrough) or where the PCI devices
    are passed in without any BDF renumbering. The option 'passthrough' allows
    the user to toggle the it from 0 (vpci) to 1 (passthrough).

    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

    Konrad Rzeszutek Wilk
     
  • The latter is easily fixed - by the developer compiling the
    module with -DDEBUG. And during runtime - the loglvl provides
    quite a lot of useful data.

    Signed-off-by: Konrad Rzeszutek Wilk

    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: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • If the verbose_request is set (and loglevel high enough), print out
    the MSI/MSI-X values that are sent to the guest. This should aid in
    debugging issues.

    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • If we try to setup an fake IRQ handler for legacy interrupts
    for devices that only have MSI-X (most if not all SR-IOV cards),
    we will fail with this:

    pciback[0000:01:10.0]: failed to install fake IRQ handler for IRQ 0! (rc:-38)

    Since those cards don't have anything in dev->irq.

    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • pciback is rather generic for a modular distro style kernel.

    Signed-off-by: Ian Campbell
    Cc: Jeremy Fitzhardinge
    Cc: Konrad Rzeszutek Wilk
    Signed-off-by: Jeremy Fitzhardinge

    Ian Campbell
     
  • We were using coarse spinlocks that could end up with a deadlock.
    This patch fixes that and makes the spinlocks much more fine-grained.

    We also drop be->watchding state spinlocks as they are already
    guarded by the xenwatch_thread against multiple customers. Without
    that we would trigger the BUG: scheduling while atomic.

    Signed-off-by: Konrad Rzeszutek Wilk

    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: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • In cases where the guest is abruptly killed and has not disabled
    MSI/MSI-X interrupts we want to do it for it.

    Otherwise when the guest is started up and enables MSI, we would
    get a WARN() that the device already had been enabled.

    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     
  • These changes are for PV guest to use Virtual Function. Because the VF's
    vendor, device registers in cfg space are 0xffff, which are invalid and
    ignored by PCI device scan. Values in 'struct pci_dev' are fixed up by
    SR-IOV code, and using these values will present correct VID and DID to
    PV guest kernel.

    And command registers in the cfg space are read only 0, which means we
    have to emulate MMIO enable bit (VF only uses MMIO resource) so PV
    kernel can work properly.

    Acked-by: Jan Beulich
    Signed-off-by: Konrad Rzeszutek Wilk

    Zhao, Yu
     
  • 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: Konrad Rzeszutek Wilk
    Signed-off-by: Jeremy Fitzhardinge

    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: Konrad Rzeszutek Wilk

    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: Konrad Rzeszutek Wilk
    Signed-off-by: Jeremy Fitzhardinge

    Konrad Rzeszutek Wilk