- Upstream patches from Jan
25927-x86-domctl-ioport-mapping-range.patch 25929-tmem-restore-pool-version.patch 25931-x86-domctl-iomem-mapping-checks.patch 25940-x86-S3-flush-cache.patch 25952-x86-MMIO-remap-permissions.patch 25961-x86-HPET-interrupts.patch 25962-x86-assign-irq-vector-old.patch 25965-x86-ucode-Intel-resume.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=205
This commit is contained in:
parent
09c30bad0c
commit
08af757235
28
25927-x86-domctl-ioport-mapping-range.patch
Normal file
28
25927-x86-domctl-ioport-mapping-range.patch
Normal file
@ -0,0 +1,28 @@
|
||||
# HG changeset patch
|
||||
# User Jan Beulich <jbeulich@suse.com>
|
||||
# Date 1348039675 -7200
|
||||
# Node ID 3e3959413b2fbef584993beb434285d0691d5c67
|
||||
# Parent 4a0438fe1e6afe01e46023bcb2c828c5aaeefb1d
|
||||
x86: properly check XEN_DOMCTL_ioport_mapping arguments for invalid range
|
||||
|
||||
In particular, the case of "np" being a very large value wasn't handled
|
||||
correctly. The range start checks also were off by one (except that in
|
||||
practice, when "np" is properly range checked, this would still have
|
||||
been caught by the range end checks).
|
||||
|
||||
Also, is a GFN wrap in XEN_DOMCTL_memory_mapping really okay?
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/domctl.c
|
||||
+++ b/xen/arch/x86/domctl.c
|
||||
@@ -888,7 +888,7 @@ long arch_do_domctl(
|
||||
int found = 0;
|
||||
|
||||
ret = -EINVAL;
|
||||
- if ( (np == 0) || (fgp > MAX_IOPORTS) || (fmp > MAX_IOPORTS) ||
|
||||
+ if ( ((fgp | fmp | (np - 1)) >= MAX_IOPORTS) ||
|
||||
((fgp + np) > MAX_IOPORTS) || ((fmp + np) > MAX_IOPORTS) )
|
||||
{
|
||||
printk(XENLOG_G_ERR
|
26
25929-tmem-restore-pool-version.patch
Normal file
26
25929-tmem-restore-pool-version.patch
Normal file
@ -0,0 +1,26 @@
|
||||
# HG changeset patch
|
||||
# User Zhenzhong Duan <zhenzhong.duan@oracle.com>
|
||||
# Date 1348069127 -7200
|
||||
# Node ID fee83ac77d8c7339abf5185690603ea5b0c548cf
|
||||
# Parent 7b045d43e59dcb42340097058502bf456e151180
|
||||
tmem: bump pool version to 1 to fix restore issue when tmem enabled
|
||||
|
||||
Restore fails when tmem is enabled both in hypervisor and guest. This
|
||||
is due to spec version mismatch when restoring a pool.
|
||||
|
||||
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@oracle.com>
|
||||
Acked-by: Dan Magenheimer <dan.magenheimer@oracle.com>
|
||||
Committed-by: Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
--- a/xen/common/tmem.c
|
||||
+++ b/xen/common/tmem.c
|
||||
@@ -2407,7 +2407,8 @@ static NOINLINE int tmemc_save_subop(int
|
||||
break;
|
||||
rc = (pool->persistent ? TMEM_POOL_PERSIST : 0) |
|
||||
(pool->shared ? TMEM_POOL_SHARED : 0) |
|
||||
- (pool->pageshift << TMEM_POOL_PAGESIZE_SHIFT);
|
||||
+ (pool->pageshift << TMEM_POOL_PAGESIZE_SHIFT) |
|
||||
+ (TMEM_SPEC_VERSION << TMEM_POOL_VERSION_SHIFT);
|
||||
break;
|
||||
case TMEMC_SAVE_GET_POOL_NPAGES:
|
||||
if ( pool == NULL )
|
257
25931-x86-domctl-iomem-mapping-checks.patch
Normal file
257
25931-x86-domctl-iomem-mapping-checks.patch
Normal file
@ -0,0 +1,257 @@
|
||||
# HG changeset patch
|
||||
# User Jan Beulich <jbeulich@suse.com>
|
||||
# Date 1348125713 -7200
|
||||
# Node ID 14980591956954584f3cd87bf4e8d306360e7f27
|
||||
# Parent 4e93cbeac98b3e6be98e5ec0881b44b68ee95974
|
||||
x86: tighten checks in XEN_DOMCTL_memory_mapping handler
|
||||
|
||||
Properly checking the MFN implies knowing the physical address width
|
||||
supported by the platform, so to obtain this consistently the
|
||||
respective code gets moved out of the MTRR subdir.
|
||||
|
||||
Btw., the model specific workaround in that code is likely unnecessary
|
||||
- I believe those CPU models don't support 64-bit mode. But I wasn't
|
||||
able to formally verify this, so I preferred to retain that code for
|
||||
now.
|
||||
|
||||
But domctl code here also was lacking other error checks (as was,
|
||||
looking at it again from that angle) the XEN_DOMCTL_ioport_mapping one.
|
||||
Besides adding the missing checks, printing is also added for the case
|
||||
where revoking access permissions didn't work (as that may have
|
||||
implications for the host operator, e.g. wanting to not pass through
|
||||
affected devices to another guest until the one previously using them
|
||||
did actually die).
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/cpu/centaur.c
|
||||
+++ b/xen/arch/x86/cpu/centaur.c
|
||||
@@ -56,6 +56,9 @@ static void __init init_c3(struct cpuinf
|
||||
if (c->x86_model >=6 && c->x86_model <9)
|
||||
set_bit(X86_FEATURE_3DNOW, c->x86_capability);
|
||||
|
||||
+ if (cpuid_eax(0x80000000) < 0x80000008)
|
||||
+ paddr_bits = 32;
|
||||
+
|
||||
get_model_name(c);
|
||||
display_cacheinfo(c);
|
||||
}
|
||||
--- a/xen/arch/x86/cpu/common.c
|
||||
+++ b/xen/arch/x86/cpu/common.c
|
||||
@@ -36,6 +36,8 @@ integer_param("cpuid_mask_ext_edx", opt_
|
||||
|
||||
struct cpu_dev * cpu_devs[X86_VENDOR_NUM] = {};
|
||||
|
||||
+unsigned int paddr_bits __read_mostly = 36;
|
||||
+
|
||||
/*
|
||||
* Default host IA32_CR_PAT value to cover all memory types.
|
||||
* BIOS usually sets it to 0x07040600070406.
|
||||
@@ -265,6 +267,8 @@ static void __cpuinit generic_identify(s
|
||||
}
|
||||
if ( xlvl >= 0x80000004 )
|
||||
get_model_name(c); /* Default name */
|
||||
+ if ( xlvl >= 0x80000008 )
|
||||
+ paddr_bits = cpuid_eax(0x80000008) & 0xff;
|
||||
}
|
||||
|
||||
/* Intel-defined flags: level 0x00000007 */
|
||||
--- a/xen/arch/x86/cpu/cyrix.c
|
||||
+++ b/xen/arch/x86/cpu/cyrix.c
|
||||
@@ -255,7 +255,9 @@ static void __init init_cyrix(struct cpu
|
||||
}
|
||||
safe_strcpy(c->x86_model_id, Cx86_model[dir0_msn & 7]);
|
||||
if (p) safe_strcat(c->x86_model_id, p);
|
||||
- return;
|
||||
+
|
||||
+ if (cpu_has_cyrix_arr)
|
||||
+ paddr_bits = 32;
|
||||
}
|
||||
|
||||
/*
|
||||
--- a/xen/arch/x86/cpu/intel.c
|
||||
+++ b/xen/arch/x86/cpu/intel.c
|
||||
@@ -144,6 +144,11 @@ void __devinit early_intel_workaround(st
|
||||
c->cpuid_level);
|
||||
}
|
||||
}
|
||||
+
|
||||
+ /* CPUID workaround for Intel 0F33/0F34 CPU */
|
||||
+ if (boot_cpu_data.x86 == 0xF && boot_cpu_data.x86_model == 3 &&
|
||||
+ (boot_cpu_data.x86_mask == 3 || boot_cpu_data.x86_mask == 4))
|
||||
+ paddr_bits = 36;
|
||||
}
|
||||
|
||||
/*
|
||||
--- a/xen/arch/x86/cpu/mtrr/main.c
|
||||
+++ b/xen/arch/x86/cpu/mtrr/main.c
|
||||
@@ -587,8 +587,6 @@ struct mtrr_value {
|
||||
unsigned long lsize;
|
||||
};
|
||||
|
||||
-unsigned int paddr_bits __read_mostly = 36;
|
||||
-
|
||||
/**
|
||||
* mtrr_bp_init - initialize mtrrs on the boot CPU
|
||||
*
|
||||
@@ -602,48 +600,12 @@ void __init mtrr_bp_init(void)
|
||||
|
||||
if (cpu_has_mtrr) {
|
||||
mtrr_if = &generic_mtrr_ops;
|
||||
- size_or_mask = 0xff000000; /* 36 bits */
|
||||
- size_and_mask = 0x00f00000;
|
||||
-
|
||||
- /* This is an AMD specific MSR, but we assume(hope?) that
|
||||
- Intel will implement it to when they extend the address
|
||||
- bus of the Xeon. */
|
||||
- if (cpuid_eax(0x80000000) >= 0x80000008) {
|
||||
- paddr_bits = cpuid_eax(0x80000008) & 0xff;
|
||||
- /* CPUID workaround for Intel 0F33/0F34 CPU */
|
||||
- if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
|
||||
- boot_cpu_data.x86 == 0xF &&
|
||||
- boot_cpu_data.x86_model == 0x3 &&
|
||||
- (boot_cpu_data.x86_mask == 0x3 ||
|
||||
- boot_cpu_data.x86_mask == 0x4))
|
||||
- paddr_bits = 36;
|
||||
-
|
||||
- size_or_mask = ~((1ULL << (paddr_bits - PAGE_SHIFT)) - 1);
|
||||
- size_and_mask = ~size_or_mask & 0xfffff00000ULL;
|
||||
- } else if (boot_cpu_data.x86_vendor == X86_VENDOR_CENTAUR &&
|
||||
- boot_cpu_data.x86 == 6) {
|
||||
- /* VIA C* family have Intel style MTRRs, but
|
||||
- don't support PAE */
|
||||
- size_or_mask = 0xfff00000; /* 32 bits */
|
||||
- size_and_mask = 0;
|
||||
- }
|
||||
} else {
|
||||
#ifndef CONFIG_X86_64
|
||||
switch (boot_cpu_data.x86_vendor) {
|
||||
- case X86_VENDOR_AMD:
|
||||
- if (cpu_has_k6_mtrr) {
|
||||
- /* Pre-Athlon (K6) AMD CPU MTRRs */
|
||||
- mtrr_if = mtrr_ops[X86_VENDOR_AMD];
|
||||
- size_or_mask = 0xfff00000; /* 32 bits */
|
||||
- size_and_mask = 0;
|
||||
- }
|
||||
- break;
|
||||
case X86_VENDOR_CYRIX:
|
||||
- if (cpu_has_cyrix_arr) {
|
||||
+ if (cpu_has_cyrix_arr)
|
||||
mtrr_if = mtrr_ops[X86_VENDOR_CYRIX];
|
||||
- size_or_mask = 0xfff00000; /* 32 bits */
|
||||
- size_and_mask = 0;
|
||||
- }
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -652,6 +614,8 @@ void __init mtrr_bp_init(void)
|
||||
}
|
||||
|
||||
if (mtrr_if) {
|
||||
+ size_or_mask = ~((1ULL << (paddr_bits - PAGE_SHIFT)) - 1);
|
||||
+ size_and_mask = ~size_or_mask & 0xfffff00000ULL;
|
||||
set_num_var_ranges();
|
||||
init_table();
|
||||
if (use_intel())
|
||||
--- a/xen/arch/x86/domctl.c
|
||||
+++ b/xen/arch/x86/domctl.c
|
||||
@@ -829,10 +829,12 @@ long arch_do_domctl(
|
||||
unsigned long mfn = domctl->u.memory_mapping.first_mfn;
|
||||
unsigned long nr_mfns = domctl->u.memory_mapping.nr_mfns;
|
||||
int add = domctl->u.memory_mapping.add_mapping;
|
||||
- int i;
|
||||
+ unsigned long i;
|
||||
|
||||
ret = -EINVAL;
|
||||
- if ( (mfn + nr_mfns - 1) < mfn ) /* wrap? */
|
||||
+ if ( (mfn + nr_mfns - 1) < mfn || /* wrap? */
|
||||
+ ((mfn | (mfn + nr_mfns - 1)) >> (paddr_bits - PAGE_SHIFT)) ||
|
||||
+ (gfn + nr_mfns - 1) < gfn ) /* wrap? */
|
||||
break;
|
||||
|
||||
ret = -EPERM;
|
||||
@@ -857,8 +859,25 @@ long arch_do_domctl(
|
||||
d->domain_id, gfn, mfn, nr_mfns);
|
||||
|
||||
ret = iomem_permit_access(d, mfn, mfn + nr_mfns - 1);
|
||||
- for ( i = 0; i < nr_mfns; i++ )
|
||||
- set_mmio_p2m_entry(d, gfn+i, _mfn(mfn+i));
|
||||
+ if ( !ret && paging_mode_translate(d) )
|
||||
+ {
|
||||
+ for ( i = 0; !ret && i < nr_mfns; i++ )
|
||||
+ if ( !set_mmio_p2m_entry(d, gfn + i, _mfn(mfn + i)) )
|
||||
+ ret = -EIO;
|
||||
+ if ( ret )
|
||||
+ {
|
||||
+ printk(XENLOG_G_WARNING
|
||||
+ "memory_map:fail: dom%d gfn=%lx mfn=%lx\n",
|
||||
+ d->domain_id, gfn + i, mfn + i);
|
||||
+ while ( i-- )
|
||||
+ clear_mmio_p2m_entry(d, gfn + i);
|
||||
+ if ( iomem_deny_access(d, mfn, mfn + nr_mfns - 1) &&
|
||||
+ IS_PRIV(current->domain) )
|
||||
+ printk(XENLOG_ERR
|
||||
+ "memory_map: failed to deny dom%d access to [%lx,%lx]\n",
|
||||
+ d->domain_id, mfn, mfn + nr_mfns - 1);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -866,9 +885,17 @@ long arch_do_domctl(
|
||||
"memory_map:remove: dom%d gfn=%lx mfn=%lx nr=%lx\n",
|
||||
d->domain_id, gfn, mfn, nr_mfns);
|
||||
|
||||
- for ( i = 0; i < nr_mfns; i++ )
|
||||
- clear_mmio_p2m_entry(d, gfn+i);
|
||||
+ if ( paging_mode_translate(d) )
|
||||
+ for ( i = 0; i < nr_mfns; i++ )
|
||||
+ add |= !clear_mmio_p2m_entry(d, gfn + i);
|
||||
ret = iomem_deny_access(d, mfn, mfn + nr_mfns - 1);
|
||||
+ if ( !ret && add )
|
||||
+ ret = -EIO;
|
||||
+ if ( ret && IS_PRIV(current->domain) )
|
||||
+ printk(XENLOG_ERR
|
||||
+ "memory_map: error %ld %s dom%d access to [%lx,%lx]\n",
|
||||
+ ret, add ? "removing" : "denying", d->domain_id,
|
||||
+ mfn, mfn + nr_mfns - 1);
|
||||
}
|
||||
|
||||
rcu_unlock_domain(d);
|
||||
@@ -930,12 +957,23 @@ long arch_do_domctl(
|
||||
if ( !found )
|
||||
{
|
||||
g2m_ioport = xmalloc(struct g2m_ioport);
|
||||
+ if ( !g2m_ioport )
|
||||
+ ret = -ENOMEM;
|
||||
+ }
|
||||
+ if ( !found && !ret )
|
||||
+ {
|
||||
g2m_ioport->gport = fgp;
|
||||
g2m_ioport->mport = fmp;
|
||||
g2m_ioport->np = np;
|
||||
list_add_tail(&g2m_ioport->list, &hd->g2m_ioport_list);
|
||||
}
|
||||
- ret = ioports_permit_access(d, fmp, fmp + np - 1);
|
||||
+ if ( !ret )
|
||||
+ ret = ioports_permit_access(d, fmp, fmp + np - 1);
|
||||
+ if ( ret && !found && g2m_ioport )
|
||||
+ {
|
||||
+ list_del(&g2m_ioport->list);
|
||||
+ xfree(g2m_ioport);
|
||||
+ }
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -950,6 +988,10 @@ long arch_do_domctl(
|
||||
break;
|
||||
}
|
||||
ret = ioports_deny_access(d, fmp, fmp + np - 1);
|
||||
+ if ( ret && IS_PRIV(current->domain) )
|
||||
+ printk(XENLOG_ERR
|
||||
+ "ioport_map: error %ld denying dom%d access to [%x,%x]\n",
|
||||
+ ret, d->domain_id, fmp, fmp + np - 1);
|
||||
}
|
||||
rcu_unlock_domain(d);
|
||||
}
|
53
25940-x86-S3-flush-cache.patch
Normal file
53
25940-x86-S3-flush-cache.patch
Normal file
@ -0,0 +1,53 @@
|
||||
# HG changeset patch
|
||||
# User Ben Guthro <ben@guthro.net>
|
||||
# Date 1348555094 -7200
|
||||
# Node ID c8d65d91a6f20fa7fae905bbf172e59b335d6371
|
||||
# Parent b49f7bf52fa92626517386cba89350243b808871
|
||||
x86/S3: add cache flush on secondary CPUs before going to sleep
|
||||
|
||||
Secondary CPUs, between doing their final memory writes (particularly
|
||||
updating cpu_initialized) and getting a subsequent INIT, may not write
|
||||
back all modified data. The INIT itself then causes those modifications
|
||||
to be lost, so in the cpu_initialized case the CPU would find itself
|
||||
already initialized, (intentionally) entering an infinite loop instead
|
||||
of actually coming online.
|
||||
|
||||
Signed-off-by: Ben Guthro <ben@guthro.net>
|
||||
|
||||
Make acpi_dead_idle() call default_dead_idle() rather than duplicating
|
||||
the logic there.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Keir Fraser <keir@xen.org>
|
||||
Committed-by: Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
--- a/xen/arch/x86/acpi/cpu_idle.c
|
||||
+++ b/xen/arch/x86/acpi/cpu_idle.c
|
||||
@@ -647,6 +647,12 @@ static void acpi_dead_idle(void)
|
||||
}
|
||||
|
||||
default_halt:
|
||||
+ /*
|
||||
+ * When going into S3, without flushing caches modified data may be
|
||||
+ * held by the CPUs spinning here indefinitely, and get discarded by
|
||||
+ * a subsequent INIT.
|
||||
+ */
|
||||
+ wbinvd();
|
||||
for ( ; ; )
|
||||
halt();
|
||||
}
|
||||
--- a/xen/arch/x86/domain.c
|
||||
+++ b/xen/arch/x86/domain.c
|
||||
@@ -86,6 +86,12 @@ static void default_idle(void)
|
||||
|
||||
static void default_dead_idle(void)
|
||||
{
|
||||
+ /*
|
||||
+ * When going into S3, without flushing caches modified data may be
|
||||
+ * held by the CPUs spinning here indefinitely, and get discarded by
|
||||
+ * a subsequent INIT.
|
||||
+ */
|
||||
+ wbinvd();
|
||||
for ( ; ; )
|
||||
halt();
|
||||
}
|
41
25952-x86-MMIO-remap-permissions.patch
Normal file
41
25952-x86-MMIO-remap-permissions.patch
Normal file
@ -0,0 +1,41 @@
|
||||
# HG changeset patch
|
||||
# User Daniel De Graaf <dgdegra@tycho.nsa.gov>
|
||||
# Date 1348653367 -7200
|
||||
# Node ID 8278d7d8fa485996f51134c5265fceaf239adf6a
|
||||
# Parent b83f414ccf7a6e4e077a10bc422cf3f6c7d30566
|
||||
x86: check remote MMIO remap permissions
|
||||
|
||||
When a domain is mapping pages from a different pg_owner domain, the
|
||||
iomem_access checks are currently only applied to the pg_owner domain,
|
||||
potentially allowing a domain with a more restrictive iomem_access
|
||||
policy to have the pages mapped into its page tables. To catch this,
|
||||
also check the owner of the page tables. The current domain does not
|
||||
need to be checked because the ability to manipulate a domain's page
|
||||
tables implies full access to the target domain, so checking that
|
||||
domain's permission is sufficient.
|
||||
|
||||
Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
|
||||
Committed-by: Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -870,6 +870,19 @@ get_page_from_l1e(
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+ if ( pg_owner != l1e_owner &&
|
||||
+ !iomem_access_permitted(l1e_owner, mfn, mfn) )
|
||||
+ {
|
||||
+ if ( mfn != (PADDR_MASK >> PAGE_SHIFT) ) /* INVALID_MFN? */
|
||||
+ {
|
||||
+ MEM_LOG("Dom%u attempted to map I/O space %08lx in dom%u to dom%u",
|
||||
+ curr->domain->domain_id, mfn, pg_owner->domain_id,
|
||||
+ l1e_owner->domain_id);
|
||||
+ return -EPERM;
|
||||
+ }
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
if ( !(l1f & _PAGE_RW) ||
|
||||
!rangeset_contains_singleton(mmio_ro_ranges, mfn) )
|
||||
return 0;
|
36
25961-x86-HPET-interrupts.patch
Normal file
36
25961-x86-HPET-interrupts.patch
Normal file
@ -0,0 +1,36 @@
|
||||
# HG changeset patch
|
||||
# User Jan Beulich <jbeulich@suse.com>
|
||||
# Date 1348816934 -7200
|
||||
# Node ID 6a581212909478bba0c7b4dfc6c370270dee825c
|
||||
# Parent 6bf8b882df8f66ab5500e4d9cc0c3338ae5a6cb9
|
||||
x86/HPET: don't disable interrupt delivery right after setting it up
|
||||
|
||||
We shouldn't clear HPET_TN_FSB right after we (indirectly, via
|
||||
request_irq()) enabled it for the channels we intend to use for
|
||||
broadcasts.
|
||||
|
||||
This fixes a regression introduced by c/s 25103:0b0e42dc4f0a.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/hpet.c
|
||||
+++ b/xen/arch/x86/hpet.c
|
||||
@@ -533,7 +533,7 @@ void __init hpet_broadcast_init(void)
|
||||
{
|
||||
/* set HPET Tn as oneshot */
|
||||
cfg = hpet_read32(HPET_Tn_CFG(hpet_events[i].idx));
|
||||
- cfg &= ~(HPET_TN_LEVEL | HPET_TN_PERIODIC | HPET_TN_FSB);
|
||||
+ cfg &= ~(HPET_TN_LEVEL | HPET_TN_PERIODIC);
|
||||
cfg |= HPET_TN_ENABLE | HPET_TN_32BIT;
|
||||
hpet_write32(cfg, HPET_Tn_CFG(hpet_events[i].idx));
|
||||
|
||||
@@ -590,7 +590,7 @@ void hpet_broadcast_resume(void)
|
||||
|
||||
/* set HPET Tn as oneshot */
|
||||
cfg = hpet_read32(HPET_Tn_CFG(hpet_events[i].idx));
|
||||
- cfg &= ~(HPET_TN_LEVEL | HPET_TN_PERIODIC | HPET_TN_FSB);
|
||||
+ cfg &= ~(HPET_TN_LEVEL | HPET_TN_PERIODIC);
|
||||
cfg |= HPET_TN_ENABLE | HPET_TN_32BIT;
|
||||
hpet_write32(cfg, HPET_Tn_CFG(hpet_events[i].idx));
|
||||
|
35
25962-x86-assign-irq-vector-old.patch
Normal file
35
25962-x86-assign-irq-vector-old.patch
Normal file
@ -0,0 +1,35 @@
|
||||
# HG changeset patch
|
||||
# User Jan Beulich <jbeulich@suse.com>
|
||||
# Date 1348817014 -7200
|
||||
# Node ID 41f523f1b5e5af9cf8e85160f2412456da83050f
|
||||
# Parent 6a581212909478bba0c7b4dfc6c370270dee825c
|
||||
x86/IRQ: fix valid-old-vector checks in __assign_irq_vector()
|
||||
|
||||
There are two greater-than-zero checks for the old vector retrieved,
|
||||
which don't work when a negative value got stashed into the respective
|
||||
arch_irq_desc field. The effect of this was that for interrupts that
|
||||
are intended to get their affinity adjusted the first time before the
|
||||
first interrupt occurs, the affinity change would fail, because the
|
||||
original vector assignment would have caused the move_in_progress flag
|
||||
to get set (which causes subsequent re-assignments to fail until it
|
||||
gets cleared, which only happens from the ->ack() actor, i.e. when an
|
||||
interrupt actually occurred).
|
||||
|
||||
This addresses a problem introduced in c/s 23816:7f357e1ef60a (by
|
||||
changing IRQ_VECTOR_UNASSIGNED from 0 to -1).
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/irq.c
|
||||
+++ b/xen/arch/x86/irq.c
|
||||
@@ -430,8 +430,7 @@ static int __assign_irq_vector(
|
||||
* 0x80, because int 0x80 is hm, kind of importantish. ;)
|
||||
*/
|
||||
static int current_vector = FIRST_DYNAMIC_VECTOR, current_offset = 0;
|
||||
- unsigned int old_vector;
|
||||
- int cpu, err;
|
||||
+ int cpu, err, old_vector;
|
||||
cpumask_t tmp_mask;
|
||||
vmask_t *irq_used_vectors = NULL;
|
||||
|
35
25965-x86-ucode-Intel-resume.patch
Normal file
35
25965-x86-ucode-Intel-resume.patch
Normal file
@ -0,0 +1,35 @@
|
||||
# HG changeset patch
|
||||
# User Jan Beulich <jbeulich@suse.com>
|
||||
# Date 1348817291 -7200
|
||||
# Node ID 4496d56c68a0e57ed9f03b482028093f1e7fdf6c
|
||||
# Parent 00c05b9d76247d063a8ebc75050246e488323f50
|
||||
x86/ucode: fix Intel case of resume handling on boot CPU
|
||||
|
||||
Checking the stored version doesn't tell us anything about the need to
|
||||
apply the update (during resume, what is stored doesn't necessarily
|
||||
match what is loaded).
|
||||
|
||||
Note that the check can be removed altogether because once switched to
|
||||
use what was read from the CPU (uci->cpu_sig.rev, as used in the
|
||||
subsequent pr_debug()), it would become redundant with the checks that
|
||||
lead to microcode_update_match() returning the indication that an
|
||||
update should be applied.
|
||||
|
||||
Note further that this was not an issue on APs since they start with
|
||||
uci->mc.mc_intel being NULL.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Tested-by: Ben Guthro <ben@guthro.net>
|
||||
Acked-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/microcode_intel.c
|
||||
+++ b/xen/arch/x86/microcode_intel.c
|
||||
@@ -261,8 +261,6 @@ static int get_matching_microcode(const
|
||||
}
|
||||
return 0;
|
||||
find:
|
||||
- if ( uci->mc.mc_intel && uci->mc.mc_intel->hdr.rev >= mc_header->rev )
|
||||
- return 0;
|
||||
pr_debug("microcode: CPU%d found a matching microcode update with"
|
||||
" version 0x%x (current=0x%x)\n",
|
||||
cpu, mc_header->rev, uci->cpu_sig.rev);
|
@ -741,7 +741,7 @@ Index: xen-4.2.0-testing/tools/blktap/lib/blktaplib.h
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/blktap/lib/blktaplib.h
|
||||
+++ xen-4.2.0-testing/tools/blktap/lib/blktaplib.h
|
||||
@@ -220,6 +220,7 @@ typedef struct msg_pid {
|
||||
@@ -219,6 +219,7 @@ typedef struct msg_pid {
|
||||
#define DISK_TYPE_RAM 3
|
||||
#define DISK_TYPE_QCOW 4
|
||||
#define DISK_TYPE_QCOW2 5
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/xen/arch/x86/domain.c
|
||||
+++ b/xen/arch/x86/domain.c
|
||||
@@ -148,15 +148,30 @@ void dump_pageframe_info(struct domain *
|
||||
@@ -154,15 +154,30 @@ void dump_pageframe_info(struct domain *
|
||||
|
||||
printk("Memory pages belonging to domain %u:\n", d->domain_id);
|
||||
|
||||
|
@ -170,3 +170,64 @@ Index: xen-4.2.0-testing/tools/Makefile
|
||||
--source-path=$$source \
|
||||
--extra-cflags="-I$(XEN_ROOT)/tools/include \
|
||||
-I$(XEN_ROOT)/tools/libxc \
|
||||
Index: xen-4.2.0-testing/stubdom/Makefile
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/stubdom/Makefile
|
||||
+++ xen-4.2.0-testing/stubdom/Makefile
|
||||
@@ -398,7 +398,7 @@ install-grub: pv-grub
|
||||
|
||||
install-xenstore: xenstore-stubdom
|
||||
$(INSTALL_DIR) "$(DESTDIR)/usr/lib/xen/boot"
|
||||
- $(INSTALL_PROG) mini-os-$(XEN_TARGET_ARCH)-xenstore/mini-os.gz "$(DESTDIR)/usr/lib/xen/boot/xenstore-stubdom.gz"
|
||||
+ $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-xenstore/mini-os.gz "$(DESTDIR)/usr/lib/xen/boot/xenstore-stubdom.gz"
|
||||
|
||||
#######
|
||||
# clean
|
||||
Index: xen-4.2.0-testing/tools/blktap2/vhd/lib/Makefile
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/blktap2/vhd/lib/Makefile
|
||||
+++ xen-4.2.0-testing/tools/blktap2/vhd/lib/Makefile
|
||||
@@ -68,7 +68,7 @@ libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR
|
||||
|
||||
install: all
|
||||
$(INSTALL_DIR) -p $(DESTDIR)$(INST-DIR)
|
||||
- $(INSTALL_PROG) libvhd.a $(DESTDIR)$(INST-DIR)
|
||||
+ $(INSTALL_DATA) libvhd.a $(DESTDIR)$(INST-DIR)
|
||||
$(INSTALL_PROG) libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR)
|
||||
ln -sf libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR)
|
||||
ln -sf libvhd.so.$(LIBVHD-MAJOR) $(DESTDIR)$(INST-DIR)/libvhd.so
|
||||
Index: xen-4.2.0-testing/tools/blktap/lib/Makefile
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/blktap/lib/Makefile
|
||||
+++ xen-4.2.0-testing/tools/blktap/lib/Makefile
|
||||
@@ -23,23 +23,26 @@ OBJS = $(SRCS:.c=.o)
|
||||
OBJS_PIC = $(SRCS:.c=.opic)
|
||||
IBINS :=
|
||||
|
||||
-LIB = libblktap.a libblktap.so.$(MAJOR).$(MINOR)
|
||||
+LIB = libblktap.a
|
||||
+LIB_SO = libblktap.so.$(MAJOR).$(MINOR)
|
||||
+LIB_ALL = $(LIB) $(LIB_SO)
|
||||
|
||||
.PHONY: all
|
||||
-all: $(LIB)
|
||||
+all: $(LIB_ALL)
|
||||
|
||||
.PHONY: install
|
||||
install: all
|
||||
$(INSTALL_DIR) $(DESTDIR)$(LIBDIR)
|
||||
$(INSTALL_DIR) $(DESTDIR)$(INCLUDEDIR)
|
||||
- $(INSTALL_PROG) $(LIB) $(DESTDIR)$(LIBDIR)
|
||||
+ $(INSTALL_DATA) $(LIB) $(DESTDIR)$(LIBDIR)
|
||||
+ $(INSTALL_PROG) $(LIB_SO) $(DESTDIR)$(LIBDIR)
|
||||
ln -sf libblktap.so.$(MAJOR).$(MINOR) $(DESTDIR)$(LIBDIR)/libblktap.so.$(MAJOR)
|
||||
ln -sf libblktap.so.$(MAJOR) $(DESTDIR)$(LIBDIR)/libblktap.so
|
||||
$(INSTALL_DATA) blktaplib.h $(DESTDIR)$(INCLUDEDIR)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
- rm -rf *.a *.so* *.o *.opic *.rpm $(LIB) *~ $(DEPS) xen TAGS
|
||||
+ rm -rf *.a *.so* *.o *.opic *.rpm $(LIB_ALL) *~ $(DEPS) xen TAGS
|
||||
|
||||
libblktap.so.$(MAJOR).$(MINOR): $(OBJS_PIC)
|
||||
$(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,$(SONAME) $(SHLIB_LDFLAGS) \
|
||||
|
@ -1,342 +0,0 @@
|
||||
--- a/tools/misc/gtraceview.c
|
||||
+++ b/tools/misc/gtraceview.c
|
||||
@@ -621,7 +621,8 @@ void crt_init(void)
|
||||
void nr_addch(int nr, int ch)
|
||||
{
|
||||
int i;
|
||||
- int y, x;
|
||||
+ int x;
|
||||
+ int __attribute__((__unused__)) y;
|
||||
getyx(stdscr, y, x);
|
||||
for (i = 0; i < nr; i++) {
|
||||
if (x == COLS-1)
|
||||
--- a/tools/xcutils/xc_restore.c
|
||||
+++ b/tools/xcutils/xc_restore.c
|
||||
@@ -19,7 +19,8 @@ int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
unsigned int domid, store_evtchn, console_evtchn;
|
||||
- unsigned int hvm, pae, apic;
|
||||
+ unsigned int hvm, pae;
|
||||
+ unsigned int __attribute__((__unused__)) apic;
|
||||
xc_interface *xch;
|
||||
int io_fd, ret;
|
||||
int superpages;
|
||||
--- a/tools/firmware/rombios/32bit/tcgbios/tcgbios.c
|
||||
+++ b/tools/firmware/rombios/32bit/tcgbios/tcgbios.c
|
||||
@@ -1064,7 +1064,7 @@ uint32_t HashLogEvent32(struct hlei *hle
|
||||
uint32_t rc = 0;
|
||||
uint16_t size;
|
||||
uint32_t logdataptr;
|
||||
- uint32_t logdatalen;
|
||||
+ uint32_t __attribute__((__unused__)) logdatalen;
|
||||
uint32_t hashdataptr;
|
||||
uint32_t hashdatalen;
|
||||
|
||||
--- a/tools/console/client/main.c
|
||||
+++ b/tools/console/client/main.c
|
||||
@@ -277,7 +277,8 @@ int main(int argc, char **argv)
|
||||
|
||||
};
|
||||
char *dom_path = NULL, *path = NULL;
|
||||
- int spty, xsfd;
|
||||
+ int spty;
|
||||
+ int __attribute__((__unused__)) xsfd;
|
||||
struct xs_handle *xs;
|
||||
char *end;
|
||||
console_type type = CONSOLE_INVAL;
|
||||
--- a/tools/xenstat/xentop/xentop.c
|
||||
+++ b/tools/xenstat/xentop/xentop.c
|
||||
@@ -278,7 +278,8 @@ static void fail(const char *str)
|
||||
/* Return the row containing the cursor. */
|
||||
static int current_row(void)
|
||||
{
|
||||
- int y, x;
|
||||
+ int __attribute__((__unused__)) x;
|
||||
+ int y;
|
||||
getyx(stdscr, y, x);
|
||||
return y;
|
||||
}
|
||||
@@ -286,7 +287,8 @@ static int current_row(void)
|
||||
/* Return the number of lines on the screen. */
|
||||
static int lines(void)
|
||||
{
|
||||
- int y, x;
|
||||
+ int __attribute__((__unused__)) x;
|
||||
+ int y;
|
||||
getmaxyx(stdscr, y, x);
|
||||
return y;
|
||||
}
|
||||
--- a/tools/libxl/libxlu_cfg.c
|
||||
+++ b/tools/libxl/libxlu_cfg.c
|
||||
@@ -406,7 +406,7 @@ char *xlu__cfgl_dequote(CfgParseContext
|
||||
|
||||
#define NUMERIC_CHAR(minlen,maxlen,base,basetext) do{ \
|
||||
char numbuf[(maxlen)+1], *ep; \
|
||||
- unsigned long val; \
|
||||
+ unsigned long __attribute__((__unused__)) val; \
|
||||
\
|
||||
strncpy(numbuf,p,(maxlen)); \
|
||||
numbuf[(maxlen)]= 0; \
|
||||
--- a/tools/libxl/libxl_pci.c
|
||||
+++ b/tools/libxl/libxl_pci.c
|
||||
@@ -71,7 +71,7 @@ int libxl__create_pci_backend(libxl__gc
|
||||
flexarray_t *front = NULL;
|
||||
flexarray_t *back = NULL;
|
||||
libxl__device device;
|
||||
- int ret = ERROR_NOMEM, i;
|
||||
+ int i;
|
||||
|
||||
front = flexarray_make(16, 1);
|
||||
if (!front)
|
||||
@@ -80,8 +80,6 @@ int libxl__create_pci_backend(libxl__gc
|
||||
if (!back)
|
||||
goto out;
|
||||
|
||||
- ret = 0;
|
||||
-
|
||||
LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Creating pci backend");
|
||||
|
||||
/* add pci device */
|
||||
--- a/tools/libxl/libxl_dom.c
|
||||
+++ b/tools/libxl/libxl_dom.c
|
||||
@@ -565,7 +565,6 @@ int libxl__build_hvm(libxl__gc *gc, uint
|
||||
LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, ret, "hvm build set params failed");
|
||||
goto out;
|
||||
}
|
||||
- rc = 0;
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
--- a/tools/debugger/gdbsx/gx/gx_comm.c
|
||||
+++ b/tools/debugger/gdbsx/gx/gx_comm.c
|
||||
@@ -163,7 +163,7 @@ readchar(void)
|
||||
static char buf[BUFSIZ];
|
||||
static int bufcnt = 0;
|
||||
static char *bufp;
|
||||
- uint64_t ll;
|
||||
+ uint64_t __attribute__((__unused__)) ll;
|
||||
|
||||
if (bufcnt-- > 0)
|
||||
return *bufp++ & 0x7f;
|
||||
--- a/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c
|
||||
+++ b/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c
|
||||
@@ -836,7 +836,7 @@ static int create_suspend_thread(checkpo
|
||||
|
||||
static void stop_suspend_thread(checkpoint_state* s)
|
||||
{
|
||||
- int err;
|
||||
+ int __attribute__((__unused__)) err;
|
||||
|
||||
s->done = 1;
|
||||
|
||||
--- a/tools/python/xen/lowlevel/netlink/libnetlink.c
|
||||
+++ b/tools/python/xen/lowlevel/netlink/libnetlink.c
|
||||
@@ -433,7 +433,8 @@ int rtnl_from_file(FILE *rtnl, rtnl_filt
|
||||
nladdr.nl_groups = 0;
|
||||
|
||||
while (1) {
|
||||
- int err, len, type;
|
||||
+ int err, len;
|
||||
+ int __attribute__((__unused__)) type;
|
||||
int l;
|
||||
|
||||
status = fread(&buf, 1, sizeof(*h), rtnl);
|
||||
--- a/xen/common/cpupool.c
|
||||
+++ b/xen/common/cpupool.c
|
||||
@@ -371,7 +371,7 @@ int cpupool_add_domain(struct domain *d,
|
||||
{
|
||||
struct cpupool *c;
|
||||
int rc;
|
||||
- int n_dom = 0;
|
||||
+ int __attribute__((__unused__)) n_dom = 0;
|
||||
|
||||
if ( poolid == CPUPOOLID_NONE )
|
||||
return 0;
|
||||
@@ -399,8 +399,8 @@ int cpupool_add_domain(struct domain *d,
|
||||
*/
|
||||
void cpupool_rm_domain(struct domain *d)
|
||||
{
|
||||
- int cpupool_id;
|
||||
- int n_dom;
|
||||
+ int __attribute__((__unused__)) cpupool_id;
|
||||
+ int __attribute__((__unused__)) n_dom;
|
||||
|
||||
if ( d->cpupool == NULL )
|
||||
return;
|
||||
--- a/xen/common/kexec.c
|
||||
+++ b/xen/common/kexec.c
|
||||
@@ -817,7 +817,8 @@ static int kexec_exec(XEN_GUEST_HANDLE(v
|
||||
{
|
||||
xen_kexec_exec_t exec;
|
||||
xen_kexec_image_t *image;
|
||||
- int base, bit, pos, ret = -EINVAL;
|
||||
+ int base, bit, pos;
|
||||
+ int __attribute__((__unused__)) ret = -EINVAL;
|
||||
|
||||
if ( unlikely(copy_from_guest(&exec, uarg, 1)) )
|
||||
return -EFAULT;
|
||||
--- a/xen/arch/x86/time.c
|
||||
+++ b/xen/arch/x86/time.c
|
||||
@@ -1012,7 +1012,8 @@ static void local_time_calibration(void)
|
||||
* System timestamps, extrapolated from local and master oscillators,
|
||||
* taken during this calibration and the previous calibration.
|
||||
*/
|
||||
- s_time_t prev_local_stime, curr_local_stime;
|
||||
+ s_time_t curr_local_stime;
|
||||
+ s_time_t __attribute__((__unused__)) prev_local_stime;
|
||||
s_time_t prev_master_stime, curr_master_stime;
|
||||
|
||||
/* TSC timestamps taken during this calibration and prev calibration. */
|
||||
--- a/xen/arch/x86/mm/p2m.c
|
||||
+++ b/xen/arch/x86/mm/p2m.c
|
||||
@@ -483,7 +483,7 @@ p2m_remove_page(struct p2m_domain *p2m,
|
||||
unsigned int page_order)
|
||||
{
|
||||
unsigned long i;
|
||||
- mfn_t mfn_return;
|
||||
+ mfn_t __attribute__((__unused__)) mfn_return;
|
||||
p2m_type_t t;
|
||||
p2m_access_t a;
|
||||
|
||||
--- a/xen/arch/x86/cpu/intel_cacheinfo.c
|
||||
+++ b/xen/arch/x86/cpu/intel_cacheinfo.c
|
||||
@@ -169,7 +169,8 @@ unsigned int __cpuinit init_intel_cachei
|
||||
unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */
|
||||
unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */
|
||||
unsigned int new_l2 = 0, new_l3 = 0, i; /* Cache sizes from cpuid(4) */
|
||||
- unsigned int l2_id = 0, l3_id = 0, num_threads_sharing, index_msb;
|
||||
+ unsigned int num_threads_sharing, index_msb;
|
||||
+ unsigned int __attribute__((__unused__)) l2_id = 0, l3_id = 0;
|
||||
|
||||
if (c->cpuid_level > 3) {
|
||||
static int is_initialized;
|
||||
--- a/xen/arch/x86/hvm/viridian.c
|
||||
+++ b/xen/arch/x86/hvm/viridian.c
|
||||
@@ -317,7 +317,7 @@ int rdmsr_viridian_regs(uint32_t idx, ui
|
||||
int viridian_hypercall(struct cpu_user_regs *regs)
|
||||
{
|
||||
int mode = hvm_guest_x86_mode(current);
|
||||
- unsigned long input_params_gpa, output_params_gpa;
|
||||
+ unsigned long __attribute__((__unused__)) input_params_gpa, output_params_gpa;
|
||||
uint16_t status = HV_STATUS_SUCCESS;
|
||||
|
||||
union hypercall_input {
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -4973,7 +4973,7 @@ static int ptwr_emulated_update(
|
||||
{
|
||||
unsigned long mfn;
|
||||
unsigned long unaligned_addr = addr;
|
||||
- struct page_info *page;
|
||||
+ struct page_info __attribute__((__unused__)) *page;
|
||||
l1_pgentry_t pte, ol1e, nl1e, *pl1e;
|
||||
struct vcpu *v = current;
|
||||
struct domain *d = v->domain;
|
||||
--- a/xen/common/tmem.c
|
||||
+++ b/xen/common/tmem.c
|
||||
@@ -1352,7 +1352,8 @@ obj_unlock:
|
||||
static int tmem_evict(void)
|
||||
{
|
||||
client_t *client = tmh_client_from_current();
|
||||
- pgp_t *pgp = NULL, *pgp2, *pgp_del;
|
||||
+ pgp_t *pgp = NULL, *pgp2;
|
||||
+ pgp_t __attribute__((__unused__)) *pgp_del;
|
||||
obj_t *obj;
|
||||
pool_t *pool;
|
||||
int ret = 0;
|
||||
@@ -1589,7 +1590,8 @@ static NOINLINE int do_tmem_put(pool_t *
|
||||
pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_t clibuf)
|
||||
{
|
||||
obj_t *obj = NULL, *objfound = NULL, *objnew = NULL;
|
||||
- pgp_t *pgp = NULL, *pgpdel = NULL;
|
||||
+ pgp_t *pgp = NULL;
|
||||
+ pgp_t __attribute__((__unused__)) *pgpdel = NULL;
|
||||
client_t *client = pool->client;
|
||||
int ret = client->frozen ? -EFROZEN : -ENOMEM;
|
||||
|
||||
--- a/xen/common/tmem_xen.c
|
||||
+++ b/xen/common/tmem_xen.c
|
||||
@@ -196,7 +196,7 @@ EXPORT int tmh_copy_from_client(pfp_t *p
|
||||
EXPORT int tmh_compress_from_client(tmem_cli_mfn_t cmfn,
|
||||
void **out_va, size_t *out_len, tmem_cli_va_t clibuf)
|
||||
{
|
||||
- int ret = 0;
|
||||
+ int __attribute__((__unused__)) ret = 0;
|
||||
unsigned char *dmem = this_cpu(dstmem);
|
||||
unsigned char *wmem = this_cpu(workmem);
|
||||
char *scratch = this_cpu(scratch_page);
|
||||
@@ -272,7 +272,7 @@ EXPORT int tmh_decompress_to_client(tmem
|
||||
void *cli_va = NULL;
|
||||
char *scratch = this_cpu(scratch_page);
|
||||
size_t out_len = PAGE_SIZE;
|
||||
- int ret;
|
||||
+ int __attribute__((__unused__)) ret;
|
||||
|
||||
if ( guest_handle_is_null(clibuf) )
|
||||
{
|
||||
@@ -405,15 +405,17 @@ static void tmh_persistent_pool_page_put
|
||||
EXPORT tmh_client_t *tmh_client_init(cli_id_t cli_id)
|
||||
{
|
||||
tmh_client_t *tmh;
|
||||
+#ifndef __i386__
|
||||
char name[5];
|
||||
int i, shift;
|
||||
+#endif
|
||||
|
||||
if ( (tmh = xmalloc(tmh_client_t)) == NULL )
|
||||
return NULL;
|
||||
+#ifndef __i386__
|
||||
for (i = 0, shift = 12; i < 4; shift -=4, i++)
|
||||
name[i] = (((unsigned short)cli_id >> shift) & 0xf) + '0';
|
||||
name[4] = '\0';
|
||||
-#ifndef __i386__
|
||||
tmh->persistent_pool = xmem_pool_create(name, tmh_persistent_pool_page_get,
|
||||
tmh_persistent_pool_page_put, PAGE_SIZE, 0, PAGE_SIZE);
|
||||
if ( tmh->persistent_pool == NULL )
|
||||
--- a/xen/arch/x86/mm/shadow/multi.c
|
||||
+++ b/xen/arch/x86/mm/shadow/multi.c
|
||||
@@ -124,7 +124,7 @@ set_shadow_status(struct vcpu *v, mfn_t
|
||||
/* Put a shadow into the hash table */
|
||||
{
|
||||
struct domain *d = v->domain;
|
||||
- int res;
|
||||
+ int __attribute__((__unused__)) res;
|
||||
|
||||
SHADOW_PRINTK("d=%d, v=%d, gmfn=%05lx, type=%08x, smfn=%05lx\n",
|
||||
d->domain_id, v->vcpu_id, mfn_x(gmfn),
|
||||
@@ -4438,7 +4438,7 @@ sh_update_cr3(struct vcpu *v, int do_loc
|
||||
int sh_rm_write_access_from_sl1p(struct vcpu *v, mfn_t gmfn,
|
||||
mfn_t smfn, unsigned long off)
|
||||
{
|
||||
- int r;
|
||||
+ int __attribute__((__unused__)) r;
|
||||
shadow_l1e_t *sl1p, sl1e;
|
||||
struct page_info *sp;
|
||||
|
||||
--- a/xen/arch/x86/domain_build.c
|
||||
+++ b/xen/arch/x86/domain_build.c
|
||||
@@ -377,8 +377,7 @@ int __init construct_dom0(
|
||||
return rc;
|
||||
|
||||
/* compatibility check */
|
||||
- compatible = 0;
|
||||
- compat32 = 0;
|
||||
+ compatible = compat32 = 0;
|
||||
machine = elf_uval(&elf, elf.ehdr, e_machine);
|
||||
switch (CONFIG_PAGING_LEVELS) {
|
||||
case 3: /* x86_32p */
|
||||
--- a/xen/arch/x86/traps.c
|
||||
+++ b/xen/arch/x86/traps.c
|
||||
@@ -1910,7 +1910,11 @@ static int emulate_privileged_op(struct
|
||||
struct vcpu *v = current;
|
||||
unsigned long *reg, eip = regs->eip;
|
||||
u8 opcode, modrm_reg = 0, modrm_rm = 0, rep_prefix = 0, lock = 0, rex = 0;
|
||||
+#ifdef CONFIG_X86_64
|
||||
enum { lm_seg_none, lm_seg_fs, lm_seg_gs } lm_ovr = lm_seg_none;
|
||||
+#else
|
||||
+ enum { lm_seg_none, lm_seg_fs, lm_seg_gs } __attribute__((__unused__)) lm_ovr = lm_seg_none;
|
||||
+#endif
|
||||
int rc;
|
||||
unsigned int port, i, data_sel, ar, data, bpmatch = 0;
|
||||
unsigned int op_bytes, op_default, ad_bytes, ad_default, opsize_prefix= 0;
|
@ -1,265 +0,0 @@
|
||||
Index: xen-4.2.0-testing/tools/misc/miniterm/miniterm.c
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/misc/miniterm/miniterm.c
|
||||
+++ xen-4.2.0-testing/tools/misc/miniterm/miniterm.c
|
||||
@@ -157,7 +157,7 @@ int main(int argc, char **argv)
|
||||
case 0:
|
||||
close(1); /* stdout not needed */
|
||||
for ( c = (char)getchar(); c != ENDMINITERM; c = (char)getchar() )
|
||||
- write(fd,&c,1);
|
||||
+ if (write(fd,&c,1)) ;
|
||||
tcsetattr(fd,TCSANOW,&oldsertio);
|
||||
tcsetattr(0,TCSANOW,&oldstdtio);
|
||||
close(fd);
|
||||
@@ -169,19 +169,19 @@ int main(int argc, char **argv)
|
||||
close(fd);
|
||||
exit(-1);
|
||||
default:
|
||||
- write(1, start_str, strlen(start_str));
|
||||
+ if (write(1, start_str, strlen(start_str))) ;
|
||||
close(0); /* stdin not needed */
|
||||
sa.sa_handler = child_handler;
|
||||
sa.sa_flags = 0;
|
||||
sigaction(SIGCHLD,&sa,NULL); /* handle dying child */
|
||||
while ( !stop )
|
||||
{
|
||||
- read(fd,&c,1); /* modem */
|
||||
+ if (read(fd,&c,1)) ; /* modem */
|
||||
c = (char)c;
|
||||
- write(1,&c,1); /* stdout */
|
||||
+ if (write(1,&c,1)) ; /* stdout */
|
||||
}
|
||||
wait(NULL); /* wait for child to die or it will become a zombie */
|
||||
- write(1, end_str, strlen(end_str));
|
||||
+ if (write(1, end_str, strlen(end_str))) ;
|
||||
break;
|
||||
}
|
||||
|
||||
Index: xen-4.2.0-testing/tools/libxc/xc_dom_elfloader.c
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/libxc/xc_dom_elfloader.c
|
||||
+++ xen-4.2.0-testing/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -228,8 +228,9 @@ static int xc_dom_load_elf_symtab(struct
|
||||
|
||||
if ( load )
|
||||
{
|
||||
+ void * dst = (void*)elf_section_start(&syms, shdr);
|
||||
shdr2 = elf_shdr_by_index(elf, h);
|
||||
- memcpy((void*)elf_section_start(&syms, shdr),
|
||||
+ memcpy(dst,
|
||||
elf_section_start(elf, shdr2),
|
||||
size);
|
||||
}
|
||||
Index: xen-4.2.0-testing/tools/xenstore/Makefile
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/xenstore/Makefile
|
||||
+++ xen-4.2.0-testing/tools/xenstore/Makefile
|
||||
@@ -4,7 +4,7 @@ include $(XEN_ROOT)/tools/Rules.mk
|
||||
MAJOR = 3.0
|
||||
MINOR = 1
|
||||
|
||||
-CFLAGS += -Werror
|
||||
+CFLAGS += -Werror -fno-strict-aliasing
|
||||
CFLAGS += -I.
|
||||
CFLAGS += $(CFLAGS_libxenctrl)
|
||||
|
||||
Index: xen-4.2.0-testing/tools/xenstore/xenstored_core.c
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/xenstore/xenstored_core.c
|
||||
+++ xen-4.2.0-testing/tools/xenstore/xenstored_core.c
|
||||
@@ -79,8 +79,8 @@ static void check_store(void);
|
||||
|
||||
int quota_nb_entry_per_domain = 1000;
|
||||
int quota_nb_watch_per_domain = 128;
|
||||
-int quota_max_entry_size = 2048; /* 2K */
|
||||
-int quota_max_transaction = 10;
|
||||
+unsigned int quota_max_entry_size = 2048; /* 2K */
|
||||
+unsigned int quota_max_transaction = 10;
|
||||
|
||||
TDB_CONTEXT *tdb_context(struct connection *conn)
|
||||
{
|
||||
@@ -134,7 +134,7 @@ void trace(const char *fmt, ...)
|
||||
va_list arglist;
|
||||
char *str;
|
||||
char sbuf[1024];
|
||||
- int ret, dummy;
|
||||
+ int ret, __attribute__((__unused__)) dummy;
|
||||
|
||||
if (tracefd < 0)
|
||||
return;
|
||||
@@ -204,7 +204,7 @@ void trace_destroy(const void *data, con
|
||||
static void trigger_reopen_log(int signal __attribute__((unused)))
|
||||
{
|
||||
char c = 'A';
|
||||
- int dummy;
|
||||
+ int __attribute__((__unused__)) dummy;
|
||||
dummy = write(reopen_log_pipe[1], &c, 1);
|
||||
}
|
||||
|
||||
@@ -1807,10 +1807,10 @@ int main(int argc, char *argv[])
|
||||
remove_local = false;
|
||||
break;
|
||||
case 'S':
|
||||
- quota_max_entry_size = strtol(optarg, NULL, 10);
|
||||
+ quota_max_entry_size = strtoul(optarg, NULL, 10);
|
||||
break;
|
||||
case 't':
|
||||
- quota_max_transaction = strtol(optarg, NULL, 10);
|
||||
+ quota_max_transaction = strtoul(optarg, NULL, 10);
|
||||
break;
|
||||
case 'T':
|
||||
tracefile = optarg;
|
||||
Index: xen-4.2.0-testing/tools/xenstore/xenstored_domain.c
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/xenstore/xenstored_domain.c
|
||||
+++ xen-4.2.0-testing/tools/xenstore/xenstored_domain.c
|
||||
@@ -241,7 +241,7 @@ void handle_event(void)
|
||||
{
|
||||
evtchn_port_t port;
|
||||
|
||||
- if ((port = xc_evtchn_pending(xce_handle)) == -1)
|
||||
+ if ((port = xc_evtchn_pending(xce_handle)) == (evtchn_port_t)-1)
|
||||
barf_perror("Failed to read from event fd");
|
||||
|
||||
if (port == virq_port)
|
||||
@@ -603,7 +603,7 @@ static int dom0_init(void)
|
||||
struct domain *dom0;
|
||||
|
||||
port = xenbus_evtchn();
|
||||
- if (port == -1)
|
||||
+ if (port == (evtchn_port_t)-1)
|
||||
return -1;
|
||||
|
||||
dom0 = new_domain(NULL, 0, port);
|
||||
Index: xen-4.2.0-testing/tools/xenstore/xenstored_transaction.c
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/xenstore/xenstored_transaction.c
|
||||
+++ xen-4.2.0-testing/tools/xenstore/xenstored_transaction.c
|
||||
@@ -82,7 +82,7 @@ struct transaction
|
||||
struct list_head changed_domains;
|
||||
};
|
||||
|
||||
-extern int quota_max_transaction;
|
||||
+extern unsigned int quota_max_transaction;
|
||||
static unsigned int generation;
|
||||
|
||||
/* Return tdb context to use for this connection. */
|
||||
Index: xen-4.2.0-testing/tools/xenstore/xenstore_client.c
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/xenstore/xenstore_client.c
|
||||
+++ xen-4.2.0-testing/tools/xenstore/xenstore_client.c
|
||||
@@ -255,7 +255,7 @@ do_chmod(char *path, struct xs_permissio
|
||||
char **xsval = xs_directory(xsh, xth, path, &xsval_n);
|
||||
|
||||
if (xsval) {
|
||||
- int i;
|
||||
+ unsigned int i;
|
||||
for (i = 0; i < xsval_n; i++) {
|
||||
snprintf(buf, MAX_PATH_LEN, "%s/%s", path, xsval[i]);
|
||||
|
||||
Index: xen-4.2.0-testing/tools/libxen/src/xen_common.c
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/libxen/src/xen_common.c
|
||||
+++ xen-4.2.0-testing/tools/libxen/src/xen_common.c
|
||||
@@ -1057,6 +1057,8 @@ static size_t size_of_member(const abstr
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
+
|
||||
+ return 0; /* prevents a compiler warning */
|
||||
}
|
||||
|
||||
|
||||
@@ -1568,6 +1570,8 @@ get_val_as_string(const struct abstract_
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
+
|
||||
+ return NULL; /* prevents a compiler warning */
|
||||
}
|
||||
|
||||
|
||||
Index: xen-4.2.0-testing/tools/blktap2/drivers/block-remus.c
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/blktap2/drivers/block-remus.c
|
||||
+++ xen-4.2.0-testing/tools/blktap2/drivers/block-remus.c
|
||||
@@ -1636,7 +1636,7 @@ static int tdremus_open(td_driver_t *dri
|
||||
td_flag_t flags)
|
||||
{
|
||||
struct tdremus_state *s = (struct tdremus_state *)driver->data;
|
||||
- int rc;
|
||||
+ int rc = 0;
|
||||
|
||||
RPRINTF("opening %s\n", name);
|
||||
|
||||
Index: xen-4.2.0-testing/tools/blktap/lib/blktaplib.h
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/blktap/lib/blktaplib.h
|
||||
+++ xen-4.2.0-testing/tools/blktap/lib/blktaplib.h
|
||||
@@ -196,6 +196,7 @@ typedef struct msg_pid {
|
||||
} msg_pid_t;
|
||||
|
||||
#define READ 0
|
||||
+#undef WRITE
|
||||
#define WRITE 1
|
||||
|
||||
/*Control Messages between manager and tapdev*/
|
||||
Index: xen-4.2.0-testing/tools/blktap2/include/blktaplib.h
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/blktap2/include/blktaplib.h
|
||||
+++ xen-4.2.0-testing/tools/blktap2/include/blktaplib.h
|
||||
@@ -190,6 +190,7 @@ typedef struct msg_lock {
|
||||
} msg_lock_t;
|
||||
|
||||
#define READ 0
|
||||
+#undef WRITE
|
||||
#define WRITE 1
|
||||
|
||||
/*Control Messages between manager and tapdev*/
|
||||
Index: xen-4.2.0-testing/tools/blktap/lib/Makefile
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/blktap/lib/Makefile
|
||||
+++ xen-4.2.0-testing/tools/blktap/lib/Makefile
|
||||
@@ -24,6 +24,8 @@ OBJS_PIC = $(SRCS:.c=.opic)
|
||||
IBINS :=
|
||||
|
||||
LIB = libblktap.a libblktap.so.$(MAJOR).$(MINOR)
|
||||
+LIB_SO = libblktap.so.$(MAJOR).$(MINOR)
|
||||
+LIB_AR = libblktap.a
|
||||
|
||||
.PHONY: all
|
||||
all: $(LIB)
|
||||
@@ -32,7 +34,8 @@ all: $(LIB)
|
||||
install: all
|
||||
$(INSTALL_DIR) $(DESTDIR)$(LIBDIR)
|
||||
$(INSTALL_DIR) $(DESTDIR)$(INCLUDEDIR)
|
||||
- $(INSTALL_PROG) $(LIB) $(DESTDIR)$(LIBDIR)
|
||||
+ $(INSTALL_PROG) $(LIB_SO) $(DESTDIR)$(LIBDIR)
|
||||
+ $(INSTALL_DATA) $(LIB_AR) $(DESTDIR)$(LIBDIR)
|
||||
ln -sf libblktap.so.$(MAJOR).$(MINOR) $(DESTDIR)$(LIBDIR)/libblktap.so.$(MAJOR)
|
||||
ln -sf libblktap.so.$(MAJOR) $(DESTDIR)$(LIBDIR)/libblktap.so
|
||||
$(INSTALL_DATA) blktaplib.h $(DESTDIR)$(INCLUDEDIR)
|
||||
Index: xen-4.2.0-testing/tools/blktap2/vhd/lib/Makefile
|
||||
===================================================================
|
||||
--- xen-4.2.0-testing.orig/tools/blktap2/vhd/lib/Makefile
|
||||
+++ xen-4.2.0-testing/tools/blktap2/vhd/lib/Makefile
|
||||
@@ -52,6 +52,8 @@ LIB-OBJS += $(LVM-UTIL-OBJ)
|
||||
LIB-PICOBJS = $(patsubst %.o,%.opic,$(LIB-OBJS))
|
||||
|
||||
LIBVHD = libvhd.a libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR)
|
||||
+LIBVHD_SO = libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR)
|
||||
+LIBVHD_AR = libvhd.a
|
||||
|
||||
all: build
|
||||
|
||||
@@ -68,8 +70,8 @@ libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR
|
||||
|
||||
install: all
|
||||
$(INSTALL_DIR) -p $(DESTDIR)$(INST-DIR)
|
||||
- $(INSTALL_PROG) libvhd.a $(DESTDIR)$(INST-DIR)
|
||||
- $(INSTALL_PROG) libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR)
|
||||
+ $(INSTALL_PROG) $(LIBVHD_SO) $(DESTDIR)$(INST-DIR)
|
||||
+ $(INSTALL_DATA) $(LIBVHD_AR) $(DESTDIR)$(INST-DIR)
|
||||
ln -sf libvhd.so.$(LIBVHD-MAJOR).$(LIBVHD-MINOR) $(DESTDIR)$(INST-DIR)/libvhd.so.$(LIBVHD-MAJOR)
|
||||
ln -sf libvhd.so.$(LIBVHD-MAJOR) $(DESTDIR)$(INST-DIR)/libvhd.so
|
||||
|
13
xen.changes
13
xen.changes
@ -1,3 +1,16 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 1 10:09:24 MDT 2012 - carnold@novell.com
|
||||
|
||||
- Upstream patches from Jan
|
||||
25927-x86-domctl-ioport-mapping-range.patch
|
||||
25929-tmem-restore-pool-version.patch
|
||||
25931-x86-domctl-iomem-mapping-checks.patch
|
||||
25940-x86-S3-flush-cache.patch
|
||||
25952-x86-MMIO-remap-permissions.patch
|
||||
25961-x86-HPET-interrupts.patch
|
||||
25962-x86-assign-irq-vector-old.patch
|
||||
25965-x86-ucode-Intel-resume.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Sep 25 14:24:29 CEST 2012 - ohering@suse.de
|
||||
|
||||
|
38
xen.spec
38
xen.spec
@ -15,7 +15,6 @@
|
||||
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
|
||||
Name: xen
|
||||
ExclusiveArch: %ix86 x86_64
|
||||
%define xvers 4.2
|
||||
@ -48,6 +47,7 @@ BuildRequires: automake
|
||||
BuildRequires: bin86
|
||||
BuildRequires: curl-devel
|
||||
BuildRequires: dev86
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: glib2-devel
|
||||
BuildRequires: graphviz
|
||||
BuildRequires: latex2html
|
||||
@ -97,10 +97,10 @@ BuildRequires: gcc46
|
||||
BuildRequires: libgcc46
|
||||
BuildRequires: libgcc46-32bit
|
||||
%endif
|
||||
BuildRequires: gcc-32bit
|
||||
BuildRequires: gcc43-32bit
|
||||
BuildRequires: glibc-32bit
|
||||
BuildRequires: glibc-devel-32bit
|
||||
BuildRequires: gcc-32bit
|
||||
BuildRequires: gcc43-32bit
|
||||
%define max_cpus 256
|
||||
%define pae_enabled n
|
||||
%else
|
||||
@ -114,7 +114,7 @@ BuildRequires: kernel-syms
|
||||
BuildRequires: module-init-tools
|
||||
BuildRequires: xorg-x11
|
||||
%endif
|
||||
Version: 4.2.0_01
|
||||
Version: 4.2.0_02
|
||||
Release: 0
|
||||
PreReq: %insserv_prereq %fillup_prereq
|
||||
Summary: Xen Virtualization: Hypervisor (aka VMM aka Microkernel)
|
||||
@ -185,18 +185,24 @@ Patch25866: 25866-sercon-ns16550-pci-irq.patch
|
||||
Patch25867: 25867-sercon-ns16550-parse.patch
|
||||
Patch25874: 25874-x86-EFI-chain-cfg.patch
|
||||
Patch25909: 25909-xenpm-consistent.patch
|
||||
Patch25927: 25927-x86-domctl-ioport-mapping-range.patch
|
||||
Patch25929: 25929-tmem-restore-pool-version.patch
|
||||
Patch25931: 25931-x86-domctl-iomem-mapping-checks.patch
|
||||
Patch25940: 25940-x86-S3-flush-cache.patch
|
||||
Patch25941: 25941-pygrub_always_append_--args.patch
|
||||
Patch25952: 25952-x86-MMIO-remap-permissions.patch
|
||||
Patch25961: 25961-x86-HPET-interrupts.patch
|
||||
Patch25962: 25962-x86-assign-irq-vector-old.patch
|
||||
Patch25965: 25965-x86-ucode-Intel-resume.patch
|
||||
# Upstream qemu patches
|
||||
# Our patches
|
||||
Patch301: xend-config.diff
|
||||
Patch302: xen-destdir.diff
|
||||
Patch303: xen-rpmoptflags.diff
|
||||
Patch304: xen-warnings.diff
|
||||
Patch305: xen-warnings-unused.diff
|
||||
Patch306: xen-changeset.diff
|
||||
Patch307: xen-paths.diff
|
||||
Patch308: xen-xmexample.diff
|
||||
Patch309: xen-xmexample-vti.diff
|
||||
Patch304: xen-changeset.diff
|
||||
Patch305: xen-paths.diff
|
||||
Patch306: xen-xmexample.diff
|
||||
Patch307: xen-xmexample-vti.diff
|
||||
Patch310: xen-fixme-doc.diff
|
||||
Patch311: xen-domUloader.diff
|
||||
Patch312: xen-no-dummy-nfs-ip.diff
|
||||
@ -669,7 +675,15 @@ tar xfj %{SOURCE6} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
|
||||
%patch25867 -p1
|
||||
%patch25874 -p1
|
||||
%patch25909 -p1
|
||||
%patch25927 -p1
|
||||
%patch25929 -p1
|
||||
%patch25931 -p1
|
||||
%patch25940 -p1
|
||||
%patch25941 -p1
|
||||
%patch25952 -p1
|
||||
%patch25961 -p1
|
||||
%patch25962 -p1
|
||||
%patch25965 -p1
|
||||
# Qemu
|
||||
# Our patches
|
||||
%patch301 -p1
|
||||
@ -679,8 +693,6 @@ tar xfj %{SOURCE6} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools
|
||||
%patch305 -p1
|
||||
%patch306 -p1
|
||||
%patch307 -p1
|
||||
%patch308 -p1
|
||||
%patch309 -p1
|
||||
%patch310 -p1
|
||||
%patch311 -p1
|
||||
%patch312 -p1
|
||||
@ -1025,6 +1037,8 @@ rm -f $RPM_BUILD_ROOT/usr/local/share/doc/qemu/qemu-tech.html
|
||||
#/usr/share/SuSEfirewall2/services/TEMPLATE
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_fwdefdir}
|
||||
install -m 644 %{S:26} $RPM_BUILD_ROOT/%{_fwdefdir}/xend-relocation-server
|
||||
# create symlinks for keymaps
|
||||
%fdupes -s $RPM_BUILD_ROOT/%{_datadir}
|
||||
%else
|
||||
# 32 bit hypervisor no longer supported. Remove dom0 tools.
|
||||
rm -rf $RPM_BUILD_ROOT/%{_datadir}/doc
|
||||
|
Loading…
x
Reference in New Issue
Block a user