spinlock.c (cb9c6f15f318aa3aeb62fe525aa5c6dcf6eee159) spinlock.c (70dd4998cb85f0ecd6ac892cc7232abefa432efb)
1/*
2 * Split spinlock implementation out into its own file, so it can be
3 * compiled in a FTRACE-compatible way.
4 */
5#include <linux/kernel_stat.h>
6#include <linux/spinlock.h>
7#include <linux/debugfs.h>
8#include <linux/log2.h>

--- 353 unchanged lines hidden (view full) ---

362void __cpuinit xen_init_lock_cpu(int cpu)
363{
364 int irq;
365 const char *name;
366
367 WARN(per_cpu(lock_kicker_irq, cpu) > 0, "spinlock on CPU%d exists on IRQ%d!\n",
368 cpu, per_cpu(lock_kicker_irq, cpu));
369
1/*
2 * Split spinlock implementation out into its own file, so it can be
3 * compiled in a FTRACE-compatible way.
4 */
5#include <linux/kernel_stat.h>
6#include <linux/spinlock.h>
7#include <linux/debugfs.h>
8#include <linux/log2.h>

--- 353 unchanged lines hidden (view full) ---

362void __cpuinit xen_init_lock_cpu(int cpu)
363{
364 int irq;
365 const char *name;
366
367 WARN(per_cpu(lock_kicker_irq, cpu) > 0, "spinlock on CPU%d exists on IRQ%d!\n",
368 cpu, per_cpu(lock_kicker_irq, cpu));
369
370 /*
371 * See git commit f10cd522c5fbfec9ae3cc01967868c9c2401ed23
372 * (xen: disable PV spinlocks on HVM)
373 */
374 if (xen_hvm_domain())
375 return;
376
370 name = kasprintf(GFP_KERNEL, "spinlock%d", cpu);
371 irq = bind_ipi_to_irqhandler(XEN_SPIN_UNLOCK_VECTOR,
372 cpu,
373 dummy_handler,
374 IRQF_DISABLED|IRQF_PERCPU|IRQF_NOBALANCING,
375 name,
376 NULL);
377
378 if (irq >= 0) {
379 disable_irq(irq); /* make sure it's never delivered */
380 per_cpu(lock_kicker_irq, cpu) = irq;
381 }
382
383 printk("cpu %d spinlock event irq %d\n", cpu, irq);
384}
385
386void xen_uninit_lock_cpu(int cpu)
387{
377 name = kasprintf(GFP_KERNEL, "spinlock%d", cpu);
378 irq = bind_ipi_to_irqhandler(XEN_SPIN_UNLOCK_VECTOR,
379 cpu,
380 dummy_handler,
381 IRQF_DISABLED|IRQF_PERCPU|IRQF_NOBALANCING,
382 name,
383 NULL);
384
385 if (irq >= 0) {
386 disable_irq(irq); /* make sure it's never delivered */
387 per_cpu(lock_kicker_irq, cpu) = irq;
388 }
389
390 printk("cpu %d spinlock event irq %d\n", cpu, irq);
391}
392
393void xen_uninit_lock_cpu(int cpu)
394{
395 /*
396 * See git commit f10cd522c5fbfec9ae3cc01967868c9c2401ed23
397 * (xen: disable PV spinlocks on HVM)
398 */
399 if (xen_hvm_domain())
400 return;
401
388 unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL);
389 per_cpu(lock_kicker_irq, cpu) = -1;
390}
391
392void __init xen_init_spinlocks(void)
393{
402 unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL);
403 per_cpu(lock_kicker_irq, cpu) = -1;
404}
405
406void __init xen_init_spinlocks(void)
407{
408 /*
409 * See git commit f10cd522c5fbfec9ae3cc01967868c9c2401ed23
410 * (xen: disable PV spinlocks on HVM)
411 */
412 if (xen_hvm_domain())
413 return;
414
394 BUILD_BUG_ON(sizeof(struct xen_spinlock) > sizeof(arch_spinlock_t));
395
396 pv_lock_ops.spin_is_locked = xen_spin_is_locked;
397 pv_lock_ops.spin_is_contended = xen_spin_is_contended;
398 pv_lock_ops.spin_lock = xen_spin_lock;
399 pv_lock_ops.spin_lock_flags = xen_spin_lock_flags;
400 pv_lock_ops.spin_trylock = xen_spin_trylock;
401 pv_lock_ops.spin_unlock = xen_spin_unlock;

--- 56 unchanged lines hidden ---
415 BUILD_BUG_ON(sizeof(struct xen_spinlock) > sizeof(arch_spinlock_t));
416
417 pv_lock_ops.spin_is_locked = xen_spin_is_locked;
418 pv_lock_ops.spin_is_contended = xen_spin_is_contended;
419 pv_lock_ops.spin_lock = xen_spin_lock;
420 pv_lock_ops.spin_lock_flags = xen_spin_lock_flags;
421 pv_lock_ops.spin_trylock = xen_spin_trylock;
422 pv_lock_ops.spin_unlock = xen_spin_unlock;

--- 56 unchanged lines hidden ---