Linux Kernel
3.7.1
|
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/spinlock.h>
#include <linux/threads.h>
#include <linux/sched.h>
#include <linux/smp.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/mmzone.h>
#include <linux/module.h>
#include <linux/bitops.h>
#include <linux/nodemask.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <asm/processor.h>
#include <asm/irq.h>
#include <asm/sal.h>
#include <asm/delay.h>
#include <asm/io.h>
#include <asm/smp.h>
#include <asm/tlb.h>
#include <asm/numa.h>
#include <asm/hw_irq.h>
#include <asm/current.h>
#include <asm/sn/sn_cpuid.h>
#include <asm/sn/sn_sal.h>
#include <asm/sn/addrs.h>
#include <asm/sn/shub_mmr.h>
#include <asm/sn/nodepda.h>
#include <asm/sn/rw_mmr.h>
#include <asm/sn/sn_feature_sets.h>
Go to the source code of this file.
Data Structures | |
struct | ptc_stats |
Macros | |
#define | sn2_ptctest 0 |
#define | local_node_uses_ptc_ga(sh1) ((sh1) ? 1 : 0) |
#define | max_active_pio(sh1) ((sh1) ? 32 : 7) |
#define | reset_max_active_on_deadlock() 1 |
#define | PTC_LOCK(sh1) ((sh1) ? &sn2_global_ptc_lock : &sn_nodepda->ptc_lock) |
#define | sn2_ptctest 0 |
Functions | |
DEFINE_PER_CPU (struct ptc_stats, ptcstats) | |
DECLARE_PER_CPU (struct ptc_stats, ptcstats) | |
unsigned long | sn2_ptc_deadlock_recovery_core (volatile unsigned long *, unsigned long, volatile unsigned long *, unsigned long, volatile unsigned long *, unsigned long) |
void | sn2_ptc_deadlock_recovery (short *, short, short, int, volatile unsigned long *, unsigned long, volatile unsigned long *, unsigned long) |
void | sn_migrate (struct task_struct *task) |
void | sn_tlb_migrate_finish (struct mm_struct *mm) |
void | sn2_global_tlb_purge (struct mm_struct *mm, unsigned long start, unsigned long end, unsigned long nbits) |
void | sn_send_IPI_phys (int nasid, long physid, int vector, int delivery_mode) |
EXPORT_SYMBOL (sn_send_IPI_phys) | |
void | sn2_send_IPI (int cpuid, int vector, int delivery_mode, int redirect) |
#define PTC_LOCK | ( | sh1 | ) | ((sh1) ? &sn2_global_ptc_lock : &sn_nodepda->ptc_lock) |
EXPORT_SYMBOL | ( | sn_send_IPI_phys | ) |
void sn2_global_tlb_purge | ( | struct mm_struct * | mm, |
unsigned long | start, | ||
unsigned long | end, | ||
unsigned long | nbits | ||
) |
sn2_global_tlb_purge - globally purge translation cache of virtual address range : mm_struct containing virtual address range : start of virtual address range : end of virtual address range : specifies number of bytes to purge per instruction (num = 1<<(nbits & 0xfc))
Purges the translation caches of all processors of the given virtual address range.
Note:
if only one bit is set in cpu_vm_mask & it is the current cpu & the process is purging its own virtual address range, then only the local TLB needs to be flushed. This flushing can be done using ptc.l. This is the common case & avoids the global spinlock.
unsigned long sn2_ptc_deadlock_recovery_core | ( | volatile unsigned long * | , |
unsigned | long, | ||
volatile unsigned long * | , | ||
unsigned | long, | ||
volatile unsigned long * | , | ||
unsigned | long | ||
) |
sn2_send_IPI - send an IPI to a processor : target of the IPI : command to send : delivery mechanism : redirect the IPI?
Sends an IPI (InterProcessor Interrupt) to the processor specified by . specifies the command to send, while can be one of the following
IA64_IPI_DM_INT - pend an interrupt IA64_IPI_DM_PMI - pend a PMI IA64_IPI_DM_NMI - pend an NMI IA64_IPI_DM_INIT - pend an INIT interrupt
void sn_migrate | ( | struct task_struct * | task | ) |
sn_migrate - SN-specific task migration actions : Task being migrated to new CPU
SN2 PIO writes from separate CPUs are not guaranteed to arrive in order. Context switching user threads which have memory-mapped MMIO may cause PIOs to issue from separate CPUs, thus the PIO writes must be drained from the previous CPU's Shub before execution resumes on the new CPU.
sn_send_IPI_phys - send an IPI to a Nasid and slice : nasid to receive the interrupt (may be outside partition) : physical cpuid to receive the interrupt. : command to send : delivery mechanism
Sends an IPI (interprocessor interrupt) to the processor specified by
can be one of the following
IA64_IPI_DM_INT - pend an interrupt IA64_IPI_DM_PMI - pend a PMI IA64_IPI_DM_NMI - pend an NMI IA64_IPI_DM_INIT - pend an INIT interrupt