You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm: [ARM] 3914/1: [Jornada7xx] - Typo Fix in cpu-sa1110.c (b != B) [ARM] 3913/1: n2100: fix IRQ routing for second ethernet port [ARM] Add KBUILD_IMAGE target support [ARM] Fix suspend oops caused by PXA2xx PCMCIA driver [ARM] Fix i2c-pxa slave mode support [ARM] 3900/1: Fix VFP Division by Zero exception handling. [ARM] 3899/1: Fix the normalization of the denormal double precision number. [ARM] 3909/1: Disable UWIND_INFO for ARM (again) [ARM] Add __must_check to uaccess functions [ARM] Add realview SMP default configuration [ARM] Fix SMP irqflags support
This commit is contained in:
+4
-2
@@ -174,11 +174,13 @@ libs-y := arch/arm/lib/ $(libs-y)
|
|||||||
|
|
||||||
# Default target when executing plain make
|
# Default target when executing plain make
|
||||||
ifeq ($(CONFIG_XIP_KERNEL),y)
|
ifeq ($(CONFIG_XIP_KERNEL),y)
|
||||||
all: xipImage
|
KBUILD_IMAGE := xipImage
|
||||||
else
|
else
|
||||||
all: zImage
|
KBUILD_IMAGE := zImage
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
all: $(KBUILD_IMAGE)
|
||||||
|
|
||||||
boot := arch/arm/boot
|
boot := arch/arm/boot
|
||||||
|
|
||||||
# Update machine arch and proc symlinks if something which affects
|
# Update machine arch and proc symlinks if something which affects
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+13
-7
@@ -7,6 +7,7 @@
|
|||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
#include <linux/module.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
@@ -19,6 +20,7 @@
|
|||||||
#include <linux/cpu.h>
|
#include <linux/cpu.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
|
#include <linux/irq.h>
|
||||||
|
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
@@ -474,25 +476,26 @@ void show_local_irqs(struct seq_file *p)
|
|||||||
seq_putc(p, '\n');
|
seq_putc(p, '\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ipi_timer(struct pt_regs *regs)
|
static void ipi_timer(void)
|
||||||
{
|
{
|
||||||
int user = user_mode(regs);
|
|
||||||
|
|
||||||
irq_enter();
|
irq_enter();
|
||||||
profile_tick(CPU_PROFILING, regs);
|
profile_tick(CPU_PROFILING);
|
||||||
update_process_times(user);
|
update_process_times(user_mode(get_irq_regs()));
|
||||||
irq_exit();
|
irq_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_LOCAL_TIMERS
|
#ifdef CONFIG_LOCAL_TIMERS
|
||||||
asmlinkage void do_local_timer(struct pt_regs *regs)
|
asmlinkage void do_local_timer(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||||
int cpu = smp_processor_id();
|
int cpu = smp_processor_id();
|
||||||
|
|
||||||
if (local_timer_ack()) {
|
if (local_timer_ack()) {
|
||||||
irq_stat[cpu].local_timer_irqs++;
|
irq_stat[cpu].local_timer_irqs++;
|
||||||
ipi_timer(regs);
|
ipi_timer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -551,6 +554,7 @@ asmlinkage void do_IPI(struct pt_regs *regs)
|
|||||||
{
|
{
|
||||||
unsigned int cpu = smp_processor_id();
|
unsigned int cpu = smp_processor_id();
|
||||||
struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
|
struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
|
||||||
|
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||||
|
|
||||||
ipi->ipi_count++;
|
ipi->ipi_count++;
|
||||||
|
|
||||||
@@ -574,7 +578,7 @@ asmlinkage void do_IPI(struct pt_regs *regs)
|
|||||||
|
|
||||||
switch (nextmsg) {
|
switch (nextmsg) {
|
||||||
case IPI_TIMER:
|
case IPI_TIMER:
|
||||||
ipi_timer(regs);
|
ipi_timer();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IPI_RESCHEDULE:
|
case IPI_RESCHEDULE:
|
||||||
@@ -599,6 +603,8 @@ asmlinkage void do_IPI(struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
} while (msgs);
|
} while (msgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void smp_send_reschedule(int cpu)
|
void smp_send_reschedule(int cpu)
|
||||||
|
|||||||
@@ -327,13 +327,12 @@ EXPORT_SYMBOL(restore_time_delta);
|
|||||||
*/
|
*/
|
||||||
void timer_tick(void)
|
void timer_tick(void)
|
||||||
{
|
{
|
||||||
struct pt_regs *regs = get_irq_regs();
|
|
||||||
profile_tick(CPU_PROFILING);
|
profile_tick(CPU_PROFILING);
|
||||||
do_leds();
|
do_leds();
|
||||||
do_set_rtc();
|
do_set_rtc();
|
||||||
do_timer(1);
|
do_timer(1);
|
||||||
#ifndef CONFIG_SMP
|
#ifndef CONFIG_SMP
|
||||||
update_process_times(user_mode(regs));
|
update_process_times(user_mode(get_irq_regs()));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ n2100_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
|||||||
irq = IRQ_IOP32X_XINT0;
|
irq = IRQ_IOP32X_XINT0;
|
||||||
} else if (PCI_SLOT(dev->devfn) == 2) {
|
} else if (PCI_SLOT(dev->devfn) == 2) {
|
||||||
/* RTL8110SB #2 */
|
/* RTL8110SB #2 */
|
||||||
irq = IRQ_IOP32X_XINT1;
|
irq = IRQ_IOP32X_XINT3;
|
||||||
} else if (PCI_SLOT(dev->devfn) == 3) {
|
} else if (PCI_SLOT(dev->devfn) == 3) {
|
||||||
/* Sil3512 */
|
/* Sil3512 */
|
||||||
irq = IRQ_IOP32X_XINT2;
|
irq = IRQ_IOP32X_XINT2;
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ static struct sdram_params sdram_tbl[] __initdata = {
|
|||||||
.refresh = 64000,
|
.refresh = 64000,
|
||||||
.cas_latency = 3,
|
.cas_latency = 3,
|
||||||
}, { /* Samsung K4S281632B-1H */
|
}, { /* Samsung K4S281632B-1H */
|
||||||
.name = "K4S281632b-1H",
|
.name = "K4S281632B-1H",
|
||||||
.rows = 12,
|
.rows = 12,
|
||||||
.tck = 10,
|
.tck = 10,
|
||||||
.trp = 20,
|
.trp = 20,
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ static void vfp_double_normalise_denormal(struct vfp_double *vd)
|
|||||||
{
|
{
|
||||||
int bits = 31 - fls(vd->significand >> 32);
|
int bits = 31 - fls(vd->significand >> 32);
|
||||||
if (bits == 31)
|
if (bits == 31)
|
||||||
bits = 62 - fls(vd->significand);
|
bits = 63 - fls(vd->significand);
|
||||||
|
|
||||||
vfp_double_dump("normalise_denormal: in", vd);
|
vfp_double_dump("normalise_denormal: in", vd);
|
||||||
|
|
||||||
|
|||||||
@@ -148,6 +148,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_
|
|||||||
/*
|
/*
|
||||||
* These are arranged in priority order, least to highest.
|
* These are arranged in priority order, least to highest.
|
||||||
*/
|
*/
|
||||||
|
RAISE(FPSCR_DZC, FPSCR_DZE, FPE_FLTDIV);
|
||||||
RAISE(FPSCR_IXC, FPSCR_IXE, FPE_FLTRES);
|
RAISE(FPSCR_IXC, FPSCR_IXE, FPE_FLTRES);
|
||||||
RAISE(FPSCR_UFC, FPSCR_UFE, FPE_FLTUND);
|
RAISE(FPSCR_UFC, FPSCR_UFE, FPE_FLTUND);
|
||||||
RAISE(FPSCR_OFC, FPSCR_OFE, FPE_FLTOVF);
|
RAISE(FPSCR_OFC, FPSCR_OFE, FPE_FLTOVF);
|
||||||
|
|||||||
@@ -272,7 +272,8 @@ static int i2c_pxa_wait_slave(struct pxa_i2c *i2c)
|
|||||||
dev_dbg(&i2c->adap.dev, "%s: %ld: ISR=%08x, ICR=%08x, IBMR=%02x\n",
|
dev_dbg(&i2c->adap.dev, "%s: %ld: ISR=%08x, ICR=%08x, IBMR=%02x\n",
|
||||||
__func__, (long)jiffies, ISR, ICR, IBMR);
|
__func__, (long)jiffies, ISR, ICR, IBMR);
|
||||||
|
|
||||||
if ((ISR & (ISR_UB|ISR_IBB|ISR_SAD)) == ISR_SAD ||
|
if ((ISR & (ISR_UB|ISR_IBB)) == 0 ||
|
||||||
|
(ISR & ISR_SAD) != 0 ||
|
||||||
(ICR & ICR_SCLE) == 0) {
|
(ICR & ICR_SCLE) == 0) {
|
||||||
if (i2c_debug > 1)
|
if (i2c_debug > 1)
|
||||||
dev_dbg(&i2c->adap.dev, "%s: done\n", __func__);
|
dev_dbg(&i2c->adap.dev, "%s: done\n", __func__);
|
||||||
@@ -492,7 +493,10 @@ static void i2c_pxa_slave_txempty(struct pxa_i2c *i2c, u32 isr)
|
|||||||
if (isr & ISR_BED) {
|
if (isr & ISR_BED) {
|
||||||
/* what should we do here? */
|
/* what should we do here? */
|
||||||
} else {
|
} else {
|
||||||
int ret = i2c->slave->read(i2c->slave->data);
|
int ret = 0;
|
||||||
|
|
||||||
|
if (i2c->slave != NULL)
|
||||||
|
ret = i2c->slave->read(i2c->slave->data);
|
||||||
|
|
||||||
IDBR = ret;
|
IDBR = ret;
|
||||||
ICR |= ICR_TB; /* allow next byte */
|
ICR |= ICR_TB; /* allow next byte */
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ pxa2xx_pcmcia_frequency_change(struct soc_pcmcia_socket *skt,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int pxa2xx_drv_pcmcia_probe(struct device *dev)
|
int __pxa2xx_drv_pcmcia_probe(struct device *dev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct pcmcia_low_level *ops;
|
struct pcmcia_low_level *ops;
|
||||||
@@ -203,35 +203,52 @@ int pxa2xx_drv_pcmcia_probe(struct device *dev)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pxa2xx_drv_pcmcia_probe);
|
EXPORT_SYMBOL(__pxa2xx_drv_pcmcia_probe);
|
||||||
|
|
||||||
static int pxa2xx_drv_pcmcia_resume(struct device *dev)
|
|
||||||
|
static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
struct pcmcia_low_level *ops = dev->platform_data;
|
return __pxa2xx_drv_pcmcia_probe(&dev->dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pxa2xx_drv_pcmcia_remove(struct platform_device *dev)
|
||||||
|
{
|
||||||
|
return soc_common_drv_pcmcia_remove(&dev->dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pxa2xx_drv_pcmcia_suspend(struct platform_device *dev, pm_message_t state)
|
||||||
|
{
|
||||||
|
return pcmcia_socket_dev_suspend(&dev->dev, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pxa2xx_drv_pcmcia_resume(struct platform_device *dev)
|
||||||
|
{
|
||||||
|
struct pcmcia_low_level *ops = dev->dev.platform_data;
|
||||||
int nr = ops ? ops->nr : 0;
|
int nr = ops ? ops->nr : 0;
|
||||||
|
|
||||||
MECR = nr > 1 ? MECR_CIT | MECR_NOS : (nr > 0 ? MECR_CIT : 0);
|
MECR = nr > 1 ? MECR_CIT | MECR_NOS : (nr > 0 ? MECR_CIT : 0);
|
||||||
|
|
||||||
return pcmcia_socket_dev_resume(dev);
|
return pcmcia_socket_dev_resume(&dev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct device_driver pxa2xx_pcmcia_driver = {
|
static struct platform_driver pxa2xx_pcmcia_driver = {
|
||||||
.probe = pxa2xx_drv_pcmcia_probe,
|
.probe = pxa2xx_drv_pcmcia_probe,
|
||||||
.remove = soc_common_drv_pcmcia_remove,
|
.remove = pxa2xx_drv_pcmcia_remove,
|
||||||
.suspend = pcmcia_socket_dev_suspend,
|
.suspend = pxa2xx_drv_pcmcia_suspend,
|
||||||
.resume = pxa2xx_drv_pcmcia_resume,
|
.resume = pxa2xx_drv_pcmcia_resume,
|
||||||
|
.driver = {
|
||||||
.name = "pxa2xx-pcmcia",
|
.name = "pxa2xx-pcmcia",
|
||||||
.bus = &platform_bus_type,
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init pxa2xx_pcmcia_init(void)
|
static int __init pxa2xx_pcmcia_init(void)
|
||||||
{
|
{
|
||||||
return driver_register(&pxa2xx_pcmcia_driver);
|
return platform_driver_register(&pxa2xx_pcmcia_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit pxa2xx_pcmcia_exit(void)
|
static void __exit pxa2xx_pcmcia_exit(void)
|
||||||
{
|
{
|
||||||
driver_unregister(&pxa2xx_pcmcia_driver);
|
platform_driver_unregister(&pxa2xx_pcmcia_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
fs_initcall(pxa2xx_pcmcia_init);
|
fs_initcall(pxa2xx_pcmcia_init);
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
/* temporary measure */
|
/* temporary measure */
|
||||||
extern int pxa2xx_drv_pcmcia_probe(struct device *);
|
extern int __pxa2xx_drv_pcmcia_probe(struct device *);
|
||||||
|
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ int __init pcmcia_lubbock_init(struct sa1111_dev *sadev)
|
|||||||
lubbock_set_misc_wr((1 << 15) | (1 << 14), 0);
|
lubbock_set_misc_wr((1 << 15) | (1 << 14), 0);
|
||||||
|
|
||||||
sadev->dev.platform_data = &lubbock_pcmcia_ops;
|
sadev->dev.platform_data = &lubbock_pcmcia_ops;
|
||||||
ret = pxa2xx_drv_pcmcia_probe(&sadev->dev);
|
ret = __pxa2xx_drv_pcmcia_probe(&sadev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
+10
-10
@@ -383,19 +383,19 @@ do { \
|
|||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
extern unsigned long __copy_from_user(void *to, const void __user *from, unsigned long n);
|
extern unsigned long __must_check __copy_from_user(void *to, const void __user *from, unsigned long n);
|
||||||
extern unsigned long __copy_to_user(void __user *to, const void *from, unsigned long n);
|
extern unsigned long __must_check __copy_to_user(void __user *to, const void *from, unsigned long n);
|
||||||
extern unsigned long __clear_user(void __user *addr, unsigned long n);
|
extern unsigned long __must_check __clear_user(void __user *addr, unsigned long n);
|
||||||
#else
|
#else
|
||||||
#define __copy_from_user(to,from,n) (memcpy(to, (void __force *)from, n), 0)
|
#define __copy_from_user(to,from,n) (memcpy(to, (void __force *)from, n), 0)
|
||||||
#define __copy_to_user(to,from,n) (memcpy((void __force *)to, from, n), 0)
|
#define __copy_to_user(to,from,n) (memcpy((void __force *)to, from, n), 0)
|
||||||
#define __clear_user(addr,n) (memset((void __force *)addr, 0, n), 0)
|
#define __clear_user(addr,n) (memset((void __force *)addr, 0, n), 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern unsigned long __strncpy_from_user(char *to, const char __user *from, unsigned long count);
|
extern unsigned long __must_check __strncpy_from_user(char *to, const char __user *from, unsigned long count);
|
||||||
extern unsigned long __strnlen_user(const char __user *s, long n);
|
extern unsigned long __must_check __strnlen_user(const char __user *s, long n);
|
||||||
|
|
||||||
static inline unsigned long copy_from_user(void *to, const void __user *from, unsigned long n)
|
static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||||
{
|
{
|
||||||
if (access_ok(VERIFY_READ, from, n))
|
if (access_ok(VERIFY_READ, from, n))
|
||||||
n = __copy_from_user(to, from, n);
|
n = __copy_from_user(to, from, n);
|
||||||
@@ -404,7 +404,7 @@ static inline unsigned long copy_from_user(void *to, const void __user *from, un
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
|
static inline unsigned long __must_check copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||||
{
|
{
|
||||||
if (access_ok(VERIFY_WRITE, to, n))
|
if (access_ok(VERIFY_WRITE, to, n))
|
||||||
n = __copy_to_user(to, from, n);
|
n = __copy_to_user(to, from, n);
|
||||||
@@ -414,14 +414,14 @@ static inline unsigned long copy_to_user(void __user *to, const void *from, unsi
|
|||||||
#define __copy_to_user_inatomic __copy_to_user
|
#define __copy_to_user_inatomic __copy_to_user
|
||||||
#define __copy_from_user_inatomic __copy_from_user
|
#define __copy_from_user_inatomic __copy_from_user
|
||||||
|
|
||||||
static inline unsigned long clear_user(void __user *to, unsigned long n)
|
static inline unsigned long __must_check clear_user(void __user *to, unsigned long n)
|
||||||
{
|
{
|
||||||
if (access_ok(VERIFY_WRITE, to, n))
|
if (access_ok(VERIFY_WRITE, to, n))
|
||||||
n = __clear_user(to, n);
|
n = __clear_user(to, n);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline long strncpy_from_user(char *dst, const char __user *src, long count)
|
static inline long __must_check strncpy_from_user(char *dst, const char __user *src, long count)
|
||||||
{
|
{
|
||||||
long res = -EFAULT;
|
long res = -EFAULT;
|
||||||
if (access_ok(VERIFY_READ, src, 1))
|
if (access_ok(VERIFY_READ, src, 1))
|
||||||
@@ -431,7 +431,7 @@ static inline long strncpy_from_user(char *dst, const char __user *src, long cou
|
|||||||
|
|
||||||
#define strlen_user(s) strnlen_user(s, ~0UL >> 1)
|
#define strlen_user(s) strnlen_user(s, ~0UL >> 1)
|
||||||
|
|
||||||
static inline long strnlen_user(const char __user *s, long n)
|
static inline long __must_check strnlen_user(const char __user *s, long n)
|
||||||
{
|
{
|
||||||
unsigned long res = 0;
|
unsigned long res = 0;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -341,7 +341,7 @@ config FRAME_POINTER
|
|||||||
|
|
||||||
config UNWIND_INFO
|
config UNWIND_INFO
|
||||||
bool "Compile the kernel with frame unwind information"
|
bool "Compile the kernel with frame unwind information"
|
||||||
depends on !IA64 && !PARISC
|
depends on !IA64 && !PARISC && !ARM
|
||||||
depends on !MODULES || !(MIPS || PPC || SUPERH || V850)
|
depends on !MODULES || !(MIPS || PPC || SUPERH || V850)
|
||||||
help
|
help
|
||||||
If you say Y here the resulting kernel image will be slightly larger
|
If you say Y here the resulting kernel image will be slightly larger
|
||||||
|
|||||||
Reference in New Issue
Block a user