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 - [email protected] + +- Spec file cleanups + xen.spec +- Renamed xend-sysconfig.patch to xencommons-sysconfig.patch + +------------------------------------------------------------------- +Mon Jul 29 16:46:33 MDT 2013 - [email protected] + +- 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 - [email protected] + +- 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 - [email protected] + +- Dropped deprecated or unnecessary patches + pvdrv-import-shared-info.patch + minios-fixups.patch + +------------------------------------------------------------------- +Tue Jul 9 13:06:27 MDT 2013 - [email protected] + +- Update to Xen 4.3.0 FCS + +------------------------------------------------------------------- +Fri Jul 5 14:31:51 UTC 2013 - [email protected] + +- 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 <[email protected]> # Committer Jan Beulich <[email protected]> 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 <[email protected]> Acked-by: Keir Fraser <[email protected]> --- 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 <[email protected]> # Committer Jan Beulich <[email protected]> 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 <[email protected]> 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 <[email protected]> Reviewed-by: Tim Deegan <[email protected]> Acked-by: Suravee Suthikulpanit <[email protected]> --- 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 <[email protected]> # Committer Jan Beulich <[email protected]> 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 <[email protected]> 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 <[email protected]> Reviewed-by: Tim Deegan <[email protected]> Acked-by: Suravee Suthikulpanit <[email protected]> --- 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 <[email protected]> # Committer Jan Beulich <[email protected]> Revert "hvmloader: always include HPET table" This reverts commit e4fd0475a08fda414da27c4e57b568f147cfc07e. Conflicts: tools/firmware/hvmloader/acpi/build.c Signed-off-by: Jan Beulich <[email protected]> Acked-by: Keir Fraser <[email protected]> --- 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 <[email protected]> -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 <xen/irq.h> #include <asm/current.h> @@ -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 <[email protected]> -Date: Thu Jun 27 11:08:07 2013 +0100 +commit f8cc9c2b713b1739b1d3d324716547fa639dce86 +Author: George Dunlap <[email protected]> +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 <[email protected]> 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 <unistd.h> #include <errno.h> #include <err.h> -#include <sys/mman.h> 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 <xen/sched.h> #include <asm/byteorder.h> #include <asm/setup.h> +#include <xen/libfdt/libfdt.h> #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 <linux/pci.h> #include <linux/init.h> @@ -21,7 +19,7 @@ #include <linux/interrupt.h> #include <linux/vmalloc.h> #include <linux/mm.h> -@@ -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: [email protected] For additional commands, e-mail: [email protected]
