mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 20:48:49 +08:00
Bug-fixes:
* Fix memory leak when CPU hotplugging. * Compile bugs with various #ifdefs * Fix state changes in Xen PCI front not dealing well with new toolstack. * Cleanups in code (use pr_*, fix 80 characters splits, etc) * Long standing bug in double-reporting the steal time -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.13 (GNU/Linux) iQEcBAABAgAGBQJR0Xc1AAoJEFjIrFwIi8fJo68H/jZaJJmytDI7exHTyq8fSGXQ 5OERw5YZeM5jZQG55YC5hmGS5oIpKEdBt+aAEpuofYUhrR/ZFqDr0j+QEiqC36bl cl0/IAnMBGnyyO6FYY4Sut2H+S5BGYQNbwo9YAtgKtZANr2eLABxYUfMU44I/jCW M7DAojME9OZLBW3ORYZTGf1A0T8hJINhxZIWhtLMrkckCb9AZMieKdMOHJEWq2jl aPxx78U+2CLTdLquOLIiBEiTO3vAzx2Wt4prD+uCizWna45H9gBj7GFwBYH7p9Ry TFyzmDc5PufThTilfDyQW1y4yiNLpFDC/67a1wpwObEBn87hstHgwHQQ5INzqwY= =Ej7M -----END PGP SIGNATURE----- Merge tag 'stable/for-linus-3.11-rc0-tag-two' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen Pull Xen bugfixes from Konrad Rzeszutek Wilk: - Fix memory leak when CPU hotplugging. - Compile bugs with various #ifdefs - Fix state changes in Xen PCI front not dealing well with new toolstack. - Cleanups in code (use pr_*, fix 80 characters splits, etc) - Long standing bug in double-reporting the steal time * tag 'stable/for-linus-3.11-rc0-tag-two' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen: xen/time: remove blocked time accounting from xen "clockchip" xen: Convert printks to pr_<level> xen: ifdef CONFIG_HIBERNATE_CALLBACKS xen_*_suspend xen/pcifront: Deal with toolstack missing 'XenbusStateClosing' state. xen/time: Free onlined per-cpu data structure if we want to online it again. xen/time: Check that the per_cpu data structure has data before freeing. xen/time: Don't leak interrupt name when offlining. xen/time: Encapsulate the struct clock_event_device in another structure. xen/spinlock: Don't leak interrupt name when offlining. xen/smp: Don't leak interrupt name when offlining. xen/smp: Set the per-cpu IRQ number to a valid default. xen/smp: Introduce a common structure to contain the IRQ name and interrupt line. xen/smp: Coalesce the free_irq calls in one function. xen-pciback: fix error return code in pcistub_irq_handler_switch()
This commit is contained in:
commit
3e34131a65
@ -40,11 +40,15 @@
|
||||
|
||||
cpumask_var_t xen_cpu_initialized_map;
|
||||
|
||||
static DEFINE_PER_CPU(int, xen_resched_irq);
|
||||
static DEFINE_PER_CPU(int, xen_callfunc_irq);
|
||||
static DEFINE_PER_CPU(int, xen_callfuncsingle_irq);
|
||||
static DEFINE_PER_CPU(int, xen_irq_work);
|
||||
static DEFINE_PER_CPU(int, xen_debug_irq) = -1;
|
||||
struct xen_common_irq {
|
||||
int irq;
|
||||
char *name;
|
||||
};
|
||||
static DEFINE_PER_CPU(struct xen_common_irq, xen_resched_irq) = { .irq = -1 };
|
||||
static DEFINE_PER_CPU(struct xen_common_irq, xen_callfunc_irq) = { .irq = -1 };
|
||||
static DEFINE_PER_CPU(struct xen_common_irq, xen_callfuncsingle_irq) = { .irq = -1 };
|
||||
static DEFINE_PER_CPU(struct xen_common_irq, xen_irq_work) = { .irq = -1 };
|
||||
static DEFINE_PER_CPU(struct xen_common_irq, xen_debug_irq) = { .irq = -1 };
|
||||
|
||||
static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id);
|
||||
static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id);
|
||||
@ -99,10 +103,47 @@ static void __cpuinit cpu_bringup_and_idle(void)
|
||||
cpu_startup_entry(CPUHP_ONLINE);
|
||||
}
|
||||
|
||||
static void xen_smp_intr_free(unsigned int cpu)
|
||||
{
|
||||
if (per_cpu(xen_resched_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_resched_irq, cpu).irq, NULL);
|
||||
per_cpu(xen_resched_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_resched_irq, cpu).name);
|
||||
per_cpu(xen_resched_irq, cpu).name = NULL;
|
||||
}
|
||||
if (per_cpu(xen_callfunc_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu).irq, NULL);
|
||||
per_cpu(xen_callfunc_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_callfunc_irq, cpu).name);
|
||||
per_cpu(xen_callfunc_irq, cpu).name = NULL;
|
||||
}
|
||||
if (per_cpu(xen_debug_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu).irq, NULL);
|
||||
per_cpu(xen_debug_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_debug_irq, cpu).name);
|
||||
per_cpu(xen_debug_irq, cpu).name = NULL;
|
||||
}
|
||||
if (per_cpu(xen_callfuncsingle_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu).irq,
|
||||
NULL);
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_callfuncsingle_irq, cpu).name);
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).name = NULL;
|
||||
}
|
||||
if (xen_hvm_domain())
|
||||
return;
|
||||
|
||||
if (per_cpu(xen_irq_work, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_irq_work, cpu).irq, NULL);
|
||||
per_cpu(xen_irq_work, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_irq_work, cpu).name);
|
||||
per_cpu(xen_irq_work, cpu).name = NULL;
|
||||
}
|
||||
};
|
||||
static int xen_smp_intr_init(unsigned int cpu)
|
||||
{
|
||||
int rc;
|
||||
const char *resched_name, *callfunc_name, *debug_name;
|
||||
char *resched_name, *callfunc_name, *debug_name;
|
||||
|
||||
resched_name = kasprintf(GFP_KERNEL, "resched%d", cpu);
|
||||
rc = bind_ipi_to_irqhandler(XEN_RESCHEDULE_VECTOR,
|
||||
@ -113,7 +154,8 @@ static int xen_smp_intr_init(unsigned int cpu)
|
||||
NULL);
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_resched_irq, cpu) = rc;
|
||||
per_cpu(xen_resched_irq, cpu).irq = rc;
|
||||
per_cpu(xen_resched_irq, cpu).name = resched_name;
|
||||
|
||||
callfunc_name = kasprintf(GFP_KERNEL, "callfunc%d", cpu);
|
||||
rc = bind_ipi_to_irqhandler(XEN_CALL_FUNCTION_VECTOR,
|
||||
@ -124,7 +166,8 @@ static int xen_smp_intr_init(unsigned int cpu)
|
||||
NULL);
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_callfunc_irq, cpu) = rc;
|
||||
per_cpu(xen_callfunc_irq, cpu).irq = rc;
|
||||
per_cpu(xen_callfunc_irq, cpu).name = callfunc_name;
|
||||
|
||||
debug_name = kasprintf(GFP_KERNEL, "debug%d", cpu);
|
||||
rc = bind_virq_to_irqhandler(VIRQ_DEBUG, cpu, xen_debug_interrupt,
|
||||
@ -132,7 +175,8 @@ static int xen_smp_intr_init(unsigned int cpu)
|
||||
debug_name, NULL);
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_debug_irq, cpu) = rc;
|
||||
per_cpu(xen_debug_irq, cpu).irq = rc;
|
||||
per_cpu(xen_debug_irq, cpu).name = debug_name;
|
||||
|
||||
callfunc_name = kasprintf(GFP_KERNEL, "callfuncsingle%d", cpu);
|
||||
rc = bind_ipi_to_irqhandler(XEN_CALL_FUNCTION_SINGLE_VECTOR,
|
||||
@ -143,7 +187,8 @@ static int xen_smp_intr_init(unsigned int cpu)
|
||||
NULL);
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_callfuncsingle_irq, cpu) = rc;
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).irq = rc;
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).name = callfunc_name;
|
||||
|
||||
/*
|
||||
* The IRQ worker on PVHVM goes through the native path and uses the
|
||||
@ -161,26 +206,13 @@ static int xen_smp_intr_init(unsigned int cpu)
|
||||
NULL);
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_irq_work, cpu) = rc;
|
||||
per_cpu(xen_irq_work, cpu).irq = rc;
|
||||
per_cpu(xen_irq_work, cpu).name = callfunc_name;
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
if (per_cpu(xen_resched_irq, cpu) >= 0)
|
||||
unbind_from_irqhandler(per_cpu(xen_resched_irq, cpu), NULL);
|
||||
if (per_cpu(xen_callfunc_irq, cpu) >= 0)
|
||||
unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu), NULL);
|
||||
if (per_cpu(xen_debug_irq, cpu) >= 0)
|
||||
unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL);
|
||||
if (per_cpu(xen_callfuncsingle_irq, cpu) >= 0)
|
||||
unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu),
|
||||
NULL);
|
||||
if (xen_hvm_domain())
|
||||
return rc;
|
||||
|
||||
if (per_cpu(xen_irq_work, cpu) >= 0)
|
||||
unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL);
|
||||
|
||||
xen_smp_intr_free(cpu);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -433,12 +465,7 @@ static void xen_cpu_die(unsigned int cpu)
|
||||
current->state = TASK_UNINTERRUPTIBLE;
|
||||
schedule_timeout(HZ/10);
|
||||
}
|
||||
unbind_from_irqhandler(per_cpu(xen_resched_irq, cpu), NULL);
|
||||
unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu), NULL);
|
||||
unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL);
|
||||
unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu), NULL);
|
||||
if (!xen_hvm_domain())
|
||||
unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL);
|
||||
xen_smp_intr_free(cpu);
|
||||
xen_uninit_lock_cpu(cpu);
|
||||
xen_teardown_timer(cpu);
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <asm/paravirt.h>
|
||||
|
||||
@ -165,6 +166,7 @@ static int xen_spin_trylock(struct arch_spinlock *lock)
|
||||
return old == 0;
|
||||
}
|
||||
|
||||
static DEFINE_PER_CPU(char *, irq_name);
|
||||
static DEFINE_PER_CPU(int, lock_kicker_irq) = -1;
|
||||
static DEFINE_PER_CPU(struct xen_spinlock *, lock_spinners);
|
||||
|
||||
@ -362,7 +364,7 @@ static irqreturn_t dummy_handler(int irq, void *dev_id)
|
||||
void __cpuinit xen_init_lock_cpu(int cpu)
|
||||
{
|
||||
int irq;
|
||||
const char *name;
|
||||
char *name;
|
||||
|
||||
WARN(per_cpu(lock_kicker_irq, cpu) >= 0, "spinlock on CPU%d exists on IRQ%d!\n",
|
||||
cpu, per_cpu(lock_kicker_irq, cpu));
|
||||
@ -385,6 +387,7 @@ void __cpuinit xen_init_lock_cpu(int cpu)
|
||||
if (irq >= 0) {
|
||||
disable_irq(irq); /* make sure it's never delivered */
|
||||
per_cpu(lock_kicker_irq, cpu) = irq;
|
||||
per_cpu(irq_name, cpu) = name;
|
||||
}
|
||||
|
||||
printk("cpu %d spinlock event irq %d\n", cpu, irq);
|
||||
@ -401,6 +404,8 @@ void xen_uninit_lock_cpu(int cpu)
|
||||
|
||||
unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL);
|
||||
per_cpu(lock_kicker_irq, cpu) = -1;
|
||||
kfree(per_cpu(irq_name, cpu));
|
||||
per_cpu(irq_name, cpu) = NULL;
|
||||
}
|
||||
|
||||
void __init xen_init_spinlocks(void)
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/math64.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <asm/pvclock.h>
|
||||
#include <asm/xen/hypervisor.h>
|
||||
@ -36,9 +37,8 @@ static DEFINE_PER_CPU(struct vcpu_runstate_info, xen_runstate);
|
||||
/* snapshots of runstate info */
|
||||
static DEFINE_PER_CPU(struct vcpu_runstate_info, xen_runstate_snapshot);
|
||||
|
||||
/* unused ns of stolen and blocked time */
|
||||
/* unused ns of stolen time */
|
||||
static DEFINE_PER_CPU(u64, xen_residual_stolen);
|
||||
static DEFINE_PER_CPU(u64, xen_residual_blocked);
|
||||
|
||||
/* return an consistent snapshot of 64-bit time/counter value */
|
||||
static u64 get64(const u64 *p)
|
||||
@ -115,7 +115,7 @@ static void do_stolen_accounting(void)
|
||||
{
|
||||
struct vcpu_runstate_info state;
|
||||
struct vcpu_runstate_info *snap;
|
||||
s64 blocked, runnable, offline, stolen;
|
||||
s64 runnable, offline, stolen;
|
||||
cputime_t ticks;
|
||||
|
||||
get_runstate_snapshot(&state);
|
||||
@ -125,7 +125,6 @@ static void do_stolen_accounting(void)
|
||||
snap = &__get_cpu_var(xen_runstate_snapshot);
|
||||
|
||||
/* work out how much time the VCPU has not been runn*ing* */
|
||||
blocked = state.time[RUNSTATE_blocked] - snap->time[RUNSTATE_blocked];
|
||||
runnable = state.time[RUNSTATE_runnable] - snap->time[RUNSTATE_runnable];
|
||||
offline = state.time[RUNSTATE_offline] - snap->time[RUNSTATE_offline];
|
||||
|
||||
@ -141,17 +140,6 @@ static void do_stolen_accounting(void)
|
||||
ticks = iter_div_u64_rem(stolen, NS_PER_TICK, &stolen);
|
||||
__this_cpu_write(xen_residual_stolen, stolen);
|
||||
account_steal_ticks(ticks);
|
||||
|
||||
/* Add the appropriate number of ticks of blocked time,
|
||||
including any left-overs from last time. */
|
||||
blocked += __this_cpu_read(xen_residual_blocked);
|
||||
|
||||
if (blocked < 0)
|
||||
blocked = 0;
|
||||
|
||||
ticks = iter_div_u64_rem(blocked, NS_PER_TICK, &blocked);
|
||||
__this_cpu_write(xen_residual_blocked, blocked);
|
||||
account_idle_ticks(ticks);
|
||||
}
|
||||
|
||||
/* Get the TSC speed from Xen */
|
||||
@ -377,11 +365,16 @@ static const struct clock_event_device xen_vcpuop_clockevent = {
|
||||
|
||||
static const struct clock_event_device *xen_clockevent =
|
||||
&xen_timerop_clockevent;
|
||||
static DEFINE_PER_CPU(struct clock_event_device, xen_clock_events) = { .irq = -1 };
|
||||
|
||||
struct xen_clock_event_device {
|
||||
struct clock_event_device evt;
|
||||
char *name;
|
||||
};
|
||||
static DEFINE_PER_CPU(struct xen_clock_event_device, xen_clock_events) = { .evt.irq = -1 };
|
||||
|
||||
static irqreturn_t xen_timer_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
struct clock_event_device *evt = &__get_cpu_var(xen_clock_events);
|
||||
struct clock_event_device *evt = &__get_cpu_var(xen_clock_events).evt;
|
||||
irqreturn_t ret;
|
||||
|
||||
ret = IRQ_NONE;
|
||||
@ -395,14 +388,30 @@ static irqreturn_t xen_timer_interrupt(int irq, void *dev_id)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void xen_teardown_timer(int cpu)
|
||||
{
|
||||
struct clock_event_device *evt;
|
||||
BUG_ON(cpu == 0);
|
||||
evt = &per_cpu(xen_clock_events, cpu).evt;
|
||||
|
||||
if (evt->irq >= 0) {
|
||||
unbind_from_irqhandler(evt->irq, NULL);
|
||||
evt->irq = -1;
|
||||
kfree(per_cpu(xen_clock_events, cpu).name);
|
||||
per_cpu(xen_clock_events, cpu).name = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void xen_setup_timer(int cpu)
|
||||
{
|
||||
const char *name;
|
||||
char *name;
|
||||
struct clock_event_device *evt;
|
||||
int irq;
|
||||
|
||||
evt = &per_cpu(xen_clock_events, cpu);
|
||||
evt = &per_cpu(xen_clock_events, cpu).evt;
|
||||
WARN(evt->irq >= 0, "IRQ%d for CPU%d is already allocated\n", evt->irq, cpu);
|
||||
if (evt->irq >= 0)
|
||||
xen_teardown_timer(cpu);
|
||||
|
||||
printk(KERN_INFO "installing Xen timer for CPU %d\n", cpu);
|
||||
|
||||
@ -420,22 +429,15 @@ void xen_setup_timer(int cpu)
|
||||
|
||||
evt->cpumask = cpumask_of(cpu);
|
||||
evt->irq = irq;
|
||||
per_cpu(xen_clock_events, cpu).name = name;
|
||||
}
|
||||
|
||||
void xen_teardown_timer(int cpu)
|
||||
{
|
||||
struct clock_event_device *evt;
|
||||
BUG_ON(cpu == 0);
|
||||
evt = &per_cpu(xen_clock_events, cpu);
|
||||
unbind_from_irqhandler(evt->irq, NULL);
|
||||
evt->irq = -1;
|
||||
}
|
||||
|
||||
void xen_setup_cpu_clockevents(void)
|
||||
{
|
||||
BUG_ON(preemptible());
|
||||
|
||||
clockevents_register_device(&__get_cpu_var(xen_clock_events));
|
||||
clockevents_register_device(&__get_cpu_var(xen_clock_events).evt);
|
||||
}
|
||||
|
||||
void xen_timer_resume(void)
|
||||
|
@ -678,10 +678,9 @@ static int pcifront_connect_and_init_dma(struct pcifront_device *pdev)
|
||||
if (!pcifront_dev) {
|
||||
dev_info(&pdev->xdev->dev, "Installing PCI frontend\n");
|
||||
pcifront_dev = pdev;
|
||||
} else {
|
||||
dev_err(&pdev->xdev->dev, "PCI frontend already installed!\n");
|
||||
} else
|
||||
err = -EEXIST;
|
||||
}
|
||||
|
||||
spin_unlock(&pcifront_dev_lock);
|
||||
|
||||
if (!err && !swiotlb_nr_tbl()) {
|
||||
@ -848,7 +847,7 @@ static int pcifront_try_connect(struct pcifront_device *pdev)
|
||||
goto out;
|
||||
|
||||
err = pcifront_connect_and_init_dma(pdev);
|
||||
if (err) {
|
||||
if (err && err != -EEXIST) {
|
||||
xenbus_dev_fatal(pdev->xdev, err,
|
||||
"Error setting up PCI Frontend");
|
||||
goto out;
|
||||
|
@ -36,6 +36,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/errno.h>
|
||||
@ -242,7 +244,7 @@ static enum bp_state reserve_additional_memory(long credit)
|
||||
rc = add_memory(nid, hotplug_start_paddr, balloon_hotplug << PAGE_SHIFT);
|
||||
|
||||
if (rc) {
|
||||
pr_info("xen_balloon: %s: add_memory() failed: %i\n", __func__, rc);
|
||||
pr_info("%s: add_memory() failed: %i\n", __func__, rc);
|
||||
return BP_EAGAIN;
|
||||
}
|
||||
|
||||
@ -591,7 +593,7 @@ static int __init balloon_init(void)
|
||||
if (!xen_domain())
|
||||
return -ENODEV;
|
||||
|
||||
pr_info("xen/balloon: Initialising balloon driver.\n");
|
||||
pr_info("Initialising balloon driver\n");
|
||||
|
||||
balloon_stats.current_pages = xen_pv_domain()
|
||||
? min(xen_start_info->nr_pages - xen_released_pages, max_pfn)
|
||||
|
@ -1,3 +1,5 @@
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/notifier.h>
|
||||
|
||||
#include <xen/xen.h>
|
||||
@ -31,7 +33,7 @@ static int vcpu_online(unsigned int cpu)
|
||||
err = xenbus_scanf(XBT_NIL, dir, "availability", "%15s", state);
|
||||
if (err != 1) {
|
||||
if (!xen_initial_domain())
|
||||
printk(KERN_ERR "XENBUS: Unable to read cpu state\n");
|
||||
pr_err("Unable to read cpu state\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -40,7 +42,7 @@ static int vcpu_online(unsigned int cpu)
|
||||
else if (strcmp(state, "offline") == 0)
|
||||
return 0;
|
||||
|
||||
printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n", state, cpu);
|
||||
pr_err("unknown state(%s) on CPU%d\n", state, cpu);
|
||||
return -EINVAL;
|
||||
}
|
||||
static void vcpu_hotplug(unsigned int cpu)
|
||||
|
@ -21,6 +21,8 @@
|
||||
* Jeremy Fitzhardinge <jeremy@xensource.com>, XenSource Inc, 2007
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
@ -600,8 +602,7 @@ static unsigned int __startup_pirq(unsigned int irq)
|
||||
rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &bind_pirq);
|
||||
if (rc != 0) {
|
||||
if (!probing_irq(irq))
|
||||
printk(KERN_INFO "Failed to obtain physical IRQ %d\n",
|
||||
irq);
|
||||
pr_info("Failed to obtain physical IRQ %d\n", irq);
|
||||
return 0;
|
||||
}
|
||||
evtchn = bind_pirq.port;
|
||||
@ -693,8 +694,8 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi,
|
||||
|
||||
irq = xen_irq_from_gsi(gsi);
|
||||
if (irq != -1) {
|
||||
printk(KERN_INFO "xen_map_pirq_gsi: returning irq %d for gsi %u\n",
|
||||
irq, gsi);
|
||||
pr_info("%s: returning irq %d for gsi %u\n",
|
||||
__func__, irq, gsi);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -812,10 +813,10 @@ int xen_destroy_irq(int irq)
|
||||
* (free_domain_pirqs).
|
||||
*/
|
||||
if ((rc == -ESRCH && info->u.pirq.domid != DOMID_SELF))
|
||||
printk(KERN_INFO "domain %d does not have %d anymore\n",
|
||||
pr_info("domain %d does not have %d anymore\n",
|
||||
info->u.pirq.domid, info->u.pirq.pirq);
|
||||
else if (rc) {
|
||||
printk(KERN_WARNING "unmap irq failed %d\n", rc);
|
||||
pr_warn("unmap irq failed %d\n", rc);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@ -1621,8 +1622,8 @@ static void restore_pirqs(void)
|
||||
|
||||
rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
|
||||
if (rc) {
|
||||
printk(KERN_WARNING "xen map irq failed gsi=%d irq=%d pirq=%d rc=%d\n",
|
||||
gsi, irq, pirq, rc);
|
||||
pr_warn("xen map irq failed gsi=%d irq=%d pirq=%d rc=%d\n",
|
||||
gsi, irq, pirq, rc);
|
||||
xen_free_irq(irq);
|
||||
continue;
|
||||
}
|
||||
@ -1844,13 +1845,11 @@ void xen_callback_vector(void)
|
||||
callback_via = HVM_CALLBACK_VECTOR(HYPERVISOR_CALLBACK_VECTOR);
|
||||
rc = xen_set_callback_via(callback_via);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "Request for Xen HVM callback vector"
|
||||
" failed.\n");
|
||||
pr_err("Request for Xen HVM callback vector failed\n");
|
||||
xen_have_vector_callback = 0;
|
||||
return;
|
||||
}
|
||||
printk(KERN_INFO "Xen HVM callback vector for event delivery is "
|
||||
"enabled\n");
|
||||
pr_info("Xen HVM callback vector for event delivery is enabled\n");
|
||||
/* in the restore case the vector has already been allocated */
|
||||
if (!test_bit(HYPERVISOR_CALLBACK_VECTOR, used_vectors))
|
||||
alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR,
|
||||
|
@ -31,6 +31,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
@ -547,11 +549,11 @@ static int __init evtchn_init(void)
|
||||
/* Create '/dev/xen/evtchn'. */
|
||||
err = misc_register(&evtchn_miscdev);
|
||||
if (err != 0) {
|
||||
printk(KERN_ERR "Could not register /dev/xen/evtchn\n");
|
||||
pr_err("Could not register /dev/xen/evtchn\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "Event-channel device installed.\n");
|
||||
pr_info("Event-channel device installed\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -48,6 +48,8 @@
|
||||
* grant operation.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/miscdevice.h>
|
||||
@ -507,7 +509,7 @@ static int gntalloc_mmap(struct file *filp, struct vm_area_struct *vma)
|
||||
int rv, i;
|
||||
|
||||
if (!(vma->vm_flags & VM_SHARED)) {
|
||||
printk(KERN_ERR "%s: Mapping must be shared.\n", __func__);
|
||||
pr_err("%s: Mapping must be shared\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -584,7 +586,7 @@ static int __init gntalloc_init(void)
|
||||
|
||||
err = misc_register(&gntalloc_miscdev);
|
||||
if (err != 0) {
|
||||
printk(KERN_ERR "Could not register misc gntalloc device\n");
|
||||
pr_err("Could not register misc gntalloc device\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,8 @@
|
||||
|
||||
#undef DEBUG
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
@ -760,7 +762,7 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma)
|
||||
if (use_ptemod && map->vma)
|
||||
goto unlock_out;
|
||||
if (use_ptemod && priv->mm != vma->vm_mm) {
|
||||
printk(KERN_WARNING "Huh? Other mm?\n");
|
||||
pr_warn("Huh? Other mm?\n");
|
||||
goto unlock_out;
|
||||
}
|
||||
|
||||
@ -795,7 +797,7 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma)
|
||||
vma->vm_end - vma->vm_start,
|
||||
find_grant_ptes, map);
|
||||
if (err) {
|
||||
printk(KERN_WARNING "find_grant_ptes() failure.\n");
|
||||
pr_warn("find_grant_ptes() failure.\n");
|
||||
goto out_put_map;
|
||||
}
|
||||
}
|
||||
@ -855,7 +857,7 @@ static int __init gntdev_init(void)
|
||||
|
||||
err = misc_register(&gntdev_miscdev);
|
||||
if (err != 0) {
|
||||
printk(KERN_ERR "Could not register gntdev device\n");
|
||||
pr_err("Could not register gntdev device\n");
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
|
@ -31,6 +31,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/mm.h>
|
||||
@ -508,8 +510,7 @@ static void gnttab_handle_deferred(unsigned long unused)
|
||||
entry = NULL;
|
||||
} else {
|
||||
if (!--entry->warn_delay)
|
||||
pr_info("g.e. %#x still pending\n",
|
||||
entry->ref);
|
||||
pr_info("g.e. %#x still pending\n", entry->ref);
|
||||
if (!first)
|
||||
first = entry;
|
||||
}
|
||||
@ -838,7 +839,7 @@ gnttab_retry_eagain_gop(unsigned int cmd, void *gop, int16_t *status,
|
||||
} while ((*status == GNTST_eagain) && (delay < MAX_DELAY));
|
||||
|
||||
if (delay >= MAX_DELAY) {
|
||||
printk(KERN_ERR "%s: %s eagain grant\n", func, current->comm);
|
||||
pr_err("%s: %s eagain grant\n", func, current->comm);
|
||||
*status = GNTST_bad_page;
|
||||
}
|
||||
}
|
||||
@ -1048,8 +1049,8 @@ static int gnttab_map(unsigned int start_idx, unsigned int end_idx)
|
||||
xatp.gpfn = (xen_hvm_resume_frames >> PAGE_SHIFT) + i;
|
||||
rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp);
|
||||
if (rc != 0) {
|
||||
printk(KERN_WARNING
|
||||
"grant table add_to_physmap failed, err=%d\n", rc);
|
||||
pr_warn("grant table add_to_physmap failed, err=%d\n",
|
||||
rc);
|
||||
break;
|
||||
}
|
||||
} while (i-- > start_idx);
|
||||
@ -1131,8 +1132,7 @@ static void gnttab_request_version(void)
|
||||
grefs_per_grant_frame = PAGE_SIZE / sizeof(struct grant_entry_v1);
|
||||
gnttab_interface = &gnttab_v1_ops;
|
||||
}
|
||||
printk(KERN_INFO "Grant tables using version %d layout.\n",
|
||||
grant_table_version);
|
||||
pr_info("Grant tables using version %d layout\n", grant_table_version);
|
||||
}
|
||||
|
||||
static int gnttab_setup(void)
|
||||
@ -1150,8 +1150,7 @@ static int gnttab_setup(void)
|
||||
gnttab_shared.addr = xen_remap(xen_hvm_resume_frames,
|
||||
PAGE_SIZE * max_nr_gframes);
|
||||
if (gnttab_shared.addr == NULL) {
|
||||
printk(KERN_WARNING
|
||||
"Failed to ioremap gnttab share frames!");
|
||||
pr_warn("Failed to ioremap gnttab share frames!\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
/*
|
||||
* Handle extern requests for shutdown, reboot and sysrq
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/slab.h>
|
||||
@ -43,6 +46,7 @@ struct suspend_info {
|
||||
void (*post)(int cancelled);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_HIBERNATE_CALLBACKS
|
||||
static void xen_hvm_post_suspend(int cancelled)
|
||||
{
|
||||
xen_arch_hvm_post_suspend(cancelled);
|
||||
@ -63,7 +67,6 @@ static void xen_post_suspend(int cancelled)
|
||||
xen_mm_unpin_all();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HIBERNATE_CALLBACKS
|
||||
static int xen_suspend(void *data)
|
||||
{
|
||||
struct suspend_info *si = data;
|
||||
@ -73,8 +76,7 @@ static int xen_suspend(void *data)
|
||||
|
||||
err = syscore_suspend();
|
||||
if (err) {
|
||||
printk(KERN_ERR "xen_suspend: system core suspend failed: %d\n",
|
||||
err);
|
||||
pr_err("%s: system core suspend failed: %d\n", __func__, err);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -115,14 +117,14 @@ static void do_suspend(void)
|
||||
during suspend. */
|
||||
err = freeze_processes();
|
||||
if (err) {
|
||||
printk(KERN_ERR "xen suspend: freeze failed %d\n", err);
|
||||
pr_err("%s: freeze failed %d\n", __func__, err);
|
||||
goto out;
|
||||
}
|
||||
#endif
|
||||
|
||||
err = dpm_suspend_start(PMSG_FREEZE);
|
||||
if (err) {
|
||||
printk(KERN_ERR "xen suspend: dpm_suspend_start %d\n", err);
|
||||
pr_err("%s: dpm_suspend_start %d\n", __func__, err);
|
||||
goto out_thaw;
|
||||
}
|
||||
|
||||
@ -131,7 +133,7 @@ static void do_suspend(void)
|
||||
|
||||
err = dpm_suspend_end(PMSG_FREEZE);
|
||||
if (err) {
|
||||
printk(KERN_ERR "dpm_suspend_end failed: %d\n", err);
|
||||
pr_err("dpm_suspend_end failed: %d\n", err);
|
||||
si.cancelled = 0;
|
||||
goto out_resume;
|
||||
}
|
||||
@ -153,7 +155,7 @@ static void do_suspend(void)
|
||||
dpm_resume_start(si.cancelled ? PMSG_THAW : PMSG_RESTORE);
|
||||
|
||||
if (err) {
|
||||
printk(KERN_ERR "failed to start xen_suspend: %d\n", err);
|
||||
pr_err("failed to start xen_suspend: %d\n", err);
|
||||
si.cancelled = 1;
|
||||
}
|
||||
|
||||
@ -245,7 +247,7 @@ static void shutdown_handler(struct xenbus_watch *watch,
|
||||
if (handler->cb) {
|
||||
handler->cb();
|
||||
} else {
|
||||
printk(KERN_INFO "Ignoring shutdown request: %s\n", str);
|
||||
pr_info("Ignoring shutdown request: %s\n", str);
|
||||
shutting_down = SHUTDOWN_INVALID;
|
||||
}
|
||||
|
||||
@ -265,8 +267,7 @@ static void sysrq_handler(struct xenbus_watch *watch, const char **vec,
|
||||
if (err)
|
||||
return;
|
||||
if (!xenbus_scanf(xbt, "control", "sysrq", "%c", &sysrq_key)) {
|
||||
printk(KERN_ERR "Unable to read sysrq code in "
|
||||
"control/sysrq\n");
|
||||
pr_err("Unable to read sysrq code in control/sysrq\n");
|
||||
xenbus_transaction_end(xbt, 1);
|
||||
return;
|
||||
}
|
||||
@ -299,14 +300,14 @@ static int setup_shutdown_watcher(void)
|
||||
|
||||
err = register_xenbus_watch(&shutdown_watch);
|
||||
if (err) {
|
||||
printk(KERN_ERR "Failed to set shutdown watcher\n");
|
||||
pr_err("Failed to set shutdown watcher\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MAGIC_SYSRQ
|
||||
err = register_xenbus_watch(&sysrq_watch);
|
||||
if (err) {
|
||||
printk(KERN_ERR "Failed to set sysrq watcher\n");
|
||||
pr_err("Failed to set sysrq watcher\n");
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
@ -32,6 +32,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen_mcelog: " fmt
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
@ -51,8 +53,6 @@
|
||||
#include <asm/xen/hypercall.h>
|
||||
#include <asm/xen/hypervisor.h>
|
||||
|
||||
#define XEN_MCELOG "xen_mcelog: "
|
||||
|
||||
static struct mc_info g_mi;
|
||||
static struct mcinfo_logical_cpu *g_physinfo;
|
||||
static uint32_t ncpus;
|
||||
@ -227,7 +227,7 @@ static int convert_log(struct mc_info *mi)
|
||||
mic = NULL;
|
||||
x86_mcinfo_lookup(&mic, mi, MC_TYPE_GLOBAL);
|
||||
if (unlikely(!mic)) {
|
||||
pr_warning(XEN_MCELOG "Failed to find global error info\n");
|
||||
pr_warn("Failed to find global error info\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -241,8 +241,7 @@ static int convert_log(struct mc_info *mi)
|
||||
if (g_physinfo[i].mc_apicid == m.apicid)
|
||||
break;
|
||||
if (unlikely(i == ncpus)) {
|
||||
pr_warning(XEN_MCELOG "Failed to match cpu with apicid %d\n",
|
||||
m.apicid);
|
||||
pr_warn("Failed to match cpu with apicid %d\n", m.apicid);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -254,7 +253,7 @@ static int convert_log(struct mc_info *mi)
|
||||
mic = NULL;
|
||||
x86_mcinfo_lookup(&mic, mi, MC_TYPE_BANK);
|
||||
if (unlikely(!mic)) {
|
||||
pr_warning(XEN_MCELOG "Fail to find bank error info\n");
|
||||
pr_warn("Fail to find bank error info\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -295,9 +294,8 @@ static int mc_queue_handle(uint32_t flags)
|
||||
mc_op.u.mc_fetch.flags = flags;
|
||||
ret = HYPERVISOR_mca(&mc_op);
|
||||
if (ret) {
|
||||
pr_err(XEN_MCELOG "Failed to fetch %s error log\n",
|
||||
(flags == XEN_MC_URGENT) ?
|
||||
"urgnet" : "nonurgent");
|
||||
pr_err("Failed to fetch %surgent error log\n",
|
||||
flags == XEN_MC_URGENT ? "" : "non");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -307,15 +305,12 @@ static int mc_queue_handle(uint32_t flags)
|
||||
else {
|
||||
ret = convert_log(&g_mi);
|
||||
if (ret)
|
||||
pr_warning(XEN_MCELOG
|
||||
"Failed to convert this error log, "
|
||||
"continue acking it anyway\n");
|
||||
pr_warn("Failed to convert this error log, continue acking it anyway\n");
|
||||
|
||||
mc_op.u.mc_fetch.flags = flags | XEN_MC_ACK;
|
||||
ret = HYPERVISOR_mca(&mc_op);
|
||||
if (ret) {
|
||||
pr_err(XEN_MCELOG
|
||||
"Failed to ack previous error log\n");
|
||||
pr_err("Failed to ack previous error log\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -334,15 +329,12 @@ static void xen_mce_work_fn(struct work_struct *work)
|
||||
/* urgent mc_info */
|
||||
err = mc_queue_handle(XEN_MC_URGENT);
|
||||
if (err)
|
||||
pr_err(XEN_MCELOG
|
||||
"Failed to handle urgent mc_info queue, "
|
||||
"continue handling nonurgent mc_info queue anyway.\n");
|
||||
pr_err("Failed to handle urgent mc_info queue, continue handling nonurgent mc_info queue anyway\n");
|
||||
|
||||
/* nonurgent mc_info */
|
||||
err = mc_queue_handle(XEN_MC_NONURGENT);
|
||||
if (err)
|
||||
pr_err(XEN_MCELOG
|
||||
"Failed to handle nonurgent mc_info queue.\n");
|
||||
pr_err("Failed to handle nonurgent mc_info queue\n");
|
||||
|
||||
/* wake processes polling /dev/mcelog */
|
||||
wake_up_interruptible(&xen_mce_chrdev_wait);
|
||||
@ -370,7 +362,7 @@ static int bind_virq_for_mce(void)
|
||||
set_xen_guest_handle(mc_op.u.mc_physcpuinfo.info, g_physinfo);
|
||||
ret = HYPERVISOR_mca(&mc_op);
|
||||
if (ret) {
|
||||
pr_err(XEN_MCELOG "Failed to get CPU numbers\n");
|
||||
pr_err("Failed to get CPU numbers\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -383,7 +375,7 @@ static int bind_virq_for_mce(void)
|
||||
set_xen_guest_handle(mc_op.u.mc_physcpuinfo.info, g_physinfo);
|
||||
ret = HYPERVISOR_mca(&mc_op);
|
||||
if (ret) {
|
||||
pr_err(XEN_MCELOG "Failed to get CPU info\n");
|
||||
pr_err("Failed to get CPU info\n");
|
||||
kfree(g_physinfo);
|
||||
return ret;
|
||||
}
|
||||
@ -391,7 +383,7 @@ static int bind_virq_for_mce(void)
|
||||
ret = bind_virq_to_irqhandler(VIRQ_MCA, 0,
|
||||
xen_mce_interrupt, 0, "mce", NULL);
|
||||
if (ret < 0) {
|
||||
pr_err(XEN_MCELOG "Failed to bind virq\n");
|
||||
pr_err("Failed to bind virq\n");
|
||||
kfree(g_physinfo);
|
||||
return ret;
|
||||
}
|
||||
|
@ -31,6 +31,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen_cpu: " fmt
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/cpu.h>
|
||||
@ -44,7 +46,6 @@
|
||||
#include <asm/xen/hypervisor.h>
|
||||
#include <asm/xen/hypercall.h>
|
||||
|
||||
#define XEN_PCPU "xen_cpu: "
|
||||
|
||||
/*
|
||||
* @cpu_id: Xen physical cpu logic number
|
||||
@ -242,8 +243,7 @@ static struct pcpu *create_and_register_pcpu(struct xenpf_pcpuinfo *info)
|
||||
|
||||
err = register_pcpu(pcpu);
|
||||
if (err) {
|
||||
pr_warning(XEN_PCPU "Failed to register pcpu%u\n",
|
||||
info->xen_cpuid);
|
||||
pr_warn("Failed to register pcpu%u\n", info->xen_cpuid);
|
||||
return ERR_PTR(-ENOENT);
|
||||
}
|
||||
|
||||
@ -378,19 +378,19 @@ static int __init xen_pcpu_init(void)
|
||||
xen_pcpu_interrupt, 0,
|
||||
"xen-pcpu", NULL);
|
||||
if (irq < 0) {
|
||||
pr_warning(XEN_PCPU "Failed to bind pcpu virq\n");
|
||||
pr_warn("Failed to bind pcpu virq\n");
|
||||
return irq;
|
||||
}
|
||||
|
||||
ret = subsys_system_register(&xen_pcpu_subsys, NULL);
|
||||
if (ret) {
|
||||
pr_warning(XEN_PCPU "Failed to register pcpu subsys\n");
|
||||
pr_warn("Failed to register pcpu subsys\n");
|
||||
goto err1;
|
||||
}
|
||||
|
||||
ret = xen_sync_pcpus();
|
||||
if (ret) {
|
||||
pr_warning(XEN_PCPU "Failed to sync pcpu info\n");
|
||||
pr_warn("Failed to sync pcpu info\n");
|
||||
goto err2;
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,8 @@
|
||||
* Copyright (c) 2002-2004, K A Fraser, B Dragovic
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/sched.h>
|
||||
@ -565,7 +567,7 @@ static int __init privcmd_init(void)
|
||||
|
||||
err = misc_register(&privcmd_dev);
|
||||
if (err != 0) {
|
||||
printk(KERN_ERR "Could not register Xen privcmd device\n");
|
||||
pr_err("Could not register Xen privcmd device\n");
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
|
@ -33,6 +33,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/export.h>
|
||||
@ -202,8 +204,8 @@ retry:
|
||||
order--;
|
||||
}
|
||||
if (order != get_order(bytes)) {
|
||||
pr_warn("Warning: only able to allocate %ld MB "
|
||||
"for software IO TLB\n", (PAGE_SIZE << order) >> 20);
|
||||
pr_warn("Warning: only able to allocate %ld MB for software IO TLB\n",
|
||||
(PAGE_SIZE << order) >> 20);
|
||||
xen_io_tlb_nslabs = SLABS_PER_PAGE << order;
|
||||
bytes = xen_io_tlb_nslabs << IO_TLB_SHIFT;
|
||||
}
|
||||
@ -242,11 +244,11 @@ error:
|
||||
if (repeat--) {
|
||||
xen_io_tlb_nslabs = max(1024UL, /* Min is 2MB */
|
||||
(xen_io_tlb_nslabs >> 1));
|
||||
printk(KERN_INFO "Xen-SWIOTLB: Lowering to %luMB\n",
|
||||
(xen_io_tlb_nslabs << IO_TLB_SHIFT) >> 20);
|
||||
pr_info("Lowering to %luMB\n",
|
||||
(xen_io_tlb_nslabs << IO_TLB_SHIFT) >> 20);
|
||||
goto retry;
|
||||
}
|
||||
pr_err("%s (rc:%d)", xen_swiotlb_error(m_ret), rc);
|
||||
pr_err("%s (rc:%d)\n", xen_swiotlb_error(m_ret), rc);
|
||||
if (early)
|
||||
panic("%s (rc:%d)", xen_swiotlb_error(m_ret), rc);
|
||||
else
|
||||
|
@ -5,6 +5,8 @@
|
||||
* Author: Dan Magenheimer
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
@ -388,8 +390,8 @@ static int xen_tmem_init(void)
|
||||
return PTR_ERR(old_ops);
|
||||
s = " (WARNING: frontswap_ops overridden)";
|
||||
}
|
||||
printk(KERN_INFO "frontswap enabled, RAM provided by "
|
||||
"Xen Transcendent Memory%s\n", s);
|
||||
pr_info("frontswap enabled, RAM provided by Xen Transcendent Memory%s\n",
|
||||
s);
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_CLEANCACHE
|
||||
@ -400,8 +402,8 @@ static int xen_tmem_init(void)
|
||||
cleancache_register_ops(&tmem_cleancache_ops);
|
||||
if (old_ops)
|
||||
s = " (WARNING: cleancache_ops overridden)";
|
||||
printk(KERN_INFO "cleancache enabled, RAM provided by "
|
||||
"Xen Transcendent Memory%s\n", s);
|
||||
pr_info("cleancache enabled, RAM provided by Xen Transcendent Memory%s\n",
|
||||
s);
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_XEN_SELFBALLOONING
|
||||
|
@ -15,6 +15,8 @@
|
||||
* details.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -15,6 +15,8 @@
|
||||
* details.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -14,6 +14,8 @@
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <acpi/acpi_bus.h>
|
||||
|
@ -17,6 +17,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/freezer.h>
|
||||
@ -34,8 +36,6 @@
|
||||
#include <xen/interface/platform.h>
|
||||
#include <asm/xen/hypercall.h>
|
||||
|
||||
#define DRV_NAME "xen-acpi-processor: "
|
||||
|
||||
static int no_hypercall;
|
||||
MODULE_PARM_DESC(off, "Inhibit the hypercall.");
|
||||
module_param_named(off, no_hypercall, int, 0400);
|
||||
@ -104,7 +104,7 @@ static int push_cxx_to_hypervisor(struct acpi_processor *_pr)
|
||||
set_xen_guest_handle(dst_cx->dp, NULL);
|
||||
}
|
||||
if (!ok) {
|
||||
pr_debug(DRV_NAME "No _Cx for ACPI CPU %u\n", _pr->acpi_id);
|
||||
pr_debug("No _Cx for ACPI CPU %u\n", _pr->acpi_id);
|
||||
kfree(dst_cx_states);
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -133,7 +133,7 @@ static int push_cxx_to_hypervisor(struct acpi_processor *_pr)
|
||||
/* EINVAL means the ACPI ID is incorrect - meaning the ACPI
|
||||
* table is referencing a non-existing CPU - which can happen
|
||||
* with broken ACPI tables. */
|
||||
pr_err(DRV_NAME "(CX): Hypervisor error (%d) for ACPI CPU%u\n",
|
||||
pr_err("(CX): Hypervisor error (%d) for ACPI CPU%u\n",
|
||||
ret, _pr->acpi_id);
|
||||
|
||||
kfree(dst_cx_states);
|
||||
@ -239,7 +239,7 @@ static int push_pxx_to_hypervisor(struct acpi_processor *_pr)
|
||||
dst_perf->flags |= XEN_PX_PSD;
|
||||
|
||||
if (dst_perf->flags != (XEN_PX_PSD | XEN_PX_PSS | XEN_PX_PCT | XEN_PX_PPC)) {
|
||||
pr_warn(DRV_NAME "ACPI CPU%u missing some P-state data (%x), skipping.\n",
|
||||
pr_warn("ACPI CPU%u missing some P-state data (%x), skipping\n",
|
||||
_pr->acpi_id, dst_perf->flags);
|
||||
ret = -ENODEV;
|
||||
goto err_free;
|
||||
@ -265,8 +265,8 @@ static int push_pxx_to_hypervisor(struct acpi_processor *_pr)
|
||||
/* EINVAL means the ACPI ID is incorrect - meaning the ACPI
|
||||
* table is referencing a non-existing CPU - which can happen
|
||||
* with broken ACPI tables. */
|
||||
pr_warn(DRV_NAME "(_PXX): Hypervisor error (%d) for ACPI CPU%u\n",
|
||||
ret, _pr->acpi_id);
|
||||
pr_warn("(_PXX): Hypervisor error (%d) for ACPI CPU%u\n",
|
||||
ret, _pr->acpi_id);
|
||||
err_free:
|
||||
if (!IS_ERR_OR_NULL(dst_states))
|
||||
kfree(dst_states);
|
||||
@ -318,7 +318,7 @@ static unsigned int __init get_max_acpi_id(void)
|
||||
max_acpi_id = max(info->acpi_id, max_acpi_id);
|
||||
}
|
||||
max_acpi_id *= 2; /* Slack for CPU hotplug support. */
|
||||
pr_debug(DRV_NAME "Max ACPI ID: %u\n", max_acpi_id);
|
||||
pr_debug("Max ACPI ID: %u\n", max_acpi_id);
|
||||
return max_acpi_id;
|
||||
}
|
||||
/*
|
||||
@ -365,15 +365,14 @@ read_acpi_id(acpi_handle handle, u32 lvl, void *context, void **rv)
|
||||
/* There are more ACPI Processor objects than in x2APIC or MADT.
|
||||
* This can happen with incorrect ACPI SSDT declerations. */
|
||||
if (acpi_id > nr_acpi_bits) {
|
||||
pr_debug(DRV_NAME "We only have %u, trying to set %u\n",
|
||||
pr_debug("We only have %u, trying to set %u\n",
|
||||
nr_acpi_bits, acpi_id);
|
||||
return AE_OK;
|
||||
}
|
||||
/* OK, There is a ACPI Processor object */
|
||||
__set_bit(acpi_id, acpi_id_present);
|
||||
|
||||
pr_debug(DRV_NAME "ACPI CPU%u w/ PBLK:0x%lx\n", acpi_id,
|
||||
(unsigned long)pblk);
|
||||
pr_debug("ACPI CPU%u w/ PBLK:0x%lx\n", acpi_id, (unsigned long)pblk);
|
||||
|
||||
status = acpi_evaluate_object(handle, "_CST", NULL, &buffer);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
@ -476,7 +475,7 @@ static int xen_upload_processor_pm_data(void)
|
||||
unsigned int i;
|
||||
int rc = 0;
|
||||
|
||||
pr_info(DRV_NAME "Uploading Xen processor PM info\n");
|
||||
pr_info("Uploading Xen processor PM info\n");
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
struct acpi_processor *_pr;
|
||||
@ -523,7 +522,7 @@ static int __init xen_acpi_processor_init(void)
|
||||
|
||||
acpi_perf_data = alloc_percpu(struct acpi_processor_performance);
|
||||
if (!acpi_perf_data) {
|
||||
pr_debug(DRV_NAME "Memory allocation error for acpi_perf_data.\n");
|
||||
pr_debug("Memory allocation error for acpi_perf_data\n");
|
||||
kfree(acpi_ids_done);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -30,6 +30,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/capability.h>
|
||||
@ -81,7 +83,7 @@ static int balloon_init_watcher(struct notifier_block *notifier,
|
||||
|
||||
err = register_xenbus_watch(&target_watch);
|
||||
if (err)
|
||||
printk(KERN_ERR "Failed to set balloon watcher\n");
|
||||
pr_err("Failed to set balloon watcher\n");
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
@ -95,7 +97,7 @@ static int __init balloon_init(void)
|
||||
if (!xen_domain())
|
||||
return -ENODEV;
|
||||
|
||||
pr_info("xen-balloon: Initialising balloon driver.\n");
|
||||
pr_info("Initialising balloon driver\n");
|
||||
|
||||
register_balloon(&balloon_dev);
|
||||
|
||||
|
@ -4,6 +4,8 @@
|
||||
* Author: Ryan Wilson <hap9@epoch.ncsc.mil>
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pci.h>
|
||||
#include "pciback.h"
|
||||
@ -75,10 +77,8 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)
|
||||
pci_name(dev));
|
||||
err = pci_set_mwi(dev);
|
||||
if (err) {
|
||||
printk(KERN_WARNING
|
||||
DRV_NAME ": %s: cannot enable "
|
||||
"memory-write-invalidate (%d)\n",
|
||||
pci_name(dev), err);
|
||||
pr_warn("%s: cannot enable memory-write-invalidate (%d)\n",
|
||||
pci_name(dev), err);
|
||||
value &= ~PCI_COMMAND_INVALIDATE;
|
||||
}
|
||||
}
|
||||
@ -91,7 +91,7 @@ static int rom_write(struct pci_dev *dev, int offset, u32 value, void *data)
|
||||
struct pci_bar_info *bar = data;
|
||||
|
||||
if (unlikely(!bar)) {
|
||||
printk(KERN_WARNING DRV_NAME ": driver data not found for %s\n",
|
||||
pr_warn(DRV_NAME ": driver data not found for %s\n",
|
||||
pci_name(dev));
|
||||
return XEN_PCI_ERR_op_failed;
|
||||
}
|
||||
@ -125,7 +125,7 @@ static int bar_write(struct pci_dev *dev, int offset, u32 value, void *data)
|
||||
struct pci_bar_info *bar = data;
|
||||
|
||||
if (unlikely(!bar)) {
|
||||
printk(KERN_WARNING DRV_NAME ": driver data not found for %s\n",
|
||||
pr_warn(DRV_NAME ": driver data not found for %s\n",
|
||||
pci_name(dev));
|
||||
return XEN_PCI_ERR_op_failed;
|
||||
}
|
||||
@ -153,7 +153,7 @@ static int bar_read(struct pci_dev *dev, int offset, u32 * value, void *data)
|
||||
struct pci_bar_info *bar = data;
|
||||
|
||||
if (unlikely(!bar)) {
|
||||
printk(KERN_WARNING DRV_NAME ": driver data not found for %s\n",
|
||||
pr_warn(DRV_NAME ": driver data not found for %s\n",
|
||||
pci_name(dev));
|
||||
return XEN_PCI_ERR_op_failed;
|
||||
}
|
||||
@ -375,7 +375,7 @@ int xen_pcibk_config_header_add_fields(struct pci_dev *dev)
|
||||
|
||||
default:
|
||||
err = -EINVAL;
|
||||
printk(KERN_ERR DRV_NAME ": %s: Unsupported header type %d!\n",
|
||||
pr_err("%s: Unsupported header type %d!\n",
|
||||
pci_name(dev), dev->hdr_type);
|
||||
break;
|
||||
}
|
||||
|
@ -4,6 +4,9 @@
|
||||
* Ryan Wilson <hap9@epoch.ncsc.mil>
|
||||
* Chris Bookholt <hap10@epoch.ncsc.mil>
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/rwsem.h>
|
||||
@ -425,8 +428,6 @@ static int __init pcistub_init_devices_late(void)
|
||||
unsigned long flags;
|
||||
int err = 0;
|
||||
|
||||
pr_debug(DRV_NAME ": pcistub_init_devices_late\n");
|
||||
|
||||
spin_lock_irqsave(&pcistub_devices_lock, flags);
|
||||
|
||||
while (!list_empty(&seized_devices)) {
|
||||
@ -544,15 +545,11 @@ static void pcistub_remove(struct pci_dev *dev)
|
||||
found_psdev->pdev);
|
||||
|
||||
if (found_psdev->pdev) {
|
||||
printk(KERN_WARNING DRV_NAME ": ****** removing device "
|
||||
"%s while still in-use! ******\n",
|
||||
pr_warn("****** removing device %s while still in-use! ******\n",
|
||||
pci_name(found_psdev->dev));
|
||||
printk(KERN_WARNING DRV_NAME ": ****** driver domain may"
|
||||
" still access this device's i/o resources!\n");
|
||||
printk(KERN_WARNING DRV_NAME ": ****** shutdown driver "
|
||||
"domain before binding device\n");
|
||||
printk(KERN_WARNING DRV_NAME ": ****** to other drivers "
|
||||
"or domains\n");
|
||||
pr_warn("****** driver domain may still access this device's i/o resources!\n");
|
||||
pr_warn("****** shutdown driver domain before binding device\n");
|
||||
pr_warn("****** to other drivers or domains\n");
|
||||
|
||||
xen_pcibk_release_pci_dev(found_psdev->pdev,
|
||||
found_psdev->dev);
|
||||
@ -1018,7 +1015,7 @@ static int pcistub_device_id_add(int domain, int bus, int slot, int func)
|
||||
pci_dev_id->bus = bus;
|
||||
pci_dev_id->devfn = devfn;
|
||||
|
||||
pr_debug(DRV_NAME ": wants to seize %04x:%02x:%02x.%d\n",
|
||||
pr_debug("wants to seize %04x:%02x:%02x.%d\n",
|
||||
domain, bus, slot, func);
|
||||
|
||||
spin_lock_irqsave(&device_ids_lock, flags);
|
||||
@ -1048,8 +1045,8 @@ static int pcistub_device_id_remove(int domain, int bus, int slot, int func)
|
||||
|
||||
err = 0;
|
||||
|
||||
pr_debug(DRV_NAME ": removed %04x:%02x:%02x.%d from "
|
||||
"seize list\n", domain, bus, slot, func);
|
||||
pr_debug("removed %04x:%02x:%02x.%d from seize list\n",
|
||||
domain, bus, slot, func);
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&device_ids_lock, flags);
|
||||
@ -1196,19 +1193,23 @@ static ssize_t pcistub_irq_handler_switch(struct device_driver *drv,
|
||||
struct pcistub_device *psdev;
|
||||
struct xen_pcibk_dev_data *dev_data;
|
||||
int domain, bus, slot, func;
|
||||
int err = -ENOENT;
|
||||
int err;
|
||||
|
||||
err = str_to_slot(buf, &domain, &bus, &slot, &func);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
psdev = pcistub_device_find(domain, bus, slot, func);
|
||||
if (!psdev)
|
||||
if (!psdev) {
|
||||
err = -ENOENT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
dev_data = pci_get_drvdata(psdev->dev);
|
||||
if (!dev_data)
|
||||
if (!dev_data) {
|
||||
err = -ENOENT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
dev_dbg(&psdev->dev->dev, "%s fake irq handler: %d->%d\n",
|
||||
dev_data->irq_name, dev_data->isr_on,
|
||||
@ -1470,7 +1471,7 @@ out:
|
||||
return err;
|
||||
|
||||
parse_error:
|
||||
printk(KERN_ERR DRV_NAME ": Error parsing pci_devs_to_hide at \"%s\"\n",
|
||||
pr_err("Error parsing pci_devs_to_hide at \"%s\"\n",
|
||||
pci_devs_to_hide + pos);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -3,6 +3,9 @@
|
||||
*
|
||||
* Author: Ryan Wilson <hap9@epoch.ncsc.mil>
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/bitops.h>
|
||||
@ -144,7 +147,7 @@ int xen_pcibk_enable_msi(struct xen_pcibk_device *pdev,
|
||||
status = pci_enable_msi(dev);
|
||||
|
||||
if (status) {
|
||||
pr_warn_ratelimited(DRV_NAME ": %s: error enabling MSI for guest %u: err %d\n",
|
||||
pr_warn_ratelimited("%s: error enabling MSI for guest %u: err %d\n",
|
||||
pci_name(dev), pdev->xdev->otherend_id,
|
||||
status);
|
||||
op->value = 0;
|
||||
@ -225,7 +228,7 @@ int xen_pcibk_enable_msix(struct xen_pcibk_device *pdev,
|
||||
op->msix_entries[i].vector);
|
||||
}
|
||||
} else
|
||||
pr_warn_ratelimited(DRV_NAME ": %s: error enabling MSI-X for guest %u: err %d!\n",
|
||||
pr_warn_ratelimited("%s: error enabling MSI-X for guest %u: err %d!\n",
|
||||
pci_name(dev), pdev->xdev->otherend_id,
|
||||
result);
|
||||
kfree(entries);
|
||||
@ -372,7 +375,7 @@ static irqreturn_t xen_pcibk_guest_interrupt(int irq, void *dev_id)
|
||||
dev_data->handled++;
|
||||
if ((dev_data->handled % 1000) == 0) {
|
||||
if (xen_test_irq_shared(irq)) {
|
||||
printk(KERN_INFO "%s IRQ line is not shared "
|
||||
pr_info("%s IRQ line is not shared "
|
||||
"with other domains. Turning ISR off\n",
|
||||
dev_data->irq_name);
|
||||
dev_data->ack_intr = 0;
|
||||
|
@ -5,6 +5,8 @@
|
||||
* Author: Ryan Wilson <hap9@epoch.ncsc.mil>
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/pci.h>
|
||||
@ -102,8 +104,7 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,
|
||||
struct pci_dev_entry, list);
|
||||
|
||||
if (match_slot(dev, t->dev)) {
|
||||
pr_info(DRV_NAME ": vpci: %s: "
|
||||
"assign to virtual slot %d func %d\n",
|
||||
pr_info("vpci: %s: assign to virtual slot %d func %d\n",
|
||||
pci_name(dev), slot,
|
||||
PCI_FUNC(dev->devfn));
|
||||
list_add_tail(&dev_entry->list,
|
||||
@ -117,9 +118,8 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,
|
||||
/* Assign to a new slot on the virtual PCI bus */
|
||||
for (slot = 0; slot < PCI_SLOT_MAX; slot++) {
|
||||
if (list_empty(&vpci_dev->dev_list[slot])) {
|
||||
printk(KERN_INFO DRV_NAME
|
||||
": vpci: %s: assign to virtual slot %d\n",
|
||||
pci_name(dev), slot);
|
||||
pr_info("vpci: %s: assign to virtual slot %d\n",
|
||||
pci_name(dev), slot);
|
||||
list_add_tail(&dev_entry->list,
|
||||
&vpci_dev->dev_list[slot]);
|
||||
func = dev->is_virtfn ? 0 : PCI_FUNC(dev->devfn);
|
||||
|
@ -3,6 +3,9 @@
|
||||
*
|
||||
* Author: Ryan Wilson <hap9@epoch.ncsc.mil>
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/list.h>
|
||||
@ -723,14 +726,13 @@ int __init xen_pcibk_xenbus_register(void)
|
||||
{
|
||||
xen_pcibk_wq = create_workqueue("xen_pciback_workqueue");
|
||||
if (!xen_pcibk_wq) {
|
||||
printk(KERN_ERR "%s: create"
|
||||
"xen_pciback_workqueue failed\n", __func__);
|
||||
pr_err("%s: create xen_pciback_workqueue failed\n", __func__);
|
||||
return -EFAULT;
|
||||
}
|
||||
xen_pcibk_backend = &xen_pcibk_vpci_backend;
|
||||
if (passthrough)
|
||||
xen_pcibk_backend = &xen_pcibk_passthrough_backend;
|
||||
pr_info(DRV_NAME ": backend is %s\n", xen_pcibk_backend->name);
|
||||
pr_info("backend is %s\n", xen_pcibk_backend->name);
|
||||
return xenbus_register_backend(&xen_pcibk_driver);
|
||||
}
|
||||
|
||||
|
@ -64,6 +64,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/swap.h>
|
||||
@ -510,22 +512,19 @@ int xen_selfballoon_init(bool use_selfballooning, bool use_frontswap_selfshrink)
|
||||
return -ENODEV;
|
||||
|
||||
if (xen_initial_domain()) {
|
||||
pr_info("xen/balloon: Xen selfballooning driver "
|
||||
"disabled for domain0.\n");
|
||||
pr_info("Xen selfballooning driver disabled for domain0\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
xen_selfballooning_enabled = tmem_enabled && use_selfballooning;
|
||||
if (xen_selfballooning_enabled) {
|
||||
pr_info("xen/balloon: Initializing Xen "
|
||||
"selfballooning driver.\n");
|
||||
pr_info("Initializing Xen selfballooning driver\n");
|
||||
enable = true;
|
||||
}
|
||||
#ifdef CONFIG_FRONTSWAP
|
||||
frontswap_selfshrinking = tmem_enabled && use_frontswap_selfshrink;
|
||||
if (frontswap_selfshrinking) {
|
||||
pr_info("xen/balloon: Initializing frontswap "
|
||||
"selfshrinking driver.\n");
|
||||
pr_info("Initializing frontswap selfshrinking driver\n");
|
||||
enable = true;
|
||||
}
|
||||
#endif
|
||||
|
@ -30,6 +30,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/wait.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/sched.h>
|
||||
@ -205,13 +207,12 @@ int xb_init_comms(void)
|
||||
struct xenstore_domain_interface *intf = xen_store_interface;
|
||||
|
||||
if (intf->req_prod != intf->req_cons)
|
||||
printk(KERN_ERR "XENBUS request ring is not quiescent "
|
||||
"(%08x:%08x)!\n", intf->req_cons, intf->req_prod);
|
||||
pr_err("request ring is not quiescent (%08x:%08x)!\n",
|
||||
intf->req_cons, intf->req_prod);
|
||||
|
||||
if (intf->rsp_prod != intf->rsp_cons) {
|
||||
printk(KERN_WARNING "XENBUS response ring is not quiescent "
|
||||
"(%08x:%08x): fixing up\n",
|
||||
intf->rsp_cons, intf->rsp_prod);
|
||||
pr_warn("response ring is not quiescent (%08x:%08x): fixing up\n",
|
||||
intf->rsp_cons, intf->rsp_prod);
|
||||
/* breaks kdump */
|
||||
if (!reset_devices)
|
||||
intf->rsp_cons = intf->rsp_prod;
|
||||
@ -225,7 +226,7 @@ int xb_init_comms(void)
|
||||
err = bind_evtchn_to_irqhandler(xen_store_evtchn, wake_waiting,
|
||||
0, "xenbus", &xb_waitq);
|
||||
if (err < 0) {
|
||||
printk(KERN_ERR "XENBUS request irq failed %i\n", err);
|
||||
pr_err("request irq failed %i\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
@ -127,7 +129,7 @@ static int __init xenbus_backend_init(void)
|
||||
|
||||
err = misc_register(&xenbus_backend_dev);
|
||||
if (err)
|
||||
printk(KERN_ERR "Could not register xenbus backend device\n");
|
||||
pr_err("Could not register xenbus backend device\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,8 @@
|
||||
* Turned xenfs into a loadable module.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/uio.h>
|
||||
@ -616,7 +618,7 @@ static int __init xenbus_init(void)
|
||||
|
||||
err = misc_register(&xenbus_dev);
|
||||
if (err)
|
||||
printk(KERN_ERR "Could not register xenbus frontend device\n");
|
||||
pr_err("Could not register xenbus frontend device\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#define DPRINTK(fmt, args...) \
|
||||
pr_debug("xenbus_probe (%s:%d) " fmt ".\n", \
|
||||
__func__, __LINE__, ##args)
|
||||
@ -280,15 +282,15 @@ void xenbus_dev_shutdown(struct device *_dev)
|
||||
|
||||
get_device(&dev->dev);
|
||||
if (dev->state != XenbusStateConnected) {
|
||||
printk(KERN_INFO "%s: %s: %s != Connected, skipping\n", __func__,
|
||||
dev->nodename, xenbus_strstate(dev->state));
|
||||
pr_info("%s: %s: %s != Connected, skipping\n",
|
||||
__func__, dev->nodename, xenbus_strstate(dev->state));
|
||||
goto out;
|
||||
}
|
||||
xenbus_switch_state(dev, XenbusStateClosing);
|
||||
timeout = wait_for_completion_timeout(&dev->down, timeout);
|
||||
if (!timeout)
|
||||
printk(KERN_INFO "%s: %s timeout closing device\n",
|
||||
__func__, dev->nodename);
|
||||
pr_info("%s: %s timeout closing device\n",
|
||||
__func__, dev->nodename);
|
||||
out:
|
||||
put_device(&dev->dev);
|
||||
}
|
||||
@ -579,8 +581,7 @@ int xenbus_dev_suspend(struct device *dev)
|
||||
if (drv->suspend)
|
||||
err = drv->suspend(xdev);
|
||||
if (err)
|
||||
printk(KERN_WARNING
|
||||
"xenbus: suspend %s failed: %i\n", dev_name(dev), err);
|
||||
pr_warn("suspend %s failed: %i\n", dev_name(dev), err);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xenbus_dev_suspend);
|
||||
@ -599,9 +600,8 @@ int xenbus_dev_resume(struct device *dev)
|
||||
drv = to_xenbus_driver(dev->driver);
|
||||
err = talk_to_otherend(xdev);
|
||||
if (err) {
|
||||
printk(KERN_WARNING
|
||||
"xenbus: resume (talk_to_otherend) %s failed: %i\n",
|
||||
dev_name(dev), err);
|
||||
pr_warn("resume (talk_to_otherend) %s failed: %i\n",
|
||||
dev_name(dev), err);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -610,18 +610,15 @@ int xenbus_dev_resume(struct device *dev)
|
||||
if (drv->resume) {
|
||||
err = drv->resume(xdev);
|
||||
if (err) {
|
||||
printk(KERN_WARNING
|
||||
"xenbus: resume %s failed: %i\n",
|
||||
dev_name(dev), err);
|
||||
pr_warn("resume %s failed: %i\n", dev_name(dev), err);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
err = watch_otherend(xdev);
|
||||
if (err) {
|
||||
printk(KERN_WARNING
|
||||
"xenbus_probe: resume (watch_otherend) %s failed: "
|
||||
"%d.\n", dev_name(dev), err);
|
||||
pr_warn("resume (watch_otherend) %s failed: %d.\n",
|
||||
dev_name(dev), err);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -776,8 +773,7 @@ static int __init xenbus_init(void)
|
||||
/* Initialize the interface to xenstore. */
|
||||
err = xs_init();
|
||||
if (err) {
|
||||
printk(KERN_WARNING
|
||||
"XENBUS: Error initializing xenstore comms: %i\n", err);
|
||||
pr_warn("Error initializing xenstore comms: %i\n", err);
|
||||
goto out_error;
|
||||
}
|
||||
|
||||
|
@ -31,9 +31,11 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define DPRINTK(fmt, args...) \
|
||||
pr_debug("xenbus_probe (%s:%d) " fmt ".\n", \
|
||||
__func__, __LINE__, ##args)
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#define DPRINTK(fmt, ...) \
|
||||
pr_debug("(%s:%d) " fmt "\n", \
|
||||
__func__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/err.h>
|
||||
|
@ -1,6 +1,8 @@
|
||||
#define DPRINTK(fmt, args...) \
|
||||
pr_debug("xenbus_probe (%s:%d) " fmt ".\n", \
|
||||
__func__, __LINE__, ##args)
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#define DPRINTK(fmt, ...) \
|
||||
pr_debug("(%s:%d) " fmt "\n", \
|
||||
__func__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/err.h>
|
||||
@ -36,13 +38,13 @@ static int frontend_bus_id(char bus_id[XEN_BUS_ID_SIZE], const char *nodename)
|
||||
{
|
||||
nodename = strchr(nodename, '/');
|
||||
if (!nodename || strlen(nodename + 1) >= XEN_BUS_ID_SIZE) {
|
||||
printk(KERN_WARNING "XENBUS: bad frontend %s\n", nodename);
|
||||
pr_warn("bad frontend %s\n", nodename);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
strlcpy(bus_id, nodename + 1, XEN_BUS_ID_SIZE);
|
||||
if (!strchr(bus_id, '/')) {
|
||||
printk(KERN_WARNING "XENBUS: bus_id %s no slash\n", bus_id);
|
||||
pr_warn("bus_id %s no slash\n", bus_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
*strchr(bus_id, '/') = '-';
|
||||
@ -234,15 +236,13 @@ static int print_device_status(struct device *dev, void *data)
|
||||
|
||||
if (!dev->driver) {
|
||||
/* Information only: is this too noisy? */
|
||||
printk(KERN_INFO "XENBUS: Device with no driver: %s\n",
|
||||
xendev->nodename);
|
||||
pr_info("Device with no driver: %s\n", xendev->nodename);
|
||||
} else if (xendev->state < XenbusStateConnected) {
|
||||
enum xenbus_state rstate = XenbusStateUnknown;
|
||||
if (xendev->otherend)
|
||||
rstate = xenbus_read_driver_state(xendev->otherend);
|
||||
printk(KERN_WARNING "XENBUS: Timeout connecting "
|
||||
"to device: %s (local state %d, remote state %d)\n",
|
||||
xendev->nodename, xendev->state, rstate);
|
||||
pr_warn("Timeout connecting to device: %s (local state %d, remote state %d)\n",
|
||||
xendev->nodename, xendev->state, rstate);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -256,12 +256,13 @@ static bool wait_loop(unsigned long start, unsigned int max_delay,
|
||||
{
|
||||
if (time_after(jiffies, start + (*seconds_waited+5)*HZ)) {
|
||||
if (!*seconds_waited)
|
||||
printk(KERN_WARNING "XENBUS: Waiting for "
|
||||
"devices to initialise: ");
|
||||
pr_warn("Waiting for devices to initialise: ");
|
||||
*seconds_waited += 5;
|
||||
printk("%us...", max_delay - *seconds_waited);
|
||||
if (*seconds_waited == max_delay)
|
||||
pr_cont("%us...", max_delay - *seconds_waited);
|
||||
if (*seconds_waited == max_delay) {
|
||||
pr_cont("\n");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
schedule_timeout_interruptible(HZ/10);
|
||||
@ -342,7 +343,7 @@ static void xenbus_reset_wait_for_backend(char *be, int expected)
|
||||
timeout = wait_event_interruptible_timeout(backend_state_wq,
|
||||
backend_state == expected, 5 * HZ);
|
||||
if (timeout <= 0)
|
||||
printk(KERN_INFO "XENBUS: backend %s timed out.\n", be);
|
||||
pr_info("backend %s timed out\n", be);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -365,7 +366,7 @@ static void xenbus_reset_frontend(char *fe, char *be, int be_state)
|
||||
be_watch.callback = xenbus_reset_backend_state_changed;
|
||||
backend_state = XenbusStateUnknown;
|
||||
|
||||
printk(KERN_INFO "XENBUS: triggering reconnect on %s\n", be);
|
||||
pr_info("triggering reconnect on %s\n", be);
|
||||
register_xenbus_watch(&be_watch);
|
||||
|
||||
/* fall through to forward backend to state XenbusStateInitialising */
|
||||
@ -384,7 +385,7 @@ static void xenbus_reset_frontend(char *fe, char *be, int be_state)
|
||||
}
|
||||
|
||||
unregister_xenbus_watch(&be_watch);
|
||||
printk(KERN_INFO "XENBUS: reconnect done on %s\n", be);
|
||||
pr_info("reconnect done on %s\n", be);
|
||||
kfree(be_watch.node);
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/unistd.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
@ -129,9 +131,8 @@ static int get_error(const char *errorstring)
|
||||
|
||||
for (i = 0; strcmp(errorstring, xsd_errors[i].errstring) != 0; i++) {
|
||||
if (i == ARRAY_SIZE(xsd_errors) - 1) {
|
||||
printk(KERN_WARNING
|
||||
"XENBUS xen store gave: unknown error %s",
|
||||
errorstring);
|
||||
pr_warn("xen store gave: unknown error %s\n",
|
||||
errorstring);
|
||||
return EINVAL;
|
||||
}
|
||||
}
|
||||
@ -272,10 +273,8 @@ static void *xs_talkv(struct xenbus_transaction t,
|
||||
}
|
||||
|
||||
if (msg.type != type) {
|
||||
if (printk_ratelimit())
|
||||
printk(KERN_WARNING
|
||||
"XENBUS unexpected type [%d], expected [%d]\n",
|
||||
msg.type, type);
|
||||
pr_warn_ratelimited("unexpected type [%d], expected [%d]\n",
|
||||
msg.type, type);
|
||||
kfree(ret);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
@ -655,7 +654,7 @@ static void xs_reset_watches(void)
|
||||
|
||||
err = xs_error(xs_single(XBT_NIL, XS_RESET_WATCHES, "", NULL));
|
||||
if (err && err != -EEXIST)
|
||||
printk(KERN_WARNING "xs_reset_watches failed: %d\n", err);
|
||||
pr_warn("xs_reset_watches failed: %d\n", err);
|
||||
}
|
||||
|
||||
/* Register callback to watch this node. */
|
||||
@ -705,9 +704,7 @@ void unregister_xenbus_watch(struct xenbus_watch *watch)
|
||||
|
||||
err = xs_unwatch(watch->node, token);
|
||||
if (err)
|
||||
printk(KERN_WARNING
|
||||
"XENBUS Failed to release watch %s: %i\n",
|
||||
watch->node, err);
|
||||
pr_warn("Failed to release watch %s: %i\n", watch->node, err);
|
||||
|
||||
up_read(&xs_state.watch_mutex);
|
||||
|
||||
@ -901,8 +898,7 @@ static int xenbus_thread(void *unused)
|
||||
for (;;) {
|
||||
err = process_msg();
|
||||
if (err)
|
||||
printk(KERN_WARNING "XENBUS error %d while reading "
|
||||
"message\n", err);
|
||||
pr_warn("error %d while reading message\n", err);
|
||||
if (kthread_should_stop())
|
||||
break;
|
||||
}
|
||||
|
@ -18,6 +18,8 @@
|
||||
* Authors: Hollis Blanchard <hollisb@us.ibm.com>
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/mm.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/page.h>
|
||||
|
@ -7,6 +7,8 @@
|
||||
* Turned xenfs into a loadable module.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/module.h>
|
||||
@ -82,7 +84,7 @@ static int __init xenfs_init(void)
|
||||
if (xen_domain())
|
||||
return register_filesystem(&xenfs_type);
|
||||
|
||||
printk(KERN_INFO "XENFS: not registering filesystem on non-xen platform\n");
|
||||
pr_info("not registering filesystem on non-xen platform\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -44,8 +44,8 @@ static inline int hvm_get_parameter(int idx, uint64_t *value)
|
||||
xhv.index = idx;
|
||||
r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv);
|
||||
if (r < 0) {
|
||||
printk(KERN_ERR "Cannot get hvm parameter %s (%d): %d!\n",
|
||||
param_name(idx), idx, r);
|
||||
pr_err("Cannot get hvm parameter %s (%d): %d!\n",
|
||||
param_name(idx), idx, r);
|
||||
return r;
|
||||
}
|
||||
*value = xhv.value;
|
||||
|
Loading…
Reference in New Issue
Block a user