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 --- |