Skip to content

Commit 4f1f1d4

Browse files
author
Dima Zavin
committed
Merge remote branch 'stable/linux-2.6.35.y' into android-2.6.35
Conflicts: drivers/mmc/core/core.c Change-Id: If12b25725eccb07b385f5898be75d052ff75a3f2
2 parents cf1fb10 + ea8a52f commit 4f1f1d4

File tree

448 files changed

+5121
-2370
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

448 files changed

+5121
-2370
lines changed

Documentation/sound/alsa/HD-Audio-Models.txt

+1
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ Conexant 5051
288288
Conexant 5066
289289
=============
290290
laptop Basic Laptop config (default)
291+
hp-laptop HP laptops, e g G60
291292
dell-laptop Dell laptops
292293
olpc-xo-1_5 OLPC XO 1.5
293294
ideapad Lenovo IdeaPad U150

Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
VERSION = 2
22
PATCHLEVEL = 6
33
SUBLEVEL = 35
4-
EXTRAVERSION =
5-
NAME = Sheep on Meth
4+
EXTRAVERSION = .7
5+
NAME = Yokohama
66

77
# *DOCUMENTATION*
88
# To see a list of typical targets execute "make help"

arch/alpha/kernel/err_marvel.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ marvel_print_err_cyc(u64 err_cyc)
109109
#define IO7__ERR_CYC__CYCLE__M (0x7)
110110

111111
printk("%s Packet In Error: %s\n"
112-
"%s Error in %s, cycle %ld%s%s\n",
112+
"%s Error in %s, cycle %lld%s%s\n",
113113
err_print_prefix,
114114
packet_desc[EXTRACT(err_cyc, IO7__ERR_CYC__PACKET)],
115115
err_print_prefix,
@@ -313,7 +313,7 @@ marvel_print_po7_ugbge_sym(u64 ugbge_sym)
313313
}
314314

315315
printk("%s Up Hose Garbage Symptom:\n"
316-
"%s Source Port: %ld - Dest PID: %ld - OpCode: %s\n",
316+
"%s Source Port: %lld - Dest PID: %lld - OpCode: %s\n",
317317
err_print_prefix,
318318
err_print_prefix,
319319
EXTRACT(ugbge_sym, IO7__PO7_UGBGE_SYM__UPH_SRC_PORT),
@@ -552,7 +552,7 @@ marvel_print_pox_spl_cmplt(u64 spl_cmplt)
552552
#define IO7__POX_SPLCMPLT__REM_BYTE_COUNT__M (0xfff)
553553

554554
printk("%s Split Completion Error:\n"
555-
"%s Source (Bus:Dev:Func): %ld:%ld:%ld\n",
555+
"%s Source (Bus:Dev:Func): %lld:%lld:%lld\n",
556556
err_print_prefix,
557557
err_print_prefix,
558558
EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__SOURCE_BUS),

arch/alpha/kernel/proto.h

-3
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,6 @@ extern void SMC669_Init(int);
156156
/* es1888.c */
157157
extern void es1888_init(void);
158158

159-
/* ns87312.c */
160-
extern void ns87312_enable_ide(long ide_base);
161-
162159
/* ../lib/fpreg.c */
163160
extern void alpha_write_fp_reg (unsigned long reg, unsigned long val);
164161
extern unsigned long alpha_read_fp_reg (unsigned long reg);

arch/alpha/kernel/sys_cabriolet.c

+16-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#include "irq_impl.h"
3434
#include "pci_impl.h"
3535
#include "machvec_impl.h"
36-
36+
#include "pc873xx.h"
3737

3838
/* Note mask bit is true for DISABLED irqs. */
3939
static unsigned long cached_irq_mask = ~0UL;
@@ -235,18 +235,31 @@ cabriolet_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
235235
return COMMON_TABLE_LOOKUP;
236236
}
237237

