mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge branch 'akpm' (patches from Andrew)
Merge third patchbomb from Andrew Morton: - various misc things - a couple of lib/ optimisations - provide DIV_ROUND_CLOSEST_ULL() - checkpatch updates - rtc tree - befs, nilfs2, hfs, hfsplus, fatfs, adfs, affs, bfs - ptrace fixes - fork() fixes - seccomp cleanups - more mmap_sem hold time reductions from Davidlohr * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (138 commits) proc: show locks in /proc/pid/fdinfo/X docs: add missing and new /proc/PID/status file entries, fix typos drivers/rtc/rtc-at91rm9200.c: make IO endian agnostic Documentation/spi/spidev_test.c: fix warning drivers/rtc/rtc-s5m.c: allow usage on device type different than main MFD type .gitignore: ignore *.tar MAINTAINERS: add Mediatek SoC mailing list tomoyo: reduce mmap_sem hold for mm->exe_file powerpc/oprofile: reduce mmap_sem hold for exe_file oprofile: reduce mmap_sem hold for mm->exe_file mips: ip32: add platform data hooks to use DS1685 driver lib/Kconfig: fix up HAVE_ARCH_BITREVERSE help text x86: switch to using asm-generic for seccomp.h sparc: switch to using asm-generic for seccomp.h powerpc: switch to using asm-generic for seccomp.h parisc: switch to using asm-generic for seccomp.h mips: switch to using asm-generic for seccomp.h microblaze: use asm-generic for seccomp.h arm: use asm-generic for seccomp.h seccomp: allow COMPAT sigreturn overrides ...
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -24,6 +24,7 @@
|
||||
*.order
|
||||
*.elf
|
||||
*.bin
|
||||
*.tar
|
||||
*.gz
|
||||
*.bz2
|
||||
*.lzma
|
||||
|
||||
@@ -659,6 +659,19 @@ macros using parameters.
|
||||
#define CONSTANT 0x4000
|
||||
#define CONSTEXP (CONSTANT | 3)
|
||||
|
||||
5) namespace collisions when defining local variables in macros resembling
|
||||
functions:
|
||||
|
||||
#define FOO(x) \
|
||||
({ \
|
||||
typeof(x) ret; \
|
||||
ret = calc_ret(x); \
|
||||
(ret); \
|
||||
)}
|
||||
|
||||
ret is a common name for a local variable - __foo_ret is less likely
|
||||
to collide with an existing variable.
|
||||
|
||||
The cpp manual deals with macros exhaustively. The gcc internals manual also
|
||||
covers RTL which is used frequently with assembly language in the kernel.
|
||||
|
||||
|
||||
@@ -614,8 +614,8 @@ The canonical patch message body contains the following:
|
||||
|
||||
- An empty line.
|
||||
|
||||
- The body of the explanation, which will be copied to the
|
||||
permanent changelog to describe this patch.
|
||||
- The body of the explanation, line wrapped at 75 columns, which will
|
||||
be copied to the permanent changelog to describe this patch.
|
||||
|
||||
- The "Signed-off-by:" lines, described above, which will
|
||||
also go in the changelog.
|
||||
|
||||
17
Documentation/devicetree/bindings/rtc/digicolor-rtc.txt
Normal file
17
Documentation/devicetree/bindings/rtc/digicolor-rtc.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
Conexant Digicolor Real Time Clock controller
|
||||
|
||||
This binding currently supports the CX92755 SoC.
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "cnxt,cx92755-rtc"
|
||||
- reg: physical base address of the controller and length of memory mapped
|
||||
region.
|
||||
- interrupts: rtc alarm interrupt
|
||||
|
||||
Example:
|
||||
|
||||
rtc@f0000c30 {
|
||||
compatible = "cnxt,cx92755-rtc";
|
||||
reg = <0xf0000c30 0x18>;
|
||||
interrupts = <25>;
|
||||
};
|
||||
@@ -7,6 +7,11 @@ Required properties:
|
||||
region.
|
||||
- interrupts: rtc alarm interrupt
|
||||
|
||||
Optional properties:
|
||||
- stmp,crystal-freq: override crystal frequency as determined from fuse bits.
|
||||
Only <32000> and <32768> are possible for the hardware. Use <0> for
|
||||
"no crystal".
|
||||
|
||||
Example:
|
||||
|
||||
rtc@80056000 {
|
||||
|
||||
@@ -200,12 +200,12 @@ contains details information about the process itself. Its fields are
|
||||
explained in Table 1-4.
|
||||
|
||||
(for SMP CONFIG users)
|
||||
For making accounting scalable, RSS related information are handled in
|
||||
asynchronous manner and the vaule may not be very precise. To see a precise
|
||||
For making accounting scalable, RSS related information are handled in an
|
||||
asynchronous manner and the value may not be very precise. To see a precise
|
||||
snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table.
|
||||
It's slow but very precise.
|
||||
|
||||
Table 1-2: Contents of the status files (as of 2.6.30-rc7)
|
||||
Table 1-2: Contents of the status files (as of 3.20.0)
|
||||
..............................................................................
|
||||
Field Content
|
||||
Name filename of the executable
|
||||
@@ -213,6 +213,7 @@ Table 1-2: Contents of the status files (as of 2.6.30-rc7)
|
||||
in an uninterruptible wait, Z is zombie,
|
||||
T is traced or stopped)
|
||||
Tgid thread group ID
|
||||
Ngid NUMA group ID (0 if none)
|
||||
Pid process id
|
||||
PPid process id of the parent process
|
||||
TracerPid PID of process tracing this process (0 if not)
|
||||
@@ -220,6 +221,10 @@ Table 1-2: Contents of the status files (as of 2.6.30-rc7)
|
||||
Gid Real, effective, saved set, and file system GIDs
|
||||
FDSize number of file descriptor slots currently allocated
|
||||
Groups supplementary group list
|
||||
NStgid descendant namespace thread group ID hierarchy
|
||||
NSpid descendant namespace process ID hierarchy
|
||||
NSpgid descendant namespace process group ID hierarchy
|
||||
NSsid descendant namespace session ID hierarchy
|
||||
VmPeak peak virtual memory size
|
||||
VmSize total program size
|
||||
VmLck locked memory size
|
||||
@@ -1704,6 +1709,10 @@ A typical output is
|
||||
flags: 0100002
|
||||
mnt_id: 19
|
||||
|
||||
All locks associated with a file descriptor are shown in its fdinfo too.
|
||||
|
||||
lock: 1: FLOCK ADVISORY WRITE 359 00:13:11691 0 EOF
|
||||
|
||||
The files such as eventfd, fsnotify, signalfd, epoll among the regular pos/flags
|
||||
pair provide additional information particular to the objects they represent.
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ static void hex_dump(const void *src, size_t length, size_t line_size, char *pre
|
||||
* Unescape - process hexadecimal escape character
|
||||
* converts shell input "\x23" -> 0x23
|
||||
*/
|
||||
int unespcape(char *_dst, char *_src, size_t len)
|
||||
static int unescape(char *_dst, char *_src, size_t len)
|
||||
{
|
||||
int ret = 0;
|
||||
char *src = _src;
|
||||
@@ -304,7 +304,7 @@ int main(int argc, char *argv[])
|
||||
size = strlen(input_tx+1);
|
||||
tx = malloc(size);
|
||||
rx = malloc(size);
|
||||
size = unespcape((char *)tx, input_tx, size);
|
||||
size = unescape((char *)tx, input_tx, size);
|
||||
transfer(fd, tx, rx, size);
|
||||
free(rx);
|
||||
free(tx);
|
||||
|
||||
@@ -872,6 +872,27 @@ can be ORed together:
|
||||
|
||||
==============================================================
|
||||
|
||||
threads-max
|
||||
|
||||
This value controls the maximum number of threads that can be created
|
||||
using fork().
|
||||
|
||||
During initialization the kernel sets this value such that even if the
|
||||
maximum number of threads is created, the thread structures occupy only
|
||||
a part (1/8th) of the available RAM pages.
|
||||
|
||||
The minimum value that can be written to threads-max is 20.
|
||||
The maximum value that can be written to threads-max is given by the
|
||||
constant FUTEX_TID_MASK (0x3fffffff).
|
||||
If a value outside of this range is written to threads-max an error
|
||||
EINVAL occurs.
|
||||
|
||||
The value written is checked against the available RAM pages. If the
|
||||
thread structures would occupy too much (more than 1/8th) of the
|
||||
available RAM pages threads-max is reduced accordingly.
|
||||
|
||||
==============================================================
|
||||
|
||||
unknown_nmi_panic:
|
||||
|
||||
The value in this file affects behavior of handling NMI. When the
|
||||
|
||||
@@ -1215,6 +1215,7 @@ F: arch/arm/mach-orion5x/ts78xx-*
|
||||
ARM/Mediatek SoC support
|
||||
M: Matthias Brugger <matthias.bgg@gmail.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
L: linux-mediatek@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: arch/arm/boot/dts/mt6*
|
||||
F: arch/arm/boot/dts/mt8*
|
||||
@@ -8183,6 +8184,7 @@ X: kernel/torture.c
|
||||
|
||||
REAL TIME CLOCK (RTC) SUBSYSTEM
|
||||
M: Alessandro Zummo <a.zummo@towertech.it>
|
||||
M: Alexandre Belloni <alexandre.belloni@free-electrons.com>
|
||||
L: rtc-linux@googlegroups.com
|
||||
Q: http://patchwork.ozlabs.org/project/rtc-linux/list/
|
||||
S: Maintained
|
||||
|
||||
@@ -44,6 +44,7 @@ struct task_struct;
|
||||
extern unsigned long thread_saved_pc(struct task_struct *);
|
||||
|
||||
/* Do necessary setup to start up a newly executed thread. */
|
||||
struct pt_regs;
|
||||
extern void start_thread(struct pt_regs *, unsigned long, unsigned long);
|
||||
|
||||
/* Free all resources held by a thread. */
|
||||
|
||||
@@ -52,7 +52,7 @@ static void show_callee_regs(struct callee_regs *cregs)
|
||||
print_reg_file(&(cregs->r13), 13);
|
||||
}
|
||||
|
||||
void print_task_path_n_nm(struct task_struct *tsk, char *buf)
|
||||
static void print_task_path_n_nm(struct task_struct *tsk, char *buf)
|
||||
{
|
||||
struct path path;
|
||||
char *path_nm = NULL;
|
||||
@@ -77,7 +77,6 @@ void print_task_path_n_nm(struct task_struct *tsk, char *buf)
|
||||
done:
|
||||
pr_info("Path: %s\n", path_nm);
|
||||
}
|
||||
EXPORT_SYMBOL(print_task_path_n_nm);
|
||||
|
||||
static void show_faulting_vma(unsigned long address, char *buf)
|
||||
{
|
||||
|
||||
@@ -21,6 +21,7 @@ generic-y += preempt.h
|
||||
generic-y += resource.h
|
||||
generic-y += rwsem.h
|
||||
generic-y += scatterlist.h
|
||||
generic-y += seccomp.h
|
||||
generic-y += sections.h
|
||||
generic-y += segment.h
|
||||
generic-y += sembuf.h
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#ifndef _ASM_ARM_SECCOMP_H
|
||||
#define _ASM_ARM_SECCOMP_H
|
||||
|
||||
#include <linux/unistd.h>
|
||||
|
||||
#define __NR_seccomp_read __NR_read
|
||||
#define __NR_seccomp_write __NR_write
|
||||
#define __NR_seccomp_exit __NR_exit
|
||||
#define __NR_seccomp_sigreturn __NR_rt_sigreturn
|
||||
|
||||
#endif /* _ASM_ARM_SECCOMP_H */
|
||||
@@ -3,14 +3,8 @@
|
||||
|
||||
#include <linux/unistd.h>
|
||||
|
||||
#define __NR_seccomp_read __NR_read
|
||||
#define __NR_seccomp_write __NR_write
|
||||
#define __NR_seccomp_exit __NR_exit
|
||||
#define __NR_seccomp_sigreturn __NR_sigreturn
|
||||
|
||||
#define __NR_seccomp_read_32 __NR_read
|
||||
#define __NR_seccomp_write_32 __NR_write
|
||||
#define __NR_seccomp_exit_32 __NR_exit
|
||||
#define __NR_seccomp_sigreturn_32 __NR_sigreturn
|
||||
#include <asm-generic/seccomp.h>
|
||||
|
||||
#endif /* _ASM_MICROBLAZE_SECCOMP_H */
|
||||
|
||||
@@ -105,7 +105,8 @@ CONFIG_RTC_CLASS=y
|
||||
# CONFIG_RTC_HCTOSYS is not set
|
||||
# CONFIG_RTC_INTF_SYSFS is not set
|
||||
# CONFIG_RTC_INTF_PROC is not set
|
||||
CONFIG_RTC_DRV_CMOS=y
|
||||
CONFIG_RTC_DRV_DS1685_FAMILY=y
|
||||
CONFIG_RTC_DRV_DS1685=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1998, 2001, 03 by Ralf Baechle
|
||||
* Copyright (C) 2000 Harald Koerfgen
|
||||
*
|
||||
* RTC routines for IP32 style attached Dallas chip.
|
||||
*/
|
||||
#ifndef __ASM_MACH_IP32_MC146818RTC_H
|
||||
#define __ASM_MACH_IP32_MC146818RTC_H
|
||||
|
||||
#include <asm/ip32/mace.h>
|
||||
|
||||
#define RTC_PORT(x) (0x70 + (x))
|
||||
|
||||
static unsigned char CMOS_READ(unsigned long addr)
|
||||
{
|
||||
return mace->isa.rtc[addr << 8];
|
||||
}
|
||||
|
||||
static inline void CMOS_WRITE(unsigned char data, unsigned long addr)
|
||||
{
|
||||
mace->isa.rtc[addr << 8] = data;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: Do it right. For now just assume that no one lives in 20th century
|
||||
* and no O2 user in 22th century ;-)
|
||||
*/
|
||||
#define mc146818_decode_year(year) ((year) + 2000)
|
||||
|
||||
#define RTC_ALWAYS_BCD 0
|
||||
|
||||
#endif /* __ASM_MACH_IP32_MC146818RTC_H */
|
||||
@@ -2,11 +2,6 @@
|
||||
|
||||
#include <linux/unistd.h>
|
||||
|
||||
#define __NR_seccomp_read __NR_read
|
||||
#define __NR_seccomp_write __NR_write
|
||||
#define __NR_seccomp_exit __NR_exit
|
||||
#define __NR_seccomp_sigreturn __NR_rt_sigreturn
|
||||
|
||||
/*
|
||||
* Kludge alert:
|
||||
*
|
||||
@@ -29,4 +24,6 @@
|
||||
|
||||
#endif /* CONFIG_MIPS32_O32 */
|
||||
|
||||
#include <asm-generic/seccomp.h>
|
||||
|
||||
#endif /* __ASM_SECCOMP_H */
|
||||
|
||||
@@ -9,10 +9,13 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/serial_8250.h>
|
||||
#include <linux/rtc/ds1685.h>
|
||||
|
||||
#include <asm/ip32/mace.h>
|
||||
#include <asm/ip32/ip32_ints.h>
|
||||
|
||||
extern void ip32_prepare_poweroff(void);
|
||||
|
||||
#define MACEISA_SERIAL1_OFFS offsetof(struct sgi_mace, isa.serial1)
|
||||
#define MACEISA_SERIAL2_OFFS offsetof(struct sgi_mace, isa.serial2)
|
||||
|
||||
@@ -90,18 +93,47 @@ static __init int sgio2btns_devinit(void)
|
||||
|
||||
device_initcall(sgio2btns_devinit);
|
||||
|
||||
static struct resource sgio2_cmos_rsrc[] = {
|
||||
#define MACE_RTC_RES_START (MACE_BASE + offsetof(struct sgi_mace, isa.rtc))
|
||||
#define MACE_RTC_RES_END (MACE_RTC_RES_START + 32767)
|
||||
|
||||
static struct resource ip32_rtc_resources[] = {
|
||||
{
|
||||
.start = 0x70,
|
||||
.end = 0x71,
|
||||
.flags = IORESOURCE_IO
|
||||
.start = MACEISA_RTC_IRQ,
|
||||
.end = MACEISA_RTC_IRQ,
|
||||
.flags = IORESOURCE_IRQ
|
||||
}, {
|
||||
.start = MACE_RTC_RES_START,
|
||||
.end = MACE_RTC_RES_END,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}
|
||||
};
|
||||
|
||||
static __init int sgio2_cmos_devinit(void)
|
||||
/* RTC registers on IP32 are each padded by 256 bytes (0x100). */
|
||||
static struct ds1685_rtc_platform_data
|
||||
ip32_rtc_platform_data[] = {
|
||||
{
|
||||
.regstep = 0x100,
|
||||
.bcd_mode = true,
|
||||
.no_irq = false,
|
||||
.uie_unsupported = false,
|
||||
.alloc_io_resources = true,
|
||||
.plat_prepare_poweroff = ip32_prepare_poweroff,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device ip32_rtc_device = {
|
||||
.name = "rtc-ds1685",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = ip32_rtc_platform_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(ip32_rtc_resources),
|
||||
.resource = ip32_rtc_resources,
|
||||
};
|
||||
|
||||
+static int __init sgio2_rtc_devinit(void)
|
||||
{
|
||||
return IS_ERR(platform_device_register_simple("rtc_cmos", -1,
|
||||
sgio2_cmos_rsrc, 1));
|
||||
return platform_device_register(&ip32_rtc_device);
|
||||
}
|
||||
|
||||
device_initcall(sgio2_cmos_devinit);
|
||||
|
||||
@@ -11,10 +11,11 @@
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/ds17287rtc.h>
|
||||
#include <linux/rtc/ds1685.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
@@ -33,53 +34,40 @@
|
||||
#define POWERDOWN_FREQ (HZ / 4)
|
||||
#define PANIC_FREQ (HZ / 8)
|
||||
|
||||
static struct timer_list power_timer, blink_timer, debounce_timer;
|
||||
static int has_panicked, shuting_down;
|
||||
extern struct platform_device ip32_rtc_device;
|
||||
|
||||
static void ip32_machine_restart(char *command) __noreturn;
|
||||
static void ip32_machine_halt(void) __noreturn;
|
||||
static void ip32_machine_power_off(void) __noreturn;
|
||||
static struct timer_list power_timer, blink_timer;
|
||||
static int has_panicked, shutting_down;
|
||||
|
||||
static __noreturn void ip32_poweroff(void *data)
|
||||
{
|
||||
void (*poweroff_func)(struct platform_device *) =
|
||||
symbol_get(ds1685_rtc_poweroff);
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
/* If the first __symbol_get failed, our module wasn't loaded. */
|
||||
if (!poweroff_func) {
|
||||
request_module("rtc-ds1685");
|
||||
poweroff_func = symbol_get(ds1685_rtc_poweroff);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!poweroff_func)
|
||||
pr_emerg("RTC not available for power-off. Spinning forever ...\n");
|
||||
else {
|
||||
(*poweroff_func)((struct platform_device *)data);
|
||||
symbol_put(ds1685_rtc_poweroff);
|
||||
}
|
||||
|
||||
unreachable();
|
||||
}
|
||||
|
||||
static void ip32_machine_restart(char *cmd) __noreturn;
|
||||
static void ip32_machine_restart(char *cmd)
|
||||
{
|
||||
msleep(20);
|
||||
crime->control = CRIME_CONTROL_HARD_RESET;
|
||||
while (1);
|
||||
}
|
||||
|
||||
static inline void ip32_machine_halt(void)
|
||||
{
|
||||
ip32_machine_power_off();
|
||||
}
|
||||
|
||||
static void ip32_machine_power_off(void)
|
||||
{
|
||||
unsigned char reg_a, xctrl_a, xctrl_b;
|
||||
|
||||
disable_irq(MACEISA_RTC_IRQ);
|
||||
reg_a = CMOS_READ(RTC_REG_A);
|
||||
|
||||
/* setup for kickstart & wake-up (DS12287 Ref. Man. p. 19) */
|
||||
reg_a &= ~DS_REGA_DV2;
|
||||
reg_a |= DS_REGA_DV1;
|
||||
|
||||
CMOS_WRITE(reg_a | DS_REGA_DV0, RTC_REG_A);
|
||||
wbflush();
|
||||
xctrl_b = CMOS_READ(DS_B1_XCTRL4B)
|
||||
| DS_XCTRL4B_ABE | DS_XCTRL4B_KFE;
|
||||
CMOS_WRITE(xctrl_b, DS_B1_XCTRL4B);
|
||||
xctrl_a = CMOS_READ(DS_B1_XCTRL4A) & ~DS_XCTRL4A_IFS;
|
||||
CMOS_WRITE(xctrl_a, DS_B1_XCTRL4A);
|
||||
wbflush();
|
||||
/* adios amigos... */
|
||||
CMOS_WRITE(xctrl_a | DS_XCTRL4A_PAB, DS_B1_XCTRL4A);
|
||||
CMOS_WRITE(reg_a, RTC_REG_A);
|
||||
wbflush();
|
||||
while (1);
|
||||
}
|
||||
|
||||
static void power_timeout(unsigned long data)
|
||||
{
|
||||
ip32_machine_power_off();
|
||||
unreachable();
|
||||
}
|
||||
|
||||
static void blink_timeout(unsigned long data)
|
||||
@@ -89,44 +77,27 @@ static void blink_timeout(unsigned long data)
|
||||
mod_timer(&blink_timer, jiffies + data);
|
||||
}
|
||||
|
||||
static void debounce(unsigned long data)
|
||||
static void ip32_machine_halt(void)
|
||||
{
|
||||
unsigned char reg_a, reg_c, xctrl_a;
|
||||
|
||||
reg_c = CMOS_READ(RTC_INTR_FLAGS);
|
||||
reg_a = CMOS_READ(RTC_REG_A);
|
||||
CMOS_WRITE(reg_a | DS_REGA_DV0, RTC_REG_A);
|
||||
wbflush();
|
||||
xctrl_a = CMOS_READ(DS_B1_XCTRL4A);
|
||||
if ((xctrl_a & DS_XCTRL4A_IFS) || (reg_c & RTC_IRQF )) {
|
||||
/* Interrupt still being sent. */
|
||||
debounce_timer.expires = jiffies + 50;
|
||||
add_timer(&debounce_timer);
|
||||
|
||||
/* clear interrupt source */
|
||||
CMOS_WRITE(xctrl_a & ~DS_XCTRL4A_IFS, DS_B1_XCTRL4A);
|
||||
CMOS_WRITE(reg_a & ~DS_REGA_DV0, RTC_REG_A);
|
||||
return;
|
||||
}
|
||||
CMOS_WRITE(reg_a & ~DS_REGA_DV0, RTC_REG_A);
|
||||
|
||||
if (has_panicked)
|
||||
ip32_machine_restart(NULL);
|
||||
|
||||
enable_irq(MACEISA_RTC_IRQ);
|
||||
ip32_poweroff(&ip32_rtc_device);
|
||||
}
|
||||
|
||||
static inline void ip32_power_button(void)
|
||||
static void power_timeout(unsigned long data)
|
||||
{
|
||||
ip32_poweroff(&ip32_rtc_device);
|
||||
}
|
||||
|
||||
void ip32_prepare_poweroff(void)
|
||||
{
|
||||
if (has_panicked)
|
||||
return;
|
||||
|
||||
if (shuting_down || kill_cad_pid(SIGINT, 1)) {
|
||||
if (shutting_down || kill_cad_pid(SIGINT, 1)) {
|
||||
/* No init process or button pressed twice. */
|
||||
ip32_machine_power_off();
|
||||
ip32_poweroff(&ip32_rtc_device);
|
||||
}
|
||||
|
||||
shuting_down = 1;
|
||||
shutting_down = 1;
|
||||
blink_timer.data = POWERDOWN_FREQ;
|
||||
blink_timeout(POWERDOWN_FREQ);
|
||||
|
||||
@@ -136,27 +107,6 @@ static inline void ip32_power_button(void)
|
||||
add_timer(&power_timer);
|
||||
}
|
||||
|
||||
static irqreturn_t ip32_rtc_int(int irq, void *dev_id)
|
||||
{
|
||||
unsigned char reg_c;
|
||||
|
||||
reg_c = CMOS_READ(RTC_INTR_FLAGS);
|
||||
if (!(reg_c & RTC_IRQF)) {
|
||||
printk(KERN_WARNING
|
||||
"%s: RTC IRQ without RTC_IRQF\n", __func__);
|
||||
}
|
||||
/* Wait until interrupt goes away */
|
||||
disable_irq_nosync(MACEISA_RTC_IRQ);
|
||||
init_timer(&debounce_timer);
|
||||
debounce_timer.function = debounce;
|
||||
debounce_timer.expires = jiffies + 50;
|
||||
add_timer(&debounce_timer);
|
||||
|
||||
printk(KERN_DEBUG "Power button pressed\n");
|
||||
ip32_power_button();
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int panic_event(struct notifier_block *this, unsigned long event,
|
||||
void *ptr)
|
||||
{
|
||||
@@ -190,15 +140,12 @@ static __init int ip32_reboot_setup(void)
|
||||
|
||||
_machine_restart = ip32_machine_restart;
|
||||
_machine_halt = ip32_machine_halt;
|
||||
pm_power_off = ip32_machine_power_off;
|
||||
pm_power_off = ip32_machine_halt;
|
||||
|
||||
init_timer(&blink_timer);
|
||||
blink_timer.function = blink_timeout;
|
||||
atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
|
||||
|
||||
if (request_irq(MACEISA_RTC_IRQ, ip32_rtc_int, 0, "rtc", NULL))
|
||||
panic("Can't allocate MACEISA RTC IRQ");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ generic-y += param.h
|
||||
generic-y += percpu.h
|
||||
generic-y += poll.h
|
||||
generic-y += preempt.h
|
||||
generic-y += seccomp.h
|
||||
generic-y += segment.h
|
||||
generic-y += topology.h
|
||||
generic-y += trace_clock.h
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user