# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1181595593 21600
# Node ID 245902ee7ce0c1499c172b3a9240b8e2ede45a5f
# Parent c09686d2bbffa5ec2152f685df0eaa090ddddd83
[IA64] Pull in changes from xen-ia64 tree
Includes changes to old sparse tree and interface changes from
xen-ia64-unstable.hg csets:
15115:24463758319b - 15169:8655f7b7d50c
Signed-off-by: Alex Williamson <alex.williamson@xxxxxx>
---
arch/ia64/kernel/setup.c | 2 -
arch/ia64/xen/hypervisor.c | 4 +-
arch/ia64/xen/xcom_hcall.c | 7 +++
arch/ia64/xen/xcom_mini.c | 16 ++++++++
arch/ia64/xen/xcom_privcmd.c | 49 +++++++++++++++++++++++++++
arch/ia64/xen/xen_dma.c | 15 ++++----
include/asm-ia64/hypercall.h | 9 ++++
include/asm-ia64/hypervisor.h | 1
include/asm-ia64/pal.h | 1
include/xen/interface/arch-ia64.h | 24 ++++++++++++-
include/xen/interface/foreign/reference.size | 4 +-
11 files changed, 118 insertions(+), 14 deletions(-)
diff -r c09686d2bbff -r 245902ee7ce0 arch/ia64/kernel/setup.c
--- a/arch/ia64/kernel/setup.c Mon Jun 11 15:56:06 2007 +0100
+++ b/arch/ia64/kernel/setup.c Mon Jun 11 14:59:53 2007 -0600
@@ -610,7 +610,7 @@ setup_arch (char **cmdline_p)
#endif
paging_init();
#ifdef CONFIG_XEN
- contiguous_bitmap_init(max_pfn);
+ xen_contiguous_bitmap_init(max_pfn);
#endif
}
diff -r c09686d2bbff -r 245902ee7ce0 arch/ia64/xen/hypervisor.c
--- a/arch/ia64/xen/hypervisor.c Mon Jun 11 15:56:06 2007 +0100
+++ b/arch/ia64/xen/hypervisor.c Mon Jun 11 14:59:53 2007 -0600
@@ -158,7 +158,7 @@ __contiguous_bitmap_init(unsigned long s
}
void
-contiguous_bitmap_init(unsigned long end_pfn)
+xen_contiguous_bitmap_init(unsigned long end_pfn)
{
unsigned long size = (end_pfn + 2 * BITS_PER_LONG) >> 3;
#ifndef CONFIG_VIRTUAL_MEM_MAP
@@ -1208,7 +1208,7 @@ xen_ia64_allocate_resource(unsigned long
struct resource* res;
int error;
- res = kmalloc(sizeof(*res), GFP_KERNEL);
+ res = kzalloc(sizeof(*res), GFP_KERNEL);
if (res == NULL)
return ERR_PTR(-ENOMEM);
diff -r c09686d2bbff -r 245902ee7ce0 arch/ia64/xen/xcom_hcall.c
--- a/arch/ia64/xen/xcom_hcall.c Mon Jun 11 15:56:06 2007 +0100
+++ b/arch/ia64/xen/xcom_hcall.c Mon Jun 11 14:59:53 2007 -0600
@@ -395,3 +395,10 @@ xencomm_hypercall_vcpu_op(int cmd, int c
return xencomm_arch_hypercall_vcpu_op(cmd, cpu,
xencomm_create_inline(arg));
}
+
+int
+xencomm_hypercall_fpswa_revision(unsigned int *revision)
+{
+ return xencomm_arch_hypercall_fpswa_revision(
+ xencomm_create_inline(revision));
+}
diff -r c09686d2bbff -r 245902ee7ce0 arch/ia64/xen/xcom_mini.c
--- a/arch/ia64/xen/xcom_mini.c Mon Jun 11 15:56:06 2007 +0100
+++ b/arch/ia64/xen/xcom_mini.c Mon Jun 11 14:59:53 2007 -0600
@@ -467,3 +467,19 @@ xencomm_mini_hypercall_sched_op(int cmd,
return xencomm_arch_hypercall_sched_op(cmd, desc);
}
EXPORT_SYMBOL_GPL(xencomm_mini_hypercall_sched_op);
+
+int
+xencomm_mini_hypercall_fpswa_revision(unsigned int *revision)
+{
+ int nbr_area = 2;
+ struct xencomm_mini xc_area[2];
+ struct xencomm_handle *desc;
+ int rc;
+
+ rc = xencomm_create_mini(xc_area, &nbr_area,
+ revision, sizeof(*revision), &desc);
+ if (rc)
+ return rc;
+ return xencomm_arch_hypercall_fpswa_revision(desc);
+}
+EXPORT_SYMBOL_GPL(xencomm_mini_hypercall_fpswa_revision);
diff -r c09686d2bbff -r 245902ee7ce0 arch/ia64/xen/xcom_privcmd.c
--- a/arch/ia64/xen/xcom_privcmd.c Mon Jun 11 15:56:06 2007 +0100
+++ b/arch/ia64/xen/xcom_privcmd.c Mon Jun 11 14:59:53 2007 -0600
@@ -430,6 +430,21 @@ xencomm_privcmd_memory_op(privcmd_hyperc
return ret;
}
+ case XENMEM_maximum_gpfn:
+ {
+ domid_t kern_domid;
+ domid_t __user *user_domid;
+ struct xencomm_handle *desc;
+
+ user_domid = (domid_t __user *)hypercall->arg[1];
+ if (copy_from_user(&kern_domid, user_domid, sizeof(domid_t)))
+ return -EFAULT;
+ desc = xencomm_create_inline(&kern_domid);
+
+ ret = xencomm_arch_hypercall_memory_op(cmd, desc);
+
+ return ret;
+ }
case XENMEM_translate_gpfn_list:
{
xen_translate_gpfn_list_t kern_op;
@@ -640,6 +655,38 @@ xencomm_privcmd_sched_op(privcmd_hyperca
ret = xencomm_arch_hypercall_sched_op(cmd, desc);
xencomm_free(desc);
+ return ret;
+}
+
+static int
+xencomm_privcmd_ia64_dom0vp_op(privcmd_hypercall_t *hypercall)
+{
+ int cmd = hypercall->arg[0];
+ int ret;
+
+ switch (cmd) {
+ case IA64_DOM0VP_fpswa_revision: {
+ unsigned int revision;
+ unsigned int __user *revision_user =
+ (unsigned int* __user)hypercall->arg[1];
+ struct xencomm_handle *desc;
+ ret = xencomm_create(&revision, sizeof(revision),
+ &desc, GFP_KERNEL);
+ if (ret)
+ break;
+ ret = xencomm_arch_hypercall_fpswa_revision(desc);
+ xencomm_free(desc);
+ if (ret)
+ break;
+ if (copy_to_user(revision_user, &revision, sizeof(revision)))
+ ret = -EFAULT;
+ break;
+ }
+ default:
+ printk("%s: unknown IA64 DOM0VP op %d\n", __func__, cmd);
+ ret = -EINVAL;
+ break;
+ }
return ret;
}
@@ -665,6 +712,8 @@ privcmd_hypercall(privcmd_hypercall_t *h
return xencomm_privcmd_hvm_op(hypercall);
case __HYPERVISOR_sched_op:
return xencomm_privcmd_sched_op(hypercall);
+ case __HYPERVISOR_ia64_dom0vp_op:
+ return xencomm_privcmd_ia64_dom0vp_op(hypercall);
default:
printk("%s: unknown hcall (%ld)\n", __func__, hypercall->op);
return -ENOSYS;
diff -r c09686d2bbff -r 245902ee7ce0 arch/ia64/xen/xen_dma.c
--- a/arch/ia64/xen/xen_dma.c Mon Jun 11 15:56:06 2007 +0100
+++ b/arch/ia64/xen/xen_dma.c Mon Jun 11 14:59:53 2007 -0600
@@ -22,6 +22,7 @@
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
+#include <linux/bitops.h>
#include <linux/dma-mapping.h>
#include <linux/mm.h>
#include <asm/scatterlist.h>
@@ -40,18 +41,18 @@ do {
\
* when merged with upstream Linux.
*/
static inline int
-address_needs_mapping(struct device *hwdev, dma_addr_t addr)
+address_needs_mapping(struct device *dev, dma_addr_t addr)
{
dma_addr_t mask = 0xffffffff;
/* If the device has a mask, use it, otherwise default to 32 bits */
- if (hwdev && hwdev->dma_mask)
- mask = *hwdev->dma_mask;
+ if (dev && dev->dma_mask)
+ mask = *dev->dma_mask;
return (addr & ~mask) != 0;
}
int
-xen_map_sg(struct device *hwdev, struct scatterlist *sg, int nents,
+xen_map_sg(struct device *dev, struct scatterlist *sg, int nents,
int direction)
{
int i;
@@ -60,7 +61,7 @@ xen_map_sg(struct device *hwdev, struct
sg[i].dma_address = page_to_bus(sg[i].page) + sg[i].offset;
sg[i].dma_length = sg[i].length;
- IOMMU_BUG_ON(address_needs_mapping(hwdev, sg[i].dma_address));
+ IOMMU_BUG_ON(address_needs_mapping(dev, sg[i].dma_address));
}
return nents;
@@ -68,7 +69,7 @@ EXPORT_SYMBOL(xen_map_sg);
EXPORT_SYMBOL(xen_map_sg);
void
-xen_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
+xen_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
int direction)
{
}
@@ -101,7 +102,7 @@ xen_alloc_coherent(struct device *dev, s
return NULL;
if (xen_create_contiguous_region(vaddr, order,
- dev->coherent_dma_mask)) {
+ fls64(dev->coherent_dma_mask))) {
free_pages(vaddr, order);
return NULL;
}
diff -r c09686d2bbff -r 245902ee7ce0 include/asm-ia64/hypercall.h
--- a/include/asm-ia64/hypercall.h Mon Jun 11 15:56:06 2007 +0100
+++ b/include/asm-ia64/hypercall.h Mon Jun 11 14:59:53 2007 -0600
@@ -380,6 +380,13 @@ xencomm_arch_hypercall_perfmon_op(unsign
{
return _hypercall4(int, ia64_dom0vp_op,
IA64_DOM0VP_perfmon, cmd, arg, count);
+}
+
+static inline int
+xencomm_arch_hypercall_fpswa_revision(struct xencomm_handle *arg)
+{
+ return _hypercall2(int, ia64_dom0vp_op,
+ IA64_DOM0VP_fpswa_revision, arg);
}
// for balloon driver
@@ -397,6 +404,7 @@ xencomm_arch_hypercall_perfmon_op(unsign
#define HYPERVISOR_memory_op xencomm_mini_hypercall_memory_op
#define HYPERVISOR_xenoprof_op xencomm_mini_hypercall_xenoprof_op
#define HYPERVISOR_perfmon_op xencomm_mini_hypercall_perfmon_op
+#define HYPERVISOR_fpswa_revision xencomm_mini_hypercall_fpswa_revision
#else
#define HYPERVISOR_sched_op xencomm_hypercall_sched_op
#define HYPERVISOR_event_channel_op xencomm_hypercall_event_channel_op
@@ -408,6 +416,7 @@ xencomm_arch_hypercall_perfmon_op(unsign
#define HYPERVISOR_memory_op xencomm_hypercall_memory_op
#define HYPERVISOR_xenoprof_op xencomm_hypercall_xenoprof_op
#define HYPERVISOR_perfmon_op xencomm_hypercall_perfmon_op
+#define HYPERVISOR_fpswa_revision xencomm_hypercall_fpswa_revision
#endif
#define HYPERVISOR_suspend xencomm_hypercall_suspend
diff -r c09686d2bbff -r 245902ee7ce0 include/asm-ia64/hypervisor.h
--- a/include/asm-ia64/hypervisor.h Mon Jun 11 15:56:06 2007 +0100
+++ b/include/asm-ia64/hypervisor.h Mon Jun 11 14:59:53 2007 -0600
@@ -145,6 +145,7 @@ int privcmd_mmap(struct file * file, str
#define pfn_pte_ma(_x,_y) __pte_ma(0) /* unmodified use */
#ifndef CONFIG_VMX_GUEST
+void xen_contiguous_bitmap_init(unsigned long end_pfn);
int __xen_create_contiguous_region(unsigned long vstart, unsigned int order,
unsigned int address_bits);
static inline int
xen_create_contiguous_region(unsigned long vstart,
diff -r c09686d2bbff -r 245902ee7ce0 include/asm-ia64/pal.h
--- a/include/asm-ia64/pal.h Mon Jun 11 15:56:06 2007 +0100
+++ b/include/asm-ia64/pal.h Mon Jun 11 14:59:53 2007 -0600
@@ -82,7 +82,6 @@
#ifndef __ASSEMBLY__
#include <linux/types.h>
-#include <asm/processor.h>
#include <asm/fpu.h>
/*
diff -r c09686d2bbff -r 245902ee7ce0 include/xen/interface/arch-ia64.h
--- a/include/xen/interface/arch-ia64.h Mon Jun 11 15:56:06 2007 +0100
+++ b/include/xen/interface/arch-ia64.h Mon Jun 11 14:59:53 2007 -0600
@@ -78,6 +78,10 @@ typedef unsigned long xen_ulong_t;
#define MEM_G (1UL << 30)
#define MEM_M (1UL << 20)
#define MEM_K (1UL << 10)
+
+/* Guest physical address of IO ports space. */
+#define IO_PORTS_PADDR 0x00000ffffc000000UL
+#define IO_PORTS_SIZE 0x0000000004000000UL
#define MMIO_START (3 * MEM_G)
#define MMIO_SIZE (512 * MEM_M)
@@ -344,7 +348,12 @@ struct arch_shared_info {
/* Interrupt vector for event channel. */
int evtchn_vector;
- uint64_t pad[32];
+ /* PFN of memmap_info page */
+ unsigned int memmap_info_num_pages;/* currently only = 1 case is
+ supported. */
+ unsigned long memmap_info_pfn;
+
+ uint64_t pad[31];
};
typedef struct arch_shared_info arch_shared_info_t;
@@ -460,8 +469,18 @@ struct vcpu_guest_context_regs {
struct vcpu_tr_regs tr;
+#if 0
+ /*
+ * The vcpu_guest_context structure is allocated on the stack in
+ * a few places. With this array for RBS storage, that structure
+ * is a bit over 21k. It looks like maybe we're blowing the stack
+ * and causing rather random looking failures on a couple systems.
+ * Remove since we're not actually using it for now.
+ */
+
/* Note: loadrs is 2**14 bytes == 2**11 slots. */
unsigned long rbs[2048];
+#endif
};
struct vcpu_guest_context {
@@ -508,6 +527,9 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_conte
/* gmfn version of IA64_DOM0VP_add_physmap */
#define IA64_DOM0VP_add_physmap_with_gmfn 9
+
+/* get fpswa revision */
+#define IA64_DOM0VP_fpswa_revision 10
// flags for page assignement to pseudo physical address space
#define _ASSIGN_readonly 0
diff -r c09686d2bbff -r 245902ee7ce0
include/xen/interface/foreign/reference.size
--- a/include/xen/interface/foreign/reference.size Mon Jun 11 15:56:06
2007 +0100
+++ b/include/xen/interface/foreign/reference.size Mon Jun 11 14:59:53
2007 -0600
@@ -8,8 +8,8 @@ xen_ia64_boot_param | -
xen_ia64_boot_param | - - 96
ia64_tr_entry | - - 32
vcpu_tr_regs | - - 512
-vcpu_guest_context_regs | - - 21872
-vcpu_guest_context | 2800 5168 21904
+vcpu_guest_context_regs | - - 5488
+vcpu_guest_context | 2800 5168 5520
arch_vcpu_info | 24 16 0
vcpu_time_info | 32 32 32
vcpu_info | 64 64 48
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|