238+
static inline void __init
239+
cabriolet_enable_ide(void)
240+
{
241+
if (pc873xx_probe() == -1) {
242+
printk(KERN_ERR "Probing for PC873xx Super IO chip failed.\n");
243+
} else {
244+
printk(KERN_INFO "Found %s Super IO chip at 0x%x\n",
245+
pc873xx_get_model(), pc873xx_get_base());
246+
247+
pc873xx_enable_ide();
248+
}
249+
}
250+
238251
static inline void __init
239252
cabriolet_init_pci(void)
240253
{
241254
common_init_pci();
242-
ns87312_enable_ide(0x398);
255+
cabriolet_enable_ide();
243256
}
244257

245258
static inline void __init
246259
cia_cab_init_pci(void)
247260
{
248261
cia_init_pci();
249-
ns87312_enable_ide(0x398);
262+
cabriolet_enable_ide();
250263
}
251264

252265
/*

arch/alpha/kernel/sys_takara.c

+9-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
#include "irq_impl.h"
3030
#include "pci_impl.h"
3131
#include "machvec_impl.h"
32-
32+
#include "pc873xx.h"
3333

3434
/* Note mask bit is true for DISABLED irqs. */
3535
static unsigned long cached_irq_mask[2] = { -1, -1 };
@@ -264,7 +264,14 @@ takara_init_pci(void)
264264
alpha_mv.pci_map_irq = takara_map_irq_srm;
265265

266266
cia_init_pci();
267-
ns87312_enable_ide(0x26e);
267+
268+
if (pc873xx_probe() == -1) {
269+
printk(KERN_ERR "Probing for PC873xx Super IO chip failed.\n");
270+
} else {
271+
printk(KERN_INFO "Found %s Super IO chip at 0x%x\n",
272+
pc873xx_get_model(), pc873xx_get_base());
273+
pc873xx_enable_ide();
274+
}
268275
}
269276

270277

arch/arm/Kconfig

+12
Original file line numberDiff line numberDiff line change
@@ -1027,6 +1027,18 @@ config PL310_ERRATA_588369
10271027
is not correctly implemented in PL310 as clean lines are not
10281028
invalidated as a result of these operations. Note that this errata
10291029
uses Texas Instrument's secure monitor api.
1030+
1031+
config ARM_ERRATA_720789
1032+
bool "ARM errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID"
1033+
depends on CPU_V7 && SMP
1034+
help
1035+
This option enables the workaround for the 720789 Cortex-A9 (prior to
1036+
r2p0) erratum. A faulty ASID can be sent to the other CPUs for the
1037+
broadcasted CP15 TLB maintenance operations TLBIASIDIS and TLBIMVAIS.
1038+
As a consequence of this erratum, some TLB entries which should be
1039+
invalidated are not, resulting in an incoherency in the system page
1040+
tables. The workaround changes the TLB flushing routines to invalidate
1041+
entries regardless of the ASID.
10301042
endmenu
10311043

10321044
source "arch/arm/common/Kconfig"

arch/arm/include/asm/ptrace.h

