mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
Merge branch 'master' of /home/trondmy/repositories/git/linux-2.6/
This commit is contained in:
15
arch/avr32/boards/atstk1000/atstk1000.h
Normal file
15
arch/avr32/boards/atstk1000/atstk1000.h
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* ATSTK1000 setup code: Daughterboard interface
|
||||
*
|
||||
* Copyright (C) 2007 Atmel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H
|
||||
#define __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H
|
||||
|
||||
extern struct atmel_lcdfb_info atstk1000_lcdc_data;
|
||||
|
||||
#endif /* __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H */
|
||||
@@ -16,6 +16,8 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
#include <video/atmel_lcdc.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/arch/at32ap7000.h>
|
||||
@@ -23,6 +25,7 @@
|
||||
#include <asm/arch/init.h>
|
||||
#include <asm/arch/portmux.h>
|
||||
|
||||
#include "atstk1000.h"
|
||||
|
||||
#define SW2_DEFAULT /* MMCI and UART_A available */
|
||||
|
||||
@@ -31,9 +34,7 @@ struct eth_addr {
|
||||
};
|
||||
|
||||
static struct eth_addr __initdata hw_addr[2];
|
||||
|
||||
static struct eth_platform_data __initdata eth_data[2];
|
||||
static struct lcdc_platform_data atstk1000_fb0_data;
|
||||
|
||||
static struct spi_board_info spi0_board_info[] __initdata = {
|
||||
{
|
||||
@@ -148,9 +149,8 @@ static int __init atstk1002_init(void)
|
||||
set_hw_addr(at32_add_device_eth(0, ð_data[0]));
|
||||
|
||||
at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info));
|
||||
atstk1000_fb0_data.fbmem_start = fbmem_start;
|
||||
atstk1000_fb0_data.fbmem_size = fbmem_size;
|
||||
at32_add_device_lcdc(0, &atstk1000_fb0_data);
|
||||
at32_add_device_lcdc(0, &atstk1000_lcdc_data,
|
||||
fbmem_start, fbmem_size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -8,13 +8,56 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/linkage.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <video/atmel_lcdc.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/arch/board.h>
|
||||
|
||||
#include "atstk1000.h"
|
||||
|
||||
/* Initialized by bootloader-specific startup code. */
|
||||
struct tag *bootloader_tags __initdata;
|
||||
|
||||
static struct fb_videomode __initdata ltv350qv_modes[] = {
|
||||
{
|
||||
.name = "320x240 @ 75",
|
||||
.refresh = 75,
|
||||
.xres = 320, .yres = 240,
|
||||
.pixclock = KHZ2PICOS(6891),
|
||||
|
||||
.left_margin = 17, .right_margin = 33,
|
||||
.upper_margin = 10, .lower_margin = 10,
|
||||
.hsync_len = 16, .vsync_len = 1,
|
||||
|
||||
.sync = 0,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
},
|
||||
};
|
||||
|
||||
static struct fb_monspecs __initdata atstk1000_default_monspecs = {
|
||||
.manufacturer = "SNG",
|
||||
.monitor = "LTV350QV",
|
||||
.modedb = ltv350qv_modes,
|
||||
.modedb_len = ARRAY_SIZE(ltv350qv_modes),
|
||||
.hfmin = 14820,
|
||||
.hfmax = 22230,
|
||||
.vfmin = 60,
|
||||
.vfmax = 90,
|
||||
.dclkmax = 30000000,
|
||||
};
|
||||
|
||||
struct atmel_lcdfb_info __initdata atstk1000_lcdc_data = {
|
||||
.default_bpp = 24,
|
||||
.default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
|
||||
.default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
|
||||
| ATMEL_LCDC_INVCLK
|
||||
| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE
|
||||
| ATMEL_LCDC_MEMOR_BIG),
|
||||
.default_monspecs = &atstk1000_default_monspecs,
|
||||
.guard_time = 2,
|
||||
};
|
||||
|
||||
@@ -7,15 +7,6 @@
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file contains the code used by various IRQ handling routines:
|
||||
* asking for different IRQ's should be done through these routines
|
||||
* instead of just grabbing them. Thus setups with different IRQ numbers
|
||||
* shouldn't result in any weird surprises, and installing new handlers
|
||||
* should be easier.
|
||||
*
|
||||
* IRQ's are in fact implemented a bit like signal handlers for the kernel.
|
||||
* Naturally it's not a 1:1 relation, but there are similarities.
|
||||
*/
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
@@ -179,7 +179,7 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
|
||||
int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
|
||||
{
|
||||
struct kprobe *cur = kprobe_running();
|
||||
|
||||
@@ -216,11 +216,6 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
|
||||
if (post_kprobe_handler(args->regs))
|
||||
ret = NOTIFY_STOP;
|
||||
break;
|
||||
case DIE_FAULT:
|
||||
if (kprobe_running()
|
||||
&& kprobe_fault_handler(args->regs, args->trapnr))
|
||||
ret = NOTIFY_STOP;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -292,4 +292,7 @@ sys_call_table:
|
||||
.long sys_shmdt
|
||||
.long sys_shmctl
|
||||
.long sys_utimensat
|
||||
.long sys_signalfd
|
||||
.long sys_timerfd /* 280 */
|
||||
.long sys_eventfd
|
||||
.long sys_ni_syscall /* r8 is saturated at nr_syscalls */
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/clk.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/spi/spi.h>
|
||||
@@ -17,6 +18,8 @@
|
||||
#include <asm/arch/portmux.h>
|
||||
#include <asm/arch/sm.h>
|
||||
|
||||
#include <video/atmel_lcdc.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "hmatrix.h"
|
||||
#include "pio.h"
|
||||
@@ -881,20 +884,26 @@ at32_add_device_spi(unsigned int id, struct spi_board_info *b, unsigned int n)
|
||||
/* --------------------------------------------------------------------
|
||||
* LCDC
|
||||
* -------------------------------------------------------------------- */
|
||||
static struct lcdc_platform_data lcdc0_data;
|
||||
static struct resource lcdc0_resource[] = {
|
||||
static struct atmel_lcdfb_info atmel_lcdfb0_data;
|
||||
static struct resource atmel_lcdfb0_resource[] = {
|
||||
{
|
||||
.start = 0xff000000,
|
||||
.end = 0xff000fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
IRQ(1),
|
||||
{
|
||||
/* Placeholder for pre-allocated fb memory */
|
||||
.start = 0x00000000,
|
||||
.end = 0x00000000,
|
||||
.flags = 0,
|
||||
},
|
||||
};
|
||||
DEFINE_DEV_DATA(lcdc, 0);
|
||||
DEV_CLK(hclk, lcdc0, hsb, 7);
|
||||
static struct clk lcdc0_pixclk = {
|
||||
.name = "pixclk",
|
||||
.dev = &lcdc0_device.dev,
|
||||
DEFINE_DEV_DATA(atmel_lcdfb, 0);
|
||||
DEV_CLK(hck1, atmel_lcdfb0, hsb, 7);
|
||||
static struct clk atmel_lcdfb0_pixclk = {
|
||||
.name = "lcdc_clk",
|
||||
.dev = &atmel_lcdfb0_device.dev,
|
||||
.mode = genclk_mode,
|
||||
.get_rate = genclk_get_rate,
|
||||
.set_rate = genclk_set_rate,
|
||||
@@ -903,13 +912,34 @@ static struct clk lcdc0_pixclk = {
|
||||
};
|
||||
|
||||
struct platform_device *__init
|
||||
at32_add_device_lcdc(unsigned int id, struct lcdc_platform_data *data)
|
||||
at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
|
||||
unsigned long fbmem_start, unsigned long fbmem_len)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct atmel_lcdfb_info *info;
|
||||
struct fb_monspecs *monspecs;
|
||||
struct fb_videomode *modedb;
|
||||
unsigned int modedb_size;
|
||||
|
||||
/*
|
||||
* Do a deep copy of the fb data, monspecs and modedb. Make
|
||||
* sure all allocations are done before setting up the
|
||||
* portmux.
|
||||
*/
|
||||
monspecs = kmemdup(data->default_monspecs,
|
||||
sizeof(struct fb_monspecs), GFP_KERNEL);
|
||||
if (!monspecs)
|
||||
return NULL;
|
||||
|
||||
modedb_size = sizeof(struct fb_videomode) * monspecs->modedb_len;
|
||||
modedb = kmemdup(monspecs->modedb, modedb_size, GFP_KERNEL);
|
||||
if (!modedb)
|
||||
goto err_dup_modedb;
|
||||
monspecs->modedb = modedb;
|
||||
|
||||
switch (id) {
|
||||
case 0:
|
||||
pdev = &lcdc0_device;
|
||||
pdev = &atmel_lcdfb0_device;
|
||||
select_peripheral(PC(19), PERIPH_A, 0); /* CC */
|
||||
select_peripheral(PC(20), PERIPH_A, 0); /* HSYNC */
|
||||
select_peripheral(PC(21), PERIPH_A, 0); /* PCLK */
|
||||
@@ -942,19 +972,32 @@ at32_add_device_lcdc(unsigned int id, struct lcdc_platform_data *data)
|
||||
select_peripheral(PD(16), PERIPH_A, 0); /* DATA22 */
|
||||
select_peripheral(PD(17), PERIPH_A, 0); /* DATA23 */
|
||||
|
||||
clk_set_parent(&lcdc0_pixclk, &pll0);
|
||||
clk_set_rate(&lcdc0_pixclk, clk_get_rate(&pll0));
|
||||
clk_set_parent(&atmel_lcdfb0_pixclk, &pll0);
|
||||
clk_set_rate(&atmel_lcdfb0_pixclk, clk_get_rate(&pll0));
|
||||
break;
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
goto err_invalid_id;
|
||||
}
|
||||
|
||||
memcpy(pdev->dev.platform_data, data,
|
||||
sizeof(struct lcdc_platform_data));
|
||||
if (fbmem_len) {
|
||||
pdev->resource[2].start = fbmem_start;
|
||||
pdev->resource[2].end = fbmem_start + fbmem_len - 1;
|
||||
pdev->resource[2].flags = IORESOURCE_MEM;
|
||||
}
|
||||
|
||||
info = pdev->dev.platform_data;
|
||||
memcpy(info, data, sizeof(struct atmel_lcdfb_info));
|
||||
info->default_monspecs = monspecs;
|
||||
|
||||
platform_device_register(pdev);
|
||||
return pdev;
|
||||
|
||||
err_invalid_id:
|
||||
kfree(modedb);
|
||||
err_dup_modedb:
|
||||
kfree(monspecs);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
@@ -1037,8 +1080,8 @@ struct clk *at32_clock_list[] = {
|
||||
&macb1_pclk,
|
||||
&atmel_spi0_spi_clk,
|
||||
&atmel_spi1_spi_clk,
|
||||
&lcdc0_hclk,
|
||||
&lcdc0_pixclk,
|
||||
&atmel_lcdfb0_hck1,
|
||||
&atmel_lcdfb0_pixclk,
|
||||
&gclk0,
|
||||
&gclk1,
|
||||
&gclk2,
|
||||
@@ -1077,7 +1120,7 @@ void __init at32_clock_init(void)
|
||||
genclk_init_parent(&gclk2);
|
||||
genclk_init_parent(&gclk3);
|
||||
genclk_init_parent(&gclk4);
|
||||
genclk_init_parent(&lcdc0_pixclk);
|
||||
genclk_init_parent(&atmel_lcdfb0_pixclk);
|
||||
|
||||
/*
|
||||
* Turn on all clocks that have at least one user already, and
|
||||
|
||||
@@ -12,41 +12,30 @@
|
||||
#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pagemap.h>
|
||||
|
||||
#include <linux/kdebug.h>
|
||||
#include <linux/kprobes.h>
|
||||
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/sysreg.h>
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#ifdef CONFIG_KPROBES
|
||||
ATOMIC_NOTIFIER_HEAD(notify_page_fault_chain);
|
||||
|
||||
/* Hook to register for page fault notifications */
|
||||
int register_page_fault_notifier(struct notifier_block *nb)
|
||||
static inline int notify_page_fault(struct pt_regs *regs, int trap)
|
||||
{
|
||||
return atomic_notifier_chain_register(¬ify_page_fault_chain, nb);
|
||||
}
|
||||
int ret = 0;
|
||||
|
||||
int unregister_page_fault_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return atomic_notifier_chain_unregister(¬ify_page_fault_chain, nb);
|
||||
}
|
||||
if (!user_mode(regs)) {
|
||||
if (kprobe_running() && kprobe_fault_handler(regs, trap))
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
static inline int notify_page_fault(enum die_val val, struct pt_regs *regs,
|
||||
int trap, int sig)
|
||||
{
|
||||
struct die_args args = {
|
||||
.regs = regs,
|
||||
.trapnr = trap,
|
||||
};
|
||||
return atomic_notifier_call_chain(¬ify_page_fault_chain, val, &args);
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
static inline int notify_page_fault(enum die_val val, struct pt_regs *regs,
|
||||
int trap, int sig)
|
||||
static inline int notify_page_fault(struct pt_regs *regs, int trap)
|
||||
{
|
||||
return NOTIFY_DONE;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -76,8 +65,7 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
|
||||
long signr;
|
||||
int code;
|
||||
|
||||
if (notify_page_fault(DIE_PAGE_FAULT, regs,
|
||||
ecr, SIGSEGV) == NOTIFY_STOP)
|
||||
if (notify_page_fault(regs, ecr))
|
||||
return;
|
||||
|
||||
address = sysreg_read(TLBEAR);
|
||||
|
||||
@@ -791,7 +791,7 @@ static __init int setup_additional_cpus(char *s)
|
||||
early_param("additional_cpus", setup_additional_cpus);
|
||||
|
||||
/*
|
||||
* cpu_possible_map should be static, it cannot change as cpu's
|
||||
* cpu_possible_map should be static, it cannot change as CPUs
|
||||
* are onlined, or offlined. The reason is per-cpu data-structures
|
||||
* are allocated by some modules at init time, and dont expect to
|
||||
* do this dynamically on cpu arrival/departure.
|
||||
|
||||
@@ -156,24 +156,30 @@ kdump_init_notifier(struct notifier_block *self, unsigned long val, void *data)
|
||||
if (!kdump_on_init)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
if (val != DIE_INIT_MONARCH_ENTER &&
|
||||
val != DIE_INIT_SLAVE_ENTER &&
|
||||
if (val != DIE_INIT_MONARCH_LEAVE &&
|
||||
val != DIE_INIT_SLAVE_LEAVE &&
|
||||
val != DIE_INIT_MONARCH_PROCESS &&
|
||||
val != DIE_MCA_RENDZVOUS_LEAVE &&
|
||||
val != DIE_MCA_MONARCH_LEAVE)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
nd = (struct ia64_mca_notify_die *)args->err;
|
||||
/* Reason code 1 means machine check rendezous*/
|
||||
if ((val == DIE_INIT_MONARCH_ENTER || val == DIE_INIT_SLAVE_ENTER) &&
|
||||
nd->sos->rv_rc == 1)
|
||||
/* Reason code 1 means machine check rendezvous*/
|
||||
if ((val == DIE_INIT_MONARCH_LEAVE || val == DIE_INIT_SLAVE_LEAVE
|
||||
|| val == DIE_INIT_MONARCH_PROCESS) && nd->sos->rv_rc == 1)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
switch (val) {
|
||||
case DIE_INIT_MONARCH_ENTER:
|
||||
case DIE_INIT_MONARCH_PROCESS:
|
||||
atomic_set(&kdump_in_progress, 1);
|
||||
*(nd->monarch_cpu) = -1;
|
||||
break;
|
||||
case DIE_INIT_MONARCH_LEAVE:
|
||||
machine_kdump_on_init();
|
||||
break;
|
||||
case DIE_INIT_SLAVE_ENTER:
|
||||
unw_init_running(kdump_cpu_freeze, NULL);
|
||||
case DIE_INIT_SLAVE_LEAVE:
|
||||
if (atomic_read(&kdump_in_progress))
|
||||
unw_init_running(kdump_cpu_freeze, NULL);
|
||||
break;
|
||||
case DIE_MCA_RENDZVOUS_LEAVE:
|
||||
if (atomic_read(&kdump_in_progress))
|
||||
@@ -215,8 +221,10 @@ static ctl_table sys_table[] = {
|
||||
static int
|
||||
machine_crash_setup(void)
|
||||
{
|
||||
/* be notified before default_monarch_init_process */
|
||||
static struct notifier_block kdump_init_notifier_nb = {
|
||||
.notifier_call = kdump_init_notifier,
|
||||
.priority = 1,
|
||||
};
|
||||
int ret;
|
||||
if((ret = register_die_notifier(&kdump_init_notifier_nb)) != 0)
|
||||
|
||||
@@ -1585,5 +1585,8 @@ sys_call_table:
|
||||
data8 sys_getcpu
|
||||
data8 sys_epoll_pwait // 1305
|
||||
data8 sys_utimensat
|
||||
data8 sys_signalfd
|
||||
data8 sys_timerfd
|
||||
data8 sys_eventfd
|
||||
|
||||
.org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
|
||||
*
|
||||
* This file contains the code used by various IRQ handling routines:
|
||||
* asking for different IRQ's should be done through these routines
|
||||
* asking for different IRQs should be done through these routines
|
||||
* instead of just grabbing them. Thus setups with different IRQ numbers
|
||||
* shouldn't result in any weird surprises, and installing new handlers
|
||||
* should be easier.
|
||||
@@ -12,7 +12,7 @@
|
||||
* Copyright (C) Ashok Raj<ashok.raj@intel.com>, Intel Corporation 2004
|
||||
*
|
||||
* 4/14/2004: Added code to handle cpu migration and do safe irq
|
||||
* migration without lossing interrupts for iosapic
|
||||
* migration without losing interrupts for iosapic
|
||||
* architecture.
|
||||
*/
|
||||
|
||||
@@ -190,7 +190,7 @@ void fixup_irqs(void)
|
||||
}
|
||||
|
||||
/*
|
||||
* Phase 1: Locate irq's bound to this cpu and
|
||||
* Phase 1: Locate IRQs bound to this cpu and
|
||||
* relocate them for cpu removal.
|
||||
*/
|
||||
migrate_irqs();
|
||||
|
||||
@@ -23,7 +23,7 @@ lsapic_noop_startup (unsigned int irq)
|
||||
static void
|
||||
lsapic_noop (unsigned int irq)
|
||||
{
|
||||
/* nuthing to do... */
|
||||
/* nothing to do... */
|
||||
}
|
||||
|
||||
static int lsapic_retrigger(unsigned int irq)
|
||||
|
||||
@@ -151,12 +151,12 @@ static uint __kprobes is_cmp_ctype_unc_inst(uint template, uint slot,
|
||||
|
||||
cmp_inst.l = kprobe_inst;
|
||||
if ((cmp_inst.f.x2 == 0) || (cmp_inst.f.x2 == 1)) {
|
||||
/* Integere compare - Register Register (A6 type)*/
|
||||
/* Integer compare - Register Register (A6 type)*/
|
||||
if ((cmp_inst.f.tb == 0) && (cmp_inst.f.ta == 0)
|
||||
&&(cmp_inst.f.c == 1))
|
||||
ctype_unc = 1;
|
||||
} else if ((cmp_inst.f.x2 == 2)||(cmp_inst.f.x2 == 3)) {
|
||||
/* Integere compare - Immediate Register (A8 type)*/
|
||||
/* Integer compare - Immediate Register (A8 type)*/
|
||||
if ((cmp_inst.f.ta == 0) &&(cmp_inst.f.c == 1))
|
||||
ctype_unc = 1;
|
||||
}
|
||||
@@ -820,7 +820,7 @@ out:
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int __kprobes kprobes_fault_handler(struct pt_regs *regs, int trapnr)
|
||||
int __kprobes kprobes_fault_handler(struct pt_regs *regs, int trapnr)
|
||||
{
|
||||
struct kprobe *cur = kprobe_running();
|
||||
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
|
||||
@@ -904,13 +904,6 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
|
||||
if (post_kprobes_handler(args->regs))
|
||||
ret = NOTIFY_STOP;
|
||||
break;
|
||||
case DIE_PAGE_FAULT:
|
||||
/* kprobe_running() needs smp_processor_id() */
|
||||
preempt_disable();
|
||||
if (kprobe_running() &&
|
||||
kprobes_fault_handler(args->regs, args->trapnr))
|
||||
ret = NOTIFY_STOP;
|
||||
preempt_enable();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -954,7 +947,7 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
|
||||
/*
|
||||
* Callee owns the argument space and could overwrite it, eg
|
||||
* tail call optimization. So to be absolutely safe
|
||||
* we save the argument space before transfering the control
|
||||
* we save the argument space before transferring the control
|
||||
* to instrumented jprobe function which runs in
|
||||
* the process context
|
||||
*/
|
||||
|
||||
@@ -273,7 +273,6 @@ static void ia64_mlogbuf_finish(int wait)
|
||||
|
||||
mlogbuf_finished = 1;
|
||||
}
|
||||
EXPORT_SYMBOL(ia64_mlogbuf_finish);
|
||||
|
||||
/*
|
||||
* Print buffered messages from INIT context.
|
||||
@@ -1477,6 +1476,10 @@ default_monarch_init_process(struct notifier_block *self, unsigned long val, voi
|
||||
struct task_struct *g, *t;
|
||||
if (val != DIE_INIT_MONARCH_PROCESS)
|
||||
return NOTIFY_DONE;
|
||||
#ifdef CONFIG_KEXEC
|
||||
if (atomic_read(&kdump_in_progress))
|
||||
return NOTIFY_DONE;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* FIXME: mlogbuf will brim over with INIT stack dumps.
|
||||
|
||||
@@ -438,7 +438,7 @@ is_mca_global(peidx_table_t *peidx, pal_bus_check_info_t *pbci,
|
||||
* @peidx: pointer of index of processor error section
|
||||
*
|
||||
* Return value:
|
||||
* target address on Success / 0 on Failue
|
||||
* target address on Success / 0 on Failure
|
||||
*/
|
||||
static u64
|
||||
get_target_identifier(peidx_table_t *peidx)
|
||||
@@ -701,7 +701,7 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
|
||||
return fatal_mca("External bus check fatal status");
|
||||
|
||||
/*
|
||||
* This is a local MCA and estimated as a recoverble error.
|
||||
* This is a local MCA and estimated as a recoverable error.
|
||||
*/
|
||||
if (platform)
|
||||
return recover_from_platform_error(slidx, peidx, pbci, sos);
|
||||
|
||||
@@ -861,7 +861,7 @@ apply_relocate (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symindex,
|
||||
/*
|
||||
* Modules contain a single unwind table which covers both the core and the init text
|
||||
* sections but since the two are not contiguous, we need to split this table up such that
|
||||
* we can register (and unregister) each "segment" seperately. Fortunately, this sounds
|
||||
* we can register (and unregister) each "segment" separately. Fortunately, this sounds
|
||||
* more complicated than it really is.
|
||||
*/
|
||||
static void
|
||||
|
||||
@@ -1318,7 +1318,7 @@ pfm_reserve_session(struct task_struct *task, int is_syswide, unsigned int cpu)
|
||||
{
|
||||
unsigned long flags;
|
||||
/*
|
||||
* validy checks on cpu_mask have been done upstream
|
||||
* validity checks on cpu_mask have been done upstream
|
||||
*/
|
||||
LOCK_PFS(flags);
|
||||
|
||||
@@ -1384,7 +1384,7 @@ pfm_unreserve_session(pfm_context_t *ctx, int is_syswide, unsigned int cpu)
|
||||
{
|
||||
unsigned long flags;
|
||||
/*
|
||||
* validy checks on cpu_mask have been done upstream
|
||||
* validity checks on cpu_mask have been done upstream
|
||||
*/
|
||||
LOCK_PFS(flags);
|
||||
|
||||
@@ -1835,7 +1835,7 @@ pfm_flush(struct file *filp, fl_owner_t id)
|
||||
/*
|
||||
* remove our file from the async queue, if we use this mode.
|
||||
* This can be done without the context being protected. We come
|
||||
* here when the context has become unreacheable by other tasks.
|
||||
* here when the context has become unreachable by other tasks.
|
||||
*
|
||||
* We may still have active monitoring at this point and we may
|
||||
* end up in pfm_overflow_handler(). However, fasync_helper()
|
||||
@@ -2132,7 +2132,7 @@ doit:
|
||||
filp->private_data = NULL;
|
||||
|
||||
/*
|
||||
* if we free on the spot, the context is now completely unreacheable
|
||||
* if we free on the spot, the context is now completely unreachable
|
||||
* from the callers side. The monitored task side is also cut, so we
|
||||
* can freely cut.
|
||||
*
|
||||
@@ -2562,7 +2562,7 @@ pfm_reset_pmu_state(pfm_context_t *ctx)
|
||||
ctx->ctx_all_pmcs[0] = pmu_conf->impl_pmcs[0] & ~0x1;
|
||||
|
||||
/*
|
||||
* bitmask of all PMDs that are accesible to this context
|
||||
* bitmask of all PMDs that are accessible to this context
|
||||
*/
|
||||
ctx->ctx_all_pmds[0] = pmu_conf->impl_pmds[0];
|
||||
|
||||
@@ -3395,7 +3395,7 @@ pfm_read_pmds(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs)
|
||||
if (unlikely(!PMD_IS_IMPL(cnum))) goto error;
|
||||
/*
|
||||
* we can only read the register that we use. That includes
|
||||
* the one we explicitely initialize AND the one we want included
|
||||
* the one we explicitly initialize AND the one we want included
|
||||
* in the sampling buffer (smpl_regs).
|
||||
*
|
||||
* Having this restriction allows optimization in the ctxsw routine
|
||||
@@ -3715,7 +3715,7 @@ pfm_restart(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs)
|
||||
* if non-blocking, then we ensure that the task will go into
|
||||
* pfm_handle_work() before returning to user mode.
|
||||
*
|
||||
* We cannot explicitely reset another task, it MUST always
|
||||
* We cannot explicitly reset another task, it MUST always
|
||||
* be done by the task itself. This works for system wide because
|
||||
* the tool that is controlling the session is logically doing
|
||||
* "self-monitoring".
|
||||
@@ -4644,7 +4644,7 @@ pfm_exit_thread(struct task_struct *task)
|
||||
switch(state) {
|
||||
case PFM_CTX_UNLOADED:
|
||||
/*
|
||||
* only comes to thios function if pfm_context is not NULL, i.e., cannot
|
||||
* only comes to this function if pfm_context is not NULL, i.e., cannot
|
||||
* be in unloaded state
|
||||
*/
|
||||
printk(KERN_ERR "perfmon: pfm_exit_thread [%d] ctx unloaded\n", task->pid);
|
||||
@@ -5247,7 +5247,7 @@ pfm_end_notify_user(pfm_context_t *ctx)
|
||||
|
||||
/*
|
||||
* main overflow processing routine.
|
||||
* it can be called from the interrupt path or explicitely during the context switch code
|
||||
* it can be called from the interrupt path or explicitly during the context switch code
|
||||
*/
|
||||
static void
|
||||
pfm_overflow_handler(struct task_struct *task, pfm_context_t *ctx, u64 pmc0, struct pt_regs *regs)
|
||||
|
||||
@@ -181,7 +181,7 @@ static pmu_config_t pmu_conf_mck={
|
||||
.pmc_desc = pfm_mck_pmc_desc,
|
||||
.num_ibrs = 8,
|
||||
.num_dbrs = 8,
|
||||
.use_rr_dbregs = 1 /* debug register are use for range retrictions */
|
||||
.use_rr_dbregs = 1 /* debug register are use for range restrictions */
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ set_smp_redirect (int flag)
|
||||
* interrupt redirection. The reason is this would require that
|
||||
* All interrupts be stopped and hard bind the irq to a cpu.
|
||||
* Later when the interrupt is fired we need to set the redir hint
|
||||
* on again in the vector. This is combersome for something that the
|
||||
* on again in the vector. This is cumbersome for something that the
|
||||
* user mode irq balancer will solve anyways.
|
||||
*/
|
||||
no_int_routing=1;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user