Hello community,
here is the log from the commit of package xen for openSUSE:Factory checked in at 2013-08-01 16:10:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xen (Old)
and /work/SRC/openSUSE:Factory/.xen.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xen"
Changes:
--------
--- /work/SRC/openSUSE:Factory/xen/xen.changes 2013-07-04 09:14:04.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.xen.new/xen.changes 2013-08-01 16:10:24.000000000 +0200
@@ -1,0 +2,45 @@
+Wed Jul 31 11:34:14 MDT 2013 - carnold@suse.com
+
+- Spec file cleanups
+ xen.spec
+- Renamed xend-sysconfig.patch to xencommons-sysconfig.patch
+
+-------------------------------------------------------------------
+Mon Jul 29 16:46:33 MDT 2013 - carnold@suse.com
+
+- Added support for systemd with the following service files
+ xenstored.service
+ blktapctrl.service
+ xend.service
+ xenconsoled.service
+ xen-watchdog.service
+ xendomains.service
+ xencommons.service
+
+-------------------------------------------------------------------
+Fri Jul 12 11:05:11 MDT 2013 - carnold@suse.com
+
+- Upstream patches from Jan
+ 51d277a3-x86-don-t-pass-negative-time-to-gtime_to_gtsc-try-2.patch
+ 51d27807-iommu-amd-Fix-logic-for-clearing-the-IOMMU-interrupt-bits.patch
+ 51d27841-iommu-amd-Workaround-for-erratum-787.patch
+ 51daa074-Revert-hvmloader-always-include-HPET-table.patch
+
+-------------------------------------------------------------------
+Fri Jul 12 09:31:01 MDT 2013 - carnold@suse.com
+
+- Dropped deprecated or unnecessary patches
+ pvdrv-import-shared-info.patch
+ minios-fixups.patch
+
+-------------------------------------------------------------------
+Tue Jul 9 13:06:27 MDT 2013 - carnold@suse.com
+
+- Update to Xen 4.3.0 FCS
+
+-------------------------------------------------------------------
+Fri Jul 5 14:31:51 UTC 2013 - agraf@suse.com
+
+- Enable ARM targets for Xen
+
+-------------------------------------------------------------------
Old:
----
minios-fixups.patch
pvdrv-import-shared-info.patch
xend-sysconfig.patch
New:
----
51d277a3-x86-don-t-pass-negative-time-to-gtime_to_gtsc-try-2.patch
51d27807-iommu-amd-Fix-logic-for-clearing-the-IOMMU-interrupt-bits.patch
51d27841-iommu-amd-Workaround-for-erratum-787.patch
51daa074-Revert-hvmloader-always-include-HPET-table.patch
blktapctrl.service
xen-watchdog.service
xencommons-sysconfig.patch
xencommons.service
xenconsoled.service
xend.service
xendomains.service
xenstored.service
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xen.spec ++++++
++++ 940 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/xen/xen.spec
++++ and /work/SRC/openSUSE:Factory/.xen.new/xen.spec
++++++ 51d277a3-x86-don-t-pass-negative-time-to-gtime_to_gtsc-try-2.patch ++++++
# Commit 5ad914bc867c5a6a4957869c89918f4e1f9dd9c4
# Date 2013-07-02 08:48:03 +0200
# Author Jan Beulich
# Committer Jan Beulich
x86: don't pass negative time to gtime_to_gtsc() (try 2)
This mostly reverts commit eb60be3d ("x86: don't pass negative time to
gtime_to_gtsc()") and instead corrects __update_vcpu_system_time()'s
handling of this_cpu(cpu_time).stime_local_stamp dating back before the
start of a HVM guest (which would otherwise lead to a negative value
getting passed to gtime_to_gtsc(), causing scale_delta() to produce
meaningless output).
Flushing the value to zero was wrong, and printing a message for
something that can validly happen wasn't very useful either.
Signed-off-by: Jan Beulich
Acked-by: Keir Fraser
--- a/xen/arch/x86/time.c
+++ b/xen/arch/x86/time.c
@@ -823,16 +823,13 @@ static void __update_vcpu_system_time(st
struct pl_time *pl = &v->domain->arch.hvm_domain.pl_time;
stime += pl->stime_offset + v->arch.hvm_vcpu.stime_offset;
- if ( (s64)stime < 0 )
- {
- printk(XENLOG_G_WARNING "d%dv%d: bogus time %" PRId64
- " (offsets %" PRId64 "/%" PRId64 ")\n",
- d->domain_id, v->vcpu_id, stime,
- pl->stime_offset, v->arch.hvm_vcpu.stime_offset);
- stime = 0;
- }
+ if ( stime >= 0 )
+ tsc_stamp = gtime_to_gtsc(d, stime);
+ else
+ tsc_stamp = -gtime_to_gtsc(d, -stime);
}
- tsc_stamp = gtime_to_gtsc(d, stime);
+ else
+ tsc_stamp = gtime_to_gtsc(d, stime);
}
else
{
++++++ 51d27807-iommu-amd-Fix-logic-for-clearing-the-IOMMU-interrupt-bits.patch ++++++
# Commit 2823a0c7dfc979db316787e1dd42a8845e5825c0
# Date 2013-07-02 08:49:43 +0200
# Author Suravee Suthikulpanit
# Committer Jan Beulich
iommu/amd: Fix logic for clearing the IOMMU interrupt bits
The IOMMU interrupt bits in the IOMMU status registers are
"read-only, and write-1-to-clear (RW1C). Therefore, the existing
logic which reads the register, set the bit, and then writing back
the values could accidentally clear certain bits if it has been set.
The correct logic would just be writing only the value which only
set the interrupt bits, and leave the rest to zeros.
This patch also, clean up #define masks as Jan has suggested.
Signed-off-by: Suravee Suthikulpanit
With iommu_interrupt_handler() properly having got switched its readl()
from status to control register, the subsequent writel() needed to be
switched too (and the RW1C comment there was bogus).
Some of the cleanup went too far - undone.
Further, with iommu_interrupt_handler() now actually disabling the
interrupt sources, they also need to get re-enabled by the tasklet once
it finished processing the respective log. This also implies re-running
the tasklet so that log entries added between reading the log and re-
enabling the interrupt will get handled in a timely manner.
Finally, guest write emulation to the status register needs to be done
with the RW1C (and RO for all other bits) semantics in mind too.
Signed-off-by: Jan Beulich
Reviewed-by: Tim Deegan
Acked-by: Suravee Suthikulpanit
--- a/xen/drivers/passthrough/amd/iommu_cmd.c
+++ b/xen/drivers/passthrough/amd/iommu_cmd.c
@@ -75,11 +75,9 @@ static void flush_command_buffer(struct
u32 cmd[4], status;
int loop_count, comp_wait;
- /* clear 'ComWaitInt' in status register (WIC) */
- set_field_in_reg_u32(IOMMU_CONTROL_ENABLED, 0,
- IOMMU_STATUS_COMP_WAIT_INT_MASK,
- IOMMU_STATUS_COMP_WAIT_INT_SHIFT, &status);
- writel(status, iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+ /* RW1C 'ComWaitInt' in status register */
+ writel(IOMMU_STATUS_COMP_WAIT_INT_MASK,
+ iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
/* send an empty COMPLETION_WAIT command to flush command buffer */
cmd[3] = cmd[2] = 0;
@@ -103,9 +101,9 @@ static void flush_command_buffer(struct
if ( comp_wait )
{
- /* clear 'ComWaitInt' in status register (WIC) */
- status &= IOMMU_STATUS_COMP_WAIT_INT_MASK;
- writel(status, iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+ /* RW1C 'ComWaitInt' in status register */
+ writel(IOMMU_STATUS_COMP_WAIT_INT_MASK,
+ iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
return;
}
AMD_IOMMU_DEBUG("Warning: ComWaitInt bit did not assert!\n");
--- a/xen/drivers/passthrough/amd/iommu_guest.c
+++ b/xen/drivers/passthrough/amd/iommu_guest.c
@@ -754,7 +754,14 @@ static void guest_iommu_mmio_write64(str
u64_to_reg(&iommu->ppr_log.reg_tail, val);
break;
case IOMMU_STATUS_MMIO_OFFSET:
- u64_to_reg(&iommu->reg_status, val);
+ val &= IOMMU_STATUS_EVENT_OVERFLOW_MASK |
+ IOMMU_STATUS_EVENT_LOG_INT_MASK |
+ IOMMU_STATUS_COMP_WAIT_INT_MASK |
+ IOMMU_STATUS_PPR_LOG_OVERFLOW_MASK |
+ IOMMU_STATUS_PPR_LOG_INT_MASK |
+ IOMMU_STATUS_GAPIC_LOG_OVERFLOW_MASK |
+ IOMMU_STATUS_GAPIC_LOG_INT_MASK;
+ u64_to_reg(&iommu->reg_status, reg_to_u64(iommu->reg_status) & ~val);
break;
default:
--- a/xen/drivers/passthrough/amd/iommu_init.c
+++ b/xen/drivers/passthrough/amd/iommu_init.c
@@ -344,13 +344,13 @@ static void set_iommu_ppr_log_control(st
writeq(0, iommu->mmio_base + IOMMU_PPR_LOG_TAIL_OFFSET);
iommu_set_bit(&entry, IOMMU_CONTROL_PPR_ENABLE_SHIFT);
- iommu_set_bit(&entry, IOMMU_CONTROL_PPR_INT_SHIFT);
+ iommu_set_bit(&entry, IOMMU_CONTROL_PPR_LOG_INT_SHIFT);
iommu_set_bit(&entry, IOMMU_CONTROL_PPR_LOG_ENABLE_SHIFT);
}
else
{
iommu_clear_bit(&entry, IOMMU_CONTROL_PPR_ENABLE_SHIFT);
- iommu_clear_bit(&entry, IOMMU_CONTROL_PPR_INT_SHIFT);
+ iommu_clear_bit(&entry, IOMMU_CONTROL_PPR_LOG_INT_SHIFT);
iommu_clear_bit(&entry, IOMMU_CONTROL_PPR_LOG_ENABLE_SHIFT);
}
@@ -410,7 +410,7 @@ static void iommu_reset_log(struct amd_i
void (*ctrl_func)(struct amd_iommu *iommu, int))
{
u32 entry;
- int log_run, run_bit, of_bit;
+ int log_run, run_bit;
int loop_count = 1000;
BUG_ON(!iommu || ((log != &iommu->event_log) && (log != &iommu->ppr_log)));
@@ -419,10 +419,6 @@ static void iommu_reset_log(struct amd_i
IOMMU_STATUS_EVENT_LOG_RUN_SHIFT :
IOMMU_STATUS_PPR_LOG_RUN_SHIFT;
- of_bit = ( log == &iommu->event_log ) ?
- IOMMU_STATUS_EVENT_OVERFLOW_SHIFT :
- IOMMU_STATUS_PPR_LOG_OVERFLOW_SHIFT;
-
/* wait until EventLogRun bit = 0 */
do {
entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
@@ -439,9 +435,10 @@ static void iommu_reset_log(struct amd_i
ctrl_func(iommu, IOMMU_CONTROL_DISABLED);
- /*clear overflow bit */
- iommu_clear_bit(&entry, of_bit);
- writel(entry, iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+ /* RW1C overflow bit */
+ writel(log == &iommu->event_log ? IOMMU_STATUS_EVENT_OVERFLOW_MASK
+ : IOMMU_STATUS_PPR_LOG_OVERFLOW_MASK,
+ iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
/*reset event log base address */
log->head = 0;
@@ -611,22 +608,33 @@ static void iommu_check_event_log(struct
u32 entry;
unsigned long flags;
+ /* RW1C interrupt status bit */
+ writel(IOMMU_STATUS_EVENT_LOG_INT_MASK,
+ iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+
iommu_read_log(iommu, &iommu->event_log,
sizeof(event_entry_t), parse_event_log_entry);
spin_lock_irqsave(&iommu->lock, flags);
- /*check event overflow */
+ /* Check event overflow. */
entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
-
if ( iommu_get_bit(entry, IOMMU_STATUS_EVENT_OVERFLOW_SHIFT) )
iommu_reset_log(iommu, &iommu->event_log, set_iommu_event_log_control);
-
- /* reset interrupt status bit */
- entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
- iommu_set_bit(&entry, IOMMU_STATUS_EVENT_LOG_INT_SHIFT);
-
- writel(entry, iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+ else
+ {
+ entry = readl(iommu->mmio_base + IOMMU_CONTROL_MMIO_OFFSET);
+ if ( !(entry & IOMMU_CONTROL_EVENT_LOG_INT_MASK) )
+ {
+ entry |= IOMMU_CONTROL_EVENT_LOG_INT_MASK;
+ writel(entry, iommu->mmio_base + IOMMU_CONTROL_MMIO_OFFSET);
+ /*
+ * Re-schedule the tasklet to handle eventual log entries added
+ * between reading the log above and re-enabling the interrupt.
+ */
+ tasklet_schedule(&amd_iommu_irq_tasklet);
+ }
+ }
spin_unlock_irqrestore(&iommu->lock, flags);
}
@@ -681,22 +689,33 @@ static void iommu_check_ppr_log(struct a
u32 entry;
unsigned long flags;
+ /* RW1C interrupt status bit */
+ writel(IOMMU_STATUS_PPR_LOG_INT_MASK,
+ iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+
iommu_read_log(iommu, &iommu->ppr_log,
sizeof(ppr_entry_t), parse_ppr_log_entry);
spin_lock_irqsave(&iommu->lock, flags);
- /*check event overflow */
+ /* Check event overflow. */
entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
-
if ( iommu_get_bit(entry, IOMMU_STATUS_PPR_LOG_OVERFLOW_SHIFT) )
iommu_reset_log(iommu, &iommu->ppr_log, set_iommu_ppr_log_control);
-
- /* reset interrupt status bit */
- entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
- iommu_set_bit(&entry, IOMMU_STATUS_PPR_LOG_INT_SHIFT);
-
- writel(entry, iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+ else
+ {
+ entry = readl(iommu->mmio_base + IOMMU_CONTROL_MMIO_OFFSET);
+ if ( !(entry & IOMMU_CONTROL_PPR_LOG_INT_MASK) )
+ {
+ entry |= IOMMU_CONTROL_PPR_LOG_INT_MASK;
+ writel(entry, iommu->mmio_base + IOMMU_CONTROL_MMIO_OFFSET);
+ /*
+ * Re-schedule the tasklet to handle eventual log entries added
+ * between reading the log above and re-enabling the interrupt.
+ */
+ tasklet_schedule(&amd_iommu_irq_tasklet);
+ }
+ }
spin_unlock_irqrestore(&iommu->lock, flags);
}
@@ -733,11 +752,14 @@ static void iommu_interrupt_handler(int
spin_lock_irqsave(&iommu->lock, flags);
- /* Silence interrupts from both event and PPR logging */
- entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
- iommu_clear_bit(&entry, IOMMU_STATUS_EVENT_LOG_INT_SHIFT);
- iommu_clear_bit(&entry, IOMMU_STATUS_PPR_LOG_INT_SHIFT);
- writel(entry, iommu->mmio_base+IOMMU_STATUS_MMIO_OFFSET);
+ /*
+ * Silence interrupts from both event and PPR by clearing the
+ * enable logging bits in the control register
+ */
+ entry = readl(iommu->mmio_base + IOMMU_CONTROL_MMIO_OFFSET);
+ iommu_clear_bit(&entry, IOMMU_CONTROL_EVENT_LOG_INT_SHIFT);
+ iommu_clear_bit(&entry, IOMMU_CONTROL_PPR_LOG_INT_SHIFT);
+ writel(entry, iommu->mmio_base + IOMMU_CONTROL_MMIO_OFFSET);
spin_unlock_irqrestore(&iommu->lock, flags);
--- a/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h
+++ b/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h
@@ -336,14 +336,17 @@
#define IOMMU_CONTROL_ISOCHRONOUS_SHIFT 11
#define IOMMU_CONTROL_COMMAND_BUFFER_ENABLE_MASK 0x00001000
#define IOMMU_CONTROL_COMMAND_BUFFER_ENABLE_SHIFT 12
+#define IOMMU_CONTROL_PPR_LOG_ENABLE_MASK 0x00002000
+#define IOMMU_CONTROL_PPR_LOG_ENABLE_SHIFT 13
+#define IOMMU_CONTROL_PPR_LOG_INT_MASK 0x00004000
+#define IOMMU_CONTROL_PPR_LOG_INT_SHIFT 14
+#define IOMMU_CONTROL_PPR_ENABLE_MASK 0x00008000
+#define IOMMU_CONTROL_PPR_ENABLE_SHIFT 15
+#define IOMMU_CONTROL_GT_ENABLE_MASK 0x00010000
+#define IOMMU_CONTROL_GT_ENABLE_SHIFT 16
#define IOMMU_CONTROL_RESTART_MASK 0x80000000
#define IOMMU_CONTROL_RESTART_SHIFT 31
-#define IOMMU_CONTROL_PPR_LOG_ENABLE_SHIFT 13
-#define IOMMU_CONTROL_PPR_INT_SHIFT 14
-#define IOMMU_CONTROL_PPR_ENABLE_SHIFT 15
-#define IOMMU_CONTROL_GT_ENABLE_SHIFT 16
-
/* Exclusion Register */
#define IOMMU_EXCLUSION_BASE_LOW_OFFSET 0x20
#define IOMMU_EXCLUSION_BASE_HIGH_OFFSET 0x24
@@ -395,9 +398,18 @@
#define IOMMU_STATUS_EVENT_LOG_RUN_SHIFT 3
#define IOMMU_STATUS_CMD_BUFFER_RUN_MASK 0x00000010
#define IOMMU_STATUS_CMD_BUFFER_RUN_SHIFT 4
+#define IOMMU_STATUS_PPR_LOG_OVERFLOW_MASK 0x00000020
#define IOMMU_STATUS_PPR_LOG_OVERFLOW_SHIFT 5
+#define IOMMU_STATUS_PPR_LOG_INT_MASK 0x00000040
#define IOMMU_STATUS_PPR_LOG_INT_SHIFT 6
+#define IOMMU_STATUS_PPR_LOG_RUN_MASK 0x00000080
#define IOMMU_STATUS_PPR_LOG_RUN_SHIFT 7
+#define IOMMU_STATUS_GAPIC_LOG_OVERFLOW_MASK 0x00000100
+#define IOMMU_STATUS_GAPIC_LOG_OVERFLOW_SHIFT 8
+#define IOMMU_STATUS_GAPIC_LOG_INT_MASK 0x00000200
+#define IOMMU_STATUS_GAPIC_LOG_INT_SHIFT 9
+#define IOMMU_STATUS_GAPIC_LOG_RUN_MASK 0x00000400
+#define IOMMU_STATUS_GAPIC_LOG_RUN_SHIFT 10
/* I/O Page Table */
#define IOMMU_PAGE_TABLE_ENTRY_SIZE 8
++++++ 51d27841-iommu-amd-Workaround-for-erratum-787.patch ++++++
# Commit 9eabb0735400e2b6059dfa3f0b47a426f61f570a
# Date 2013-07-02 08:50:41 +0200
# Author Suravee Suthikulpanit
# Committer Jan Beulich
iommu/amd: Workaround for erratum 787
The IOMMU interrupt handling in bottom half must clear the PPR log interrupt
and event log interrupt bits to re-enable the interrupt. This is done by
writing 1 to the memory mapped register to clear the bit. Due to hardware bug,
if the driver tries to clear this bit while the IOMMU hardware also setting
this bit, the conflict will result with the bit being set. If the interrupt
handling code does not make sure to clear this bit, subsequent changes in the
event/PPR logs will no longer generating interrupts, and would result if
buffer overflow. After clearing the bits, the driver must read back
the register to verify.
Signed-off-by: Suravee Suthikulpanit
Adjust to apply on top of heavily modified patch 1. Adjust flow to get away
with a single readl() in each instance of the status register checks.
Signed-off-by: Jan Beulich
Reviewed-by: Tim Deegan
Acked-by: Suravee Suthikulpanit
--- a/xen/drivers/passthrough/amd/iommu_init.c
+++ b/xen/drivers/passthrough/amd/iommu_init.c
@@ -636,6 +636,14 @@ static void iommu_check_event_log(struct
}
}
+ /*
+ * Workaround for erratum787:
+ * Re-check to make sure the bit has been cleared.
+ */
+ entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+ if ( entry & IOMMU_STATUS_EVENT_LOG_INT_MASK )
+ tasklet_schedule(&amd_iommu_irq_tasklet);
+
spin_unlock_irqrestore(&iommu->lock, flags);
}
@@ -717,6 +725,14 @@ static void iommu_check_ppr_log(struct a
}
}
+ /*
+ * Workaround for erratum787:
+ * Re-check to make sure the bit has been cleared.
+ */
+ entry = readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET);
+ if ( entry & IOMMU_STATUS_PPR_LOG_INT_MASK )
+ tasklet_schedule(&amd_iommu_irq_tasklet);
+
spin_unlock_irqrestore(&iommu->lock, flags);
}
++++++ 51daa074-Revert-hvmloader-always-include-HPET-table.patch ++++++
References: bnc#817799
# Commit 4867685f7916bb594a67f2f64a28bbf5ecb4949c
# Date 2013-07-08 13:20:20 +0200
# Author Jan Beulich
# Committer Jan Beulich
Revert "hvmloader: always include HPET table"
This reverts commit e4fd0475a08fda414da27c4e57b568f147cfc07e.
Conflicts:
tools/firmware/hvmloader/acpi/build.c
Signed-off-by: Jan Beulich
Acked-by: Keir Fraser
--- a/tools/firmware/hvmloader/acpi/build.c
+++ b/tools/firmware/hvmloader/acpi/build.c
@@ -268,11 +268,13 @@ static int construct_secondary_tables(un
table_ptrs[nr_tables++] = (unsigned long)madt;
}
- /* HPET. Always included in DSDT, so always include it here too. */
- /* (And it's unconditionally required by Windows SVVP tests.) */
- hpet = construct_hpet();
- if (!hpet) return -1;
- table_ptrs[nr_tables++] = (unsigned long)hpet;
+ /* HPET. */
+ if ( hpet_exists(ACPI_HPET_ADDRESS) )
+ {
+ hpet = construct_hpet();
+ if (!hpet) return -1;
+ table_ptrs[nr_tables++] = (unsigned long)hpet;
+ }
/* WAET. */
waet = construct_waet();
++++++ blktapctrl.service ++++++
[Unit]
Description=blktapctrl daemon
RefuseManualStop=true
ConditionPathExists=/proc/xen
[Service]
Type=forking
Environment=BLKTAPCTRL_ARGS=
EnvironmentFile=-/etc/sysconfig/blktapctrl
ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
ExecStart=/usr/sbin/blktapctrl $BLKTAPCTRL_ARGS
[Install]
WantedBy=multi-user.target
++++++ disable_emulated_device.patch ++++++
--- /var/tmp/diff_new_pack.xDP8sH/_old 2013-08-01 16:10:26.000000000 +0200
+++ /var/tmp/diff_new_pack.xDP8sH/_new 2013-08-01 16:10:26.000000000 +0200
@@ -1,8 +1,6 @@
-Index: xen-4.2.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
-===================================================================
---- xen-4.2.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
-+++ xen-4.2.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
-@@ -424,6 +424,11 @@ static int __devinit platform_pci_init(s
+--- a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
++++ b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
+@@ -419,6 +419,11 @@ static int __devinit platform_pci_init(s
platform_mmio = mmio_addr;
platform_mmiolen = mmio_len;
++++++ magic_ioport_compat.patch ++++++
--- /var/tmp/diff_new_pack.xDP8sH/_old 2013-08-01 16:10:26.000000000 +0200
+++ /var/tmp/diff_new_pack.xDP8sH/_new 2013-08-01 16:10:26.000000000 +0200
@@ -2,11 +2,9 @@
Signed-off-by: K. Y. Srinivasan
-Index: xen-4.2.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
-===================================================================
---- xen-4.2.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
-+++ xen-4.2.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
-@@ -321,7 +321,10 @@ static int check_platform_magic(struct d
+--- a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
++++ b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
+@@ -316,7 +316,10 @@ static int check_platform_magic(struct d
if (magic != XEN_IOPORT_MAGIC_VAL) {
err = "unrecognised magic value";
++++++ qemu-xen-dir-remote.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tools/qemu-xen-dir-remote/hw/xen_disk.c new/tools/qemu-xen-dir-remote/hw/xen_disk.c
--- old/tools/qemu-xen-dir-remote/hw/xen_disk.c 2013-06-28 00:04:09.000000000 +0200
+++ new/tools/qemu-xen-dir-remote/hw/xen_disk.c 2013-07-09 20:58:25.000000000 +0200
@@ -94,6 +94,7 @@
char *type;
char *dev;
char *devtype;
+ bool directiosafe;
const char *fileproto;
const char *filename;
int ring_ref;
@@ -702,6 +703,7 @@
{
struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev);
int info = 0;
+ char *directiosafe = NULL;
/* read xenstore entries */
if (blkdev->params == NULL) {
@@ -734,6 +736,8 @@
if (blkdev->devtype == NULL) {
blkdev->devtype = xenstore_read_be_str(&blkdev->xendev, "device-type");
}
+ directiosafe = xenstore_read_be_str(&blkdev->xendev, "direct-io-safe");
+ blkdev->directiosafe = (directiosafe && atoi(directiosafe));
/* do we have all we need? */
if (blkdev->params == NULL ||
@@ -761,6 +765,8 @@
xenstore_write_be_int(&blkdev->xendev, "feature-flush-cache", 1);
xenstore_write_be_int(&blkdev->xendev, "feature-persistent", 1);
xenstore_write_be_int(&blkdev->xendev, "info", info);
+
+ g_free(directiosafe);
return 0;
out_error:
@@ -774,6 +780,8 @@
blkdev->dev = NULL;
g_free(blkdev->devtype);
blkdev->devtype = NULL;
+ g_free(directiosafe);
+ blkdev->directiosafe = false;
return -1;
}
@@ -783,7 +791,11 @@
int pers, index, qflags;
/* read-only ? */
- qflags = BDRV_O_CACHE_WB | BDRV_O_NATIVE_AIO;
+ if (blkdev->directiosafe) {
+ qflags = BDRV_O_NOCACHE | BDRV_O_NATIVE_AIO;
+ } else {
+ qflags = BDRV_O_CACHE_WB;
+ }
if (strcmp(blkdev->mode, "w") == 0) {
qflags |= BDRV_O_RDWR;
}
++++++ qemu-xen-traditional-dir-remote.tar.bz2 ++++++
++++++ seabios-dir-remote.tar.bz2 ++++++
++++++ x86-cpufreq-report.patch ++++++
--- /var/tmp/diff_new_pack.xDP8sH/_old 2013-08-01 16:10:33.000000000 +0200
+++ /var/tmp/diff_new_pack.xDP8sH/_new 2013-08-01 16:10:33.000000000 +0200
@@ -1,7 +1,5 @@
-Index: xen-4.3.0-testing/xen/arch/x86/platform_hypercall.c
-===================================================================
---- xen-4.3.0-testing.orig/xen/arch/x86/platform_hypercall.c
-+++ xen-4.3.0-testing/xen/arch/x86/platform_hypercall.c
+--- a/xen/arch/x86/platform_hypercall.c
++++ b/xen/arch/x86/platform_hypercall.c
@@ -25,7 +25,7 @@
#include
#include
@@ -45,7 +43,7 @@
+ op->u.get_cpu_freq.freq = 0;
+ break;
+ }
-+ if ( copy_field_to_guest(u_xenpf_op, op, u.get_cpu_freq.freq) )
++ if ( __copy_field_to_guest(u_xenpf_op, op, u.get_cpu_freq.freq) )
+ ret = -EFAULT;
+ }
+ break;
@@ -53,10 +51,8 @@
default:
ret = -ENOSYS;
break;
-Index: xen-4.3.0-testing/xen/include/public/platform.h
-===================================================================
---- xen-4.3.0-testing.orig/xen/include/public/platform.h
-+++ xen-4.3.0-testing/xen/include/public/platform.h
+--- a/xen/include/public/platform.h
++++ b/xen/include/public/platform.h
@@ -527,6 +527,16 @@ struct xenpf_core_parking {
typedef struct xenpf_core_parking xenpf_core_parking_t;
DEFINE_XEN_GUEST_HANDLE(xenpf_core_parking_t);
++++++ xen-4.3.0-testing-src.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/ChangeLog new/xen-4.3.0-testing/ChangeLog
--- old/xen-4.3.0-testing/ChangeLog 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/ChangeLog 2013-07-09 20:57:12.000000000 +0200
@@ -1,5 +1,7 @@
-commit 442ba0b2f6c16945ad496b31bf18a9e85d199d18
-Author: Ian Jackson
-Date: Thu Jun 27 11:08:07 2013 +0100
+commit f8cc9c2b713b1739b1d3d324716547fa639dce86
+Author: George Dunlap
+Date: Tue Jul 9 11:46:56 2013 +0100
- QEMU_UPSTREAM_REVISION update
+ release: Remove -rc from README ASCII art
+
+ Signed-off-by: George Dunlap
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/Config.mk new/xen-4.3.0-testing/Config.mk
--- old/xen-4.3.0-testing/Config.mk 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/Config.mk 2013-07-09 20:57:12.000000000 +0200
@@ -10,7 +10,7 @@
-include $(XEN_ROOT)/.config
# A debug build of Xen and tools?
-debug ?= y
+debug ?= n
debug_symbols ?= $(debug)
# Test coverage support
@@ -197,22 +197,22 @@
# near the place in the Xen Makefiles where the file is used.
ifeq ($(GIT_HTTP),y)
-QEMU_REMOTE=http://xenbits.xen.org/git-http/qemu-xen-unstable.git
+QEMU_REMOTE=http://xenbits.xen.org/git-http/qemu-xen-4.3-testing.git
else
-QEMU_REMOTE=git://xenbits.xen.org/qemu-xen-unstable.git
+QEMU_REMOTE=git://xenbits.xen.org/qemu-xen-4.3-testing.git
endif
ifeq ($(GIT_HTTP),y)
OVMF_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/ovmf.git
-QEMU_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/qemu-upstream-unstable.git
+QEMU_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/qemu-upstream-4.3-testing.git
SEABIOS_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/seabios.git
else
OVMF_UPSTREAM_URL ?= git://xenbits.xen.org/ovmf.git
-QEMU_UPSTREAM_URL ?= git://xenbits.xen.org/qemu-upstream-unstable.git
+QEMU_UPSTREAM_URL ?= git://xenbits.xen.org/qemu-upstream-4.3-testing.git
SEABIOS_UPSTREAM_URL ?= git://xenbits.xen.org/seabios.git
endif
OVMF_UPSTREAM_REVISION ?= b0855f925c6e2e0b21fbb03fab4b5fb5b6876871
-QEMU_UPSTREAM_REVISION ?= 1c514a7734b7f98625a0d18d5e8ee7581f26e50c
+QEMU_UPSTREAM_REVISION ?= qemu-xen-4.3.0
SEABIOS_UPSTREAM_TAG ?= 3a28511b46f0c2af5fae1b6ed2b0c19d7913cee3
# Wed Jun 26 16:30:45 2013 +0100
# xen: Don't perform SMP setup.
@@ -224,7 +224,7 @@
# CONFIG_QEMU ?= `pwd`/$(XEN_ROOT)/../qemu-xen.git
CONFIG_QEMU ?= $(QEMU_REMOTE)
-QEMU_TAG ?= 13c144d96e825f145e5b37f97e5f6210c2c645e9
+QEMU_TAG ?= xen-4.3.0
# Mon Jun 17 17:39:51 2013 +0100
# qemu-xen-traditional: disable docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/README new/xen-4.3.0-testing/README
--- old/xen-4.3.0-testing/README 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/README 2013-07-09 20:57:12.000000000 +0200
@@ -1,9 +1,9 @@
#################################
__ __ _ _ _____
-\ \/ /___ _ __ | || | |___ / _ __ ___
- \ // _ \ '_ \ | || |_ |_ \ _____| '__/ __|
- / \ __/ | | | |__ _| ___) |_____| | | (__
-/_/\_\___|_| |_| |_|(_)____/ |_| \___|
+\ \/ /___ _ __ | || | |___ /
+ \ // _ \ '_ \ | || |_ |_ \
+ / \ __/ | | | |__ _| ___) |
+/_/\_\___|_| |_| |_|(_)____/
#################################
@@ -19,6 +19,16 @@
GPL. Since its initial public release, Xen has grown a large
development community, spearheaded by xen.org (http://www.xen.org).
+The 4.3 release offers a number of improvements, including NUMA
+scheduling affinity, openvswitch integration, and defaulting to
+qemu-xen rather than qemu-traditional for non-stubdom guests.
+(qemu-xen is kept very close to the upstream project.) We also have a
+number of updates to vTPM, and improvements to XSM and Flask to allow
+greater disaggregation. Additionally, 4.3 contains a basic version of
+Xen for the new ARM server architecture, both 32- and 64-bit. And as
+always, there are a number of performance, stability, and security
+improvements under-the hood.
+
This file contains some quick-start instructions to install Xen on
your system. For more information see http:/www.xen.org/ and
http://wiki.xen.org/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/docs/Makefile new/xen-4.3.0-testing/docs/Makefile
--- old/xen-4.3.0-testing/docs/Makefile 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/docs/Makefile 2013-07-09 20:57:12.000000000 +0200
@@ -2,7 +2,7 @@
include $(XEN_ROOT)/Config.mk
-include $(XEN_ROOT)/config/Docs.mk
-VERSION = xen-unstable
+VERSION := $(shell $(MAKE) -C $(XEN_ROOT)/xen --no-print-directory xenversion)
DOC_MAN5SRC := $(wildcard man/*.pod.5)
DOC_MAN1SRC := $(wildcard man/*.pod.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/docs/man/xl.pod.1 new/xen-4.3.0-testing/docs/man/xl.pod.1
--- old/xen-4.3.0-testing/docs/man/xl.pod.1 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/docs/man/xl.pod.1 2013-07-09 20:57:12.000000000 +0200
@@ -910,8 +910,6 @@
=item B<-p [pool] -d>... : Illegal
-=item
-
=back
=item B<sched-credit2> [I<OPTIONS>]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/tools/hotplug/Linux/init.d/xendomains new/xen-4.3.0-testing/tools/hotplug/Linux/init.d/xendomains
--- old/xen-4.3.0-testing/tools/hotplug/Linux/init.d/xendomains 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/tools/hotplug/Linux/init.d/xendomains 2013-07-09 20:57:12.000000000 +0200
@@ -206,7 +206,7 @@
done
}
-LIST_GREP='((domain\|(domid\|(name\|^{$\|"name":\|"domid":'
+LIST_GREP='(domain\|(domid\|(name\|^ {$\|"name":\|"domid":'
parseln()
{
if [[ "$1" =~ '(domain' ]] || [[ "$1" = "{" ]]; then
@@ -237,7 +237,7 @@
RC=0
;;
esac
- done < <($CMD list -l | grep $LIST_GREP)
+ done < <($CMD list -l | grep "$LIST_GREP")
return $RC
}
@@ -319,7 +319,7 @@
if test "$state" != "-b---d" -a "$state" != "-----d"; then
return 1;
fi
- done < <($CMD list -l | grep $LIST_GREP)
+ done < <($CMD list -l | grep "$LIST_GREP")
return 0
}
@@ -450,7 +450,7 @@
fi
kill $WDOG_PID >/dev/null 2>&1
fi
- done < <($CMD list -l | grep $LIST_GREP)
+ done < <($CMD list -l | grep "$LIST_GREP")
# NB. this shuts down ALL Xen domains (politely), not just the ones in
# AUTODIR/*
@@ -487,7 +487,7 @@
return 0
;;
esac
- done < <($CMD list -l | grep $LIST_GREP)
+ done < <($CMD list -l | grep "$LIST_GREP")
return 1
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/tools/libxc/xenctrl.h new/xen-4.3.0-testing/tools/libxc/xenctrl.h
--- old/xen-4.3.0-testing/tools/libxc/xenctrl.h 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/tools/libxc/xenctrl.h 2013-07-09 20:57:12.000000000 +0200
@@ -966,8 +966,8 @@
int xc_evtchn_status(xc_interface *xch, xc_evtchn_status_t *status);
/*
- * Return a handle to the event channel driver, or -1 on failure, in which case
- * errno will be set appropriately.
+ * Return a handle to the event channel driver, or NULL on failure, in
+ * which case errno will be set appropriately.
*
* Note:
* After fork a child process must not use any opened xc evtchn
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/tools/libxl/libxl_pci.c new/xen-4.3.0-testing/tools/libxl/libxl_pci.c
--- old/xen-4.3.0-testing/tools/libxl/libxl_pci.c 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/tools/libxl/libxl_pci.c 2013-07-09 20:57:12.000000000 +0200
@@ -1036,6 +1036,18 @@
int num_assigned, i, rc;
int stubdomid = 0;
+ if (libxl__domain_type(gc, domid) == LIBXL_DOMAIN_TYPE_HVM) {
+ rc = xc_test_assign_device(ctx->xch, domid, pcidev_encode_bdf(pcidev));
+ if (rc) {
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
+ "PCI device %04x:%02x:%02x.%u %s?",
+ pcidev->domain, pcidev->bus, pcidev->dev, pcidev->func,
+ errno == ENOSYS ? "cannot be assigned - no IOMMU"
+ : "already assigned to a different guest");
+ goto out;
+ }
+ }
+
rc = libxl__device_pci_setdefault(gc, pcidev);
if (rc) goto out;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/tools/misc/xencov.c new/xen-4.3.0-testing/tools/misc/xencov.c
--- old/xen-4.3.0-testing/tools/misc/xencov.c 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/tools/misc/xencov.c 2013-07-09 20:57:12.000000000 +0200
@@ -24,7 +24,6 @@
#include
#include
#include
-#include
static xc_interface *gcov_xch = NULL;
@@ -35,16 +34,17 @@
err(1, "opening interface");
}
-int gcov_get_info(int op, struct xen_sysctl *sys, void *ptr)
+int gcov_get_info(int op, struct xen_sysctl *sys, struct xc_hypercall_buffer *ptr)
{
struct xen_sysctl_coverage_op *cov;
+ DECLARE_HYPERCALL_BUFFER_ARGUMENT(ptr);
memset(sys, 0, sizeof(*sys));
sys->cmd = XEN_SYSCTL_coverage_op;
cov = &sys->u.coverage_op;
cov->cmd = op;
- cov->u.raw_info.p = ptr;
+ set_xen_guest_handle(cov->u.raw_info, ptr);
return xc_sysctl(gcov_xch, sys);
}
@@ -52,10 +52,8 @@
static void gcov_read(const char *fn, int reset)
{
struct xen_sysctl sys;
- unsigned page_size = sysconf(_SC_PAGESIZE);
uint32_t total_len;
- uint8_t *p;
- size_t size;
+ DECLARE_HYPERCALL_BUFFER(uint8_t, p);
FILE *f;
int op = reset ? XEN_SYSCTL_COVERAGE_read_and_reset :
XEN_SYSCTL_COVERAGE_read;
@@ -71,16 +69,13 @@
errx(1, "coverage size too big %u bytes\n", total_len);
/* allocate */
- size = total_len + page_size;
- size -= (size % page_size);
- p = mmap(0, size, PROT_WRITE|PROT_READ,
- MAP_PRIVATE|MAP_ANON|MAP_LOCKED, -1, 0);
- if ( p == (uint8_t *) -1 )
- err(1, "mapping memory for coverage");
+ p = xc_hypercall_buffer_alloc(gcov_xch, p, total_len);
+ if ( p == NULL )
+ err(1, "allocating memory for coverage");
/* get data */
memset(p, 0, total_len);
- if ( gcov_get_info(op, &sys, p) < 0 )
+ if ( gcov_get_info(op, &sys, HYPERCALL_BUFFER(p)) < 0 )
err(1, "getting coverage information");
/* write to a file */
@@ -94,6 +89,7 @@
err(1, "writing coverage to file");
if (f != stdout)
fclose(f);
+ xc_hypercall_buffer_free(gcov_xch, p);
}
static void gcov_reset(void)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/tools/pygrub/examples/fedora-19.grub2 new/xen-4.3.0-testing/tools/pygrub/examples/fedora-19.grub2
--- old/xen-4.3.0-testing/tools/pygrub/examples/fedora-19.grub2 1970-01-01 01:00:00.000000000 +0100
+++ new/xen-4.3.0-testing/tools/pygrub/examples/fedora-19.grub2 2013-07-09 20:57:12.000000000 +0200
@@ -0,0 +1,117 @@
+#
+# DO NOT EDIT THIS FILE
+#
+# It is automatically generated by grub2-mkconfig using templates
+# from /etc/grub.d and settings from /etc/default/grub
+#
+
+### BEGIN /etc/grub.d/00_header ###
+if [ -s $prefix/grubenv ]; then
+ load_env
+fi
+if [ "${next_entry}" ] ; then
+ set default="${next_entry}"
+ set next_entry=
+ save_env next_entry
+ set boot_once=true
+else
+ set default="${saved_entry}"
+fi
+
+if [ x"${feature_menuentry_id}" = xy ]; then
+ menuentry_id_option="--id"
+else
+ menuentry_id_option=""
+fi
+
+export menuentry_id_option
+
+if [ "${prev_saved_entry}" ]; then
+ set saved_entry="${prev_saved_entry}"
+ save_env saved_entry
+ set prev_saved_entry=
+ save_env prev_saved_entry
+ set boot_once=true
+fi
+
+function savedefault {
+ if [ -z "${boot_once}" ]; then
+ saved_entry="${chosen}"
+ save_env saved_entry
+ fi
+}
+
+function load_video {
+ if [ x$feature_all_video_module = xy ]; then
+ insmod all_video
+ else
+ insmod efi_gop
+ insmod efi_uga
+ insmod ieee1275_fb
+ insmod vbe
+ insmod vga
+ insmod video_bochs
+ insmod video_cirrus
+ fi
+}
+
+terminal_output console
+set timeout=5
+### END /etc/grub.d/00_header ###
+
+### BEGIN /etc/grub.d/10_linux ###
+menuentry 'Fedora, with Linux 3.9.6-301.fc19.i686.PAE' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.9.6-301.fc19.i686.PAE-advanced-738519ba-06da-4402-9b68-a1c1efada512' {
+ load_video
+ set gfxpayload=keep
+ insmod gzio
+ insmod part_msdos
+ insmod ext2
+ set root='hd0,msdos1'
+ if [ x$feature_platform_search_hint = xy ]; then
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 5001334f-de37-4b0b-bd2b-c1cea036f293
+ else
+ search --no-floppy --fs-uuid --set=root 5001334f-de37-4b0b-bd2b-c1cea036f293
+ fi
+ linux /vmlinuz-3.9.6-301.fc19.i686.PAE root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/swap rd.md=0 rd.dm=0 vconsole.keymap=us rd.luks=0 vconsole.font=latarcyrheb-sun16 rd.lvm.lv=fedora/root
+ initrd /initramfs-3.9.6-301.fc19.i686.PAE.img
+}
+menuentry 'Fedora, with Linux 0-rescue-8d62a0261d8147dc84eb89292ebc1666' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-0-rescue-8d62a0261d8147dc84eb89292ebc1666-advanced-738519ba-06da-4402-9b68-a1c1efada512' {
+ load_video
+ insmod gzio
+ insmod part_msdos
+ insmod ext2
+ set root='hd0,msdos1'
+ if [ x$feature_platform_search_hint = xy ]; then
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 5001334f-de37-4b0b-bd2b-c1cea036f293
+ else
+ search --no-floppy --fs-uuid --set=root 5001334f-de37-4b0b-bd2b-c1cea036f293
+ fi
+ linux /vmlinuz-0-rescue-8d62a0261d8147dc84eb89292ebc1666 root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/swap rd.md=0 rd.dm=0 vconsole.keymap=us rd.luks=0 vconsole.font=latarcyrheb-sun16 rd.lvm.lv=fedora/root
+ initrd /initramfs-0-rescue-8d62a0261d8147dc84eb89292ebc1666.img
+}
+
+### END /etc/grub.d/10_linux ###
+
+### BEGIN /etc/grub.d/20_linux_xen ###
+
+### END /etc/grub.d/20_linux_xen ###
+
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
+### END /etc/grub.d/20_ppc_terminfo ###
+
+### BEGIN /etc/grub.d/30_os-prober ###
+### END /etc/grub.d/30_os-prober ###
+
+### BEGIN /etc/grub.d/40_custom ###
+# This file provides an easy way to add custom menu entries. Simply type the
+# menu entries you want to add after this comment. Be careful not to change
+# the 'exec tail' line above.
+### END /etc/grub.d/40_custom ###
+
+### BEGIN /etc/grub.d/41_custom ###
+if [ -f ${config_directory}/custom.cfg ]; then
+ source ${config_directory}/custom.cfg
+elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
+ source $prefix/custom.cfg;
+fi
+### END /etc/grub.d/41_custom ###
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/tools/pygrub/src/GrubConf.py new/xen-4.3.0-testing/tools/pygrub/src/GrubConf.py
--- old/xen-4.3.0-testing/tools/pygrub/src/GrubConf.py 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/tools/pygrub/src/GrubConf.py 2013-07-09 20:57:12.000000000 +0200
@@ -427,6 +427,8 @@
if self.commands[com] is not None:
if arg.strip() == "${saved_entry}":
arg = "0"
+ elif arg.strip() == "${next_entry}":
+ arg = "0"
setattr(self, self.commands[com], arg.strip())
else:
logging.info("Ignored directive %s" %(com,))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/xen/Makefile new/xen-4.3.0-testing/xen/Makefile
--- old/xen-4.3.0-testing/xen/Makefile 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/xen/Makefile 2013-07-09 20:57:12.000000000 +0200
@@ -2,7 +2,7 @@
# All other places this is stored (eg. compile.h) should be autogenerated.
export XEN_VERSION = 4
export XEN_SUBVERSION = 3
-export XEN_EXTRAVERSION ?= -unstable$(XEN_VENDORVERSION)
+export XEN_EXTRAVERSION ?= .0$(XEN_VENDORVERSION)
export XEN_FULLVERSION = $(XEN_VERSION).$(XEN_SUBVERSION)$(XEN_EXTRAVERSION)
-include xen-version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/xen/arch/arm/domain_build.c new/xen-4.3.0-testing/xen/arch/arm/domain_build.c
--- old/xen-4.3.0-testing/xen/arch/arm/domain_build.c 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/xen/arch/arm/domain_build.c 2013-07-09 20:57:12.000000000 +0200
@@ -477,6 +477,7 @@
void *fdt;
int new_size;
int ret;
+ paddr_t end;
kinfo->unassigned_mem = dom0_mem;
@@ -502,17 +503,26 @@
goto err;
/*
- * Put the device tree at the beginning of the first bank. It
- * must be below 4 GiB.
+ * DTB must be load below 4GiB and far enough from linux (Linux uses
+ * the space after it to decompress)
+ * Load the DTB at the end of the first bank, while ensuring it is
+ * also below 4G
*/
- kinfo->dtb_paddr = kinfo->mem.bank[0].start + 0x100;
- if ( kinfo->dtb_paddr + fdt_totalsize(kinfo->fdt) > (1ull << 32) )
+ end = kinfo->mem.bank[0].start + kinfo->mem.bank[0].size;
+ end = MIN(1ull << 32, end);
+ kinfo->dtb_paddr = end - fdt_totalsize(kinfo->fdt);
+ /* Align the address to 2Mb. Linux only requires 4 byte alignment */
+ kinfo->dtb_paddr &= ~((2 << 20) - 1);
+
+ if ( fdt_totalsize(kinfo->fdt) > end )
{
- printk("Not enough memory below 4 GiB for the device tree.");
+ printk(XENLOG_ERR "Not enough memory in the first bank for "
+ "the device tree.");
ret = -FDT_ERR_XEN(EINVAL);
goto err;
}
+
return 0;
err:
@@ -525,6 +535,9 @@
{
void * __user dtb_virt = (void * __user)(register_t)kinfo->dtb_paddr;
+ printk("Loading dom0 DTB to 0x%"PRIpaddr"-0x%"PRIpaddr"\n",
+ kinfo->dtb_paddr, kinfo->dtb_paddr + fdt_totalsize(kinfo->fdt));
+
raw_copy_to_guest(dtb_virt, kinfo->fdt, fdt_totalsize(kinfo->fdt));
xfree(kinfo->fdt);
}
@@ -559,10 +572,12 @@
if ( rc < 0 )
return rc;
+ if ( kinfo.check_overlap )
+ kinfo.check_overlap(&kinfo);
+
/* The following loads use the domain's p2m */
p2m_load_VTTBR(d);
- kinfo.dtb_paddr = kinfo.zimage.load_addr + kinfo.zimage.len;
kernel_load(&kinfo);
dtb_load(&kinfo);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/xen/arch/arm/gic.c new/xen-4.3.0-testing/xen/arch/arm/gic.c
--- old/xen-4.3.0-testing/xen/arch/arm/gic.c 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/xen/arch/arm/gic.c 2013-07-09 20:57:12.000000000 +0200
@@ -117,12 +117,10 @@
static void gic_irq_shutdown(struct irq_desc *desc)
{
- uint32_t enabler;
int irq = desc->irq;
/* Disable routing */
- enabler = GICD[GICD_ICENABLER + irq / 32];
- GICD[GICD_ICENABLER + irq / 32] = enabler | (1u << (irq % 32));
+ GICD[GICD_ICENABLER + irq / 32] = (1u << (irq % 32));
}
static void gic_irq_enable(struct irq_desc *desc)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/xen/arch/arm/kernel.c new/xen-4.3.0-testing/xen/arch/arm/kernel.c
--- old/xen-4.3.0-testing/xen/arch/arm/kernel.c 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/xen/arch/arm/kernel.c 2013-07-09 20:57:12.000000000 +0200
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
#include "kernel.h"
@@ -64,6 +65,21 @@
clear_fixmap(FIXMAP_MISC);
}
+static void kernel_zimage_check_overlap(struct kernel_info *info)
+{
+ paddr_t zimage_start = info->zimage.load_addr;
+ paddr_t zimage_end = info->zimage.load_addr + info->zimage.len;
+ paddr_t dtb_start = info->dtb_paddr;
+ paddr_t dtb_end = info->dtb_paddr + fdt_totalsize(info->fdt);
+
+ if ( (dtb_start > zimage_end) || (dtb_end < zimage_start) )
+ return;
+
+ panic(XENLOG_ERR "The kernel(0x%"PRIpaddr"-0x%"PRIpaddr
+ ") is overlapping the DTB(0x%"PRIpaddr"-0x%"PRIpaddr")\n",
+ zimage_start, zimage_end, dtb_start, dtb_end);
+}
+
static void kernel_zimage_load(struct kernel_info *info)
{
paddr_t load_addr = info->zimage.load_addr;
@@ -152,6 +168,7 @@
info->entry = info->zimage.load_addr;
info->load = kernel_zimage_load;
+ info->check_overlap = kernel_zimage_check_overlap;
return 0;
}
@@ -197,6 +214,7 @@
*/
info->entry = info->elf.parms.virt_entry;
info->load = kernel_elf_load;
+ info->check_overlap = NULL;
if ( elf_check_broken(&info->elf.elf) )
printk("Xen: warning: ELF kernel broken: %s\n",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/xen/arch/arm/kernel.h new/xen-4.3.0-testing/xen/arch/arm/kernel.h
--- old/xen-4.3.0-testing/xen/arch/arm/kernel.h 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/xen/arch/arm/kernel.h 2013-07-09 20:57:12.000000000 +0200
@@ -38,6 +38,8 @@
};
void (*load)(struct kernel_info *info);
+ /* Callback to check overlap between the kernel and the device tree */
+ void (*check_overlap)(struct kernel_info *kinfo);
int load_attr;
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/xen/arch/arm/vgic.c new/xen-4.3.0-testing/xen/arch/arm/vgic.c
--- old/xen-4.3.0-testing/xen/arch/arm/vgic.c 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/xen/arch/arm/vgic.c 2013-07-09 20:57:12.000000000 +0200
@@ -88,7 +88,7 @@
d->arch.vgic.nr_lines = 0; /* We don't need SPIs for the guest */
d->arch.vgic.shared_irqs =
- xmalloc_array(struct vgic_irq_rank, DOMAIN_NR_RANKS(d));
+ xzalloc_array(struct vgic_irq_rank, DOMAIN_NR_RANKS(d));
d->arch.vgic.pending_irqs =
xzalloc_array(struct pending_irq, d->arch.vgic.nr_lines);
for (i=0; i<d->arch.vgic.nr_lines; i++)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/xen/arch/x86/hvm/vmx/vvmx.c new/xen-4.3.0-testing/xen/arch/x86/hvm/vmx/vvmx.c
--- old/xen-4.3.0-testing/xen/arch/x86/hvm/vmx/vvmx.c 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/xen/arch/x86/hvm/vmx/vvmx.c 2013-07-09 20:57:12.000000000 +0200
@@ -864,6 +864,13 @@
GUEST_SYSENTER_EIP,
};
+static const u16 gpdptr_fields[] = {
+ GUEST_PDPTR0,
+ GUEST_PDPTR1,
+ GUEST_PDPTR2,
+ GUEST_PDPTR3,
+};
+
/*
* Context: shadow -> virtual VMCS
*/
@@ -1053,18 +1060,6 @@
(__get_vvmcs(vvmcs, CR4_READ_SHADOW) & cr_gh_mask);
__vmwrite(CR4_READ_SHADOW, cr_read_shadow);
- if ( nvmx_ept_enabled(v) && hvm_pae_enabled(v) &&
- (v->arch.hvm_vcpu.guest_efer & EFER_LMA) )
- {
- static const u16 gpdptr_fields[] = {
- GUEST_PDPTR0,
- GUEST_PDPTR1,
- GUEST_PDPTR2,
- GUEST_PDPTR3,
- };
- vvmcs_to_shadow_bulk(v, ARRAY_SIZE(gpdptr_fields), gpdptr_fields);
- }
-
/* TODO: CR3 target control */
}
@@ -1159,6 +1154,10 @@
if ( lm_l1 != lm_l2 )
paging_update_paging_modes(v);
+ if ( nvmx_ept_enabled(v) && hvm_pae_enabled(v) &&
+ !(v->arch.hvm_vcpu.guest_efer & EFER_LMA) )
+ vvmcs_to_shadow_bulk(v, ARRAY_SIZE(gpdptr_fields), gpdptr_fields);
+
regs->eip = __get_vvmcs(vvmcs, GUEST_RIP);
regs->esp = __get_vvmcs(vvmcs, GUEST_RSP);
regs->eflags = __get_vvmcs(vvmcs, GUEST_RFLAGS);
@@ -1294,6 +1293,10 @@
sync_vvmcs_guest_state(v, regs);
sync_exception_state(v);
+ if ( nvmx_ept_enabled(v) && hvm_pae_enabled(v) &&
+ !(v->arch.hvm_vcpu.guest_efer & EFER_LMA) )
+ shadow_to_vvmcs_bulk(v, ARRAY_SIZE(gpdptr_fields), gpdptr_fields);
+
vmx_vmcs_switch(v->arch.hvm_vmx.vmcs, nvcpu->nv_n1vmcx);
nestedhvm_vcpu_exit_guestmode(v);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xen-4.3.0-testing/xen/drivers/passthrough/amd/pci_amd_iommu.c new/xen-4.3.0-testing/xen/drivers/passthrough/amd/pci_amd_iommu.c
--- old/xen-4.3.0-testing/xen/drivers/passthrough/amd/pci_amd_iommu.c 2013-06-27 23:40:26.000000000 +0200
+++ new/xen-4.3.0-testing/xen/drivers/passthrough/amd/pci_amd_iommu.c 2013-07-09 20:57:12.000000000 +0200
@@ -223,8 +223,19 @@
{
if ( amd_iommu_perdev_intremap )
{
- printk("AMD-Vi: Enabling per-device vector maps\n");
- opt_irq_vector_map = OPT_IRQ_VECTOR_MAP_PERDEV;
+ /* Per-device vector map logic is broken for devices with multiple
+ * MSI-X interrupts (and would also be for multiple MSI, if Xen
+ * supported it).
+ *
+ * Until this is fixed, use global vector tables as far as the irq
+ * logic is concerned to avoid the buggy behaviour of per-device
+ * maps in map_domain_pirq(), and use per-device tables as far as
+ * intremap code is concerned to avoid the security issue.
+ */
+ printk(XENLOG_WARNING "AMD-Vi: per-device vector map logic is broken. "
+ "Using per-device-global maps instead until a fix is found.\n");
+
+ opt_irq_vector_map = OPT_IRQ_VECTOR_MAP_GLOBAL;
}
else
{
@@ -235,6 +246,10 @@
else
{
printk("AMD-Vi: Not overriding irq_vector_map setting\n");
+
+ if ( opt_irq_vector_map != OPT_IRQ_VECTOR_MAP_GLOBAL )
+ printk(XENLOG_WARNING "AMD-Vi: per-device vector map logic is broken. "
+ "Use irq_vector_map=global to work around.\n");
}
if ( !amd_iommu_perdev_intremap )
printk(XENLOG_WARNING "AMD-Vi: Using global interrupt remap table is not recommended (see XSA-36)!\n");
++++++ xen-watchdog.service ++++++
[Unit]
Description=Xen-watchdog - run xen watchdog daemon
After=xend.service
ConditionPathExists=/proc/xen
[Service]
Type=forking
ExecStart=/usr/sbin/xenwatchdogd 30 15
KillSignal=USR1
[Install]
WantedBy=multi-user.target
++++++ xen-xmexample.patch ++++++
--- /var/tmp/diff_new_pack.xDP8sH/_old 2013-08-01 16:10:36.000000000 +0200
+++ /var/tmp/diff_new_pack.xDP8sH/_new 2013-08-01 16:10:36.000000000 +0200
@@ -351,12 +351,3 @@
The basic structure of every B<xl> command is almost always:
-@@ -910,8 +911,6 @@ The following is the effect of combining
-
- =item B<-p [pool] -d>... : Illegal
-
--=item
--
- =back
-
- =item B<sched-credit2> [I<OPTIONS>]
++++++ xen.sles11sp1.fate311487.xen_platform_pci.dmistring.patch ++++++
--- /var/tmp/diff_new_pack.xDP8sH/_old 2013-08-01 16:10:36.000000000 +0200
+++ /var/tmp/diff_new_pack.xDP8sH/_new 2013-08-01 16:10:36.000000000 +0200
@@ -9,10 +9,8 @@
unmodified_drivers/linux-2.6/platform-pci/platform-pci.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
-Index: xen-4.2.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
-===================================================================
---- xen-4.2.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
-+++ xen-4.2.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
+--- a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
++++ b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
@@ -27,6 +27,7 @@
#include
#include
@@ -21,7 +19,7 @@
#include
#include
#include
-@@ -477,6 +478,18 @@ static struct pci_device_id platform_pci
+@@ -472,6 +473,18 @@ static struct pci_device_id platform_pci
MODULE_DEVICE_TABLE(pci, platform_pci_tbl);
++++++ xencommons-sysconfig.patch ++++++
Index: xen-4.2.0-testing/tools/hotplug/Linux/init.d/sysconfig.xencommons
===================================================================
--- xen-4.2.0-testing.orig/tools/hotplug/Linux/init.d/sysconfig.xencommons
+++ xen-4.2.0-testing/tools/hotplug/Linux/init.d/sysconfig.xencommons
@@ -1,14 +1,30 @@
+## Path: System/Virtualization
+## Type: string
+## Default: "none"
+#
# Log xenconsoled messages (cf xl dmesg)
#XENCONSOLED_TRACE=[none|guest|hv|all]
+## Type: string
+## Default: xenstored
+#
# Select xenstored implementation
#XENSTORED=[oxenstored|xenstored]
+## Type: string
+## Default: Not defined, tracing off
+#
# Log xenstored messages
#XENSTORED_TRACE=[yes|on|1]
+## Type: string
+## Default: "/var/lib/xenstored"
+#
# Running xenstored on XENSTORED_ROOTDIR
#XENSTORED_ROOTDIR=/var/lib/xenstored
+## Type: string
+## Default: Not defined, xenbackendd debug mode off
+#
# Running xenbackendd in debug mode
#XENBACKENDD_DEBUG=[yes|on|1]
++++++ xencommons.service ++++++
[Unit]
Description=Xencommons - Script to start and stop xenstored and xenconsoled
ConditionPathExists=/proc/xen
[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
ExecStart=-/etc/init.d/xencommons start
ExecStop=/etc/init.d/xencommons stop
[Install]
WantedBy=multi-user.target
++++++ xenconsoled.service ++++++
[Unit]
Description=Xenconsoled - handles logging from guest consoles and hypervisor
After=xenstored.service
ConditionPathExists=/proc/xen
[Service]
Type=simple
Environment=XENCONSOLED_ARGS=
Environment=XENCONSOLED_LOG=none
Environment=XENCONSOLED_LOG_DIR=/var/log/xen/console
EnvironmentFile=-/etc/sysconfig/xenconsoled
PIDFile=/var/run/xenconsoled.pid
ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
ExecStart=/usr/sbin/xenconsoled --log=${XENCONSOLED_LOG} --log-dir=${XENCONSOLED_LOG_DIR} $XENCONSOLED_ARGS
[Install]
WantedBy=multi-user.target
++++++ xend.service ++++++
[Unit]
Description=Xend - Starts and stops the Xen management daemon
Before=libvirtd.service libvirt-guests.service
ConditionPathExists=/proc/xen
[Service]
Type=forking
PIDFile=/var/run/xend.pid
Environment=HOME=/root
ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
ExecStart=/usr/sbin/xend
[Install]
WantedBy=multi-user.target
++++++ xendomains.service ++++++
[Unit]
Description=Xendomains - start and stop Xen VMs on boot and shutdown
Requires=xenstored.service xenconsoled.service
After=xenstored.service xenconsoled.service
ConditionPathExists=/proc/xen
[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
ExecStart=-/etc/init.d/xendomains start
ExecStop=/etc/init.d/xendomains stop
[Install]
WantedBy=multi-user.target
++++++ xenstored.service ++++++
[Unit]
Description=Xenstored - daemon managing xenstore file system
Before=libvirtd.service libvirt-guests.service
RefuseManualStop=true
ConditionPathExists=/proc/xen
[Service]
Type=forking
Environment=XENSTORED_ARGS=
EnvironmentFile=-/etc/sysconfig/xenstored
PIDFile=/var/run/xenstored.pid
ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
ExecStart=/usr/sbin/xenstored --pid-file /var/run/xenstored.pid $XENSTORED_ARGS
[Install]
WantedBy=multi-user.target
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org