- Fix broken build when building docs
23819-make-docs.patch - bnc#720054 - Prevent vif-bridge from adding user-created tap interfaces to a bridge 2XXXX-vif-bridge.patch - bnc#713503 - DOM0 filesystem commit 23752-x86-shared-IRQ-vector-maps.patch 23754-AMD-perdev-vector-map.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=158
This commit is contained in:
parent
ee2be8156e
commit
c05404f51e
147
23752-x86-shared-IRQ-vector-maps.patch
Normal file
147
23752-x86-shared-IRQ-vector-maps.patch
Normal file
@ -0,0 +1,147 @@
|
||||
References: bnc#713503
|
||||
|
||||
# HG changeset patch
|
||||
# User George Dunlap <george.dunlap@eu.citrix.com>
|
||||
# Date 1311701818 -3600
|
||||
# Node ID ef9ed3d2aa870a37ed5e611be9c524d526a2d604
|
||||
# Parent 590aadf7c46ae979da3552332f592f9492ce6d8b
|
||||
xen: Infrastructure to allow irqs to share vector maps
|
||||
|
||||
Laying the groundwork for per-device vector maps. This generic
|
||||
code allows any irq to point to a vector map; all irqs sharing the
|
||||
same vector map will avoid sharing vectors.
|
||||
|
||||
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
|
||||
# HG changeset patch
|
||||
# User George Dunlap <george.dunlap@eu.citrix.com>
|
||||
# Date 1314026133 -3600
|
||||
# Node ID 3a05da2dc7c0a5fc0fcfc40c535d1fcb71203625
|
||||
# Parent d1cd78a73a79e0e648937322cdb8d92a7f86327a
|
||||
x86: Fix up irq vector map logic
|
||||
|
||||
We need to make sure that cfg->used_vector is only cleared once;
|
||||
otherwise there may be a race condition that allows the same vector to
|
||||
be assigned twice, defeating the whole purpose of the map.
|
||||
|
||||
This makes two changes:
|
||||
* __clear_irq_vector() only clears the vector if the irq is not being
|
||||
moved
|
||||
* smp_iqr_move_cleanup_interrupt() only clears used_vector if this
|
||||
is the last place it's being used (move_cleanup_count==0 after
|
||||
decrement).
|
||||
|
||||
Also make use of asserts more consistent, to catch this kind of logic
|
||||
bug in the future.
|
||||
|
||||
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
|
||||
--- a/xen/arch/x86/io_apic.c
|
||||
+++ b/xen/arch/x86/io_apic.c
|
||||
@@ -548,6 +548,13 @@ fastcall void smp_irq_move_cleanup_inter
|
||||
}
|
||||
__get_cpu_var(vector_irq)[vector] = -1;
|
||||
cfg->move_cleanup_count--;
|
||||
+
|
||||
+ if ( cfg->move_cleanup_count == 0
|
||||
+ && cfg->used_vectors )
|
||||
+ {
|
||||
+ ASSERT(test_bit(vector, cfg->used_vectors));
|
||||
+ clear_bit(vector, cfg->used_vectors);
|
||||
+ }
|
||||
unlock:
|
||||
spin_unlock(&desc->lock);
|
||||
}
|
||||
--- a/xen/arch/x86/irq.c
|
||||
+++ b/xen/arch/x86/irq.c
|
||||
@@ -94,6 +94,11 @@ static int __init __bind_irq_vector(int
|
||||
per_cpu(vector_irq, cpu)[vector] = irq;
|
||||
cfg->vector = vector;
|
||||
cfg->cpu_mask = online_mask;
|
||||
+ if ( cfg->used_vectors )
|
||||
+ {
|
||||
+ ASSERT(!test_bit(vector, cfg->used_vectors));
|
||||
+ set_bit(vector, cfg->used_vectors);
|
||||
+ }
|
||||
irq_status[irq] = IRQ_USED;
|
||||
if (IO_APIC_IRQ(irq))
|
||||
irq_vector[irq] = vector;
|
||||
@@ -159,6 +164,7 @@ static void dynamic_irq_cleanup(unsigned
|
||||
desc->depth = 1;
|
||||
desc->msi_desc = NULL;
|
||||
desc->handler = &no_irq_type;
|
||||
+ desc->chip_data->used_vectors=NULL;
|
||||
cpus_setall(desc->affinity);
|
||||
spin_unlock_irqrestore(&desc->lock, flags);
|
||||
|
||||
@@ -191,6 +197,7 @@ static void __clear_irq_vector(int irq)
|
||||
|
||||
if (likely(!cfg->move_in_progress))
|
||||
return;
|
||||
+
|
||||
cpus_and(tmp_mask, cfg->old_cpu_mask, cpu_online_map);
|
||||
for_each_cpu_mask(cpu, tmp_mask) {
|
||||
for (vector = FIRST_DYNAMIC_VECTOR; vector <= LAST_DYNAMIC_VECTOR;
|
||||
@@ -202,6 +209,12 @@ static void __clear_irq_vector(int irq)
|
||||
}
|
||||
}
|
||||
|
||||
+ if ( cfg->used_vectors )
|
||||
+ {
|
||||
+ ASSERT(test_bit(vector, cfg->used_vectors));
|
||||
+ clear_bit(vector, cfg->used_vectors);
|
||||
+ }
|
||||
+
|
||||
cfg->move_in_progress = 0;
|
||||
}
|
||||
|
||||
@@ -261,6 +274,7 @@ static void init_one_irq_cfg(struct irq_
|
||||
cfg->vector = IRQ_VECTOR_UNASSIGNED;
|
||||
cpus_clear(cfg->cpu_mask);
|
||||
cpus_clear(cfg->old_cpu_mask);
|
||||
+ cfg->used_vectors = NULL;
|
||||
}
|
||||
|
||||
int init_irq_data(void)
|
||||
@@ -387,6 +401,10 @@ next:
|
||||
if (test_bit(vector, used_vectors))
|
||||
goto next;
|
||||
|
||||
+ if (cfg->used_vectors
|
||||
+ && test_bit(vector, cfg->used_vectors) )
|
||||
+ goto next;
|
||||
+
|
||||
for_each_cpu_mask(new_cpu, tmp_mask)
|
||||
if (per_cpu(vector_irq, new_cpu)[vector] != -1)
|
||||
goto next;
|
||||
@@ -402,6 +420,11 @@ next:
|
||||
per_cpu(vector_irq, new_cpu)[vector] = irq;
|
||||
cfg->vector = vector;
|
||||
cpus_copy(cfg->cpu_mask, tmp_mask);
|
||||
+ if ( cfg->used_vectors )
|
||||
+ {
|
||||
+ ASSERT(!test_bit(vector, cfg->used_vectors));
|
||||
+ set_bit(vector, cfg->used_vectors);
|
||||
+ }
|
||||
|
||||
irq_status[irq] = IRQ_USED;
|
||||
if (IO_APIC_IRQ(irq))
|
||||
--- a/xen/include/asm-x86/irq.h
|
||||
+++ b/xen/include/asm-x86/irq.h
|
||||
@@ -23,11 +23,16 @@
|
||||
#define irq_to_desc(irq) (&irq_desc[irq])
|
||||
#define irq_cfg(irq) (&irq_cfg[irq])
|
||||
|
||||
+typedef struct {
|
||||
+ DECLARE_BITMAP(_bits,NR_VECTORS);
|
||||
+} vmask_t;
|
||||
+
|
||||
struct irq_cfg {
|
||||
int vector;
|
||||
cpumask_t cpu_mask;
|
||||
cpumask_t old_cpu_mask;
|
||||
unsigned move_cleanup_count;
|
||||
+ vmask_t *used_vectors;
|
||||
u8 move_in_progress : 1;
|
||||
};
|
||||
|
361
23754-AMD-perdev-vector-map.patch
Normal file
361
23754-AMD-perdev-vector-map.patch
Normal file
@ -0,0 +1,361 @@
|
||||
References: bnc#713503
|
||||
|
||||
# HG changeset patch
|
||||
# User George Dunlap <george.dunlap@eu.citrix.com>
|
||||
# Date 1311701836 -3600
|
||||
# Node ID 2e0cf9428554da666616982cd0074024ff85b221
|
||||
# Parent ef9ed3d2aa870a37ed5e611be9c524d526a2d604
|
||||
xen: Option to allow per-device vector maps for MSI IRQs
|
||||
|
||||
Add a vector-map to pci_dev, and add an option to point MSI-related
|
||||
IRQs to the vector-map of the device.
|
||||
|
||||
This prevents irqs from the same device from being assigned
|
||||
the same vector on different pcpus. This is required for systems
|
||||
using an AMD IOMMU, since the intremap tables on AMD only look at
|
||||
vector, and not destination ID.
|
||||
|
||||
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
|
||||
# HG changeset patch
|
||||
# User George Dunlap <george.dunlap@eu.citrix.com>
|
||||
# Date 1311701852 -3600
|
||||
# Node ID fa4e2ca9ecffbc432b451f495ad0a403644a6be8
|
||||
# Parent 2e0cf9428554da666616982cd0074024ff85b221
|
||||
xen: AMD IOMMU: Automatically enable per-device vector maps
|
||||
|
||||
Automatically enable per-device vector maps when using IOMMU,
|
||||
unless disabled specifically by an IOMMU parameter.
|
||||
|
||||
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
|
||||
# HG changeset patch
|
||||
# User George Dunlap <george.dunlap@eu.citrix.com>
|
||||
# Date 1315231215 -3600
|
||||
# Node ID 32814ad7458dc842a7c588eee13e5c4ee11709a3
|
||||
# Parent f1349a968a5ac5577d67ad4a3f3490c580dbe264
|
||||
xen: Add global irq_vector_map option, set if using AMD global intremap tables
|
||||
|
||||
As mentioned in previous changesets, AMD IOMMU interrupt
|
||||
remapping tables only look at the vector, not the destination
|
||||
id of an interrupt. This means that all IRQs going through
|
||||
the same interrupt remapping table need to *not* share vectors.
|
||||
|
||||
The irq "vector map" functionality was originally introduced
|
||||
after a patch which disabled global AMD IOMMUs entirely. That
|
||||
patch has since been reverted, meaning that AMD intremap tables
|
||||
can either be per-device or global.
|
||||
|
||||
This patch therefore introduces a global irq vector map option,
|
||||
and enables it if we're using an AMD IOMMU with a global
|
||||
interrupt remapping table.
|
||||
|
||||
This patch removes the "irq-perdev-vector-map" boolean
|
||||
command-line optino and replaces it with "irq_vector_map",
|
||||
which can have one of three values: none, global, or per-device.
|
||||
|
||||
Setting the irq_vector_map to any value will override the
|
||||
default that the AMD code sets.
|
||||
|
||||
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
|
||||
# HG changeset patch
|
||||
# User Jan Beulich <jbeulich@suse.com>
|
||||
# Date 1317730316 -7200
|
||||
# Node ID a99d75671a911f9c0d5d11e0fe88a0a65863cb44
|
||||
# Parent 3d1664cc9e458809e399320204aca8536e401ee1
|
||||
AMD-IOMMU: remove dead variable references
|
||||
|
||||
These got orphaned up by recent changes.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- a/docs/src/user.tex
|
||||
+++ b/docs/src/user.tex
|
||||
@@ -4197,6 +4197,10 @@ writing to the VGA console after domain
|
||||
\item [ vcpu\_migration\_delay=$<$minimum\_time$>$] Set minimum time of
|
||||
vcpu migration in microseconds (default 0). This parameter avoids agressive
|
||||
vcpu migration. For example, the linux kernel uses 0.5ms by default.
|
||||
+\item [ irq_vector_map=xxx ] Enable irq vector non-sharing maps. Setting 'global'
|
||||
+ will ensure that no IRQs will share vectors. Setting 'per-device' will ensure
|
||||
+ that no IRQs from the same device will share vectors. Setting to 'none' will
|
||||
+ disable it entirely, overriding any defaults the IOMMU code may set.
|
||||
\end{description}
|
||||
|
||||
In addition, the following options may be specified on the Xen command
|
||||
--- a/xen/arch/x86/irq.c
|
||||
+++ b/xen/arch/x86/irq.c
|
||||
@@ -24,6 +24,8 @@
|
||||
#include <asm/mach-generic/mach_apic.h>
|
||||
#include <public/physdev.h>
|
||||
|
||||
+static void parse_irq_vector_map_param(char *s);
|
||||
+
|
||||
/* opt_noirqbalance: If true, software IRQ balancing/affinity is disabled. */
|
||||
bool_t __read_mostly opt_noirqbalance = 0;
|
||||
boolean_param("noirqbalance", opt_noirqbalance);
|
||||
@@ -32,6 +34,12 @@ unsigned int __read_mostly nr_irqs_gsi =
|
||||
unsigned int __read_mostly nr_irqs;
|
||||
integer_param("nr_irqs", nr_irqs);
|
||||
|
||||
+/* This default may be changed by the AMD IOMMU code */
|
||||
+int __read_mostly opt_irq_vector_map = OPT_IRQ_VECTOR_MAP_DEFAULT;
|
||||
+custom_param("irq_vector_map", parse_irq_vector_map_param);
|
||||
+
|
||||
+vmask_t global_used_vector_map;
|
||||
+
|
||||
u8 __read_mostly *irq_vector;
|
||||
struct irq_desc __read_mostly *irq_desc = NULL;
|
||||
|
||||
@@ -60,6 +68,26 @@ static struct timer irq_ratelimit_timer;
|
||||
static unsigned int __read_mostly irq_ratelimit_threshold = 10000;
|
||||
integer_param("irq_ratelimit", irq_ratelimit_threshold);
|
||||
|
||||
+static void __init parse_irq_vector_map_param(char *s)
|
||||
+{
|
||||
+ char *ss;
|
||||
+
|
||||
+ do {
|
||||
+ ss = strchr(s, ',');
|
||||
+ if ( ss )
|
||||
+ *ss = '\0';
|
||||
+
|
||||
+ if ( !strcmp(s, "none"))
|
||||
+ opt_irq_vector_map=OPT_IRQ_VECTOR_MAP_NONE;
|
||||
+ else if ( !strcmp(s, "global"))
|
||||
+ opt_irq_vector_map=OPT_IRQ_VECTOR_MAP_GLOBAL;
|
||||
+ else if ( !strcmp(s, "per-device"))
|
||||
+ opt_irq_vector_map=OPT_IRQ_VECTOR_MAP_PERDEV;
|
||||
+
|
||||
+ s = ss + 1;
|
||||
+ } while ( ss );
|
||||
+}
|
||||
+
|
||||
/* Must be called when irq disabled */
|
||||
void lock_vector_lock(void)
|
||||
{
|
||||
@@ -344,6 +372,41 @@ hw_irq_controller no_irq_type = {
|
||||
end_none
|
||||
};
|
||||
|
||||
+static vmask_t *irq_get_used_vector_mask(int irq)
|
||||
+{
|
||||
+ vmask_t *ret = NULL;
|
||||
+
|
||||
+ if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_GLOBAL )
|
||||
+ {
|
||||
+ struct irq_desc *desc = irq_to_desc(irq);
|
||||
+
|
||||
+ ret = &global_used_vector_map;
|
||||
+
|
||||
+ if ( desc->chip_data->used_vectors )
|
||||
+ {
|
||||
+ printk(XENLOG_INFO "%s: Strange, unassigned irq %d already has used_vectors!\n",
|
||||
+ __func__, irq);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ int vector;
|
||||
+
|
||||
+ vector = irq_to_vector(irq);
|
||||
+ if ( vector > 0 )
|
||||
+ {
|
||||
+ printk(XENLOG_INFO "%s: Strange, irq %d already assigned vector %d!\n",
|
||||
+ __func__, irq, vector);
|
||||
+
|
||||
+ ASSERT(!test_bit(vector, ret));
|
||||
+
|
||||
+ set_bit(vector, ret);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
int __assign_irq_vector(int irq, struct irq_cfg *cfg, const cpumask_t *mask)
|
||||
{
|
||||
/*
|
||||
@@ -362,6 +425,7 @@ int __assign_irq_vector(int irq, struct
|
||||
int cpu, err;
|
||||
unsigned long flags;
|
||||
cpumask_t tmp_mask;
|
||||
+ vmask_t *irq_used_vectors = NULL;
|
||||
|
||||
old_vector = irq_to_vector(irq);
|
||||
if (old_vector) {
|
||||
@@ -376,6 +440,17 @@ int __assign_irq_vector(int irq, struct
|
||||
return -EAGAIN;
|
||||
|
||||
err = -ENOSPC;
|
||||
+
|
||||
+ /* This is the only place normal IRQs are ever marked
|
||||
+ * as "in use". If they're not in use yet, check to see
|
||||
+ * if we need to assign a global vector mask. */
|
||||
+ if ( irq_status[irq] == IRQ_USED )
|
||||
+ {
|
||||
+ irq_used_vectors = cfg->used_vectors;
|
||||
+ }
|
||||
+ else
|
||||
+ irq_used_vectors = irq_get_used_vector_mask(irq);
|
||||
+
|
||||
for_each_cpu_mask(cpu, *mask) {
|
||||
int new_cpu;
|
||||
int vector, offset;
|
||||
@@ -401,8 +476,8 @@ next:
|
||||
if (test_bit(vector, used_vectors))
|
||||
goto next;
|
||||
|
||||
- if (cfg->used_vectors
|
||||
- && test_bit(vector, cfg->used_vectors) )
|
||||
+ if (irq_used_vectors
|
||||
+ && test_bit(vector, irq_used_vectors) )
|
||||
goto next;
|
||||
|
||||
for_each_cpu_mask(new_cpu, tmp_mask)
|
||||
@@ -420,15 +495,22 @@ next:
|
||||
per_cpu(vector_irq, new_cpu)[vector] = irq;
|
||||
cfg->vector = vector;
|
||||
cpus_copy(cfg->cpu_mask, tmp_mask);
|
||||
+
|
||||
+ irq_status[irq] = IRQ_USED;
|
||||
+ ASSERT((cfg->used_vectors == NULL)
|
||||
+ || (cfg->used_vectors == irq_used_vectors));
|
||||
+ cfg->used_vectors = irq_used_vectors;
|
||||
+
|
||||
+ if (IO_APIC_IRQ(irq))
|
||||
+ irq_vector[irq] = vector;
|
||||
+
|
||||
if ( cfg->used_vectors )
|
||||
{
|
||||
ASSERT(!test_bit(vector, cfg->used_vectors));
|
||||
+
|
||||
set_bit(vector, cfg->used_vectors);
|
||||
}
|
||||
|
||||
- irq_status[irq] = IRQ_USED;
|
||||
- if (IO_APIC_IRQ(irq))
|
||||
- irq_vector[irq] = vector;
|
||||
err = 0;
|
||||
local_irq_restore(flags);
|
||||
break;
|
||||
@@ -1523,7 +1605,7 @@ int map_domain_pirq(
|
||||
|
||||
if ( !IS_PRIV(current->domain) &&
|
||||
!(IS_PRIV_FOR(current->domain, d) &&
|
||||
- irq_access_permitted(current->domain, pirq)))
|
||||
+ irq_access_permitted(current->domain, pirq)))
|
||||
return -EPERM;
|
||||
|
||||
if ( pirq < 0 || pirq >= d->nr_pirqs || irq < 0 || irq >= nr_irqs )
|
||||
@@ -1571,8 +1653,22 @@ int map_domain_pirq(
|
||||
|
||||
if ( desc->handler != &no_irq_type )
|
||||
dprintk(XENLOG_G_ERR, "dom%d: irq %d in use\n",
|
||||
- d->domain_id, irq);
|
||||
+ d->domain_id, irq);
|
||||
desc->handler = &pci_msi_type;
|
||||
+
|
||||
+ if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_PERDEV
|
||||
+ && !desc->chip_data->used_vectors )
|
||||
+ {
|
||||
+ desc->chip_data->used_vectors = &pdev->info.used_vectors;
|
||||
+ if ( desc->chip_data->vector != IRQ_VECTOR_UNASSIGNED )
|
||||
+ {
|
||||
+ int vector = desc->chip_data->vector;
|
||||
+ ASSERT(!test_bit(vector, desc->chip_data->used_vectors));
|
||||
+
|
||||
+ set_bit(vector, desc->chip_data->used_vectors);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
d->arch.pirq_irq[pirq] = irq;
|
||||
d->arch.irq_pirq[irq] = pirq;
|
||||
setup_msi_irq(pdev, msi_desc, irq);
|
||||
@@ -1583,9 +1679,12 @@ int map_domain_pirq(
|
||||
d->arch.pirq_irq[pirq] = irq;
|
||||
d->arch.irq_pirq[irq] = pirq;
|
||||
spin_unlock_irqrestore(&desc->lock, flags);
|
||||
+
|
||||
+ if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_PERDEV )
|
||||
+ printk(XENLOG_INFO "Per-device vector maps for GSIs not implemented yet.\n");
|
||||
}
|
||||
|
||||
- done:
|
||||
+done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
--- a/xen/drivers/passthrough/amd/pci_amd_iommu.c
|
||||
+++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c
|
||||
@@ -166,6 +166,35 @@ int __init amd_iov_detect(void)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * AMD IOMMUs don't distinguish between vectors destined for
|
||||
+ * different cpus when doing interrupt remapping. This means
|
||||
+ * that interrupts going through the same intremap table
|
||||
+ * can't share the same vector.
|
||||
+ *
|
||||
+ * If irq_vector_map isn't specified, choose a sensible default:
|
||||
+ * - If we're using per-device interemap tables, per-device
|
||||
+ * vector non-sharing maps
|
||||
+ * - If we're using a global interemap table, global vector
|
||||
+ * non-sharing map
|
||||
+ */
|
||||
+ if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_DEFAULT )
|
||||
+ {
|
||||
+ if ( amd_iommu_perdev_intremap )
|
||||
+ {
|
||||
+ printk("AMD-Vi: Enabling per-device vector maps\n");
|
||||
+ opt_irq_vector_map = OPT_IRQ_VECTOR_MAP_PERDEV;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ printk("AMD-Vi: Enabling global vector map\n");
|
||||
+ opt_irq_vector_map = OPT_IRQ_VECTOR_MAP_GLOBAL;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ printk("AMD-Vi: Not overriding irq_vector_map setting\n");
|
||||
+ }
|
||||
return scan_pci_devices();
|
||||
}
|
||||
|
||||
--- a/xen/include/asm-x86/irq.h
|
||||
+++ b/xen/include/asm-x86/irq.h
|
||||
@@ -45,6 +45,13 @@ extern u8 *irq_vector;
|
||||
|
||||
extern bool_t opt_noirqbalance;
|
||||
|
||||
+#define OPT_IRQ_VECTOR_MAP_DEFAULT 0 /* Do the default thing */
|
||||
+#define OPT_IRQ_VECTOR_MAP_NONE 1 /* None */
|
||||
+#define OPT_IRQ_VECTOR_MAP_GLOBAL 2 /* One global vector map (no vector sharing) */
|
||||
+#define OPT_IRQ_VECTOR_MAP_PERDEV 3 /* Per-device vetor map (no vector sharing w/in a device) */
|
||||
+
|
||||
+extern int opt_irq_vector_map;
|
||||
+
|
||||
/*
|
||||
* Per-cpu current frame pointer - the location of the last exception frame on
|
||||
* the stack
|
||||
--- a/xen/include/xen/pci.h
|
||||
+++ b/xen/include/xen/pci.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <xen/types.h>
|
||||
#include <xen/list.h>
|
||||
#include <xen/spinlock.h>
|
||||
+#include <xen/irq.h>
|
||||
|
||||
/*
|
||||
* The PCI interface treats multi-function devices as independent
|
||||
@@ -38,6 +39,7 @@ struct pci_dev_info {
|
||||
u8 bus;
|
||||
u8 devfn;
|
||||
} physfn;
|
||||
+ vmask_t used_vectors;
|
||||
};
|
||||
|
||||
struct pci_dev {
|
22
23819-make-docs.patch
Normal file
22
23819-make-docs.patch
Normal file
@ -0,0 +1,22 @@
|
||||
# HG changeset patch
|
||||
# User Keir Fraser <keir@xen.org>
|
||||
# Date 1315320580 -3600
|
||||
# Node ID 5fe770c8a8a35c58893816ee6335a90ed43f3bbd
|
||||
# Parent 0268e73809532a4a3ca18a075efcee3c62caf458
|
||||
docs: Fix 'make docs'
|
||||
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
Index: xen-4.1.2-testing/docs/src/user.tex
|
||||
===================================================================
|
||||
--- xen-4.1.2-testing.orig/docs/src/user.tex
|
||||
+++ xen-4.1.2-testing/docs/src/user.tex
|
||||
@@ -4197,7 +4197,7 @@ writing to the VGA console after domain
|
||||
\item [ vcpu\_migration\_delay=$<$minimum\_time$>$] Set minimum time of
|
||||
vcpu migration in microseconds (default 0). This parameter avoids agressive
|
||||
vcpu migration. For example, the linux kernel uses 0.5ms by default.
|
||||
-\item [ irq_vector_map=xxx ] Enable irq vector non-sharing maps. Setting 'global'
|
||||
+\item [ irq\_vector\_map=xxx ] Enable irq vector non-sharing maps. Setting 'global'
|
||||
will ensure that no IRQs will share vectors. Setting 'per-device' will ensure
|
||||
that no IRQs from the same device will share vectors. Setting to 'none' will
|
||||
disable it entirely, overriding any defaults the IOMMU code may set.
|
29
2XXXX-vif-bridge.patch
Normal file
29
2XXXX-vif-bridge.patch
Normal file
@ -0,0 +1,29 @@
|
||||
# HG changeset patch
|
||||
# User Jim Fehlig <jfehlig@suse.com>
|
||||
# Date 1319581952 21600
|
||||
# Node ID 74da2a3a1db1476d627f42e4a99e9e720cc6774d
|
||||
# Parent 6c583d35d76dda2236c81d9437ff9d57ab02c006
|
||||
Prevent vif-bridge from adding user-created tap interfaces to a bridge
|
||||
|
||||
Exit vif-bridge script if there is no device info in xenstore, preventing
|
||||
it from adding user-created taps to bridges.
|
||||
|
||||
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||
|
||||
diff -r 6c583d35d76d -r 74da2a3a1db1 tools/hotplug/Linux/vif-bridge
|
||||
--- a/tools/hotplug/Linux/vif-bridge Thu Oct 20 15:36:01 2011 +0100
|
||||
+++ b/tools/hotplug/Linux/vif-bridge Tue Oct 25 16:32:32 2011 -0600
|
||||
@@ -31,6 +31,13 @@
|
||||
|
||||
dir=$(dirname "$0")
|
||||
. "$dir/vif-common.sh"
|
||||
+
|
||||
+domu=$(xenstore_read_default "$XENBUS_PATH/domain" "")
|
||||
+if [ -z "$domu" ]
|
||||
+then
|
||||
+ log debug "No device details in $XENBUS_PATH, exiting."
|
||||
+ exit 0
|
||||
+fi
|
||||
|
||||
bridge=${bridge:-}
|
||||
bridge=$(xenstore_read_default "$XENBUS_PATH/bridge" "$bridge")
|
@ -2,7 +2,7 @@ Change default IO-APIC ack mode for single IO-APIC systems to old-style.
|
||||
|
||||
--- a/xen/arch/x86/io_apic.c
|
||||
+++ b/xen/arch/x86/io_apic.c
|
||||
@@ -1674,7 +1674,7 @@ static unsigned int startup_level_ioapic
|
||||
@@ -1681,7 +1681,7 @@ static unsigned int startup_level_ioapic
|
||||
return 0; /* don't check for pending */
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@ Change default IO-APIC ack mode for single IO-APIC systems to old-style.
|
||||
static void setup_ioapic_ack(char *s)
|
||||
{
|
||||
if ( !strcmp(s, "old") )
|
||||
@@ -2179,6 +2179,8 @@ void __init setup_IO_APIC(void)
|
||||
@@ -2186,6 +2186,8 @@ void __init setup_IO_APIC(void)
|
||||
else
|
||||
io_apic_irqs = ~PIC_IRQS;
|
||||
|
||||
|
20
xen.changes
20
xen.changes
@ -1,3 +1,23 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Nov 4 15:14:09 MDT 2011 - carnold@novell.com
|
||||
|
||||
- Fix broken build when building docs
|
||||
23819-make-docs.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Nov 4 11:52:22 MDT 2011 - jfehlig@suse.com
|
||||
|
||||
- bnc#720054 - Prevent vif-bridge from adding user-created tap
|
||||
interfaces to a bridge
|
||||
2XXXX-vif-bridge.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Nov 4 10:11:04 MDT 2011 - carnold@novell.com
|
||||
|
||||
- bnc#713503 - DOM0 filesystem commit
|
||||
23752-x86-shared-IRQ-vector-maps.patch
|
||||
23754-AMD-perdev-vector-map.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Nov 3 23:50:31 CET 2011 - ohering@suse.de
|
||||
|
||||
|
41
xen.spec
41
xen.spec
@ -96,7 +96,7 @@ BuildRequires: glibc-devel
|
||||
%if %{?with_kmp}0
|
||||
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
|
||||
%endif
|
||||
Version: 4.1.2_05
|
||||
Version: 4.1.2_07
|
||||
Release: 1
|
||||
License: GPLv2+
|
||||
Group: System/Kernel
|
||||
@ -210,6 +210,8 @@ Patch23726: 23726-x86-intel-flexmigration-v2.patch
|
||||
Patch23735: 23735-guest-dom0-cap.patch
|
||||
Patch23747: 23747-mmcfg-base-address.patch
|
||||
Patch23749: 23749-mmcfg-reservation.patch
|
||||
Patch23752: 23752-x86-shared-IRQ-vector-maps.patch
|
||||
Patch23754: 23754-AMD-perdev-vector-map.patch
|
||||
Patch23771: 23771-x86-ioapic-clear-pin.patch
|
||||
Patch23772: 23772-x86-trampoline.patch
|
||||
Patch23774: 23774-x86_64-EFI-EDD.patch
|
||||
@ -221,6 +223,7 @@ Patch23800: 23800-x86_64-guest-addr-range.patch
|
||||
Patch23804: 23804-x86-IPI-counts.patch
|
||||
Patch23817: 23817-mem_event_add_ref_counting_for_free_requestslots.patch
|
||||
Patch23818: 23818-mem_event_use_mem_event_mark_and_pause_in_mem_event_check_ring.patch
|
||||
Patch23819: 23819-make-docs.patch
|
||||
Patch23827: 23827-xenpaging_use_batch_of_pages_during_final_page-in.patch
|
||||
Patch23841: 23841-mem_event_pass_mem_event_domain_pointer_to_mem_event_functions.patch
|
||||
Patch23842: 23842-mem_event_use_different_ringbuffers_for_share_paging_and_access.patch
|
||||
@ -241,6 +244,7 @@ Patch23978: 23978-xenpaging_check_p2mt_in_p2m_mem_paging_functions.patch
|
||||
Patch23979: 23979-xenpaging_document_p2m_mem_paging_functions.patch
|
||||
Patch23980: 23980-xenpaging_disallow_paging_in_a_PoD_guest.patch
|
||||
Patch23993: 23993-x86-microcode-amd-fix-23871.patch
|
||||
Patch23993: 23993-x86-microcode-amd-fix-23871.patch
|
||||
# Upstream qemu patches
|
||||
# Our patches
|
||||
Patch300: xen-config.diff
|
||||
@ -298,6 +302,8 @@ Patch376: xend-devid-or-name.patch
|
||||
Patch377: suspend_evtchn_lock.patch
|
||||
Patch378: log-guest-console.patch
|
||||
Patch379: xend-migration-domname-fix.patch
|
||||
# Sent upstream and tentatively ACK'ed, but not yet committed
|
||||
Patch380: 2XXXX-vif-bridge.patch
|
||||
# Patches for snapshot support
|
||||
Patch400: snapshot-ioemu-save.patch
|
||||
Patch401: snapshot-ioemu-restore.patch
|
||||
@ -416,7 +422,6 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
%suse_kernel_module_package -n xen um xen -f kmp_filelist
|
||||
%endif
|
||||
|
||||
|
||||
%description
|
||||
Xen is a virtual machine monitor for x86 that supports execution of
|
||||
multiple guest operating systems with unprecedented levels of
|
||||
@ -478,7 +483,6 @@ Group: System/Kernel
|
||||
#Requires: xen = %{version}
|
||||
AutoReqProv: on
|
||||
|
||||
|
||||
%description libs
|
||||
Xen is a virtual machine monitor for x86 that supports execution of
|
||||
multiple guest operating systems with unprecedented levels of
|
||||
@ -524,7 +528,6 @@ Authors:
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
|
||||
%package tools
|
||||
License: GPLv2+
|
||||
Summary: Xen Virtualization: Control tools for domain 0
|
||||
@ -536,7 +539,6 @@ Provides: xen-tools-ioemu = 3.2
|
||||
Obsoletes: xen-tools-ioemu <= 3.2
|
||||
AutoReqProv: on
|
||||
|
||||
|
||||
%description tools
|
||||
Xen is a virtual machine monitor for x86 that supports execution of
|
||||
multiple guest operating systems with unprecedented levels of
|
||||
@ -584,7 +586,6 @@ Authors:
|
||||
Ian Pratt <ian.pratt@cl.cam.ac.uk>
|
||||
%endif
|
||||
|
||||
|
||||
%package tools-domU
|
||||
License: GPLv2+
|
||||
Summary: Xen Virtualization: Control tools for domain U
|
||||
@ -592,7 +593,6 @@ Group: System/Kernel
|
||||
Conflicts: xen-tools
|
||||
AutoReqProv: on
|
||||
|
||||
|
||||
%description tools-domU
|
||||
Xen is a virtual machine monitor for x86 that supports execution of
|
||||
multiple guest operating systems with unprecedented levels of
|
||||
@ -613,7 +613,6 @@ Summary: Xen Virtualization: Headers and libraries for development
|
||||
Group: System/Kernel
|
||||
Requires: xen-libs = %{version}
|
||||
|
||||
|
||||
%description devel
|
||||
Xen is a virtual machine monitor for x86 that supports execution of
|
||||
multiple guest operating systems with unprecedented levels of
|
||||
@ -659,14 +658,12 @@ Authors:
|
||||
|
||||
%if %{?with_kmp}0
|
||||
|
||||
|
||||
%package KMP
|
||||
License: GPLv2+
|
||||
Group: System/Kernel
|
||||
Summary: Xen para-virtual device drivers for fully virtualized guests
|
||||
Conflicts: xen
|
||||
|
||||
|
||||
%description KMP
|
||||
Xen para-virtual device drivers for fully virtualized guests
|
||||
|
||||
@ -712,13 +709,11 @@ Xen, but is not available for release due to license restrictions.
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
|
||||
%package doc-html
|
||||
License: GPLv2+
|
||||
Summary: Xen Virtualization: HTML documentation
|
||||
Group: Documentation/HTML
|
||||
|
||||
|
||||
%description doc-html
|
||||
Xen is a virtual machine monitor for x86 that supports execution of
|
||||
multiple guest operating systems with unprecedented levels of
|
||||
@ -738,7 +733,6 @@ License: GPLv2+
|
||||
Summary: Xen Virtualization: PDF documentation
|
||||
Group: Documentation/Other
|
||||
|
||||
|
||||
%description doc-pdf
|
||||
Xen is a virtual machine monitor for x86 that supports execution of
|
||||
multiple guest operating systems with unprecedented levels of
|
||||
@ -755,7 +749,6 @@ Authors:
|
||||
Ian Pratt <ian.pratt@cl.cam.ac.uk>
|
||||
%endif
|
||||
|
||||
|
||||
%prep
|
||||
%setup -q -n %xen_build_dir -a 1 -a 20000
|
||||
%patch20000 -p1
|
||||
@ -829,6 +822,8 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
|
||||
%patch23735 -p1
|
||||
%patch23747 -p1
|
||||
%patch23749 -p1
|
||||
%patch23752 -p1
|
||||
%patch23754 -p1
|
||||
%patch23771 -p1
|
||||
%patch23772 -p1
|
||||
%patch23774 -p1
|
||||
@ -840,6 +835,7 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
|
||||
%patch23804 -p1
|
||||
%patch23817 -p1
|
||||
%patch23818 -p1
|
||||
%patch23819 -p1
|
||||
%patch23827 -p1
|
||||
%patch23841 -p1
|
||||
%patch23842 -p1
|
||||
@ -915,6 +911,7 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
|
||||
#%patch377 -p1 suspend_evtchn_lock, buildservice build problem
|
||||
%patch378 -p1
|
||||
%patch379 -p1
|
||||
%patch380 -p1
|
||||
%patch400 -p1
|
||||
%patch401 -p1
|
||||
%patch402 -p1
|
||||
@ -1020,7 +1017,6 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
|
||||
%patch99998 -p1
|
||||
%patch99999 -p1
|
||||
|
||||
|
||||
%build
|
||||
XEN_EXTRAVERSION=%version-%release
|
||||
XEN_EXTRAVERSION=${XEN_EXTRAVERSION#%{xvers}}
|
||||
@ -1056,7 +1052,6 @@ for flavor in %flavors_to_build; do
|
||||
done
|
||||
%endif
|
||||
|
||||
|
||||
%install
|
||||
export CFLAGS="$RPM_OPT_FLAGS"
|
||||
%if %{?with_dom0_support}0
|
||||
@ -1259,7 +1254,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
|
||||
%files -f xen.files.txt
|
||||
%defattr(-,root,root)
|
||||
/boot/xen-%{version}-%{release}.gz
|
||||
@ -1276,7 +1270,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
/boot/xen.gz
|
||||
%endif
|
||||
|
||||
|
||||
%files libs
|
||||
%defattr(-,root,root)
|
||||
%{_libdir}/fs/
|
||||
@ -1284,7 +1277,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
|
||||
%files tools
|
||||
%defattr(-,root,root)
|
||||
/usr/bin/xenalyze
|
||||
@ -1388,14 +1380,12 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
%config %{_fwdefdir}/xend-relocation-server
|
||||
%endif
|
||||
|
||||
|
||||
%files tools-domU
|
||||
%defattr(-,root,root)
|
||||
/usr/bin/xen-detect
|
||||
/bin/domu-xenstore
|
||||
/bin/xenstore-*
|
||||
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root)
|
||||
%{_bindir}/serial-split
|
||||
@ -1405,12 +1395,10 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
|
||||
%files doc-html
|
||||
%defattr(-,root,root)
|
||||
%{_defaultdocdir}/xen/html
|
||||
|
||||
|
||||
%files doc-pdf
|
||||
%defattr(-,root,root)
|
||||
%{_defaultdocdir}/xen/pdf
|
||||
@ -1418,7 +1406,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/xencons
|
||||
|
||||
%if %{?with_dom0_support}0
|
||||
|
||||
|
||||
%post tools
|
||||
%if %{?with_xend}0
|
||||
# with_xend
|
||||
@ -1464,11 +1451,9 @@ if [ -f /usr/bin/qemu-nbd ]; then
|
||||
ln -s /usr/bin/qemu-nbd /usr/bin/qemu-nbd-xen
|
||||
fi
|
||||
|
||||
|
||||
%preun tools
|
||||
%{stop_on_removal xendomains xend xencommons}
|
||||
|
||||
|
||||
%postun tools
|
||||
%if %{?with_xend}0
|
||||
# with_xend
|
||||
@ -1483,12 +1468,8 @@ if [ -f /usr/bin/qemu-nbd-xen ]; then
|
||||
fi
|
||||
%endif
|
||||
|
||||
|
||||
%post libs -p /sbin/ldconfig
|
||||
|
||||
|
||||
%postun libs -p /sbin/ldconfig
|
||||
|
||||
|
||||
|
||||
%changelog
|
||||
|
Loading…
x
Reference in New Issue
Block a user