# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID cef0cc0a3236f425e377fe97ee8846adfb6cbd4e
# Parent 22e58b2b0b451f3fec0611de61361b0dc12606b0
[IA64] MCA support - fix timer issue, log size issue, and limit logs to dom0
Signed-off-by: Yutaka Ezaki <yutaka.ezaki@xxxxxxxxxxxxxx>
Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
Signed-off-by: Kazuhiro Suzuki <kaz@xxxxxxxxxxxxxx>
---
linux-2.6-xen-sparse/include/asm-ia64/sal.h | 8 ++++----
xen/arch/ia64/linux-xen/mca.c | 10 ++++++++++
xen/arch/ia64/xen/fw_emul.c | 7 +++++--
3 files changed, 19 insertions(+), 6 deletions(-)
diff -r 22e58b2b0b45 -r cef0cc0a3236 linux-2.6-xen-sparse/include/asm-ia64/sal.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/sal.h Sun Oct 29 09:27:26
2006 -0700
+++ b/linux-2.6-xen-sparse/include/asm-ia64/sal.h Wed Nov 15 11:34:31
2006 -0700
@@ -699,16 +699,16 @@ ia64_sal_get_state_info (u64 sal_info_ty
struct ia64_sal_retval isrv;
#ifdef CONFIG_XEN
if (is_running_on_xen()) {
- struct xencomm_mini xc_area[2];
- int nbr_area = 2;
struct xencomm_handle *desc;
- if (xencomm_create_mini(xc_area, &nbr_area, sal_info,
- ia64_sal_get_state_info_size(sal_info_type), &desc))
+ if (xencomm_create(sal_info,
+ ia64_sal_get_state_info_size(sal_info_type),
+ &desc, GFP_KERNEL))
return 0;
SAL_CALL_REENTRANT(isrv, SAL_GET_STATE_INFO, sal_info_type, 0,
desc, 0, 0, 0, 0);
+ xencomm_free(desc);
} else
#endif
SAL_CALL_REENTRANT(isrv, SAL_GET_STATE_INFO, sal_info_type, 0,
diff -r 22e58b2b0b45 -r cef0cc0a3236 xen/arch/ia64/linux-xen/mca.c
--- a/xen/arch/ia64/linux-xen/mca.c Sun Oct 29 09:27:26 2006 -0700
+++ b/xen/arch/ia64/linux-xen/mca.c Wed Nov 15 11:34:31 2006 -0700
@@ -117,6 +117,12 @@ extern void setup_vector (unsigned int v
#endif
static ia64_mc_info_t ia64_mc_info;
+
+#ifdef XEN
+#define jiffies NOW()
+#undef HZ
+#define HZ 1000000000UL
+#endif
#define MAX_CPE_POLL_INTERVAL (15*60*HZ) /* 15 minutes */
#define MIN_CPE_POLL_INTERVAL (2*60*HZ) /* 2 minutes */
@@ -1388,7 +1394,11 @@ ia64_mca_cpe_int_caller(int cpe_irq, voi
ia64_mca_cpe_int_caller(int cpe_irq, void *arg, struct pt_regs *ptregs)
{
static int start_count = -1;
+#ifdef XEN
+ static unsigned long poll_time = MIN_CPE_POLL_INTERVAL;
+#else
static int poll_time = MIN_CPE_POLL_INTERVAL;
+#endif
unsigned int cpuid;
cpuid = smp_processor_id();
diff -r 22e58b2b0b45 -r cef0cc0a3236 xen/arch/ia64/xen/fw_emul.c
--- a/xen/arch/ia64/xen/fw_emul.c Sun Oct 29 09:27:26 2006 -0700
+++ b/xen/arch/ia64/xen/fw_emul.c Wed Nov 15 11:34:31 2006 -0700
@@ -205,7 +205,7 @@ sal_emulator (long index, unsigned long
}
break;
case SAL_GET_STATE_INFO:
- {
+ if (current->domain == dom0) {
sal_queue_entry_t *e;
unsigned long flags;
struct smp_call_args_t arg;
@@ -274,13 +274,16 @@ sal_emulator (long index, unsigned long
spin_unlock_irqrestore(&sal_queue_lock, flags);
xfree(e);
}
+ } else {
+ status = IA64_SAL_NO_INFORMATION_AVAILABLE;
+ r9 = 0;
}
break;
case SAL_GET_STATE_INFO_SIZE:
r9 = ia64_sal_get_state_info_size(in1);
break;
case SAL_CLEAR_STATE_INFO:
- {
+ if (current->domain == dom0) {
sal_queue_entry_t *e;
unsigned long flags;
struct smp_call_args_t arg;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|