mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
xen: features and fixes for 3.18-rc0
- Add pvscsi frontend and backend drivers.
- Remove _PAGE_IOMAP PTE flag, freeing it for alternate uses.
- Try and keep memory contiguous during PV memory setup (reduces
SWIOTLB usage).
- Allow front/back drivers to use threaded irqs.
- Support large initrds in PV guests.
- Fix PVH guests in preparation for Xen 4.5
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
iQEcBAABAgAGBQJUNonmAAoJEFxbo/MsZsTRHAQH/inCjpCT+pkvTB0YAVfVvgMI
gUogT8G+iB2MuCNpMffGIt8TAVXwcVtnOLH9ABH3IBVehzgipIbIiVEM9YhjrYvU
1rgIKBpmZqSpjDHoIHpdHeCH67cVnRzA/PyoxZWLxPNmQ0t6bNf9yeAcCXK9PfUc
7EAblUDmPGSx9x/EUnOKNNaZSEiUJZHDBXbMBLllk1+5H1vfKnpFCRGMG0IrfI44
KVP2NX9Gfa05edMZYtH887FYyjFe2KNV6LJvE7+w7h2Dy0yIzf7y86t0l4n8gETb
plvEUJ/lu9RYzTiZY/RxgBFYVTV59EqT45brSUtoe2Jcp8GSwiHslTHdfyFBwSo=
=gw4d
-----END PGP SIGNATURE-----
Merge tag 'stable/for-linus-3.18-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip
Pull Xen updates from David Vrabel:
"Features and fixes:
- Add pvscsi frontend and backend drivers.
- Remove _PAGE_IOMAP PTE flag, freeing it for alternate uses.
- Try and keep memory contiguous during PV memory setup (reduces
SWIOTLB usage).
- Allow front/back drivers to use threaded irqs.
- Support large initrds in PV guests.
- Fix PVH guests in preparation for Xen 4.5"
* tag 'stable/for-linus-3.18-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: (22 commits)
xen: remove DEFINE_XENBUS_DRIVER() macro
xen/xenbus: Remove BUG_ON() when error string trucated
xen/xenbus: Correct the comments for xenbus_grant_ring()
x86/xen: Set EFER.NX and EFER.SCE in PVH guests
xen: eliminate scalability issues from initrd handling
xen: sync some headers with xen tree
xen: make pvscsi frontend dependant on xenbus frontend
arm{,64}/xen: Remove "EXPERIMENTAL" in the description of the Xen options
xen-scsifront: don't deadlock if the ring becomes full
x86: remove the Xen-specific _PAGE_IOMAP PTE flag
x86/xen: do not use _PAGE_IOMAP PTE flag for I/O mappings
x86: skip check for spurious faults for non-present faults
xen/efi: Directly include needed headers
xen-scsiback: clean up a type issue in scsiback_make_tpg()
xen-scsifront: use GFP_ATOMIC under spin_lock
MAINTAINERS: Add xen pvscsi maintainer
xen-scsiback: Add Xen PV SCSI backend driver
xen-scsifront: Add Xen PV SCSI frontend driver
xen: Add Xen pvSCSI protocol description
xen/events: support threaded irqs for interdomain event channels
...
This commit is contained in:
commit
81ae31d782
46 changed files with 4214 additions and 263 deletions
|
|
@ -172,6 +172,15 @@ config XEN_PCIDEV_BACKEND
|
|||
|
||||
If in doubt, say m.
|
||||
|
||||
config XEN_SCSI_BACKEND
|
||||
tristate "XEN SCSI backend driver"
|
||||
depends on XEN && XEN_BACKEND && TARGET_CORE
|
||||
help
|
||||
The SCSI backend driver allows the kernel to export its SCSI Devices
|
||||
to other guests via a high-performance shared-memory interface.
|
||||
Only needed for systems running as XEN driver domains (e.g. Dom0) and
|
||||
if guests need generic access to SCSI devices.
|
||||
|
||||
config XEN_PRIVCMD
|
||||
tristate
|
||||
depends on XEN
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ obj-$(CONFIG_XEN_ACPI_HOTPLUG_MEMORY) += xen-acpi-memhotplug.o
|
|||
obj-$(CONFIG_XEN_ACPI_HOTPLUG_CPU) += xen-acpi-cpuhotplug.o
|
||||
obj-$(CONFIG_XEN_ACPI_PROCESSOR) += xen-acpi-processor.o
|
||||
obj-$(CONFIG_XEN_EFI) += efi.o
|
||||
obj-$(CONFIG_XEN_SCSI_BACKEND) += xen-scsiback.o
|
||||
xen-evtchn-y := evtchn.o
|
||||
xen-gntdev-y := gntdev.o
|
||||
xen-gntalloc-y := gntalloc.o
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@
|
|||
#include <xen/interface/platform.h>
|
||||
#include <xen/xen.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
|
||||
#include <asm/xen/hypercall.h>
|
||||
|
||||
#define INIT_EFI_OP(name) \
|
||||
|
|
|
|||
|
|
@ -900,8 +900,8 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
|
|||
return irq;
|
||||
}
|
||||
|
||||
static int bind_interdomain_evtchn_to_irq(unsigned int remote_domain,
|
||||
unsigned int remote_port)
|
||||
int bind_interdomain_evtchn_to_irq(unsigned int remote_domain,
|
||||
unsigned int remote_port)
|
||||
{
|
||||
struct evtchn_bind_interdomain bind_interdomain;
|
||||
int err;
|
||||
|
|
@ -914,6 +914,7 @@ static int bind_interdomain_evtchn_to_irq(unsigned int remote_domain,
|
|||
|
||||
return err ? : bind_evtchn_to_irq(bind_interdomain.local_port);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bind_interdomain_evtchn_to_irq);
|
||||
|
||||
static int find_virq(unsigned int virq, unsigned int cpu)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -592,7 +592,7 @@ static int grow_gnttab_list(unsigned int more_frames)
|
|||
return 0;
|
||||
|
||||
grow_nomem:
|
||||
for ( ; i >= nr_glist_frames; i--)
|
||||
while (i-- > nr_glist_frames)
|
||||
free_page((unsigned long) gnttab_list[i]);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -719,11 +719,13 @@ static const struct xenbus_device_id xen_pcibk_ids[] = {
|
|||
{""},
|
||||
};
|
||||
|
||||
static DEFINE_XENBUS_DRIVER(xen_pcibk, DRV_NAME,
|
||||
static struct xenbus_driver xen_pcibk_driver = {
|
||||
.name = DRV_NAME,
|
||||
.ids = xen_pcibk_ids,
|
||||
.probe = xen_pcibk_xenbus_probe,
|
||||
.remove = xen_pcibk_xenbus_remove,
|
||||
.otherend_changed = xen_pcibk_frontend_changed,
|
||||
);
|
||||
};
|
||||
|
||||
const struct xen_pcibk_backend *__read_mostly xen_pcibk_backend;
|
||||
|
||||
|
|
|
|||
2126
drivers/xen/xen-scsiback.c
Normal file
2126
drivers/xen/xen-scsiback.c
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -259,7 +259,6 @@ static char *error_path(struct xenbus_device *dev)
|
|||
static void xenbus_va_dev_error(struct xenbus_device *dev, int err,
|
||||
const char *fmt, va_list ap)
|
||||
{
|
||||
int ret;
|
||||
unsigned int len;
|
||||
char *printf_buffer = NULL;
|
||||
char *path_buffer = NULL;
|
||||
|
|
@ -270,9 +269,7 @@ static void xenbus_va_dev_error(struct xenbus_device *dev, int err,
|
|||
goto fail;
|
||||
|
||||
len = sprintf(printf_buffer, "%i ", -err);
|
||||
ret = vsnprintf(printf_buffer+len, PRINTF_BUFFER_SIZE-len, fmt, ap);
|
||||
|
||||
BUG_ON(len + ret > PRINTF_BUFFER_SIZE-1);
|
||||
vsnprintf(printf_buffer+len, PRINTF_BUFFER_SIZE-len, fmt, ap);
|
||||
|
||||
dev_err(&dev->dev, "%s\n", printf_buffer);
|
||||
|
||||
|
|
@ -361,8 +358,8 @@ static void xenbus_switch_fatal(struct xenbus_device *dev, int depth, int err,
|
|||
* @ring_mfn: mfn of ring to grant
|
||||
|
||||
* Grant access to the given @ring_mfn to the peer of the given device. Return
|
||||
* 0 on success, or -errno on error. On error, the device will switch to
|
||||
* XenbusStateClosing, and the error will be saved in the store.
|
||||
* a grant reference on success, or -errno on error. On error, the device will
|
||||
* switch to XenbusStateClosing, and the error will be saved in the store.
|
||||
*/
|
||||
int xenbus_grant_ring(struct xenbus_device *dev, unsigned long ring_mfn)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -297,9 +297,13 @@ void xenbus_dev_shutdown(struct device *_dev)
|
|||
EXPORT_SYMBOL_GPL(xenbus_dev_shutdown);
|
||||
|
||||
int xenbus_register_driver_common(struct xenbus_driver *drv,
|
||||
struct xen_bus_type *bus)
|
||||
struct xen_bus_type *bus,
|
||||
struct module *owner, const char *mod_name)
|
||||
{
|
||||
drv->driver.name = drv->name ? drv->name : drv->ids[0].devicetype;
|
||||
drv->driver.bus = &bus->bus;
|
||||
drv->driver.owner = owner;
|
||||
drv->driver.mod_name = mod_name;
|
||||
|
||||
return driver_register(&drv->driver);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,9 @@ extern int xenbus_match(struct device *_dev, struct device_driver *_drv);
|
|||
extern int xenbus_dev_probe(struct device *_dev);
|
||||
extern int xenbus_dev_remove(struct device *_dev);
|
||||
extern int xenbus_register_driver_common(struct xenbus_driver *drv,
|
||||
struct xen_bus_type *bus);
|
||||
struct xen_bus_type *bus,
|
||||
struct module *owner,
|
||||
const char *mod_name);
|
||||
extern int xenbus_probe_node(struct xen_bus_type *bus,
|
||||
const char *type,
|
||||
const char *nodename);
|
||||
|
|
|
|||
|
|
@ -234,13 +234,15 @@ int xenbus_dev_is_online(struct xenbus_device *dev)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(xenbus_dev_is_online);
|
||||
|
||||
int xenbus_register_backend(struct xenbus_driver *drv)
|
||||
int __xenbus_register_backend(struct xenbus_driver *drv, struct module *owner,
|
||||
const char *mod_name)
|
||||
{
|
||||
drv->read_otherend_details = read_frontend_details;
|
||||
|
||||
return xenbus_register_driver_common(drv, &xenbus_backend);
|
||||
return xenbus_register_driver_common(drv, &xenbus_backend,
|
||||
owner, mod_name);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xenbus_register_backend);
|
||||
EXPORT_SYMBOL_GPL(__xenbus_register_backend);
|
||||
|
||||
static int backend_probe_and_watch(struct notifier_block *notifier,
|
||||
unsigned long event,
|
||||
|
|
|
|||
|
|
@ -317,13 +317,15 @@ static void wait_for_devices(struct xenbus_driver *xendrv)
|
|||
print_device_status);
|
||||
}
|
||||
|
||||
int xenbus_register_frontend(struct xenbus_driver *drv)
|
||||
int __xenbus_register_frontend(struct xenbus_driver *drv, struct module *owner,
|
||||
const char *mod_name)
|
||||
{
|
||||
int ret;
|
||||
|
||||
drv->read_otherend_details = read_backend_details;
|
||||
|
||||
ret = xenbus_register_driver_common(drv, &xenbus_frontend);
|
||||
ret = xenbus_register_driver_common(drv, &xenbus_frontend,
|
||||
owner, mod_name);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
@ -332,7 +334,7 @@ int xenbus_register_frontend(struct xenbus_driver *drv)
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xenbus_register_frontend);
|
||||
EXPORT_SYMBOL_GPL(__xenbus_register_frontend);
|
||||
|
||||
static DECLARE_WAIT_QUEUE_HEAD(backend_state_wq);
|
||||
static int backend_state;
|
||||
|
|
|
|||
Loading…
Reference in a new issue