+13-4
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,24 @@ struct pt_regs {
158158
*/
159159
static inline int valid_user_regs(struct pt_regs *regs)
160160
{
161-
if (user_mode(regs) && (regs->ARM_cpsr & PSR_I_BIT) == 0) {
162-
regs->ARM_cpsr &= ~(PSR_F_BIT | PSR_A_BIT);
163-
return 1;
161+
unsigned long mode = regs->ARM_cpsr & MODE_MASK;
162+
163+
/*
164+
* Always clear the F (FIQ) and A (delayed abort) bits
165+
*/
166+
regs->ARM_cpsr &= ~(PSR_F_BIT | PSR_A_BIT);
167+
168+
if ((regs->ARM_cpsr & PSR_I_BIT) == 0) {
169+
if (mode == USR_MODE)
170+
return 1;
171+
if (elf_hwcap & HWCAP_26BIT && mode == USR26_MODE)
172+
return 1;
164173
}
165174

166175
/*
167176
* Force CPSR to something logical...
168177
*/
169-
regs->ARM_cpsr &= PSR_f | PSR_s | (PSR_x & ~PSR_A_BIT) | PSR_T_BIT | MODE32_BIT;
178+
regs->ARM_cpsr &= PSR_f | PSR_s | PSR_x | PSR_T_BIT | MODE32_BIT;
170179
if (!(elf_hwcap & HWCAP_26BIT))
171180
regs->ARM_cpsr |= USR_MODE;
172181

arch/arm/include/asm/tlbflush.h

+8
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,11 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm)
378378
if (tlb_flag(TLB_V6_I_ASID))
379379
asm("mcr p15, 0, %0, c8, c5, 2" : : "r" (asid) : "cc");
380380
if (tlb_flag(TLB_V7_UIS_ASID))
381+
#ifdef CONFIG_ARM_ERRATA_720789
382+
asm("mcr p15, 0, %0, c8, c3, 0" : : "r" (zero) : "cc");
383+
#else
381384
asm("mcr p15, 0, %0, c8, c3, 2" : : "r" (asid) : "cc");
385+
#endif
382386

383387
if (tlb_flag(TLB_BTB)) {
384388
/* flush the branch target cache */
@@ -424,7 +428,11 @@ local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
424428
if (tlb_flag(TLB_V6_I_PAGE))
425429
asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (uaddr) : "cc");
426430
if (tlb_flag(TLB_V7_UIS_PAGE))
431+
#ifdef CONFIG_ARM_ERRATA_720789
432+
asm("mcr p15, 0, %0, c8, c3, 3" : : "r" (uaddr & PAGE_MASK) : "cc");
433+
#else
427434
asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (uaddr) : "cc");
435+
#endif
428436

429437
if (tlb_flag(TLB_BTB)) {
430438
/* flush the branch target cache */

arch/arm/kernel/entry-common.S

+2
Original file line numberDiff line numberDiff line change
@@ -382,11 +382,13 @@ ENDPROC(sys_clone_wrapper)
382382

383383
sys_sigreturn_wrapper:
384384
add r0, sp, #S_OFF
385+
mov why, #0 @ prevent syscall restart handling
385386
b sys_sigreturn
386387
ENDPROC(sys_sigreturn_wrapper)
387388

388389
sys_rt_sigreturn_wrapper:
389390
add r0, sp, #S_OFF
391+
mov why, #0 @ prevent syscall restart handling
390392
b sys_rt_sigreturn
391393
ENDPROC(sys_rt_sigreturn_wrapper)
392394

arch/arm/mach-at91/at91sam9g45_devices.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static struct resource hdmac_resources[] = {
4646
.end = AT91_BASE_SYS + AT91_DMA + SZ_512 - 1,
4747
.flags = IORESOURCE_MEM,
4848
},
49-
[2] = {
49+
[1] = {
5050
.start = AT91SAM9G45_ID_DMA,
5151
.end = AT91SAM9G45_ID_DMA,
5252
.flags = IORESOURCE_IRQ,

arch/arm/mach-ixp4xx/ixdp425-setup.c

+1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
100100

101101
static struct platform_nand_data ixdp425_flash_nand_data = {
102102
.chip = {
103+
.nr_chips = 1,
103104
.chip_delay = 30,
104105
.options = NAND_NO_AUTOINCR,
105106
#ifdef CONFIG_MTD_PARTITIONS

arch/arm/mach-mx3/mach-qong.c

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ static void qong_nand_select_chip(struct mtd_info *mtd, int chip)
169169

170170
static struct platform_nand_data qong_nand_data = {
171171
.chip = {
172+
.nr_chips = 1,
172173
.chip_delay = 20,
173174
.options = 0,
174175
},

arch/arm/mach-orion5x/ts78xx-setup.c

+1
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ static struct mtd_partition ts78xx_ts_nand_parts[] = {
216216

217217
static struct platform_nand_data ts78xx_ts_nand_data = {
218218
.chip = {
219+
.nr_chips = 1,
219220
.part_probe_types = ts_nand_part_probes,
220221
.partitions = ts78xx_ts_nand_parts,
221222
.nr_partitions = ARRAY_SIZE(ts78xx_ts_nand_parts),

arch/arm/mach-pxa/cm-x300.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -745,9 +745,10 @@ static void __init cm_x300_init(void)
745745
{
746746
cm_x300_init_mfp();
747747

748-
pxa_set_ffuart_info(NULL);
749748
pxa_set_btuart_info(NULL);
750749
pxa_set_stuart_info(NULL);
750+
if (cpu_is_pxa300())
751+
pxa_set_ffuart_info(NULL);
751752

752753
cm_x300_init_da9030();
753754
cm_x300_init_dm9000();

arch/arm/plat-mxc/gpio.c

+8
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,16 @@ static void _set_gpio_direction(struct gpio_chip *chip, unsigned offset,
214214
struct mxc_gpio_port *port =
215215
container_of(chip, struct mxc_gpio_port, chip);
216216
u32 l;
217+
unsigned long flags;
217218

219+
spin_lock_irqsave(&port->lock, flags);
218220
l = __raw_readl(port->base + GPIO_GDIR);
219221
if (dir)
220222
l |= 1 << offset;
221223
else
222224
l &= ~(1 << offset);
223225
__raw_writel(l, port->base + GPIO_GDIR);
226+
spin_unlock_irqrestore(&port->lock, flags);
224227
}
225228

226229
static void mxc_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
@@ -229,9 +232,12 @@ static void mxc_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
229232
container_of(chip, struct mxc_gpio_port, chip);
230233
void __iomem *reg = port->base + GPIO_DR;
231234
u32 l;
235+
unsigned long flags;
232236

237+
spin_lock_irqsave(&port->lock, flags);
233238
l = (__raw_readl(reg) & (~(1 << offset))) | (value << offset);
234239
__raw_writel(l, reg);
240+
spin_unlock_irqrestore(&port->lock, flags);
235241
}
236242

237243
static int mxc_gpio_get(struct gpio_chip *chip, unsigned offset)
@@ -285,6 +291,8 @@ int __init mxc_gpio_init(struct mxc_gpio_port *port, int cnt)
285291
port[i].chip.base = i * 32;
286292
port[i].chip.ngpio = 32;
287293

294+
spin_lock_init(&port[i].lock);
295+
288296
/* its a serious configuration bug when it fails */
289297
BUG_ON( gpiochip_add(&port[i].chip) < 0 );
290298

arch/arm/plat-mxc/include/mach/gpio.h

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#ifndef __ASM_ARCH_MXC_GPIO_H__
2020
#define __ASM_ARCH_MXC_GPIO_H__
2121

22+
#include <linux/spinlock.h>
2223
#include <mach/hardware.h>
2324
#include <asm-generic/gpio.h>
2425

@@ -36,6 +37,7 @@ struct mxc_gpio_port {
3637
int virtual_irq_start;
3738
struct gpio_chip chip;
3839
u32 both_edges;
40+
spinlock_t lock;
3941
};
4042

4143
int mxc_gpio_init(struct mxc_gpio_port*, int);

arch/blackfin/mach-bf537/boards/stamp.c

+1
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,7 @@ static int bfin_plat_nand_dev_ready(struct mtd_info *mtd)
400400

401401
static struct platform_nand_data bfin_plat_nand_data = {
402402
.chip = {
403+
.nr_chips = 1,
403404
.chip_delay = 30,
404405
#ifdef CONFIG_MTD_PARTITIONS
405406
.part_probe_types = part_probes,

arch/blackfin/mach-bf561/boards/acvilon.c

+1
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ static int bfin_plat_nand_dev_ready(struct mtd_info *mtd)
284284

285285
static struct platform_nand_data bfin_plat_nand_data = {
286286
.chip = {
287+
.nr_chips = 1,
287288
.chip_delay = 30,
288289
#ifdef CONFIG_MTD_PARTITIONS
289290
.part_probe_types = part_probes,

arch/ia64/include/asm/compat.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ ptr_to_compat(void __user *uptr)
199199
}
200200

201201
static __inline__ void __user *
202-
compat_alloc_user_space (long len)
202+
arch_compat_alloc_user_space (long len)
203203
{
204204
struct pt_regs *regs = task_pt_regs(current);
205205
return (void __user *) (((regs->r12 & 0xffffffff) & -16) - len);

arch/ia64/kernel/fsys.S

+21-9
Original file line numberDiff line numberDiff line change
@@ -420,22 +420,31 @@ EX(.fail_efault, ld8 r14=[r33]) // r14 <- *set
420420
;;
421421

422422
RSM_PSR_I(p0, r18, r19) // mask interrupt delivery
423-
mov ar.ccv=0
424423
andcm r14=r14,r17 // filter out SIGKILL & SIGSTOP
424+
mov r8=EINVAL // default to EINVAL
425425

426426
#ifdef CONFIG_SMP
427-
mov r17=1
427+
// __ticket_spin_trylock(r31)
428+
ld4 r17=[r31]
428429
;;
429-
cmpxchg4.acq r18=[r31],r17,ar.ccv // try to acquire the lock
430-
mov r8=EINVAL // default to EINVAL
430+
mov.m ar.ccv=r17
431+
extr.u r9=r17,17,15
432+
adds r19=1,r17
433+
extr.u r18=r17,0,15
434+
;;
435+
cmp.eq p6,p7=r9,r18
431436
;;
437+
(p6) cmpxchg4.acq r9=[r31],r19,ar.ccv
438+
(p6) dep.z r20=r19,1,15 // next serving ticket for unlock
439+
(p7) br.cond.spnt.many .lock_contention
440+
;;
441+
cmp4.eq p0,p7=r9,r17
442+
adds r31=2,r31
443+
(p7) br.cond.spnt.many .lock_contention
432444
ld8 r3=[r2] // re-read current->blocked now that we hold the lock
433-
cmp4.ne p6,p0=r18,r0
434-
(p6) br.cond.spnt.many .lock_contention
435445
;;
436446
#else
437447
ld8 r3=[r2] // re-read current->blocked now that we hold the lock
438-
mov r8=EINVAL // default to EINVAL
439448
#endif
440449
add r18=IA64_TASK_PENDING_OFFSET+IA64_SIGPENDING_SIGNAL_OFFSET,r16
441450
add r19=IA64_TASK_SIGNAL_OFFSET,r16
@@ -490,7 +499,9 @@ EX(.fail_efault, ld8 r14=[r33]) // r14 <- *set
490499
(p6) br.cond.spnt.few 1b // yes -> retry
491500

492501
#ifdef CONFIG_SMP
493-
st4.rel [r31]=r0 // release the lock
502+
// __ticket_spin_unlock(r31)
503+
st2.rel [r31]=r20
504+
mov r20=0 // i must not leak kernel bits...
494505
#endif
495506
SSM_PSR_I(p0, p9, r31)
496507
;;
@@ -512,7 +523,8 @@ EX(.fail_efault, (p15) st8 [r34]=r3)
512523

513524
.sig_pending:
514525
#ifdef CONFIG_SMP
515-
st4.rel [r31]=r0 // release the lock
526+
// __ticket_spin_unlock(r31)
527+
st2.rel [r31]=r20 // release the lock
516528
#endif
517529
SSM_PSR_I(p0, p9, r17)
518530
;;

0 commit comments

Comments
 (0)