diff --git a/[refs] b/[refs] index 41127f931a4a..0943cd04eb32 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 148b00b63a3f747141207e7a409f14bd26d0820f +refs/heads/master: e13b91c1c47e7be178d2d7914452040ee82c0bd2 diff --git a/trunk/Documentation/sound/alsa/HD-Audio.txt b/trunk/Documentation/sound/alsa/HD-Audio.txt index 91fee3b45fb8..03e2771ddeef 100644 --- a/trunk/Documentation/sound/alsa/HD-Audio.txt +++ b/trunk/Documentation/sound/alsa/HD-Audio.txt @@ -579,7 +579,7 @@ Development Tree ~~~~~~~~~~~~~~~~ The latest development codes for HD-audio are found on sound git tree: -- git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git +- git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git The master branch or for-next branches can be used as the main development branches in general while the HD-audio specific patches @@ -594,7 +594,7 @@ is, installed via the usual spells: configure, make and make install(-modules). See INSTALL in the package. The snapshot tarballs are found at: -- ftp://ftp.suse.com/pub/people/tiwai/snapshot/ +- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/snapshot/ Sending a Bug Report @@ -696,7 +696,7 @@ via hda-verb won't change the mixer value. The hda-verb program is found in the ftp directory: -- ftp://ftp.suse.com/pub/people/tiwai/misc/ +- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/misc/ Also a git repository is available: @@ -764,7 +764,7 @@ operation, the jack plugging simulation, etc. The package is found in: -- ftp://ftp.suse.com/pub/people/tiwai/misc/ +- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/misc/ A git repository is available: diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS index 7f6bc290d455..071a99674347 100644 --- a/trunk/MAINTAINERS +++ b/trunk/MAINTAINERS @@ -1930,7 +1930,6 @@ CONTROL GROUPS (CGROUPS) M: Paul Menage M: Li Zefan L: containers@lists.linux-foundation.org -L: cgroups@vger.kernel.org S: Maintained F: include/linux/cgroup* F: kernel/cgroup* @@ -4305,7 +4304,6 @@ MEMORY RESOURCE CONTROLLER M: Balbir Singh M: Daisuke Nishimura M: KAMEZAWA Hiroyuki -L: cgroups@vger.kernel.org L: linux-mm@kvack.org S: Maintained F: mm/memcontrol.c @@ -4339,7 +4337,7 @@ MIPS M: Ralf Baechle L: linux-mips@linux-mips.org W: http://www.linux-mips.org/ -T: git git://git.linux-mips.org/pub/scm/ralf/linux.git +T: git git://git.linux-mips.org/pub/scm/linux.git Q: http://patchwork.linux-mips.org/project/linux-mips/list/ S: Supported F: Documentation/mips/ diff --git a/trunk/Makefile b/trunk/Makefile index dab8610c4d6f..361e4f00e6b9 100644 --- a/trunk/Makefile +++ b/trunk/Makefile @@ -1,7 +1,7 @@ VERSION = 3 PATCHLEVEL = 2 SUBLEVEL = 0 -EXTRAVERSION = -rc2 +EXTRAVERSION = -rc1 NAME = Saber-toothed Squirrel # *DOCUMENTATION* diff --git a/trunk/arch/blackfin/include/asm/bfin_serial.h b/trunk/arch/blackfin/include/asm/bfin_serial.h index ecacdf34768b..7fd0ec7b5b0f 100644 --- a/trunk/arch/blackfin/include/asm/bfin_serial.h +++ b/trunk/arch/blackfin/include/asm/bfin_serial.h @@ -32,8 +32,6 @@ struct work_struct; struct bfin_serial_port { struct uart_port port; unsigned int old_status; - int tx_irq; - int rx_irq; int status_irq; #ifndef BFIN_UART_BF54X_STYLE unsigned int lsr; diff --git a/trunk/arch/blackfin/mach-bf518/boards/ezbrd.c b/trunk/arch/blackfin/mach-bf518/boards/ezbrd.c index d1c0c0cff3ef..1082e49f7a9f 100644 --- a/trunk/arch/blackfin/mach-bf518/boards/ezbrd.c +++ b/trunk/arch/blackfin/mach-bf518/boards/ezbrd.c @@ -372,14 +372,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -420,14 +415,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf518/boards/tcm-bf518.c b/trunk/arch/blackfin/mach-bf518/boards/tcm-bf518.c index 5470bf89e52e..55c127908815 100644 --- a/trunk/arch/blackfin/mach-bf518/boards/tcm-bf518.c +++ b/trunk/arch/blackfin/mach-bf518/boards/tcm-bf518.c @@ -308,14 +308,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -356,14 +351,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf527/boards/ad7160eval.c b/trunk/arch/blackfin/mach-bf527/boards/ad7160eval.c index 5bc6938157ad..8d65d476f118 100644 --- a/trunk/arch/blackfin/mach-bf527/boards/ad7160eval.c +++ b/trunk/arch/blackfin/mach-bf527/boards/ad7160eval.c @@ -380,14 +380,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -428,14 +423,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf527/boards/cm_bf527.c b/trunk/arch/blackfin/mach-bf527/boards/cm_bf527.c index cd289698b4dd..6410fc1af8ed 100644 --- a/trunk/arch/blackfin/mach-bf527/boards/cm_bf527.c +++ b/trunk/arch/blackfin/mach-bf527/boards/cm_bf527.c @@ -8,7 +8,6 @@ */ #include -#include #include #include #include @@ -539,14 +538,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -587,14 +581,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -812,6 +801,7 @@ static struct platform_device bfin_sport1_uart_device = { #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) #include #include +#include static struct gpio_keys_button bfin_gpio_keys_table[] = { {BTN_0, GPIO_PF14, 1, "gpio-keys: BTN0"}, diff --git a/trunk/arch/blackfin/mach-bf527/boards/ezbrd.c b/trunk/arch/blackfin/mach-bf527/boards/ezbrd.c index 9f792eafd1cc..64f7278aba53 100644 --- a/trunk/arch/blackfin/mach-bf527/boards/ezbrd.c +++ b/trunk/arch/blackfin/mach-bf527/boards/ezbrd.c @@ -7,7 +7,6 @@ */ #include -#include #include #include #include @@ -417,14 +416,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -465,14 +459,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -685,6 +674,7 @@ static struct platform_device bfin_sport1_uart_device = { #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) #include #include +#include static struct gpio_keys_button bfin_gpio_keys_table[] = { {BTN_0, GPIO_PG0, 1, "gpio-keys: BTN0"}, diff --git a/trunk/arch/blackfin/mach-bf527/boards/ezkit.c b/trunk/arch/blackfin/mach-bf527/boards/ezkit.c index 3ecafff5d2ef..e4c6a122b66c 100644 --- a/trunk/arch/blackfin/mach-bf527/boards/ezkit.c +++ b/trunk/arch/blackfin/mach-bf527/boards/ezkit.c @@ -710,14 +710,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -758,14 +753,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf527/boards/tll6527m.c b/trunk/arch/blackfin/mach-bf527/boards/tll6527m.c index 3a92c4318d2d..76dbc03a8d4d 100644 --- a/trunk/arch/blackfin/mach-bf527/boards/tll6527m.c +++ b/trunk/arch/blackfin/mach-bf527/boards/tll6527m.c @@ -495,14 +495,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -544,14 +539,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf533/boards/H8606.c b/trunk/arch/blackfin/mach-bf533/boards/H8606.c index 47cadd316e76..5da5787fc4ef 100644 --- a/trunk/arch/blackfin/mach-bf533/boards/H8606.c +++ b/trunk/arch/blackfin/mach-bf533/boards/H8606.c @@ -237,14 +237,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX + 1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf533/boards/blackstamp.c b/trunk/arch/blackfin/mach-bf533/boards/blackstamp.c index 18817d57c7a1..b0ec825fb4ec 100644 --- a/trunk/arch/blackfin/mach-bf533/boards/blackstamp.c +++ b/trunk/arch/blackfin/mach-bf533/boards/blackstamp.c @@ -192,14 +192,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX + 1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf533/boards/cm_bf533.c b/trunk/arch/blackfin/mach-bf533/boards/cm_bf533.c index 2c8f30ef6a7b..14f54a31e74c 100644 --- a/trunk/arch/blackfin/mach-bf533/boards/cm_bf533.c +++ b/trunk/arch/blackfin/mach-bf533/boards/cm_bf533.c @@ -220,14 +220,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX + 1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf533/boards/ezkit.c b/trunk/arch/blackfin/mach-bf533/boards/ezkit.c index 144556e14499..ecd2801f050d 100644 --- a/trunk/arch/blackfin/mach-bf533/boards/ezkit.c +++ b/trunk/arch/blackfin/mach-bf533/boards/ezkit.c @@ -291,14 +291,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX + 1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf533/boards/ip0x.c b/trunk/arch/blackfin/mach-bf533/boards/ip0x.c index b597d4e50d58..fbee77fa9211 100644 --- a/trunk/arch/blackfin/mach-bf533/boards/ip0x.c +++ b/trunk/arch/blackfin/mach-bf533/boards/ip0x.c @@ -150,14 +150,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX + 1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf533/boards/stamp.c b/trunk/arch/blackfin/mach-bf533/boards/stamp.c index 2afd02e14bd1..964a8e5f79b4 100644 --- a/trunk/arch/blackfin/mach-bf533/boards/stamp.c +++ b/trunk/arch/blackfin/mach-bf533/boards/stamp.c @@ -297,14 +297,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX + 1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf537/boards/cm_bf537e.c b/trunk/arch/blackfin/mach-bf537/boards/cm_bf537e.c index 604a430038e1..1471c51ea697 100644 --- a/trunk/arch/blackfin/mach-bf537/boards/cm_bf537e.c +++ b/trunk/arch/blackfin/mach-bf537/boards/cm_bf537e.c @@ -8,7 +8,6 @@ */ #include -#include #include #include #include @@ -305,14 +304,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -371,14 +365,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -580,6 +569,7 @@ static struct platform_device bfin_sport1_uart_device = { #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) #include +#include static const unsigned short bfin_mac_peripherals[] = P_MII0; static struct bfin_phydev_platform_data bfin_phydev_data[] = { diff --git a/trunk/arch/blackfin/mach-bf537/boards/cm_bf537u.c b/trunk/arch/blackfin/mach-bf537/boards/cm_bf537u.c index d916b46a44fe..47cf37de33ba 100644 --- a/trunk/arch/blackfin/mach-bf537/boards/cm_bf537u.c +++ b/trunk/arch/blackfin/mach-bf537/boards/cm_bf537u.c @@ -9,7 +9,6 @@ #include #include -#include #include #include #include @@ -306,14 +305,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -354,14 +348,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -545,6 +534,7 @@ static struct platform_device bfin_sport1_uart_device = { #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) #include +#include static const unsigned short bfin_mac_peripherals[] = P_MII0; static struct bfin_phydev_platform_data bfin_phydev_data[] = { diff --git a/trunk/arch/blackfin/mach-bf537/boards/dnp5370.c b/trunk/arch/blackfin/mach-bf537/boards/dnp5370.c index 5f307228be63..33e69e427e98 100644 --- a/trunk/arch/blackfin/mach-bf537/boards/dnp5370.c +++ b/trunk/arch/blackfin/mach-bf537/boards/dnp5370.c @@ -12,7 +12,6 @@ */ #include -#include #include #include #include @@ -50,6 +49,7 @@ static struct platform_device rtc_device = { #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) #include +#include static const unsigned short bfin_mac_peripherals[] = P_RMII0; static struct bfin_phydev_platform_data bfin_phydev_data[] = { @@ -236,14 +236,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -285,14 +280,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf537/boards/minotaur.c b/trunk/arch/blackfin/mach-bf537/boards/minotaur.c index 3901dd093b90..c62f9dccd9f7 100644 --- a/trunk/arch/blackfin/mach-bf537/boards/minotaur.c +++ b/trunk/arch/blackfin/mach-bf537/boards/minotaur.c @@ -239,14 +239,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -287,14 +282,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf537/boards/pnav10.c b/trunk/arch/blackfin/mach-bf537/boards/pnav10.c index aebd31c845f0..3099e91114fc 100644 --- a/trunk/arch/blackfin/mach-bf537/boards/pnav10.c +++ b/trunk/arch/blackfin/mach-bf537/boards/pnav10.c @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -309,14 +308,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -357,14 +351,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf537/boards/stamp.c b/trunk/arch/blackfin/mach-bf537/boards/stamp.c index 7fbb0bbf8676..27f955db9976 100644 --- a/trunk/arch/blackfin/mach-bf537/boards/stamp.c +++ b/trunk/arch/blackfin/mach-bf537/boards/stamp.c @@ -7,7 +7,6 @@ */ #include -#include #include #include #include @@ -1566,14 +1565,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -1626,14 +1620,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -2003,6 +1992,7 @@ static struct adp8870_backlight_platform_data adp8870_pdata = { #if defined(CONFIG_BACKLIGHT_ADP8860) || defined(CONFIG_BACKLIGHT_ADP8860_MODULE) #include +#include static struct led_info adp8860_leds[] = { { .name = "adp8860-led7", diff --git a/trunk/arch/blackfin/mach-bf537/boards/tcm_bf537.c b/trunk/arch/blackfin/mach-bf537/boards/tcm_bf537.c index 6917ce2fa55e..841803038d6f 100644 --- a/trunk/arch/blackfin/mach-bf537/boards/tcm_bf537.c +++ b/trunk/arch/blackfin/mach-bf537/boards/tcm_bf537.c @@ -9,7 +9,6 @@ #include #include -#include #include #include #include @@ -306,14 +305,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -354,14 +348,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -547,6 +536,7 @@ static struct platform_device bfin_sport1_uart_device = { #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) #include +#include static const unsigned short bfin_mac_peripherals[] = P_MII0; static struct bfin_phydev_platform_data bfin_phydev_data[] = { diff --git a/trunk/arch/blackfin/mach-bf538/boards/ezkit.c b/trunk/arch/blackfin/mach-bf538/boards/ezkit.c index 8356eb599f19..629f3c333415 100644 --- a/trunk/arch/blackfin/mach-bf538/boards/ezkit.c +++ b/trunk/arch/blackfin/mach-bf538/boards/ezkit.c @@ -48,14 +48,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -108,14 +103,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -156,14 +146,9 @@ static struct resource bfin_uart2_resources[] = { .end = UART2_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART2_TX, - .end = IRQ_UART2_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART2_RX, - .end = IRQ_UART2_RX, + .end = IRQ_UART2_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf548/boards/cm_bf548.c b/trunk/arch/blackfin/mach-bf548/boards/cm_bf548.c index 0350eacec21b..212b9e0a08c8 100644 --- a/trunk/arch/blackfin/mach-bf548/boards/cm_bf548.c +++ b/trunk/arch/blackfin/mach-bf548/boards/cm_bf548.c @@ -134,14 +134,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_RBR+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -182,14 +177,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_RBR+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -246,14 +236,9 @@ static struct resource bfin_uart2_resources[] = { .end = UART2_RBR+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART2_TX, - .end = IRQ_UART2_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART2_RX, - .end = IRQ_UART2_RX, + .end = IRQ_UART2_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -294,14 +279,9 @@ static struct resource bfin_uart3_resources[] = { .end = UART3_RBR+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART3_TX, - .end = IRQ_UART3_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART3_RX, - .end = IRQ_UART3_RX, + .end = IRQ_UART3_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf548/boards/ezkit.c b/trunk/arch/blackfin/mach-bf548/boards/ezkit.c index bb868ac0fe2d..cd9cbb68de69 100644 --- a/trunk/arch/blackfin/mach-bf548/boards/ezkit.c +++ b/trunk/arch/blackfin/mach-bf548/boards/ezkit.c @@ -240,14 +240,9 @@ static struct resource bfin_uart0_resources[] = { .end = UART0_RBR+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART0_TX, - .end = IRQ_UART0_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART0_RX, - .end = IRQ_UART0_RX, + .end = IRQ_UART0_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -288,14 +283,9 @@ static struct resource bfin_uart1_resources[] = { .end = UART1_RBR+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART1_TX, - .end = IRQ_UART1_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART1_RX, - .end = IRQ_UART1_RX, + .end = IRQ_UART1_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -352,14 +342,9 @@ static struct resource bfin_uart2_resources[] = { .end = UART2_RBR+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART2_TX, - .end = IRQ_UART2_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART2_RX, - .end = IRQ_UART2_RX, + .end = IRQ_UART2_RX+1, .flags = IORESOURCE_IRQ, }, { @@ -400,14 +385,9 @@ static struct resource bfin_uart3_resources[] = { .end = UART3_RBR+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART3_TX, - .end = IRQ_UART3_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART3_RX, - .end = IRQ_UART3_RX, + .end = IRQ_UART3_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf561/boards/acvilon.c b/trunk/arch/blackfin/mach-bf561/boards/acvilon.c index b1b7339b6ba7..972e1347c6bc 100644 --- a/trunk/arch/blackfin/mach-bf561/boards/acvilon.c +++ b/trunk/arch/blackfin/mach-bf561/boards/acvilon.c @@ -202,14 +202,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL + 2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART_TX, - .end = IRQ_UART_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART_RX, - .end = IRQ_UART_RX, + .end = IRQ_UART_RX + 1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf561/boards/cm_bf561.c b/trunk/arch/blackfin/mach-bf561/boards/cm_bf561.c index c017cf07ed4e..c1b72f2d6354 100644 --- a/trunk/arch/blackfin/mach-bf561/boards/cm_bf561.c +++ b/trunk/arch/blackfin/mach-bf561/boards/cm_bf561.c @@ -276,14 +276,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART_TX, - .end = IRQ_UART_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART_RX, - .end = IRQ_UART_RX, + .end = IRQ_UART_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf561/boards/ezkit.c b/trunk/arch/blackfin/mach-bf561/boards/ezkit.c index 27f22ed381d9..9490dc800ca5 100644 --- a/trunk/arch/blackfin/mach-bf561/boards/ezkit.c +++ b/trunk/arch/blackfin/mach-bf561/boards/ezkit.c @@ -171,14 +171,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART_TX, - .end = IRQ_UART_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART_RX, - .end = IRQ_UART_RX, + .end = IRQ_UART_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/blackfin/mach-bf561/boards/tepla.c b/trunk/arch/blackfin/mach-bf561/boards/tepla.c index 1a57bc986aad..bb056e60f6ed 100644 --- a/trunk/arch/blackfin/mach-bf561/boards/tepla.c +++ b/trunk/arch/blackfin/mach-bf561/boards/tepla.c @@ -50,14 +50,9 @@ static struct resource bfin_uart0_resources[] = { .end = BFIN_UART_GCTL+2, .flags = IORESOURCE_MEM, }, - { - .start = IRQ_UART_TX, - .end = IRQ_UART_TX, - .flags = IORESOURCE_IRQ, - }, { .start = IRQ_UART_RX, - .end = IRQ_UART_RX, + .end = IRQ_UART_RX+1, .flags = IORESOURCE_IRQ, }, { diff --git a/trunk/arch/mips/cavium-octeon/flash_setup.c b/trunk/arch/mips/cavium-octeon/flash_setup.c index 0a430e06f5e5..975c20327bb1 100644 --- a/trunk/arch/mips/cavium-octeon/flash_setup.c +++ b/trunk/arch/mips/cavium-octeon/flash_setup.c @@ -17,6 +17,8 @@ static struct map_info flash_map; static struct mtd_info *mymtd; +static int nr_parts; +static struct mtd_partition *parts; static const char *part_probe_types[] = { "cmdlinepart", #ifdef CONFIG_MTD_REDBOOT_PARTS @@ -59,8 +61,11 @@ static int __init flash_init(void) mymtd = do_map_probe("cfi_probe", &flash_map); if (mymtd) { mymtd->owner = THIS_MODULE; - mtd_device_parse_register(mymtd, part_probe_types, - 0, NULL, 0); + + nr_parts = parse_mtd_partitions(mymtd, + part_probe_types, + &parts, 0); + mtd_device_register(mymtd, parts, nr_parts); } else { pr_err("Failed to register MTD device for flash\n"); } diff --git a/trunk/arch/mips/cavium-octeon/smp.c b/trunk/arch/mips/cavium-octeon/smp.c index efcfff4d4627..8b606423bbd7 100644 --- a/trunk/arch/mips/cavium-octeon/smp.c +++ b/trunk/arch/mips/cavium-octeon/smp.c @@ -207,9 +207,8 @@ void octeon_prepare_cpus(unsigned int max_cpus) * the other bits alone. */ cvmx_write_csr(CVMX_CIU_MBOX_CLRX(cvmx_get_core_num()), 0xffff); - if (request_irq(OCTEON_IRQ_MBOX0, mailbox_interrupt, - IRQF_PERCPU | IRQF_NO_THREAD, "SMP-IPI", - mailbox_interrupt)) { + if (request_irq(OCTEON_IRQ_MBOX0, mailbox_interrupt, IRQF_DISABLED, + "SMP-IPI", mailbox_interrupt)) { panic("Cannot request_irq(OCTEON_IRQ_MBOX0)\n"); } } diff --git a/trunk/arch/mips/emma/common/prom.c b/trunk/arch/mips/emma/common/prom.c index cae42259d6da..708f08761406 100644 --- a/trunk/arch/mips/emma/common/prom.c +++ b/trunk/arch/mips/emma/common/prom.c @@ -50,7 +50,7 @@ void __init prom_init(void) /* arg[0] is "g", the rest is boot parameters */ for (i = 1; i < argc; i++) { - if (strlen(arcs_cmdline) + strlen(arg[i]) + 1 + if (strlen(arcs_cmdline) + strlen(arg[i] + 1) >= sizeof(arcs_cmdline)) break; strcat(arcs_cmdline, arg[i]); diff --git a/trunk/arch/mips/include/asm/mach-bcm47xx/gpio.h b/trunk/arch/mips/include/asm/mach-bcm47xx/gpio.h index 2ef17e8df403..76961cabeedf 100644 --- a/trunk/arch/mips/include/asm/mach-bcm47xx/gpio.h +++ b/trunk/arch/mips/include/asm/mach-bcm47xx/gpio.h @@ -36,8 +36,6 @@ static inline int gpio_get_value(unsigned gpio) return -EINVAL; } -#define gpio_get_value_cansleep gpio_get_value - static inline void gpio_set_value(unsigned gpio, int value) { switch (bcm47xx_bus_type) { @@ -56,19 +54,6 @@ static inline void gpio_set_value(unsigned gpio, int value) } } -#define gpio_set_value_cansleep gpio_set_value - -static inline int gpio_cansleep(unsigned gpio) -{ - return 0; -} - -static inline int gpio_is_valid(unsigned gpio) -{ - return gpio < (BCM47XX_EXTIF_GPIO_LINES + BCM47XX_CHIPCO_GPIO_LINES); -} - - static inline int gpio_direction_input(unsigned gpio) { switch (bcm47xx_bus_type) { @@ -152,4 +137,7 @@ static inline int gpio_polarity(unsigned gpio, int value) } +/* cansleep wrappers */ +#include + #endif /* __BCM47XX_GPIO_H */ diff --git a/trunk/arch/mips/include/asm/unistd.h b/trunk/arch/mips/include/asm/unistd.h index d8dad5340ea3..ecea7871dec2 100644 --- a/trunk/arch/mips/include/asm/unistd.h +++ b/trunk/arch/mips/include/asm/unistd.h @@ -365,18 +365,16 @@ #define __NR_syncfs (__NR_Linux + 342) #define __NR_sendmmsg (__NR_Linux + 343) #define __NR_setns (__NR_Linux + 344) -#define __NR_process_vm_readv (__NR_Linux + 345) -#define __NR_process_vm_writev (__NR_Linux + 346) /* * Offset of the last Linux o32 flavoured syscall */ -#define __NR_Linux_syscalls 346 +#define __NR_Linux_syscalls 344 #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ #define __NR_O32_Linux 4000 -#define __NR_O32_Linux_syscalls 346 +#define __NR_O32_Linux_syscalls 344 #if _MIPS_SIM == _MIPS_SIM_ABI64 @@ -688,18 +686,16 @@ #define __NR_syncfs (__NR_Linux + 301) #define __NR_sendmmsg (__NR_Linux + 302) #define __NR_setns (__NR_Linux + 303) -#define __NR_process_vm_readv (__NR_Linux + 304) -#define __NR_process_vm_writev (__NR_Linux + 305) /* * Offset of the last Linux 64-bit flavoured syscall */ -#define __NR_Linux_syscalls 305 +#define __NR_Linux_syscalls 303 #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ #define __NR_64_Linux 5000 -#define __NR_64_Linux_syscalls 305 +#define __NR_64_Linux_syscalls 303 #if _MIPS_SIM == _MIPS_SIM_NABI32 @@ -1016,18 +1012,16 @@ #define __NR_syncfs (__NR_Linux + 306) #define __NR_sendmmsg (__NR_Linux + 307) #define __NR_setns (__NR_Linux + 308) -#define __NR_process_vm_readv (__NR_Linux + 309) -#define __NR_process_vm_writev (__NR_Linux + 310) /* * Offset of the last N32 flavoured syscall */ -#define __NR_Linux_syscalls 310 +#define __NR_Linux_syscalls 308 #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ #define __NR_N32_Linux 6000 -#define __NR_N32_Linux_syscalls 310 +#define __NR_N32_Linux_syscalls 308 #ifdef __KERNEL__ diff --git a/trunk/arch/mips/kernel/cevt-r4k.c b/trunk/arch/mips/kernel/cevt-r4k.c index e2d8e199be32..98c5a9737c14 100644 --- a/trunk/arch/mips/kernel/cevt-r4k.c +++ b/trunk/arch/mips/kernel/cevt-r4k.c @@ -103,10 +103,19 @@ static int c0_compare_int_pending(void) /* * Compare interrupt can be routed and latched outside the core, - * so wait up to worst case number of cycle counter ticks for timer interrupt - * changes to propagate to the cause register. + * so a single execution hazard barrier may not be enough to give + * it time to clear as seen in the Cause register. 4 time the + * pipeline depth seems reasonably conservative, and empirically + * works better in configurations with high CPU/bus clock ratios. */ -#define COMPARE_INT_SEEN_TICKS 50 + +#define compare_change_hazard() \ + do { \ + irq_disable_hazard(); \ + irq_disable_hazard(); \ + irq_disable_hazard(); \ + irq_disable_hazard(); \ + } while (0) int c0_compare_int_usable(void) { @@ -117,12 +126,8 @@ int c0_compare_int_usable(void) * IP7 already pending? Try to clear it by acking the timer. */ if (c0_compare_int_pending()) { - cnt = read_c0_count(); - write_c0_compare(cnt); - back_to_back_c0_hazard(); - while (read_c0_count() < (cnt + COMPARE_INT_SEEN_TICKS)) - if (!c0_compare_int_pending()) - break; + write_c0_compare(read_c0_count()); + compare_change_hazard(); if (c0_compare_int_pending()) return 0; } @@ -131,7 +136,7 @@ int c0_compare_int_usable(void) cnt = read_c0_count(); cnt += delta; write_c0_compare(cnt); - back_to_back_c0_hazard(); + compare_change_hazard(); if ((int)(read_c0_count() - cnt) < 0) break; /* increase delta if the timer was already expired */ @@ -140,17 +145,12 @@ int c0_compare_int_usable(void) while ((int)(read_c0_count() - cnt) <= 0) ; /* Wait for expiry */ - while (read_c0_count() < (cnt + COMPARE_INT_SEEN_TICKS)) - if (c0_compare_int_pending()) - break; + compare_change_hazard(); if (!c0_compare_int_pending()) return 0; - cnt = read_c0_count(); - write_c0_compare(cnt); - back_to_back_c0_hazard(); - while (read_c0_count() < (cnt + COMPARE_INT_SEEN_TICKS)) - if (!c0_compare_int_pending()) - break; + + write_c0_compare(read_c0_count()); + compare_change_hazard(); if (c0_compare_int_pending()) return 0; diff --git a/trunk/arch/mips/kernel/cpufreq/loongson2_clock.c b/trunk/arch/mips/kernel/cpufreq/loongson2_clock.c index 5426779d9fdb..cefc6e259baf 100644 --- a/trunk/arch/mips/kernel/cpufreq/loongson2_clock.c +++ b/trunk/arch/mips/kernel/cpufreq/loongson2_clock.c @@ -7,7 +7,6 @@ * for more details. */ -#include #include #include diff --git a/trunk/arch/mips/kernel/scall32-o32.S b/trunk/arch/mips/kernel/scall32-o32.S index a632bc144efa..47920657968d 100644 --- a/trunk/arch/mips/kernel/scall32-o32.S +++ b/trunk/arch/mips/kernel/scall32-o32.S @@ -591,8 +591,6 @@ einval: li v0, -ENOSYS sys sys_syncfs 1 sys sys_sendmmsg 4 sys sys_setns 2 - sys sys_process_vm_readv 6 /* 4345 */ - sys sys_process_vm_writev 6 .endm /* We pre-compute the number of _instruction_ bytes needed to diff --git a/trunk/arch/mips/kernel/scall64-64.S b/trunk/arch/mips/kernel/scall64-64.S index 3b5a5e9ae49c..fb7334bea731 100644 --- a/trunk/arch/mips/kernel/scall64-64.S +++ b/trunk/arch/mips/kernel/scall64-64.S @@ -430,6 +430,4 @@ sys_call_table: PTR sys_syncfs PTR sys_sendmmsg PTR sys_setns - PTR sys_process_vm_readv - PTR sys_process_vm_writev /* 5305 */ .size sys_call_table,.-sys_call_table diff --git a/trunk/arch/mips/kernel/scall64-n32.S b/trunk/arch/mips/kernel/scall64-n32.S index 6be6f7020923..6de1f598346e 100644 --- a/trunk/arch/mips/kernel/scall64-n32.S +++ b/trunk/arch/mips/kernel/scall64-n32.S @@ -430,6 +430,4 @@ EXPORT(sysn32_call_table) PTR sys_syncfs PTR compat_sys_sendmmsg PTR sys_setns - PTR compat_sys_process_vm_readv - PTR compat_sys_process_vm_writev /* 6310 */ .size sysn32_call_table,.-sysn32_call_table diff --git a/trunk/arch/mips/kernel/scall64-o32.S b/trunk/arch/mips/kernel/scall64-o32.S index 54228553691d..1d813169e453 100644 --- a/trunk/arch/mips/kernel/scall64-o32.S +++ b/trunk/arch/mips/kernel/scall64-o32.S @@ -548,6 +548,4 @@ sys_call_table: PTR sys_syncfs PTR compat_sys_sendmmsg PTR sys_setns - PTR compat_sys_process_vm_readv /* 4345 */ - PTR compat_sys_process_vm_writev .size sys_call_table,.-sys_call_table diff --git a/trunk/arch/mips/kernel/traps.c b/trunk/arch/mips/kernel/traps.c index 5c8a49d55054..261ccbc07740 100644 --- a/trunk/arch/mips/kernel/traps.c +++ b/trunk/arch/mips/kernel/traps.c @@ -1596,8 +1596,7 @@ void __cpuinit per_cpu_trap_init(void) } #endif /* CONFIG_MIPS_MT_SMTC */ - if (!cpu_data[cpu].asid_cache) - cpu_data[cpu].asid_cache = ASID_FIRST_VERSION; + cpu_data[cpu].asid_cache = ASID_FIRST_VERSION; atomic_inc(&init_mm.mm_count); current->active_mm = &init_mm; diff --git a/trunk/arch/mips/lantiq/clk.c b/trunk/arch/mips/lantiq/clk.c index 77ed70fc2fe5..7e9c0ffc11a5 100644 --- a/trunk/arch/mips/lantiq/clk.c +++ b/trunk/arch/mips/lantiq/clk.c @@ -7,7 +7,7 @@ * Copyright (C) 2010 John Crispin */ #include -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/devices.c b/trunk/arch/mips/lantiq/devices.c index de1cb2bcd79a..44a36771c819 100644 --- a/trunk/arch/mips/lantiq/devices.c +++ b/trunk/arch/mips/lantiq/devices.c @@ -7,7 +7,7 @@ */ #include -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/prom.c b/trunk/arch/mips/lantiq/prom.c index e34fcfd0d5ca..56ba007bf1e5 100644 --- a/trunk/arch/mips/lantiq/prom.c +++ b/trunk/arch/mips/lantiq/prom.c @@ -6,7 +6,7 @@ * Copyright (C) 2010 John Crispin */ -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/setup.c b/trunk/arch/mips/lantiq/setup.c index 1ff6c9d6cb93..9b8af77ed0f9 100644 --- a/trunk/arch/mips/lantiq/setup.c +++ b/trunk/arch/mips/lantiq/setup.c @@ -7,7 +7,7 @@ */ #include -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/xway/clk-ase.c b/trunk/arch/mips/lantiq/xway/clk-ase.c index 652258309c9c..22d823acd536 100644 --- a/trunk/arch/mips/lantiq/xway/clk-ase.c +++ b/trunk/arch/mips/lantiq/xway/clk-ase.c @@ -7,7 +7,7 @@ */ #include -#include +#include #include #include diff --git a/trunk/arch/mips/lantiq/xway/clk-xway.c b/trunk/arch/mips/lantiq/xway/clk-xway.c index 696b1a3e0642..ddd39593c581 100644 --- a/trunk/arch/mips/lantiq/xway/clk-xway.c +++ b/trunk/arch/mips/lantiq/xway/clk-xway.c @@ -7,7 +7,7 @@ */ #include -#include +#include #include #include diff --git a/trunk/arch/mips/lantiq/xway/devices.c b/trunk/arch/mips/lantiq/xway/devices.c index d614aa7ff07f..d0e32ab2ea07 100644 --- a/trunk/arch/mips/lantiq/xway/devices.c +++ b/trunk/arch/mips/lantiq/xway/devices.c @@ -7,7 +7,7 @@ */ #include -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/xway/dma.c b/trunk/arch/mips/lantiq/xway/dma.c index cbb6ae5747b9..4278a459d6c4 100644 --- a/trunk/arch/mips/lantiq/xway/dma.c +++ b/trunk/arch/mips/lantiq/xway/dma.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include diff --git a/trunk/arch/mips/lantiq/xway/gpio.c b/trunk/arch/mips/lantiq/xway/gpio.c index d2fa98f3c78d..a321451a5455 100644 --- a/trunk/arch/mips/lantiq/xway/gpio.c +++ b/trunk/arch/mips/lantiq/xway/gpio.c @@ -7,7 +7,7 @@ */ #include -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/xway/gpio_ebu.c b/trunk/arch/mips/lantiq/xway/gpio_ebu.c index b91c7f17f10f..a479355abdb9 100644 --- a/trunk/arch/mips/lantiq/xway/gpio_ebu.c +++ b/trunk/arch/mips/lantiq/xway/gpio_ebu.c @@ -7,7 +7,7 @@ */ #include -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/xway/gpio_stp.c b/trunk/arch/mips/lantiq/xway/gpio_stp.c index ff9991cddeaa..67d59d690340 100644 --- a/trunk/arch/mips/lantiq/xway/gpio_stp.c +++ b/trunk/arch/mips/lantiq/xway/gpio_stp.c @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/xway/prom-ase.c b/trunk/arch/mips/lantiq/xway/prom-ase.c index ae4959ae865c..abe49f4db57f 100644 --- a/trunk/arch/mips/lantiq/xway/prom-ase.c +++ b/trunk/arch/mips/lantiq/xway/prom-ase.c @@ -6,7 +6,7 @@ * Copyright (C) 2010 John Crispin */ -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/xway/prom-xway.c b/trunk/arch/mips/lantiq/xway/prom-xway.c index 2228133ca356..1686692ac24d 100644 --- a/trunk/arch/mips/lantiq/xway/prom-xway.c +++ b/trunk/arch/mips/lantiq/xway/prom-xway.c @@ -6,7 +6,7 @@ * Copyright (C) 2010 John Crispin */ -#include +#include #include #include #include diff --git a/trunk/arch/mips/lantiq/xway/reset.c b/trunk/arch/mips/lantiq/xway/reset.c index 3d41f0bb5bf7..a1be36d0e490 100644 --- a/trunk/arch/mips/lantiq/xway/reset.c +++ b/trunk/arch/mips/lantiq/xway/reset.c @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include diff --git a/trunk/arch/mips/nxp/pnx8550/common/pci.c b/trunk/arch/mips/nxp/pnx8550/common/pci.c new file mode 100644 index 000000000000..98e86ddb86cc --- /dev/null +++ b/trunk/arch/mips/nxp/pnx8550/common/pci.c @@ -0,0 +1,134 @@ +/* + * + * BRIEF MODULE DESCRIPTION + * + * Author: source@mvista.com + * + * This program is free software; you can distribute it and/or modify it + * under the terms of the GNU General Public License (Version 2) as + * published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. + */ +#include +#include +#include +#include + +#include +#include +#include + +static struct resource pci_io_resource = { + .start = PNX8550_PCIIO + 0x1000, /* reserve regacy I/O space */ + .end = PNX8550_PCIIO + PNX8550_PCIIO_SIZE, + .name = "pci IO space", + .flags = IORESOURCE_IO +}; + +static struct resource pci_mem_resource = { + .start = PNX8550_PCIMEM, + .end = PNX8550_PCIMEM + PNX8550_PCIMEM_SIZE - 1, + .name = "pci memory space", + .flags = IORESOURCE_MEM +}; + +extern struct pci_ops pnx8550_pci_ops; + +static struct pci_controller pnx8550_controller = { + .pci_ops = &pnx8550_pci_ops, + .io_map_base = PNX8550_PORT_BASE, + .io_resource = &pci_io_resource, + .mem_resource = &pci_mem_resource, +}; + +/* Return the total size of DRAM-memory, (RANK0 + RANK1) */ +static inline unsigned long get_system_mem_size(void) +{ + /* Read IP2031_RANK0_ADDR_LO */ + unsigned long dram_r0_lo = inl(PCI_BASE | 0x65010); + /* Read IP2031_RANK1_ADDR_HI */ + unsigned long dram_r1_hi = inl(PCI_BASE | 0x65018); + + return dram_r1_hi - dram_r0_lo + 1; +} + +static int __init pnx8550_pci_setup(void) +{ + int pci_mem_code; + int mem_size = get_system_mem_size() >> 20; + + /* Clear the Global 2 Register, PCI Inta Output Enable Registers + Bit 1:Enable DAC Powerdown + -> 0:DACs are enabled and are working normally + 1:DACs are powerdown + Bit 0:Enable of PCI inta output + -> 0 = Disable PCI inta output + 1 = Enable PCI inta output + */ + PNX8550_GLB2_ENAB_INTA_O = 0; + + /* Calc the PCI mem size code */ + if (mem_size >= 128) + pci_mem_code = SIZE_128M; + else if (mem_size >= 64) + pci_mem_code = SIZE_64M; + else if (mem_size >= 32) + pci_mem_code = SIZE_32M; + else + pci_mem_code = SIZE_16M; + + /* Set PCI_XIO registers */ + outl(pci_mem_resource.start, PCI_BASE | PCI_BASE1_LO); + outl(pci_mem_resource.end + 1, PCI_BASE | PCI_BASE1_HI); + outl(pci_io_resource.start, PCI_BASE | PCI_BASE2_LO); + outl(pci_io_resource.end, PCI_BASE | PCI_BASE2_HI); + + /* Send memory transaction via PCI_BASE2 */ + outl(0x00000001, PCI_BASE | PCI_IO); + + /* Unlock the setup register */ + outl(0xca, PCI_BASE | PCI_UNLOCKREG); + + /* + * BAR0 of PNX8550 (pci base 10) must be zero in order for ide + * to work, and in order for bus_to_baddr to work without any + * hacks. + */ + outl(0x00000000, PCI_BASE | PCI_BASE10); + + /* + *These two bars are set by default or the boot code. + * However, it's safer to set them here so we're not boot + * code dependent. + */ + outl(0x1be00000, PCI_BASE | PCI_BASE14); /* PNX MMIO */ + outl(PNX8550_NAND_BASE_ADDR, PCI_BASE | PCI_BASE18); /* XIO */ + + outl(PCI_EN_TA | + PCI_EN_PCI2MMI | + PCI_EN_XIO | + PCI_SETUP_BASE18_SIZE(SIZE_32M) | + PCI_SETUP_BASE18_EN | + PCI_SETUP_BASE14_EN | + PCI_SETUP_BASE10_PREF | + PCI_SETUP_BASE10_SIZE(pci_mem_code) | + PCI_SETUP_CFGMANAGE_EN | + PCI_SETUP_PCIARB_EN, + PCI_BASE | + PCI_SETUP); /* PCI_SETUP */ + outl(0x00000000, PCI_BASE | PCI_CTRL); /* PCI_CONTROL */ + + register_pci_controller(&pnx8550_controller); + + return 0; +} + +arch_initcall(pnx8550_pci_setup); diff --git a/trunk/arch/mips/nxp/pnx8550/common/setup.c b/trunk/arch/mips/nxp/pnx8550/common/setup.c new file mode 100644 index 000000000000..71adac323323 --- /dev/null +++ b/trunk/arch/mips/nxp/pnx8550/common/setup.c @@ -0,0 +1,143 @@ +/* + * + * 2.6 port, Embedded Alley Solutions, Inc + * + * Based on Per Hallsmark, per.hallsmark@mvista.com + * + * This program is free software; you can distribute it and/or modify it + * under the terms of the GNU General Public License (Version 2) as + * published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +extern void __init board_setup(void); +extern void pnx8550_machine_restart(char *); +extern void pnx8550_machine_halt(void); +extern void pnx8550_machine_power_off(void); +extern struct resource ioport_resource; +extern struct resource iomem_resource; +extern char *prom_getcmdline(void); + +struct resource standard_io_resources[] = { + { + .start = 0x00, + .end = 0x1f, + .name = "dma1", + .flags = IORESOURCE_BUSY + }, { + .start = 0x40, + .end = 0x5f, + .name = "timer", + .flags = IORESOURCE_BUSY + }, { + .start = 0x80, + .end = 0x8f, + .name = "dma page reg", + .flags = IORESOURCE_BUSY + }, { + .start = 0xc0, + .end = 0xdf, + .name = "dma2", + .flags = IORESOURCE_BUSY + }, +}; + +#define STANDARD_IO_RESOURCES ARRAY_SIZE(standard_io_resources) + +extern struct resource pci_io_resource; +extern struct resource pci_mem_resource; + +/* Return the total size of DRAM-memory, (RANK0 + RANK1) */ +unsigned long get_system_mem_size(void) +{ + /* Read IP2031_RANK0_ADDR_LO */ + unsigned long dram_r0_lo = inl(PCI_BASE | 0x65010); + /* Read IP2031_RANK1_ADDR_HI */ + unsigned long dram_r1_hi = inl(PCI_BASE | 0x65018); + + return dram_r1_hi - dram_r0_lo + 1; +} + +int pnx8550_console_port = -1; + +void __init plat_mem_setup(void) +{ + int i; + char* argptr; + + board_setup(); /* board specific setup */ + + _machine_restart = pnx8550_machine_restart; + _machine_halt = pnx8550_machine_halt; + pm_power_off = pnx8550_machine_power_off; + + /* Clear the Global 2 Register, PCI Inta Output Enable Registers + Bit 1:Enable DAC Powerdown + -> 0:DACs are enabled and are working normally + 1:DACs are powerdown + Bit 0:Enable of PCI inta output + -> 0 = Disable PCI inta output + 1 = Enable PCI inta output + */ + PNX8550_GLB2_ENAB_INTA_O = 0; + + /* IO/MEM resources. */ + set_io_port_base(PNX8550_PORT_BASE); + ioport_resource.start = 0; + ioport_resource.end = ~0; + iomem_resource.start = 0; + iomem_resource.end = ~0; + + /* Request I/O space for devices on this board */ + for (i = 0; i < STANDARD_IO_RESOURCES; i++) + request_resource(&ioport_resource, standard_io_resources + i); + + /* Place the Mode Control bit for GPIO pin 16 in primary function */ + /* Pin 16 is used by UART1, UA1_TX */ + outl((PNX8550_GPIO_MODE_PRIMOP << PNX8550_GPIO_MC_16_BIT) | + (PNX8550_GPIO_MODE_PRIMOP << PNX8550_GPIO_MC_17_BIT), + PNX8550_GPIO_MC1); + + argptr = prom_getcmdline(); + if ((argptr = strstr(argptr, "console=ttyS")) != NULL) { + argptr += strlen("console=ttyS"); + pnx8550_console_port = *argptr == '0' ? 0 : 1; + + /* We must initialize the UART (console) before early printk */ + /* Set LCR to 8-bit and BAUD to 38400 (no 5) */ + ip3106_lcr(UART_BASE, pnx8550_console_port) = + PNX8XXX_UART_LCR_8BIT; + ip3106_baud(UART_BASE, pnx8550_console_port) = 5; + } +} diff --git a/trunk/arch/mips/pci/pci-alchemy.c b/trunk/arch/mips/pci/pci-alchemy.c index b5ce041cdafb..4ee57104e47b 100644 --- a/trunk/arch/mips/pci/pci-alchemy.c +++ b/trunk/arch/mips/pci/pci-alchemy.c @@ -7,7 +7,6 @@ * Support for all devices (greater than 16) added by David Gathright. */ -#include #include #include #include diff --git a/trunk/arch/mips/pci/pci-lantiq.c b/trunk/arch/mips/pci/pci-lantiq.c index be1e1afe12c3..8656388b34bd 100644 --- a/trunk/arch/mips/pci/pci-lantiq.c +++ b/trunk/arch/mips/pci/pci-lantiq.c @@ -13,7 +13,6 @@ #include #include #include -#include #include #include diff --git a/trunk/arch/mips/pmc-sierra/yosemite/prom.c b/trunk/arch/mips/pmc-sierra/yosemite/prom.c index dcc926e06fce..cf4c868715ac 100644 --- a/trunk/arch/mips/pmc-sierra/yosemite/prom.c +++ b/trunk/arch/mips/pmc-sierra/yosemite/prom.c @@ -102,7 +102,7 @@ void __init prom_init(void) /* Get the boot parameters */ for (i = 1; i < argc; i++) { - if (strlen(arcs_cmdline) + strlen(arg[i]) + 1 >= + if (strlen(arcs_cmdline) + strlen(arg[i] + 1) >= sizeof(arcs_cmdline)) break; diff --git a/trunk/arch/powerpc/Kconfig b/trunk/arch/powerpc/Kconfig index 951e18f5335b..b177caa56d95 100644 --- a/trunk/arch/powerpc/Kconfig +++ b/trunk/arch/powerpc/Kconfig @@ -345,7 +345,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE config KEXEC bool "kexec system call (EXPERIMENTAL)" - depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP && !PPC_47x)) && EXPERIMENTAL + depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP && !47x)) && EXPERIMENTAL help kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot diff --git a/trunk/arch/powerpc/Makefile b/trunk/arch/powerpc/Makefile index 70ba0c0a1223..57af16edc192 100644 --- a/trunk/arch/powerpc/Makefile +++ b/trunk/arch/powerpc/Makefile @@ -255,6 +255,12 @@ checkbin: echo 'disable kernel modules' ; \ false ; \ fi + @if ! /bin/echo dssall | $(AS) -many -o $(TOUT) >/dev/null 2>&1 ; then \ + echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build ' ; \ + echo 'correctly with old versions of binutils.' ; \ + echo '*** Please upgrade your binutils to 2.12.1 or newer' ; \ + false ; \ + fi CLEAN_FILES += $(TOUT) diff --git a/trunk/arch/powerpc/include/asm/atomic.h b/trunk/arch/powerpc/include/asm/atomic.h index 02e41b53488d..e2a4c26ad377 100644 --- a/trunk/arch/powerpc/include/asm/atomic.h +++ b/trunk/arch/powerpc/include/asm/atomic.h @@ -49,13 +49,13 @@ static __inline__ int atomic_add_return(int a, atomic_t *v) int t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: lwarx %0,0,%2 # atomic_add_return\n\ add %0,%1,%0\n" PPC405_ERR77(0,%2) " stwcx. %0,0,%2 \n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER : "=&r" (t) : "r" (a), "r" (&v->counter) : "cc", "memory"); @@ -85,13 +85,13 @@ static __inline__ int atomic_sub_return(int a, atomic_t *v) int t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: lwarx %0,0,%2 # atomic_sub_return\n\ subf %0,%1,%0\n" PPC405_ERR77(0,%2) " stwcx. %0,0,%2 \n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER : "=&r" (t) : "r" (a), "r" (&v->counter) : "cc", "memory"); @@ -119,13 +119,13 @@ static __inline__ int atomic_inc_return(atomic_t *v) int t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: lwarx %0,0,%1 # atomic_inc_return\n\ addic %0,%0,1\n" PPC405_ERR77(0,%1) " stwcx. %0,0,%1 \n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER : "=&r" (t) : "r" (&v->counter) : "cc", "xer", "memory"); @@ -163,13 +163,13 @@ static __inline__ int atomic_dec_return(atomic_t *v) int t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: lwarx %0,0,%1 # atomic_dec_return\n\ addic %0,%0,-1\n" PPC405_ERR77(0,%1) " stwcx. %0,0,%1\n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER : "=&r" (t) : "r" (&v->counter) : "cc", "xer", "memory"); @@ -194,7 +194,7 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) int t; __asm__ __volatile__ ( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: lwarx %0,0,%1 # __atomic_add_unless\n\ cmpw 0,%0,%3 \n\ beq- 2f \n\ @@ -202,7 +202,7 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) PPC405_ERR77(0,%2) " stwcx. %0,0,%1 \n\ bne- 1b \n" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER " subf %0,%2,%0 \n\ 2:" : "=&r" (t) @@ -226,7 +226,7 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v) int t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: lwarx %0,0,%1 # atomic_dec_if_positive\n\ cmpwi %0,1\n\ addi %0,%0,-1\n\ @@ -234,7 +234,7 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v) PPC405_ERR77(0,%1) " stwcx. %0,0,%1\n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER "\n\ 2:" : "=&b" (t) : "r" (&v->counter) @@ -285,12 +285,12 @@ static __inline__ long atomic64_add_return(long a, atomic64_t *v) long t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: ldarx %0,0,%2 # atomic64_add_return\n\ add %0,%1,%0\n\ stdcx. %0,0,%2 \n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER : "=&r" (t) : "r" (a), "r" (&v->counter) : "cc", "memory"); @@ -319,12 +319,12 @@ static __inline__ long atomic64_sub_return(long a, atomic64_t *v) long t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: ldarx %0,0,%2 # atomic64_sub_return\n\ subf %0,%1,%0\n\ stdcx. %0,0,%2 \n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER : "=&r" (t) : "r" (a), "r" (&v->counter) : "cc", "memory"); @@ -351,12 +351,12 @@ static __inline__ long atomic64_inc_return(atomic64_t *v) long t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: ldarx %0,0,%1 # atomic64_inc_return\n\ addic %0,%0,1\n\ stdcx. %0,0,%1 \n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER : "=&r" (t) : "r" (&v->counter) : "cc", "xer", "memory"); @@ -393,12 +393,12 @@ static __inline__ long atomic64_dec_return(atomic64_t *v) long t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: ldarx %0,0,%1 # atomic64_dec_return\n\ addic %0,%0,-1\n\ stdcx. %0,0,%1\n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER : "=&r" (t) : "r" (&v->counter) : "cc", "xer", "memory"); @@ -418,13 +418,13 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v) long t; __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: ldarx %0,0,%1 # atomic64_dec_if_positive\n\ addic. %0,%0,-1\n\ blt- 2f\n\ stdcx. %0,0,%1\n\ bne- 1b" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER "\n\ 2:" : "=&r" (t) : "r" (&v->counter) @@ -450,14 +450,14 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) long t; __asm__ __volatile__ ( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: ldarx %0,0,%1 # __atomic_add_unless\n\ cmpd 0,%0,%3 \n\ beq- 2f \n\ add %0,%2,%0 \n" " stdcx. %0,0,%1 \n\ bne- 1b \n" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER " subf %0,%2,%0 \n\ 2:" : "=&r" (t) diff --git a/trunk/arch/powerpc/include/asm/bitops.h b/trunk/arch/powerpc/include/asm/bitops.h index efdc92618b38..e137afcc10fa 100644 --- a/trunk/arch/powerpc/include/asm/bitops.h +++ b/trunk/arch/powerpc/include/asm/bitops.h @@ -124,14 +124,14 @@ static __inline__ unsigned long fn( \ return (old & mask); \ } -DEFINE_TESTOP(test_and_set_bits, or, PPC_ATOMIC_ENTRY_BARRIER, - PPC_ATOMIC_EXIT_BARRIER, 0) +DEFINE_TESTOP(test_and_set_bits, or, PPC_RELEASE_BARRIER, + PPC_ACQUIRE_BARRIER, 0) DEFINE_TESTOP(test_and_set_bits_lock, or, "", PPC_ACQUIRE_BARRIER, 1) -DEFINE_TESTOP(test_and_clear_bits, andc, PPC_ATOMIC_ENTRY_BARRIER, - PPC_ATOMIC_EXIT_BARRIER, 0) -DEFINE_TESTOP(test_and_change_bits, xor, PPC_ATOMIC_ENTRY_BARRIER, - PPC_ATOMIC_EXIT_BARRIER, 0) +DEFINE_TESTOP(test_and_clear_bits, andc, PPC_RELEASE_BARRIER, + PPC_ACQUIRE_BARRIER, 0) +DEFINE_TESTOP(test_and_change_bits, xor, PPC_RELEASE_BARRIER, + PPC_ACQUIRE_BARRIER, 0) static __inline__ int test_and_set_bit(unsigned long nr, volatile unsigned long *addr) diff --git a/trunk/arch/powerpc/include/asm/futex.h b/trunk/arch/powerpc/include/asm/futex.h index 2a9cf845473b..c94e4a3fe2ef 100644 --- a/trunk/arch/powerpc/include/asm/futex.h +++ b/trunk/arch/powerpc/include/asm/futex.h @@ -11,13 +11,12 @@ #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ __asm__ __volatile ( \ - PPC_ATOMIC_ENTRY_BARRIER \ + PPC_RELEASE_BARRIER \ "1: lwarx %0,0,%2\n" \ insn \ PPC405_ERR77(0, %2) \ "2: stwcx. %1,0,%2\n" \ "bne- 1b\n" \ - PPC_ATOMIC_EXIT_BARRIER \ "li %1,0\n" \ "3: .section .fixup,\"ax\"\n" \ "4: li %1,%3\n" \ @@ -93,14 +92,14 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, return -EFAULT; __asm__ __volatile__ ( - PPC_ATOMIC_ENTRY_BARRIER + PPC_RELEASE_BARRIER "1: lwarx %1,0,%3 # futex_atomic_cmpxchg_inatomic\n\ cmpw 0,%1,%4\n\ bne- 3f\n" PPC405_ERR77(0,%3) "2: stwcx. %5,0,%3\n\ bne- 1b\n" - PPC_ATOMIC_EXIT_BARRIER + PPC_ACQUIRE_BARRIER "3: .section .fixup,\"ax\"\n\ 4: li %0,%6\n\ b 3b\n\ diff --git a/trunk/arch/powerpc/include/asm/reg_booke.h b/trunk/arch/powerpc/include/asm/reg_booke.h index 03c48e819c8e..28cdbd9f399c 100644 --- a/trunk/arch/powerpc/include/asm/reg_booke.h +++ b/trunk/arch/powerpc/include/asm/reg_booke.h @@ -31,7 +31,7 @@ #define MSR_ MSR_ME | MSR_CE #define MSR_KERNEL MSR_ | MSR_64BIT -#define MSR_USER32 MSR_ | MSR_PR | MSR_EE +#define MSR_USER32 MSR_ | MSR_PR | MSR_EE | MSR_DE #define MSR_USER64 MSR_USER32 | MSR_64BIT #elif defined (CONFIG_40x) #define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR|MSR_CE) diff --git a/trunk/arch/powerpc/include/asm/sections.h b/trunk/arch/powerpc/include/asm/sections.h index a0f358d4a00c..6fbce725c710 100644 --- a/trunk/arch/powerpc/include/asm/sections.h +++ b/trunk/arch/powerpc/include/asm/sections.h @@ -8,7 +8,7 @@ #ifdef __powerpc64__ -extern char __end_interrupts[]; +extern char _end[]; static inline int in_kernel_text(unsigned long addr) { diff --git a/trunk/arch/powerpc/include/asm/synch.h b/trunk/arch/powerpc/include/asm/synch.h index e682a7143edb..d7cab44643c5 100644 --- a/trunk/arch/powerpc/include/asm/synch.h +++ b/trunk/arch/powerpc/include/asm/synch.h @@ -13,7 +13,6 @@ extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup; extern void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end); -extern void do_final_fixups(void); static inline void eieio(void) { @@ -42,15 +41,11 @@ static inline void isync(void) START_LWSYNC_SECTION(97); \ isync; \ MAKE_LWSYNC_SECTION_ENTRY(97, __lwsync_fixup); -#define PPC_ACQUIRE_BARRIER "\n" stringify_in_c(__PPC_ACQUIRE_BARRIER) -#define PPC_RELEASE_BARRIER stringify_in_c(LWSYNC) "\n" -#define PPC_ATOMIC_ENTRY_BARRIER "\n" stringify_in_c(LWSYNC) "\n" -#define PPC_ATOMIC_EXIT_BARRIER "\n" stringify_in_c(sync) "\n" +#define PPC_ACQUIRE_BARRIER "\n" stringify_in_c(__PPC_ACQUIRE_BARRIER) +#define PPC_RELEASE_BARRIER stringify_in_c(LWSYNC) "\n" #else #define PPC_ACQUIRE_BARRIER #define PPC_RELEASE_BARRIER -#define PPC_ATOMIC_ENTRY_BARRIER -#define PPC_ATOMIC_EXIT_BARRIER #endif #endif /* __KERNEL__ */ diff --git a/trunk/arch/powerpc/kernel/entry_32.S b/trunk/arch/powerpc/kernel/entry_32.S index 4f80cf1ce77b..56212bc0ab08 100644 --- a/trunk/arch/powerpc/kernel/entry_32.S +++ b/trunk/arch/powerpc/kernel/entry_32.S @@ -215,22 +215,7 @@ reenable_mmu: /* re-enable mmu so we can */ stw r9,8(r1) stw r11,12(r1) stw r3,ORIG_GPR3(r1) - /* - * The trace_hardirqs_off will use CALLER_ADDR0 and CALLER_ADDR1. - * If from user mode there is only one stack frame on the stack, and - * accessing CALLER_ADDR1 will cause oops. So we need create a dummy - * stack frame to make trace_hardirqs_off happy. - */ - andi. r12,r12,MSR_PR - beq 11f - stwu r1,-16(r1) - bl trace_hardirqs_off - addi r1,r1,16 - b 12f - -11: bl trace_hardirqs_off -12: lwz r0,GPR0(r1) lwz r3,ORIG_GPR3(r1) lwz r4,GPR4(r1) diff --git a/trunk/arch/powerpc/kernel/jump_label.c b/trunk/arch/powerpc/kernel/jump_label.c index a1ed8a8c7cb4..368d158d665d 100644 --- a/trunk/arch/powerpc/kernel/jump_label.c +++ b/trunk/arch/powerpc/kernel/jump_label.c @@ -11,7 +11,6 @@ #include #include -#ifdef HAVE_JUMP_LABEL void arch_jump_label_transform(struct jump_entry *entry, enum jump_label_type type) { @@ -22,4 +21,3 @@ void arch_jump_label_transform(struct jump_entry *entry, else patch_instruction(addr, PPC_INST_NOP); } -#endif diff --git a/trunk/arch/powerpc/kernel/kvm.c b/trunk/arch/powerpc/kernel/kvm.c index 2985338d0e10..35f27646c4ff 100644 --- a/trunk/arch/powerpc/kernel/kvm.c +++ b/trunk/arch/powerpc/kernel/kvm.c @@ -132,6 +132,7 @@ static void kvm_patch_ins_b(u32 *inst, int addr) /* On relocatable kernels interrupts handlers and our code can be in different regions, so we don't patch them */ + extern u32 __end_interrupts; if ((ulong)inst < (ulong)&__end_interrupts) return; #endif diff --git a/trunk/arch/powerpc/kernel/misc_32.S b/trunk/arch/powerpc/kernel/misc_32.S index 7cd07b42ca1a..f7d760ab5ca1 100644 --- a/trunk/arch/powerpc/kernel/misc_32.S +++ b/trunk/arch/powerpc/kernel/misc_32.S @@ -738,7 +738,7 @@ relocate_new_kernel: mr r5, r31 li r0, 0 -#elif defined(CONFIG_44x) && !defined(CONFIG_PPC_47x) +#elif defined(CONFIG_44x) && !defined(CONFIG_47x) /* * Code for setting up 1:1 mapping for PPC440x for KEXEC diff --git a/trunk/arch/powerpc/kernel/process.c b/trunk/arch/powerpc/kernel/process.c index 6457574c0b2f..9054ca9ab4f9 100644 --- a/trunk/arch/powerpc/kernel/process.c +++ b/trunk/arch/powerpc/kernel/process.c @@ -486,6 +486,28 @@ struct task_struct *__switch_to(struct task_struct *prev, new_thread = &new->thread; old_thread = ¤t->thread; +#if defined(CONFIG_PPC_BOOK3E_64) + /* XXX Current Book3E code doesn't deal with kernel side DBCR0, + * we always hold the user values, so we set it now. + * + * However, we ensure the kernel MSR:DE is appropriately cleared too + * to avoid spurrious single step exceptions in the kernel. + * + * This will have to change to merge with the ppc32 code at some point, + * but I don't like much what ppc32 is doing today so there's some + * thinking needed there + */ + if ((new_thread->dbcr0 | old_thread->dbcr0) & DBCR0_IDM) { + u32 dbcr0; + + mtmsr(mfmsr() & ~MSR_DE); + isync(); + dbcr0 = mfspr(SPRN_DBCR0); + dbcr0 = (dbcr0 & DBCR0_EDM) | new_thread->dbcr0; + mtspr(SPRN_DBCR0, dbcr0); + } +#endif /* CONFIG_PPC64_BOOK3E */ + #ifdef CONFIG_PPC64 /* * Collect processor utilization data per process @@ -635,7 +657,7 @@ void show_regs(struct pt_regs * regs) if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR)) printk("CFAR: "REG"\n", regs->orig_gpr3); if (trap == 0x300 || trap == 0x600) -#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) +#ifdef CONFIG_PPC_ADV_DEBUG_REGS printk("DEAR: "REG", ESR: "REG"\n", regs->dar, regs->dsisr); #else printk("DAR: "REG", DSISR: %08lx\n", regs->dar, regs->dsisr); diff --git a/trunk/arch/powerpc/kernel/prom_init.c b/trunk/arch/powerpc/kernel/prom_init.c index cc584865b3df..b4fa66127495 100644 --- a/trunk/arch/powerpc/kernel/prom_init.c +++ b/trunk/arch/powerpc/kernel/prom_init.c @@ -1579,8 +1579,10 @@ static void __init prom_instantiate_rtas(void) return; base = alloc_down(size, PAGE_SIZE, 0); - if (base == 0) - prom_panic("Could not allocate memory for RTAS\n"); + if (base == 0) { + prom_printf("RTAS allocation failed !\n"); + return; + } rtas_inst = call_prom("open", 1, 1, ADDR("/rtas")); if (!IHANDLE_VALID(rtas_inst)) { diff --git a/trunk/arch/powerpc/kernel/setup_32.c b/trunk/arch/powerpc/kernel/setup_32.c index ac7610815113..c1ce86357ecb 100644 --- a/trunk/arch/powerpc/kernel/setup_32.c +++ b/trunk/arch/powerpc/kernel/setup_32.c @@ -107,8 +107,6 @@ notrace unsigned long __init early_init(unsigned long dt_ptr) PTRRELOC(&__start___lwsync_fixup), PTRRELOC(&__stop___lwsync_fixup)); - do_final_fixups(); - return KERNELBASE + offset; } diff --git a/trunk/arch/powerpc/kernel/setup_64.c b/trunk/arch/powerpc/kernel/setup_64.c index fb9bb46e7e88..1a9dea80a69b 100644 --- a/trunk/arch/powerpc/kernel/setup_64.c +++ b/trunk/arch/powerpc/kernel/setup_64.c @@ -359,7 +359,6 @@ void __init setup_system(void) &__start___fw_ftr_fixup, &__stop___fw_ftr_fixup); do_lwsync_fixups(cur_cpu_spec->cpu_features, &__start___lwsync_fixup, &__stop___lwsync_fixup); - do_final_fixups(); /* * Unflatten the device-tree passed by prom_init or kexec diff --git a/trunk/arch/powerpc/kernel/signal_32.c b/trunk/arch/powerpc/kernel/signal_32.c index 836a5a19eb2c..78b76dc54dfb 100644 --- a/trunk/arch/powerpc/kernel/signal_32.c +++ b/trunk/arch/powerpc/kernel/signal_32.c @@ -97,7 +97,7 @@ static inline int put_sigset_t(compat_sigset_t __user *uset, sigset_t *set) compat_sigset_t cset; switch (_NSIG_WORDS) { - case 4: cset.sig[6] = set->sig[3] & 0xffffffffull; + case 4: cset.sig[5] = set->sig[3] & 0xffffffffull; cset.sig[7] = set->sig[3] >> 32; case 3: cset.sig[4] = set->sig[2] & 0xffffffffull; cset.sig[5] = set->sig[2] >> 32; diff --git a/trunk/arch/powerpc/kernel/traps.c b/trunk/arch/powerpc/kernel/traps.c index 5459d148a0f6..4e5908264d1a 100644 --- a/trunk/arch/powerpc/kernel/traps.c +++ b/trunk/arch/powerpc/kernel/traps.c @@ -1298,12 +1298,14 @@ void __kprobes DebugException(struct pt_regs *regs, unsigned long debug_status) if (user_mode(regs)) { current->thread.dbcr0 &= ~DBCR0_IC; +#ifdef CONFIG_PPC_ADV_DEBUG_REGS if (DBCR_ACTIVE_EVENTS(current->thread.dbcr0, current->thread.dbcr1)) regs->msr |= MSR_DE; else /* Make sure the IDM bit is off */ current->thread.dbcr0 &= ~DBCR0_IDM; +#endif } _exception(SIGTRAP, regs, TRAP_TRACE, regs->nip); diff --git a/trunk/arch/powerpc/kvm/book3s_hv.c b/trunk/arch/powerpc/kvm/book3s_hv.c index 0cb137a9b038..0cdbc07cec14 100644 --- a/trunk/arch/powerpc/kvm/book3s_hv.c +++ b/trunk/arch/powerpc/kvm/book3s_hv.c @@ -44,7 +44,6 @@ #include #include #include -#include #include #include #include diff --git a/trunk/arch/powerpc/lib/feature-fixups.c b/trunk/arch/powerpc/lib/feature-fixups.c index 7a8a7487cee8..0d08d0171392 100644 --- a/trunk/arch/powerpc/lib/feature-fixups.c +++ b/trunk/arch/powerpc/lib/feature-fixups.c @@ -18,8 +18,6 @@ #include #include #include -#include -#include struct fixup_entry { @@ -130,27 +128,6 @@ void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end) } } -void do_final_fixups(void) -{ -#if defined(CONFIG_PPC64) && defined(CONFIG_RELOCATABLE) - int *src, *dest; - unsigned long length; - - if (PHYSICAL_START == 0) - return; - - src = (int *)(KERNELBASE + PHYSICAL_START); - dest = (int *)KERNELBASE; - length = (__end_interrupts - _stext) / sizeof(int); - - while (length--) { - patch_instruction(dest, *src); - src++; - dest++; - } -#endif -} - #ifdef CONFIG_FTR_FIXUP_SELFTEST #define check(x) \ diff --git a/trunk/arch/powerpc/platforms/Kconfig b/trunk/arch/powerpc/platforms/Kconfig index 3fe6d927ad70..e4588721ef34 100644 --- a/trunk/arch/powerpc/platforms/Kconfig +++ b/trunk/arch/powerpc/platforms/Kconfig @@ -347,7 +347,7 @@ config SIMPLE_GPIO config MCU_MPC8349EMITX bool "MPC8349E-mITX MCU driver" - depends on I2C=y && PPC_83xx + depends on I2C && PPC_83xx select GENERIC_GPIO select ARCH_REQUIRE_GPIOLIB help diff --git a/trunk/arch/powerpc/platforms/ps3/interrupt.c b/trunk/arch/powerpc/platforms/ps3/interrupt.c index 1d6f4f478fe2..404bc52b7806 100644 --- a/trunk/arch/powerpc/platforms/ps3/interrupt.c +++ b/trunk/arch/powerpc/platforms/ps3/interrupt.c @@ -88,7 +88,6 @@ struct ps3_private { struct ps3_bmp bmp __attribute__ ((aligned (PS3_BMP_MINALIGN))); u64 ppe_id; u64 thread_id; - unsigned long ipi_mask; }; static DEFINE_PER_CPU(struct ps3_private, ps3_private); @@ -145,11 +144,7 @@ static void ps3_chip_unmask(struct irq_data *d) static void ps3_chip_eoi(struct irq_data *d) { const struct ps3_private *pd = irq_data_get_irq_chip_data(d); - - /* non-IPIs are EOIed here. */ - - if (!test_bit(63 - d->irq, &pd->ipi_mask)) - lv1_end_of_interrupt_ext(pd->ppe_id, pd->thread_id, d->irq); + lv1_end_of_interrupt_ext(pd->ppe_id, pd->thread_id, d->irq); } /** @@ -696,16 +691,6 @@ void __init ps3_register_ipi_debug_brk(unsigned int cpu, unsigned int virq) cpu, virq, pd->bmp.ipi_debug_brk_mask); } -void __init ps3_register_ipi_irq(unsigned int cpu, unsigned int virq) -{ - struct ps3_private *pd = &per_cpu(ps3_private, cpu); - - set_bit(63 - virq, &pd->ipi_mask); - - DBG("%s:%d: cpu %u, virq %u, ipi_mask %lxh\n", __func__, __LINE__, - cpu, virq, pd->ipi_mask); -} - static unsigned int ps3_get_irq(void) { struct ps3_private *pd = &__get_cpu_var(ps3_private); @@ -735,12 +720,6 @@ static unsigned int ps3_get_irq(void) BUG(); } #endif - - /* IPIs are EOIed here. */ - - if (test_bit(63 - plug, &pd->ipi_mask)) - lv1_end_of_interrupt_ext(pd->ppe_id, pd->thread_id, plug); - return plug; } diff --git a/trunk/arch/powerpc/platforms/ps3/platform.h b/trunk/arch/powerpc/platforms/ps3/platform.h index 1a633ed0fe98..9a196a88eda7 100644 --- a/trunk/arch/powerpc/platforms/ps3/platform.h +++ b/trunk/arch/powerpc/platforms/ps3/platform.h @@ -43,7 +43,6 @@ void ps3_mm_shutdown(void); void ps3_init_IRQ(void); void ps3_shutdown_IRQ(int cpu); void __init ps3_register_ipi_debug_brk(unsigned int cpu, unsigned int virq); -void __init ps3_register_ipi_irq(unsigned int cpu, unsigned int virq); /* smp */ diff --git a/trunk/arch/powerpc/platforms/ps3/smp.c b/trunk/arch/powerpc/platforms/ps3/smp.c index efc1cd8c034a..4c44794faac0 100644 --- a/trunk/arch/powerpc/platforms/ps3/smp.c +++ b/trunk/arch/powerpc/platforms/ps3/smp.c @@ -59,49 +59,46 @@ static void ps3_smp_message_pass(int cpu, int msg) static int ps3_smp_probe(void) { - int cpu; - - for (cpu = 0; cpu < 2; cpu++) { - int result; - unsigned int *virqs = per_cpu(ps3_ipi_virqs, cpu); - int i; - - DBG(" -> %s:%d: (%d)\n", __func__, __LINE__, cpu); + return 2; +} - /* - * Check assumptions on ps3_ipi_virqs[] indexing. If this - * check fails, then a different mapping of PPC_MSG_ - * to index needs to be setup. - */ +static void __init ps3_smp_setup_cpu(int cpu) +{ + int result; + unsigned int *virqs = per_cpu(ps3_ipi_virqs, cpu); + int i; - BUILD_BUG_ON(PPC_MSG_CALL_FUNCTION != 0); - BUILD_BUG_ON(PPC_MSG_RESCHEDULE != 1); - BUILD_BUG_ON(PPC_MSG_CALL_FUNC_SINGLE != 2); - BUILD_BUG_ON(PPC_MSG_DEBUGGER_BREAK != 3); + DBG(" -> %s:%d: (%d)\n", __func__, __LINE__, cpu); - for (i = 0; i < MSG_COUNT; i++) { - result = ps3_event_receive_port_setup(cpu, &virqs[i]); + /* + * Check assumptions on ps3_ipi_virqs[] indexing. If this + * check fails, then a different mapping of PPC_MSG_ + * to index needs to be setup. + */ - if (result) - continue; + BUILD_BUG_ON(PPC_MSG_CALL_FUNCTION != 0); + BUILD_BUG_ON(PPC_MSG_RESCHEDULE != 1); + BUILD_BUG_ON(PPC_MSG_CALL_FUNC_SINGLE != 2); + BUILD_BUG_ON(PPC_MSG_DEBUGGER_BREAK != 3); - DBG("%s:%d: (%d, %d) => virq %u\n", - __func__, __LINE__, cpu, i, virqs[i]); + for (i = 0; i < MSG_COUNT; i++) { + result = ps3_event_receive_port_setup(cpu, &virqs[i]); - result = smp_request_message_ipi(virqs[i], i); + if (result) + continue; - if (result) - virqs[i] = NO_IRQ; - else - ps3_register_ipi_irq(cpu, virqs[i]); - } + DBG("%s:%d: (%d, %d) => virq %u\n", + __func__, __LINE__, cpu, i, virqs[i]); - ps3_register_ipi_debug_brk(cpu, virqs[PPC_MSG_DEBUGGER_BREAK]); + result = smp_request_message_ipi(virqs[i], i); - DBG(" <- %s:%d: (%d)\n", __func__, __LINE__, cpu); + if (result) + virqs[i] = NO_IRQ; } - return 2; + ps3_register_ipi_debug_brk(cpu, virqs[PPC_MSG_DEBUGGER_BREAK]); + + DBG(" <- %s:%d: (%d)\n", __func__, __LINE__, cpu); } void ps3_smp_cleanup_cpu(int cpu) @@ -124,6 +121,7 @@ static struct smp_ops_t ps3_smp_ops = { .probe = ps3_smp_probe, .message_pass = ps3_smp_message_pass, .kick_cpu = smp_generic_kick_cpu, + .setup_cpu = ps3_smp_setup_cpu, }; void smp_init_ps3(void) diff --git a/trunk/arch/powerpc/sysdev/fsl_rio.c b/trunk/arch/powerpc/sysdev/fsl_rio.c index 22ffccd8bef5..de170fd5ba4e 100644 --- a/trunk/arch/powerpc/sysdev/fsl_rio.c +++ b/trunk/arch/powerpc/sysdev/fsl_rio.c @@ -23,7 +23,7 @@ */ #include -#include +#include #include #include #include diff --git a/trunk/arch/s390/Kconfig b/trunk/arch/s390/Kconfig index 373679b3744a..a9fbd43395f7 100644 --- a/trunk/arch/s390/Kconfig +++ b/trunk/arch/s390/Kconfig @@ -572,7 +572,6 @@ config KEXEC config CRASH_DUMP bool "kernel crash dumps" depends on 64BIT - select KEXEC help Generate crash dump after being started by kexec. Crash dump kernels are loaded in the main kernel with kexec-tools diff --git a/trunk/arch/s390/crypto/crypt_s390.h b/trunk/arch/s390/crypto/crypt_s390.h index ffd1ac255f19..49676771bd66 100644 --- a/trunk/arch/s390/crypto/crypt_s390.h +++ b/trunk/arch/s390/crypto/crypt_s390.h @@ -368,12 +368,9 @@ static inline int crypt_s390_func_available(int func, if (facility_mask & CRYPT_S390_MSA && !test_facility(17)) return 0; - - if (facility_mask & CRYPT_S390_MSA3 && - (!test_facility(2) || !test_facility(76))) + if (facility_mask & CRYPT_S390_MSA3 && !test_facility(76)) return 0; - if (facility_mask & CRYPT_S390_MSA4 && - (!test_facility(2) || !test_facility(77))) + if (facility_mask & CRYPT_S390_MSA4 && !test_facility(77)) return 0; switch (func & CRYPT_S390_OP_MASK) { diff --git a/trunk/arch/s390/include/asm/pgtable.h b/trunk/arch/s390/include/asm/pgtable.h index 524d23b8610c..34ede0ea85a9 100644 --- a/trunk/arch/s390/include/asm/pgtable.h +++ b/trunk/arch/s390/include/asm/pgtable.h @@ -593,8 +593,6 @@ static inline pgste_t pgste_update_all(pte_t *ptep, pgste_t pgste) unsigned long address, bits; unsigned char skey; - if (!pte_present(*ptep)) - return pgste; address = pte_val(*ptep) & PAGE_MASK; skey = page_get_storage_key(address); bits = skey & (_PAGE_CHANGED | _PAGE_REFERENCED); @@ -627,8 +625,6 @@ static inline pgste_t pgste_update_young(pte_t *ptep, pgste_t pgste) #ifdef CONFIG_PGSTE int young; - if (!pte_present(*ptep)) - return pgste; young = page_reset_referenced(pte_val(*ptep) & PAGE_MASK); /* Transfer page referenced bit to pte software bit (host view) */ if (young || (pgste_val(pgste) & RCP_HR_BIT)) @@ -642,15 +638,13 @@ static inline pgste_t pgste_update_young(pte_t *ptep, pgste_t pgste) } -static inline void pgste_set_pte(pte_t *ptep, pgste_t pgste, pte_t entry) +static inline void pgste_set_pte(pte_t *ptep, pgste_t pgste) { #ifdef CONFIG_PGSTE unsigned long address; unsigned long okey, nkey; - if (!pte_present(entry)) - return; - address = pte_val(entry) & PAGE_MASK; + address = pte_val(*ptep) & PAGE_MASK; okey = nkey = page_get_storage_key(address); nkey &= ~(_PAGE_ACC_BITS | _PAGE_FP_BIT); /* Set page access key and fetch protection bit from pgste */ @@ -718,7 +712,7 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, if (mm_has_pgste(mm)) { pgste = pgste_get_lock(ptep); - pgste_set_pte(ptep, pgste, entry); + pgste_set_pte(ptep, pgste); *ptep = entry; pgste_set_unlock(ptep, pgste); } else diff --git a/trunk/arch/s390/include/asm/setup.h b/trunk/arch/s390/include/asm/setup.h index 097183c70407..5a099714df04 100644 --- a/trunk/arch/s390/include/asm/setup.h +++ b/trunk/arch/s390/include/asm/setup.h @@ -82,7 +82,6 @@ extern unsigned int user_mode; #define MACHINE_FLAG_LPAR (1UL << 12) #define MACHINE_FLAG_SPP (1UL << 13) #define MACHINE_FLAG_TOPOLOGY (1UL << 14) -#define MACHINE_FLAG_STCKF (1UL << 15) #define MACHINE_IS_VM (S390_lowcore.machine_flags & MACHINE_FLAG_VM) #define MACHINE_IS_KVM (S390_lowcore.machine_flags & MACHINE_FLAG_KVM) @@ -101,7 +100,6 @@ extern unsigned int user_mode; #define MACHINE_HAS_PFMF (0) #define MACHINE_HAS_SPP (0) #define MACHINE_HAS_TOPOLOGY (0) -#define MACHINE_HAS_STCKF (0) #else /* __s390x__ */ #define MACHINE_HAS_IEEE (1) #define MACHINE_HAS_CSP (1) @@ -113,7 +111,6 @@ extern unsigned int user_mode; #define MACHINE_HAS_PFMF (S390_lowcore.machine_flags & MACHINE_FLAG_PFMF) #define MACHINE_HAS_SPP (S390_lowcore.machine_flags & MACHINE_FLAG_SPP) #define MACHINE_HAS_TOPOLOGY (S390_lowcore.machine_flags & MACHINE_FLAG_TOPOLOGY) -#define MACHINE_HAS_STCKF (S390_lowcore.machine_flags & MACHINE_FLAG_STCKF) #endif /* __s390x__ */ #define ZFCPDUMP_HSA_SIZE (32UL<<20) diff --git a/trunk/arch/s390/include/asm/timex.h b/trunk/arch/s390/include/asm/timex.h index c447a27a7fdb..d610bef9c5e9 100644 --- a/trunk/arch/s390/include/asm/timex.h +++ b/trunk/arch/s390/include/asm/timex.h @@ -90,7 +90,7 @@ static inline unsigned long long get_clock_fast(void) { unsigned long long clk; - if (MACHINE_HAS_STCKF) + if (test_facility(25)) asm volatile(".insn s,0xb27c0000,%0" : "=Q" (clk) : : "cc"); else clk = get_clock(); diff --git a/trunk/arch/s390/include/asm/unistd.h b/trunk/arch/s390/include/asm/unistd.h index 58de4c91c333..404bdb9671b4 100644 --- a/trunk/arch/s390/include/asm/unistd.h +++ b/trunk/arch/s390/include/asm/unistd.h @@ -277,9 +277,7 @@ #define __NR_clock_adjtime 337 #define __NR_syncfs 338 #define __NR_setns 339 -#define __NR_process_vm_readv 340 -#define __NR_process_vm_writev 341 -#define NR_syscalls 342 +#define NR_syscalls 340 /* * There are some system calls that are not present on 64 bit, some diff --git a/trunk/arch/s390/kernel/compat_wrapper.S b/trunk/arch/s390/kernel/compat_wrapper.S index 18c51df9fe06..5006a1d9f5d0 100644 --- a/trunk/arch/s390/kernel/compat_wrapper.S +++ b/trunk/arch/s390/kernel/compat_wrapper.S @@ -1627,23 +1627,3 @@ ENTRY(sys_setns_wrapper) lgfr %r2,%r2 # int lgfr %r3,%r3 # int jg sys_setns - -ENTRY(compat_sys_process_vm_readv_wrapper) - lgfr %r2,%r2 # compat_pid_t - llgtr %r3,%r3 # struct compat_iovec __user * - llgfr %r4,%r4 # unsigned long - llgtr %r5,%r5 # struct compat_iovec __user * - llgfr %r6,%r6 # unsigned long - llgf %r0,164(%r15) # unsigned long - stg %r0,160(%r15) - jg sys_process_vm_readv - -ENTRY(compat_sys_process_vm_writev_wrapper) - lgfr %r2,%r2 # compat_pid_t - llgtr %r3,%r3 # struct compat_iovec __user * - llgfr %r4,%r4 # unsigned long - llgtr %r5,%r5 # struct compat_iovec __user * - llgfr %r6,%r6 # unsigned long - llgf %r0,164(%r15) # unsigned long - stg %r0,160(%r15) - jg sys_process_vm_writev diff --git a/trunk/arch/s390/kernel/early.c b/trunk/arch/s390/kernel/early.c index c9ffe0025197..37394b3413e2 100644 --- a/trunk/arch/s390/kernel/early.c +++ b/trunk/arch/s390/kernel/early.c @@ -390,8 +390,6 @@ static __init void detect_machine_facilities(void) S390_lowcore.machine_flags |= MACHINE_FLAG_MVCOS; if (test_facility(40)) S390_lowcore.machine_flags |= MACHINE_FLAG_SPP; - if (test_facility(25)) - S390_lowcore.machine_flags |= MACHINE_FLAG_STCKF; #endif } diff --git a/trunk/arch/s390/kernel/setup.c b/trunk/arch/s390/kernel/setup.c index e58a462949b1..8ac6bfa2786c 100644 --- a/trunk/arch/s390/kernel/setup.c +++ b/trunk/arch/s390/kernel/setup.c @@ -211,8 +211,6 @@ static void __init setup_zfcpdump(unsigned int console_devno) if (ipl_info.type != IPL_TYPE_FCP_DUMP) return; - if (OLDMEM_BASE) - return; if (console_devno != -1) sprintf(str, " cio_ignore=all,!0.0.%04x,!0.0.%04x", ipl_info.data.fcp.dev_id.devno, console_devno); @@ -484,7 +482,7 @@ static void __init setup_memory_end(void) #ifdef CONFIG_ZFCPDUMP - if (ipl_info.type == IPL_TYPE_FCP_DUMP && !OLDMEM_BASE) { + if (ipl_info.type == IPL_TYPE_FCP_DUMP) { memory_end = ZFCPDUMP_HSA_SIZE; memory_end_set = 1; } diff --git a/trunk/arch/s390/kernel/syscalls.S b/trunk/arch/s390/kernel/syscalls.S index bcab2f04ba58..73eb08c874fb 100644 --- a/trunk/arch/s390/kernel/syscalls.S +++ b/trunk/arch/s390/kernel/syscalls.S @@ -348,5 +348,3 @@ SYSCALL(sys_open_by_handle_at,sys_open_by_handle_at,compat_sys_open_by_handle_at SYSCALL(sys_clock_adjtime,sys_clock_adjtime,compat_sys_clock_adjtime_wrapper) SYSCALL(sys_syncfs,sys_syncfs,sys_syncfs_wrapper) SYSCALL(sys_setns,sys_setns,sys_setns_wrapper) -SYSCALL(sys_process_vm_readv,sys_process_vm_readv,compat_sys_process_vm_readv_wrapper) /* 340 */ -SYSCALL(sys_process_vm_writev,sys_process_vm_writev,compat_sys_process_vm_writev_wrapper) diff --git a/trunk/arch/s390/kernel/topology.c b/trunk/arch/s390/kernel/topology.c index fdb5b8cb260f..77b8942b9a15 100644 --- a/trunk/arch/s390/kernel/topology.c +++ b/trunk/arch/s390/kernel/topology.c @@ -68,10 +68,8 @@ static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu) return mask; } -static struct mask_info *add_cpus_to_mask(struct topology_cpu *tl_cpu, - struct mask_info *book, - struct mask_info *core, - int z10) +static void add_cpus_to_mask(struct topology_cpu *tl_cpu, + struct mask_info *book, struct mask_info *core) { unsigned int cpu; @@ -90,16 +88,10 @@ static struct mask_info *add_cpus_to_mask(struct topology_cpu *tl_cpu, cpu_book_id[lcpu] = book->id; #endif cpumask_set_cpu(lcpu, &core->mask); - if (z10) { - cpu_core_id[lcpu] = rcpu; - core = core->next; - } else { - cpu_core_id[lcpu] = core->id; - } + cpu_core_id[lcpu] = core->id; smp_cpu_polarization[lcpu] = tl_cpu->pp; } } - return core; } static void clear_masks(void) @@ -131,41 +123,18 @@ static void tl_to_cores(struct sysinfo_15_1_x *info) { #ifdef CONFIG_SCHED_BOOK struct mask_info *book = &book_info; - struct cpuid cpu_id; #else struct mask_info *book = NULL; #endif struct mask_info *core = &core_info; union topology_entry *tle, *end; - int z10 = 0; -#ifdef CONFIG_SCHED_BOOK - get_cpu_id(&cpu_id); - z10 = cpu_id.machine == 0x2097 || cpu_id.machine == 0x2098; -#endif + spin_lock_irq(&topology_lock); clear_masks(); tle = info->tle; end = (union topology_entry *)((unsigned long)info + info->length); while (tle < end) { -#ifdef CONFIG_SCHED_BOOK - if (z10) { - switch (tle->nl) { - case 1: - book = book->next; - book->id = tle->container.id; - break; - case 0: - core = add_cpus_to_mask(&tle->cpu, book, core, z10); - break; - default: - clear_masks(); - goto out; - } - tle = next_tle(tle); - continue; - } -#endif switch (tle->nl) { #ifdef CONFIG_SCHED_BOOK case 2: @@ -178,7 +147,7 @@ static void tl_to_cores(struct sysinfo_15_1_x *info) core->id = tle->container.id; break; case 0: - add_cpus_to_mask(&tle->cpu, book, core, z10); + add_cpus_to_mask(&tle->cpu, book, core); break; default: clear_masks(); @@ -359,8 +328,8 @@ void __init s390_init_cpu_topology(void) for (i = 0; i < TOPOLOGY_NR_MAG; i++) printk(" %d", info->mag[i]); printk(" / %d\n", info->mnest); - alloc_masks(info, &core_info, 1); + alloc_masks(info, &core_info, 2); #ifdef CONFIG_SCHED_BOOK - alloc_masks(info, &book_info, 2); + alloc_masks(info, &book_info, 3); #endif } diff --git a/trunk/arch/s390/kernel/vmlinux.lds.S b/trunk/arch/s390/kernel/vmlinux.lds.S index e4c79ebb40e6..56fe6bc81fee 100644 --- a/trunk/arch/s390/kernel/vmlinux.lds.S +++ b/trunk/arch/s390/kernel/vmlinux.lds.S @@ -43,8 +43,6 @@ SECTIONS NOTES :text :note - .dummy : { *(.dummy) } :data - RODATA #ifdef CONFIG_SHARED_KERNEL diff --git a/trunk/arch/s390/mm/fault.c b/trunk/arch/s390/mm/fault.c index a9a301866b3c..1766def5bc3f 100644 --- a/trunk/arch/s390/mm/fault.c +++ b/trunk/arch/s390/mm/fault.c @@ -587,13 +587,8 @@ static void pfault_interrupt(unsigned int ext_int_code, } else { /* Completion interrupt was faster than initial * interrupt. Set pfault_wait to -1 so the initial - * interrupt doesn't put the task to sleep. - * If the task is not running, ignore the completion - * interrupt since it must be a leftover of a PFAULT - * CANCEL operation which didn't remove all pending - * completion interrupts. */ - if (tsk->state == TASK_RUNNING) - tsk->thread.pfault_wait = -1; + * interrupt doesn't put the task to sleep. */ + tsk->thread.pfault_wait = -1; } put_task_struct(tsk); } else { diff --git a/trunk/arch/unicore32/include/asm/bitops.h b/trunk/arch/unicore32/include/asm/bitops.h index 1628a6328994..401f597bc38c 100644 --- a/trunk/arch/unicore32/include/asm/bitops.h +++ b/trunk/arch/unicore32/include/asm/bitops.h @@ -13,12 +13,6 @@ #ifndef __UNICORE_BITOPS_H__ #define __UNICORE_BITOPS_H__ -#define find_next_bit __uc32_find_next_bit -#define find_next_zero_bit __uc32_find_next_zero_bit - -#define find_first_bit __uc32_find_first_bit -#define find_first_zero_bit __uc32_find_first_zero_bit - #define _ASM_GENERIC_BITOPS_FLS_H_ #define _ASM_GENERIC_BITOPS___FLS_H_ #define _ASM_GENERIC_BITOPS_FFS_H_ @@ -44,4 +38,10 @@ static inline int fls(int x) #include +/* following definitions: to avoid using codes in lib/find_*.c */ +#define find_next_bit find_next_bit +#define find_next_zero_bit find_next_zero_bit +#define find_first_bit find_first_bit +#define find_first_zero_bit find_first_zero_bit + #endif /* __UNICORE_BITOPS_H__ */ diff --git a/trunk/arch/unicore32/kernel/ksyms.c b/trunk/arch/unicore32/kernel/ksyms.c index a8970809428a..d98bd812cae1 100644 --- a/trunk/arch/unicore32/kernel/ksyms.c +++ b/trunk/arch/unicore32/kernel/ksyms.c @@ -24,8 +24,8 @@ #include "ksyms.h" -EXPORT_SYMBOL(__uc32_find_next_zero_bit); -EXPORT_SYMBOL(__uc32_find_next_bit); +EXPORT_SYMBOL(find_next_zero_bit); +EXPORT_SYMBOL(find_next_bit); EXPORT_SYMBOL(__backtrace); diff --git a/trunk/arch/unicore32/lib/findbit.S b/trunk/arch/unicore32/lib/findbit.S index c360ce905d8b..c77746247d36 100644 --- a/trunk/arch/unicore32/lib/findbit.S +++ b/trunk/arch/unicore32/lib/findbit.S @@ -17,7 +17,7 @@ * Purpose : Find a 'zero' bit * Prototype: int find_first_zero_bit(void *addr, unsigned int maxbit); */ -__uc32_find_first_zero_bit: +ENTRY(find_first_zero_bit) cxor.a r1, #0 beq 3f mov r2, #0 @@ -29,13 +29,14 @@ __uc32_find_first_zero_bit: bub 1b 3: mov r0, r1 @ no free bits mov pc, lr +ENDPROC(find_first_zero_bit) /* * Purpose : Find next 'zero' bit * Prototype: int find_next_zero_bit * (void *addr, unsigned int maxbit, int offset) */ -ENTRY(__uc32_find_next_zero_bit) +ENTRY(find_next_zero_bit) cxor.a r1, #0 beq 3b and.a ip, r2, #7 @@ -47,14 +48,14 @@ ENTRY(__uc32_find_next_zero_bit) or r2, r2, #7 @ if zero, then no bits here add r2, r2, #1 @ align bit pointer b 2b @ loop for next bit -ENDPROC(__uc32_find_next_zero_bit) +ENDPROC(find_next_zero_bit) /* * Purpose : Find a 'one' bit * Prototype: int find_first_bit * (const unsigned long *addr, unsigned int maxbit); */ -__uc32_find_first_bit: +ENTRY(find_first_bit) cxor.a r1, #0 beq 3f mov r2, #0 @@ -66,13 +67,14 @@ __uc32_find_first_bit: bub 1b 3: mov r0, r1 @ no free bits mov pc, lr +ENDPROC(find_first_bit) /* * Purpose : Find next 'one' bit * Prototype: int find_next_zero_bit * (void *addr, unsigned int maxbit, int offset) */ -ENTRY(__uc32_find_next_bit) +ENTRY(find_next_bit) cxor.a r1, #0 beq 3b and.a ip, r2, #7 @@ -83,7 +85,7 @@ ENTRY(__uc32_find_next_bit) or r2, r2, #7 @ if zero, then no bits here add r2, r2, #1 @ align bit pointer b 2b @ loop for next bit -ENDPROC(__uc32_find_next_bit) +ENDPROC(find_next_bit) /* * One or more bits in the LSB of r3 are assumed to be set. diff --git a/trunk/drivers/char/random.c b/trunk/drivers/char/random.c index 6035ab8d5ef7..63e19ba56bbe 100644 --- a/trunk/drivers/char/random.c +++ b/trunk/drivers/char/random.c @@ -941,7 +941,7 @@ void get_random_bytes(void *buf, int nbytes) if (!arch_get_random_long(&v)) break; - memcpy(p, &v, chunk); + memcpy(buf, &v, chunk); p += chunk; nbytes -= chunk; } diff --git a/trunk/drivers/firmware/dmi_scan.c b/trunk/drivers/firmware/dmi_scan.c index 153980be4ee6..bcb1126e3d00 100644 --- a/trunk/drivers/firmware/dmi_scan.c +++ b/trunk/drivers/firmware/dmi_scan.c @@ -585,12 +585,14 @@ int dmi_name_in_serial(const char *str) } /** - * dmi_name_in_vendors - Check if string is in the DMI system or board vendor name + * dmi_name_in_vendors - Check if string is anywhere in the DMI vendor information. * @str: Case sensitive Name */ int dmi_name_in_vendors(const char *str) { - static int fields[] = { DMI_SYS_VENDOR, DMI_BOARD_VENDOR, DMI_NONE }; + static int fields[] = { DMI_BIOS_VENDOR, DMI_BIOS_VERSION, DMI_SYS_VENDOR, + DMI_PRODUCT_NAME, DMI_PRODUCT_VERSION, DMI_BOARD_VENDOR, + DMI_BOARD_NAME, DMI_BOARD_VERSION, DMI_NONE }; int i; for (i = 0; fields[i] != DMI_NONE; i++) { int f = fields[i]; diff --git a/trunk/drivers/gpio/gpio-omap.c b/trunk/drivers/gpio/gpio-omap.c index 0b0562979171..0e49d87f6c60 100644 --- a/trunk/drivers/gpio/gpio-omap.c +++ b/trunk/drivers/gpio/gpio-omap.c @@ -148,17 +148,13 @@ static int _get_gpio_dataout(struct gpio_bank *bank, int gpio) return (__raw_readl(reg) & GPIO_BIT(bank, gpio)) != 0; } -static inline void _gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set) -{ - int l = __raw_readl(base + reg); - - if (set) - l |= mask; - else - l &= ~mask; - - __raw_writel(l, base + reg); -} +#define MOD_REG_BIT(reg, bit_mask, set) \ +do { \ + int l = __raw_readl(base + reg); \ + if (set) l |= bit_mask; \ + else l &= ~bit_mask; \ + __raw_writel(l, base + reg); \ +} while(0) /** * _set_gpio_debounce - low level gpio debounce time @@ -214,28 +210,28 @@ static inline void set_24xx_gpio_triggering(struct gpio_bank *bank, int gpio, u32 gpio_bit = 1 << gpio; if (cpu_is_omap44xx()) { - _gpio_rmw(base, OMAP4_GPIO_LEVELDETECT0, gpio_bit, - trigger & IRQ_TYPE_LEVEL_LOW); - _gpio_rmw(base, OMAP4_GPIO_LEVELDETECT1, gpio_bit, - trigger & IRQ_TYPE_LEVEL_HIGH); - _gpio_rmw(base, OMAP4_GPIO_RISINGDETECT, gpio_bit, - trigger & IRQ_TYPE_EDGE_RISING); - _gpio_rmw(base, OMAP4_GPIO_FALLINGDETECT, gpio_bit, - trigger & IRQ_TYPE_EDGE_FALLING); + MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT0, gpio_bit, + trigger & IRQ_TYPE_LEVEL_LOW); + MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT1, gpio_bit, + trigger & IRQ_TYPE_LEVEL_HIGH); + MOD_REG_BIT(OMAP4_GPIO_RISINGDETECT, gpio_bit, + trigger & IRQ_TYPE_EDGE_RISING); + MOD_REG_BIT(OMAP4_GPIO_FALLINGDETECT, gpio_bit, + trigger & IRQ_TYPE_EDGE_FALLING); } else { - _gpio_rmw(base, OMAP24XX_GPIO_LEVELDETECT0, gpio_bit, - trigger & IRQ_TYPE_LEVEL_LOW); - _gpio_rmw(base, OMAP24XX_GPIO_LEVELDETECT1, gpio_bit, - trigger & IRQ_TYPE_LEVEL_HIGH); - _gpio_rmw(base, OMAP24XX_GPIO_RISINGDETECT, gpio_bit, - trigger & IRQ_TYPE_EDGE_RISING); - _gpio_rmw(base, OMAP24XX_GPIO_FALLINGDETECT, gpio_bit, - trigger & IRQ_TYPE_EDGE_FALLING); + MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT0, gpio_bit, + trigger & IRQ_TYPE_LEVEL_LOW); + MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT1, gpio_bit, + trigger & IRQ_TYPE_LEVEL_HIGH); + MOD_REG_BIT(OMAP24XX_GPIO_RISINGDETECT, gpio_bit, + trigger & IRQ_TYPE_EDGE_RISING); + MOD_REG_BIT(OMAP24XX_GPIO_FALLINGDETECT, gpio_bit, + trigger & IRQ_TYPE_EDGE_FALLING); } if (likely(!(bank->non_wakeup_gpios & gpio_bit))) { if (cpu_is_omap44xx()) { - _gpio_rmw(base, OMAP4_GPIO_IRQWAKEN0, gpio_bit, - trigger != 0); + MOD_REG_BIT(OMAP4_GPIO_IRQWAKEN0, gpio_bit, + trigger != 0); } else { /* * GPIO wakeup request can only be generated on edge @@ -1090,11 +1086,6 @@ omap_mpuio_alloc_gc(struct gpio_bank *bank, unsigned int irq_start, gc = irq_alloc_generic_chip("MPUIO", 1, irq_start, bank->base, handle_simple_irq); - if (!gc) { - dev_err(bank->dev, "Memory alloc failed for gc\n"); - return; - } - ct = gc->chip_types; /* NOTE: No ack required, reading IRQ status clears it. */ diff --git a/trunk/drivers/gpio/gpio-pca953x.c b/trunk/drivers/gpio/gpio-pca953x.c index 147df8ae79db..0550dcb85814 100644 --- a/trunk/drivers/gpio/gpio-pca953x.c +++ b/trunk/drivers/gpio/gpio-pca953x.c @@ -596,6 +596,9 @@ static int __devinit device_pca953x_init(struct pca953x_chip *chip, int invert) /* set platform specific polarity inversion */ ret = pca953x_write_reg(chip, PCA953X_INVERT, invert); + if (ret) + goto out; + return 0; out: return ret; } @@ -637,7 +640,7 @@ static int __devinit pca953x_probe(struct i2c_client *client, struct pca953x_platform_data *pdata; struct pca953x_chip *chip; int irq_base=0, invert=0; - int ret; + int ret = 0; chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL); if (chip == NULL) @@ -670,10 +673,10 @@ static int __devinit pca953x_probe(struct i2c_client *client, pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK); if (chip->chip_type == PCA953X_TYPE) - ret = device_pca953x_init(chip, invert); + device_pca953x_init(chip, invert); + else if (chip->chip_type == PCA957X_TYPE) + device_pca957x_init(chip, invert); else - ret = device_pca957x_init(chip, invert); - if (ret) goto out_failed; ret = pca953x_irq_setup(chip, id, irq_base); diff --git a/trunk/drivers/gpu/drm/drm_irq.c b/trunk/drivers/gpu/drm/drm_irq.c index 44a5d0ad8b7c..68b756253f9f 100644 --- a/trunk/drivers/gpu/drm/drm_irq.c +++ b/trunk/drivers/gpu/drm/drm_irq.c @@ -110,7 +110,10 @@ static void vblank_disable_and_save(struct drm_device *dev, int crtc) /* Prevent vblank irq processing while disabling vblank irqs, * so no updates of timestamps or count can happen after we've * disabled. Needed to prevent races in case of delayed irq's. + * Disable preemption, so vblank_time_lock is held as short as + * possible, even under a kernel with PREEMPT_RT patches. */ + preempt_disable(); spin_lock_irqsave(&dev->vblank_time_lock, irqflags); dev->driver->disable_vblank(dev, crtc); @@ -161,6 +164,7 @@ static void vblank_disable_and_save(struct drm_device *dev, int crtc) clear_vblank_timestamps(dev, crtc); spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags); + preempt_enable(); } static void vblank_disable_fn(unsigned long arg) @@ -885,6 +889,10 @@ int drm_vblank_get(struct drm_device *dev, int crtc) spin_lock_irqsave(&dev->vbl_lock, irqflags); /* Going from 0->1 means we have to enable interrupts again */ if (atomic_add_return(1, &dev->vblank_refcount[crtc]) == 1) { + /* Disable preemption while holding vblank_time_lock. Do + * it explicitely to guard against PREEMPT_RT kernel. + */ + preempt_disable(); spin_lock_irqsave(&dev->vblank_time_lock, irqflags2); if (!dev->vblank_enabled[crtc]) { /* Enable vblank irqs under vblank_time_lock protection. @@ -904,6 +912,7 @@ int drm_vblank_get(struct drm_device *dev, int crtc) } } spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags2); + preempt_enable(); } else { if (!dev->vblank_enabled[crtc]) { atomic_dec(&dev->vblank_refcount[crtc]); diff --git a/trunk/drivers/gpu/drm/radeon/radeon_atombios.c b/trunk/drivers/gpu/drm/radeon/radeon_atombios.c index fecd705a1a5f..d2d179267af3 100644 --- a/trunk/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/trunk/drivers/gpu/drm/radeon/radeon_atombios.c @@ -85,18 +85,6 @@ static struct radeon_i2c_bus_rec radeon_lookup_i2c_gpio(struct radeon_device *rd for (i = 0; i < num_indices; i++) { gpio = &i2c_info->asGPIO_Info[i]; - /* r4xx mask is technically not used by the hw, so patch in the legacy mask bits */ - if ((rdev->family == CHIP_R420) || - (rdev->family == CHIP_R423) || - (rdev->family == CHIP_RV410)) { - if ((le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x0018) || - (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x0019) || - (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x001a)) { - gpio->ucClkMaskShift = 0x19; - gpio->ucDataMaskShift = 0x18; - } - } - /* some evergreen boards have bad data for this entry */ if (ASIC_IS_DCE4(rdev)) { if ((i == 7) && @@ -2008,14 +1996,14 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev) return state_index; /* last mode is usually default, array is low to high */ for (i = 0; i < num_modes; i++) { - rdev->pm.power_state[state_index].clock_info = - kzalloc(sizeof(struct radeon_pm_clock_info) * 1, GFP_KERNEL); - if (!rdev->pm.power_state[state_index].clock_info) - return state_index; - rdev->pm.power_state[state_index].num_clock_modes = 1; rdev->pm.power_state[state_index].clock_info[0].voltage.type = VOLTAGE_NONE; switch (frev) { case 1: + rdev->pm.power_state[state_index].clock_info = + kzalloc(sizeof(struct radeon_pm_clock_info) * 1, GFP_KERNEL); + if (!rdev->pm.power_state[state_index].clock_info) + return state_index; + rdev->pm.power_state[state_index].num_clock_modes = 1; rdev->pm.power_state[state_index].clock_info[0].mclk = le16_to_cpu(power_info->info.asPowerPlayInfo[i].usMemoryClock); rdev->pm.power_state[state_index].clock_info[0].sclk = @@ -2051,6 +2039,11 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev) state_index++; break; case 2: + rdev->pm.power_state[state_index].clock_info = + kzalloc(sizeof(struct radeon_pm_clock_info) * 1, GFP_KERNEL); + if (!rdev->pm.power_state[state_index].clock_info) + return state_index; + rdev->pm.power_state[state_index].num_clock_modes = 1; rdev->pm.power_state[state_index].clock_info[0].mclk = le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMemoryClock); rdev->pm.power_state[state_index].clock_info[0].sclk = @@ -2087,6 +2080,11 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev) state_index++; break; case 3: + rdev->pm.power_state[state_index].clock_info = + kzalloc(sizeof(struct radeon_pm_clock_info) * 1, GFP_KERNEL); + if (!rdev->pm.power_state[state_index].clock_info) + return state_index; + rdev->pm.power_state[state_index].num_clock_modes = 1; rdev->pm.power_state[state_index].clock_info[0].mclk = le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMemoryClock); rdev->pm.power_state[state_index].clock_info[0].sclk = diff --git a/trunk/drivers/gpu/vga/vgaarb.c b/trunk/drivers/gpu/vga/vgaarb.c index bdde899af72e..c72f1c0b5e63 100644 --- a/trunk/drivers/gpu/vga/vgaarb.c +++ b/trunk/drivers/gpu/vga/vgaarb.c @@ -465,29 +465,31 @@ static void vga_arbiter_check_bridge_sharing(struct vga_device *vgadev) while (new_bus) { new_bridge = new_bus->self; - /* go through list of devices already registered */ - list_for_each_entry(same_bridge_vgadev, &vga_list, list) { - bus = same_bridge_vgadev->pdev->bus; - bridge = bus->self; - - /* see if the share a bridge with this device */ - if (new_bridge == bridge) { - /* if their direct parent bridge is the same - as any bridge of this device then it can't be used - for that device */ - same_bridge_vgadev->bridge_has_one_vga = false; - } - - /* now iterate the previous devices bridge hierarchy */ - /* if the new devices parent bridge is in the other devices - hierarchy then we can't use it to control this device */ - while (bus) { + if (new_bridge) { + /* go through list of devices already registered */ + list_for_each_entry(same_bridge_vgadev, &vga_list, list) { + bus = same_bridge_vgadev->pdev->bus; bridge = bus->self; - if (bridge) { - if (bridge == vgadev->pdev->bus->self) - vgadev->bridge_has_one_vga = false; + + /* see if the share a bridge with this device */ + if (new_bridge == bridge) { + /* if their direct parent bridge is the same + as any bridge of this device then it can't be used + for that device */ + same_bridge_vgadev->bridge_has_one_vga = false; + } + + /* now iterate the previous devices bridge hierarchy */ + /* if the new devices parent bridge is in the other devices + hierarchy then we can't use it to control this device */ + while (bus) { + bridge = bus->self; + if (bridge) { + if (bridge == vgadev->pdev->bus->self) + vgadev->bridge_has_one_vga = false; + } + bus = bus->parent; } - bus = bus->parent; } } new_bus = new_bus->parent; diff --git a/trunk/drivers/iommu/omap-iommu-debug.c b/trunk/drivers/iommu/omap-iommu-debug.c index 288da5c1499d..9c192e79f806 100644 --- a/trunk/drivers/iommu/omap-iommu-debug.c +++ b/trunk/drivers/iommu/omap-iommu-debug.c @@ -10,7 +10,6 @@ * published by the Free Software Foundation. */ -#include #include #include #include diff --git a/trunk/drivers/iommu/omap-iovmm.c b/trunk/drivers/iommu/omap-iovmm.c index 46be456fcc00..e8fdb8830f69 100644 --- a/trunk/drivers/iommu/omap-iovmm.c +++ b/trunk/drivers/iommu/omap-iovmm.c @@ -10,7 +10,6 @@ * published by the Free Software Foundation. */ -#include #include #include #include diff --git a/trunk/drivers/leds/led-class.c b/trunk/drivers/leds/led-class.c index 6d5628bb0601..661b692573e7 100644 --- a/trunk/drivers/leds/led-class.c +++ b/trunk/drivers/leds/led-class.c @@ -270,8 +270,11 @@ void led_blink_set(struct led_classdev *led_cdev, del_timer_sync(&led_cdev->blink_timer); if (led_cdev->blink_set && - !led_cdev->blink_set(led_cdev, delay_on, delay_off)) + !led_cdev->blink_set(led_cdev, delay_on, delay_off)) { + led_cdev->blink_delay_on = *delay_on; + led_cdev->blink_delay_off = *delay_off; return; + } /* blink with 1 Hz as default if nothing specified */ if (!*delay_on && !*delay_off) diff --git a/trunk/drivers/misc/carma/carma-fpga-program.c b/trunk/drivers/misc/carma/carma-fpga-program.c index eb5cd28bc6d8..7ce6065dc20e 100644 --- a/trunk/drivers/misc/carma/carma-fpga-program.c +++ b/trunk/drivers/misc/carma/carma-fpga-program.c @@ -945,7 +945,8 @@ static int fpga_of_remove(struct platform_device *op) /* CTL-CPLD Version Register */ #define CTL_CPLD_VERSION 0x2000 -static int fpga_of_probe(struct platform_device *op) +static int fpga_of_probe(struct platform_device *op, + const struct of_device_id *match) { struct device_node *of_node = op->dev.of_node; struct device *this_device; @@ -1106,7 +1107,7 @@ static struct of_device_id fpga_of_match[] = { {}, }; -static struct platform_driver fpga_of_driver = { +static struct of_platform_driver fpga_of_driver = { .probe = fpga_of_probe, .remove = fpga_of_remove, .driver = { @@ -1123,12 +1124,12 @@ static struct platform_driver fpga_of_driver = { static int __init fpga_init(void) { led_trigger_register_simple("fpga", &ledtrig_fpga); - return platform_driver_register(&fpga_of_driver); + return of_register_platform_driver(&fpga_of_driver); } static void __exit fpga_exit(void) { - platform_driver_unregister(&fpga_of_driver); + of_unregister_platform_driver(&fpga_of_driver); led_trigger_unregister_simple(ledtrig_fpga); } diff --git a/trunk/drivers/misc/carma/carma-fpga.c b/trunk/drivers/misc/carma/carma-fpga.c index 14e974b2a781..3965821fef17 100644 --- a/trunk/drivers/misc/carma/carma-fpga.c +++ b/trunk/drivers/misc/carma/carma-fpga.c @@ -1249,7 +1249,8 @@ static bool dma_filter(struct dma_chan *chan, void *data) return true; } -static int data_of_probe(struct platform_device *op) +static int data_of_probe(struct platform_device *op, + const struct of_device_id *match) { struct device_node *of_node = op->dev.of_node; struct device *this_device; @@ -1400,7 +1401,7 @@ static struct of_device_id data_of_match[] = { {}, }; -static struct platform_driver data_of_driver = { +static struct of_platform_driver data_of_driver = { .probe = data_of_probe, .remove = data_of_remove, .driver = { @@ -1416,12 +1417,12 @@ static struct platform_driver data_of_driver = { static int __init data_init(void) { - return platform_driver_register(&data_of_driver); + return of_register_platform_driver(&data_of_driver); } static void __exit data_exit(void) { - platform_driver_unregister(&data_of_driver); + of_unregister_platform_driver(&data_of_driver); } MODULE_AUTHOR("Ira W. Snyder "); diff --git a/trunk/drivers/misc/eeprom/Kconfig b/trunk/drivers/misc/eeprom/Kconfig index 701edf658970..26cf12ca7f50 100644 --- a/trunk/drivers/misc/eeprom/Kconfig +++ b/trunk/drivers/misc/eeprom/Kconfig @@ -85,7 +85,7 @@ config EEPROM_93XX46 config EEPROM_DIGSY_MTC_CFG bool "DigsyMTC display configuration EEPROMs device" - depends on GPIO_MPC5200 && SPI_GPIO + depends on PPC_MPC5200_GPIO && GPIOLIB && SPI_GPIO help This option enables access to display configuration EEPROMs on digsy_mtc board. You have to additionally select Microwire diff --git a/trunk/drivers/pinctrl/Kconfig b/trunk/drivers/pinctrl/Kconfig index e17e2f8001d2..ef566443f945 100644 --- a/trunk/drivers/pinctrl/Kconfig +++ b/trunk/drivers/pinctrl/Kconfig @@ -2,17 +2,23 @@ # PINCTRL infrastructure and drivers # -config PINCTRL - bool +menuconfig PINCTRL + bool "PINCTRL Support" depends on EXPERIMENTAL + help + This enables the PINCTRL subsystem for controlling pins + on chip packages, for example multiplexing pins on primarily + PGA and BGA packages for systems on chip. -if PINCTRL + If unsure, say N. -menu "Pin controllers" - depends on PINCTRL +if PINCTRL config PINMUX bool "Support pinmux controllers" + help + Say Y here if you want the pincontrol subsystem to handle pin + multiplexing drivers. config DEBUG_PINCTRL bool "Debug PINCTRL calls" @@ -24,12 +30,14 @@ config PINMUX_SIRF bool "CSR SiRFprimaII pinmux driver" depends on ARCH_PRIMA2 select PINMUX + help + Say Y here to enable the SiRFprimaII pinmux driver config PINMUX_U300 bool "U300 pinmux driver" depends on ARCH_U300 select PINMUX - -endmenu + help + Say Y here to enable the U300 pinmux driver endif diff --git a/trunk/drivers/platform/x86/dell-laptop.c b/trunk/drivers/platform/x86/dell-laptop.c index d93e962f2610..a43cfd906c6d 100644 --- a/trunk/drivers/platform/x86/dell-laptop.c +++ b/trunk/drivers/platform/x86/dell-laptop.c @@ -589,14 +589,14 @@ static const struct backlight_ops dell_ops = { .update_status = dell_send_intensity, }; -static void touchpad_led_on(void) +static void touchpad_led_on() { int command = 0x97; char data = 1; i8042_command(&data, command | 1 << 12); } -static void touchpad_led_off(void) +static void touchpad_led_off() { int command = 0x97; char data = 2; diff --git a/trunk/drivers/s390/char/zcore.c b/trunk/drivers/s390/char/zcore.c index 1b6d9247fdc7..43068fbd0baa 100644 --- a/trunk/drivers/s390/char/zcore.c +++ b/trunk/drivers/s390/char/zcore.c @@ -641,8 +641,6 @@ static int __init zcore_init(void) if (ipl_info.type != IPL_TYPE_FCP_DUMP) return -ENODATA; - if (OLDMEM_BASE) - return -ENODATA; zcore_dbf = debug_register("zcore", 4, 1, 4 * sizeof(long)); debug_register_view(zcore_dbf, &debug_sprintf_view); diff --git a/trunk/drivers/s390/crypto/ap_bus.c b/trunk/drivers/s390/crypto/ap_bus.c index ec94f049e995..b77ae519d79c 100644 --- a/trunk/drivers/s390/crypto/ap_bus.c +++ b/trunk/drivers/s390/crypto/ap_bus.c @@ -1271,16 +1271,18 @@ ap_config_timeout(unsigned long ptr) } /** - * __ap_schedule_poll_timer(): Schedule poll timer. + * ap_schedule_poll_timer(): Schedule poll timer. * * Set up the timer to run the poll tasklet */ -static inline void __ap_schedule_poll_timer(void) +static inline void ap_schedule_poll_timer(void) { ktime_t hr_time; spin_lock_bh(&ap_poll_timer_lock); - if (hrtimer_is_queued(&ap_poll_timer) || ap_suspend_flag) + if (ap_using_interrupts() || ap_suspend_flag) + goto out; + if (hrtimer_is_queued(&ap_poll_timer)) goto out; if (ktime_to_ns(hrtimer_expires_remaining(&ap_poll_timer)) <= 0) { hr_time = ktime_set(0, poll_timeout); @@ -1291,18 +1293,6 @@ static inline void __ap_schedule_poll_timer(void) spin_unlock_bh(&ap_poll_timer_lock); } -/** - * ap_schedule_poll_timer(): Schedule poll timer. - * - * Set up the timer to run the poll tasklet - */ -static inline void ap_schedule_poll_timer(void) -{ - if (ap_using_interrupts()) - return; - __ap_schedule_poll_timer(); -} - /** * ap_poll_read(): Receive pending reply messages from an AP device. * @ap_dev: pointer to the AP device @@ -1384,9 +1374,8 @@ static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags) *flags |= 1; *flags |= 2; break; - case AP_RESPONSE_RESET_IN_PROGRESS: - __ap_schedule_poll_timer(); case AP_RESPONSE_Q_FULL: + case AP_RESPONSE_RESET_IN_PROGRESS: *flags |= 2; break; case AP_RESPONSE_MESSAGE_TOO_BIG: diff --git a/trunk/drivers/scsi/aacraid/linit.c b/trunk/drivers/scsi/aacraid/linit.c index 705e13e470af..4aa76d6f11df 100644 --- a/trunk/drivers/scsi/aacraid/linit.c +++ b/trunk/drivers/scsi/aacraid/linit.c @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include @@ -1110,9 +1109,6 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, unique_id++; } - pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1 | - PCIE_LINK_STATE_CLKPM); - error = pci_enable_device(pdev); if (error) goto out; diff --git a/trunk/drivers/scsi/hpsa.c b/trunk/drivers/scsi/hpsa.c index 865d452542be..e76107b2ade3 100644 --- a/trunk/drivers/scsi/hpsa.c +++ b/trunk/drivers/scsi/hpsa.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -3923,10 +3922,6 @@ static int __devinit hpsa_pci_init(struct ctlr_info *h) dev_warn(&h->pdev->dev, "controller appears to be disabled\n"); return -ENODEV; } - - pci_disable_link_state(h->pdev, PCIE_LINK_STATE_L0S | - PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM); - err = pci_enable_device(h->pdev); if (err) { dev_warn(&h->pdev->dev, "unable to enable PCI device\n"); diff --git a/trunk/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/trunk/drivers/scsi/mpt2sas/mpt2sas_scsih.c index 4e041f6d808c..8889b1babcac 100644 --- a/trunk/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/trunk/drivers/scsi/mpt2sas/mpt2sas_scsih.c @@ -2802,11 +2802,6 @@ _scsih_error_recovery_delete_devices(struct MPT2SAS_ADAPTER *ioc) if (ioc->is_driver_loading) return; - - fw_event = kzalloc(sizeof(struct fw_event_work), GFP_ATOMIC); - if (!fw_event) - return; - fw_event->event = MPT2SAS_REMOVE_UNRESPONDING_DEVICES; fw_event->ioc = ioc; _scsih_fw_event_add(ioc, fw_event); diff --git a/trunk/drivers/scsi/scsi_lib.c b/trunk/drivers/scsi/scsi_lib.c index f85cfa6c47b5..06bc26554a67 100644 --- a/trunk/drivers/scsi/scsi_lib.c +++ b/trunk/drivers/scsi/scsi_lib.c @@ -1409,8 +1409,6 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) blk_start_request(req); - scmd_printk(KERN_INFO, cmd, "killing request\n"); - sdev = cmd->device; starget = scsi_target(sdev); shost = sdev->host; @@ -1492,6 +1490,7 @@ static void scsi_request_fn(struct request_queue *q) struct request *req; if (!sdev) { + printk("scsi: killing requests for dead queue\n"); while ((req = blk_peek_request(q)) != NULL) scsi_kill_request(req, q); return; diff --git a/trunk/drivers/scsi/scsi_scan.c b/trunk/drivers/scsi/scsi_scan.c index b3c6d957fbd8..72273a0e5666 100644 --- a/trunk/drivers/scsi/scsi_scan.c +++ b/trunk/drivers/scsi/scsi_scan.c @@ -319,7 +319,11 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, return sdev; out_device_destroy: - __scsi_remove_device(sdev); + scsi_device_set_state(sdev, SDEV_DEL); + transport_destroy_device(&sdev->sdev_gendev); + put_device(&sdev->sdev_dev); + scsi_free_queue(sdev->request_queue); + put_device(&sdev->sdev_gendev); out: if (display_failure_msg) printk(ALLOC_FAILURE_MSG, __func__); diff --git a/trunk/drivers/staging/media/as102/as102_drv.c b/trunk/drivers/staging/media/as102/as102_drv.c index 828526d4c289..d335c7d6fa0f 100644 --- a/trunk/drivers/staging/media/as102/as102_drv.c +++ b/trunk/drivers/staging/media/as102/as102_drv.c @@ -32,8 +32,8 @@ #include "as102_fw.h" #include "dvbdev.h" -int as102_debug; -module_param_named(debug, as102_debug, int, 0644); +int debug; +module_param_named(debug, debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off debugging (default: off)"); int dual_tuner; diff --git a/trunk/drivers/staging/media/as102/as102_drv.h b/trunk/drivers/staging/media/as102/as102_drv.h index fd33f5a12dcc..bcda635b5a99 100644 --- a/trunk/drivers/staging/media/as102/as102_drv.h +++ b/trunk/drivers/staging/media/as102/as102_drv.h @@ -37,8 +37,7 @@ extern struct spi_driver as102_spi_driver; #define DRIVER_FULL_NAME "Abilis Systems as10x usb driver" #define DRIVER_NAME "as10x_usb" -extern int as102_debug; -#define debug as102_debug +extern int debug; #define dprintk(debug, args...) \ do { if (debug) { \ diff --git a/trunk/drivers/staging/octeon/ethernet-tx.c b/trunk/drivers/staging/octeon/ethernet-tx.c index 2542c3743904..b445cd63f901 100644 --- a/trunk/drivers/staging/octeon/ethernet-tx.c +++ b/trunk/drivers/staging/octeon/ethernet-tx.c @@ -275,7 +275,7 @@ int cvm_oct_xmit(struct sk_buff *skb, struct net_device *dev) CVM_OCT_SKB_CB(skb)[0] = hw_buffer.u64; for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { struct skb_frag_struct *fs = skb_shinfo(skb)->frags + i; - hw_buffer.s.addr = XKPHYS_TO_PHYS((u64)(page_address(fs->page.p) + fs->page_offset)); + hw_buffer.s.addr = XKPHYS_TO_PHYS((u64)(page_address(fs->page) + fs->page_offset)); hw_buffer.s.size = fs->size; CVM_OCT_SKB_CB(skb)[i + 1] = hw_buffer.u64; } diff --git a/trunk/drivers/usb/gadget/fsl_udc_core.c b/trunk/drivers/usb/gadget/fsl_udc_core.c index d786ba31fc07..b2c44e1d5813 100644 --- a/trunk/drivers/usb/gadget/fsl_udc_core.c +++ b/trunk/drivers/usb/gadget/fsl_udc_core.c @@ -1717,7 +1717,7 @@ static void dtd_complete_irq(struct fsl_udc *udc) static inline enum usb_device_speed portscx_device_speed(u32 reg) { - switch (reg & PORTSCX_PORT_SPEED_MASK) { + switch (speed & PORTSCX_PORT_SPEED_MASK) { case PORTSCX_PORT_SPEED_HIGH: return USB_SPEED_HIGH; case PORTSCX_PORT_SPEED_FULL: diff --git a/trunk/fs/hfs/trans.c b/trunk/fs/hfs/trans.c index b1ce4c7ad3fb..e673a88b8ae7 100644 --- a/trunk/fs/hfs/trans.c +++ b/trunk/fs/hfs/trans.c @@ -40,8 +40,6 @@ int hfs_mac2asc(struct super_block *sb, char *out, const struct hfs_name *in) src = in->name; srclen = in->len; - if (srclen > HFS_NAMELEN) - srclen = HFS_NAMELEN; dst = out; dstlen = HFS_MAX_NAMELEN; if (nls_io) { diff --git a/trunk/include/drm/drm_pciids.h b/trunk/include/drm/drm_pciids.h index f81676f1b310..3d53efd25ab9 100644 --- a/trunk/include/drm/drm_pciids.h +++ b/trunk/include/drm/drm_pciids.h @@ -4,7 +4,6 @@ */ #define radeon_PCI_IDS \ {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ - {0x1002, 0x3151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3155, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ @@ -56,7 +55,6 @@ {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ - {0x1002, 0x4C6E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \ {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ diff --git a/trunk/include/linux/pinctrl/pinctrl.h b/trunk/include/linux/pinctrl/pinctrl.h index 04c011038f32..3605e947fa90 100644 --- a/trunk/include/linux/pinctrl/pinctrl.h +++ b/trunk/include/linux/pinctrl/pinctrl.h @@ -121,7 +121,6 @@ extern const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev); extern void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev); #else -struct pinctrl_dev; /* Sufficiently stupid default function when pinctrl is not in use */ static inline bool pin_is_valid(struct pinctrl_dev *pctldev, int pin) diff --git a/trunk/kernel/irq/spurious.c b/trunk/kernel/irq/spurious.c index b5f4742693c0..aa57d5da18c1 100644 --- a/trunk/kernel/irq/spurious.c +++ b/trunk/kernel/irq/spurious.c @@ -115,7 +115,7 @@ static int misrouted_irq(int irq) struct irq_desc *desc; int i, ok = 0; - if (atomic_inc_return(&irq_poll_active) != 1) + if (atomic_inc_return(&irq_poll_active) == 1) goto out; irq_poll_cpu = smp_processor_id(); diff --git a/trunk/mm/hugetlb.c b/trunk/mm/hugetlb.c index bb28a5f9db8d..dae27ba3be2c 100644 --- a/trunk/mm/hugetlb.c +++ b/trunk/mm/hugetlb.c @@ -2422,8 +2422,6 @@ static int hugetlb_cow(struct mm_struct *mm, struct vm_area_struct *vma, * anon_vma prepared. */ if (unlikely(anon_vma_prepare(vma))) { - page_cache_release(new_page); - page_cache_release(old_page); /* Caller expects lock to be held */ spin_lock(&mm->page_table_lock); return VM_FAULT_OOM; diff --git a/trunk/mm/oom_kill.c b/trunk/mm/oom_kill.c index 76f2c5ae908e..471dedb463ab 100644 --- a/trunk/mm/oom_kill.c +++ b/trunk/mm/oom_kill.c @@ -185,11 +185,6 @@ unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *mem, if (!p) return 0; - if (p->signal->oom_score_adj == OOM_SCORE_ADJ_MIN) { - task_unlock(p); - return 0; - } - /* * The memory controller may have a limit of 0 bytes, so avoid a divide * by zero, if necessary. diff --git a/trunk/security/keys/encrypted-keys/Makefile b/trunk/security/keys/encrypted-keys/Makefile index d6f8433250a5..6bc7a86d1027 100644 --- a/trunk/security/keys/encrypted-keys/Makefile +++ b/trunk/security/keys/encrypted-keys/Makefile @@ -2,9 +2,5 @@ # Makefile for encrypted keys # -obj-$(CONFIG_ENCRYPTED_KEYS) += encrypted-keys.o - -encrypted-keys-y := encrypted.o ecryptfs_format.o -masterkey-$(CONFIG_TRUSTED_KEYS) := masterkey_trusted.o -masterkey-$(CONFIG_TRUSTED_KEYS)-$(CONFIG_ENCRYPTED_KEYS) := masterkey_trusted.o -encrypted-keys-y += $(masterkey-y) $(masterkey-m-m) +obj-$(CONFIG_ENCRYPTED_KEYS) += encrypted.o ecryptfs_format.o +obj-$(CONFIG_TRUSTED_KEYS) += masterkey_trusted.o diff --git a/trunk/security/keys/encrypted-keys/encrypted.c b/trunk/security/keys/encrypted-keys/encrypted.c index 41144f71d615..dcc843cb0f80 100644 --- a/trunk/security/keys/encrypted-keys/encrypted.c +++ b/trunk/security/keys/encrypted-keys/encrypted.c @@ -444,7 +444,7 @@ static struct key *request_master_key(struct encrypted_key_payload *epayload, goto out; if (IS_ERR(mkey)) { - int ret = PTR_ERR(mkey); + int ret = PTR_ERR(epayload); if (ret == -ENOTSUPP) pr_info("encrypted_key: key %s not supported", diff --git a/trunk/security/keys/encrypted-keys/encrypted.h b/trunk/security/keys/encrypted-keys/encrypted.h index 8136a2d44c63..b6ade8945250 100644 --- a/trunk/security/keys/encrypted-keys/encrypted.h +++ b/trunk/security/keys/encrypted-keys/encrypted.h @@ -2,8 +2,7 @@ #define __ENCRYPTED_KEY_H #define ENCRYPTED_DEBUG 0 -#if defined(CONFIG_TRUSTED_KEYS) || \ - (defined(CONFIG_TRUSTED_KEYS_MODULE) && defined(CONFIG_ENCRYPTED_KEYS_MODULE)) +#ifdef CONFIG_TRUSTED_KEYS extern struct key *request_trusted_key(const char *trusted_desc, u8 **master_key, size_t *master_keylen); #else diff --git a/trunk/security/keys/user_defined.c b/trunk/security/keys/user_defined.c index 69ff52c08e97..5b366d7af3c4 100644 --- a/trunk/security/keys/user_defined.c +++ b/trunk/security/keys/user_defined.c @@ -102,8 +102,7 @@ int user_update(struct key *key, const void *data, size_t datalen) key->expiry = 0; } - if (zap) - kfree_rcu(zap, rcu); + kfree_rcu(zap, rcu); error: return ret; diff --git a/trunk/security/smack/smackfs.c b/trunk/security/smack/smackfs.c index 5c32f36ff706..6aceef518a41 100644 --- a/trunk/security/smack/smackfs.c +++ b/trunk/security/smack/smackfs.c @@ -102,6 +102,9 @@ static int smk_cipso_doi_value = SMACK_CIPSO_DOI_DEFAULT; const char *smack_cipso_option = SMACK_CIPSO_OPTION; + +#define SEQ_READ_FINISHED ((loff_t)-1) + /* * Values for parsing cipso rules * SMK_DIGITLEN: Length of a digit field in a rule. @@ -354,12 +357,10 @@ static ssize_t smk_write_load_list(struct file *file, const char __user *buf, rc = count; /* - * If this is "load" as opposed to "load-self" and a new rule - * it needs to get added for reporting. * smk_set_access returns true if there was already a rule * for the subject/object pair, and false if it was new. */ - if (load && !smk_set_access(rule, rule_list, rule_lock)) { + if (!smk_set_access(rule, rule_list, rule_lock)) { smlp = kzalloc(sizeof(*smlp), GFP_KERNEL); if (smlp != NULL) { smlp->smk_rule = rule; @@ -376,12 +377,12 @@ static ssize_t smk_write_load_list(struct file *file, const char __user *buf, return rc; } + /* - * Core logic for smackfs seq list operations. + * Seq_file read operations for /smack/load */ -static void *smk_seq_start(struct seq_file *s, loff_t *pos, - struct list_head *head) +static void *load_seq_start(struct seq_file *s, loff_t *pos) { struct list_head *list; @@ -389,7 +390,7 @@ static void *smk_seq_start(struct seq_file *s, loff_t *pos, * This is 0 the first time through. */ if (s->index == 0) - s->private = head; + s->private = &smack_rule_list; if (s->private == NULL) return NULL; @@ -403,12 +404,11 @@ static void *smk_seq_start(struct seq_file *s, loff_t *pos, return list; } -static void *smk_seq_next(struct seq_file *s, void *v, loff_t *pos, - struct list_head *head) +static void *load_seq_next(struct seq_file *s, void *v, loff_t *pos) { struct list_head *list = v; - if (list_is_last(list, head)) { + if (list_is_last(list, &smack_rule_list)) { s->private = NULL; return NULL; } @@ -416,25 +416,6 @@ static void *smk_seq_next(struct seq_file *s, void *v, loff_t *pos, return list->next; } -static void smk_seq_stop(struct seq_file *s, void *v) -{ - /* No-op */ -} - -/* - * Seq_file read operations for /smack/load - */ - -static void *load_seq_start(struct seq_file *s, loff_t *pos) -{ - return smk_seq_start(s, pos, &smack_rule_list); -} - -static void *load_seq_next(struct seq_file *s, void *v, loff_t *pos) -{ - return smk_seq_next(s, v, pos, &smack_rule_list); -} - static int load_seq_show(struct seq_file *s, void *v) { struct list_head *list = v; @@ -465,11 +446,16 @@ static int load_seq_show(struct seq_file *s, void *v) return 0; } +static void load_seq_stop(struct seq_file *s, void *v) +{ + /* No-op */ +} + static const struct seq_operations load_seq_ops = { .start = load_seq_start, .next = load_seq_next, .show = load_seq_show, - .stop = smk_seq_stop, + .stop = load_seq_stop, }; /** @@ -588,12 +574,28 @@ static void smk_unlbl_ambient(char *oldambient) static void *cipso_seq_start(struct seq_file *s, loff_t *pos) { - return smk_seq_start(s, pos, &smack_known_list); + if (*pos == SEQ_READ_FINISHED) + return NULL; + if (list_empty(&smack_known_list)) + return NULL; + + return smack_known_list.next; } static void *cipso_seq_next(struct seq_file *s, void *v, loff_t *pos) { - return smk_seq_next(s, v, pos, &smack_known_list); + struct list_head *list = v; + + /* + * labels with no associated cipso value wont be printed + * in cipso_seq_show + */ + if (list_is_last(list, &smack_known_list)) { + *pos = SEQ_READ_FINISHED; + return NULL; + } + + return list->next; } /* @@ -632,11 +634,16 @@ static int cipso_seq_show(struct seq_file *s, void *v) return 0; } +static void cipso_seq_stop(struct seq_file *s, void *v) +{ + /* No-op */ +} + static const struct seq_operations cipso_seq_ops = { .start = cipso_seq_start, + .stop = cipso_seq_stop, .next = cipso_seq_next, .show = cipso_seq_show, - .stop = smk_seq_stop, }; /** @@ -781,12 +788,23 @@ static const struct file_operations smk_cipso_ops = { static void *netlbladdr_seq_start(struct seq_file *s, loff_t *pos) { - return smk_seq_start(s, pos, &smk_netlbladdr_list); + if (*pos == SEQ_READ_FINISHED) + return NULL; + if (list_empty(&smk_netlbladdr_list)) + return NULL; + return smk_netlbladdr_list.next; } static void *netlbladdr_seq_next(struct seq_file *s, void *v, loff_t *pos) { - return smk_seq_next(s, v, pos, &smk_netlbladdr_list); + struct list_head *list = v; + + if (list_is_last(list, &smk_netlbladdr_list)) { + *pos = SEQ_READ_FINISHED; + return NULL; + } + + return list->next; } #define BEBITS (sizeof(__be32) * 8) @@ -810,11 +828,16 @@ static int netlbladdr_seq_show(struct seq_file *s, void *v) return 0; } +static void netlbladdr_seq_stop(struct seq_file *s, void *v) +{ + /* No-op */ +} + static const struct seq_operations netlbladdr_seq_ops = { .start = netlbladdr_seq_start, + .stop = netlbladdr_seq_stop, .next = netlbladdr_seq_next, .show = netlbladdr_seq_show, - .stop = smk_seq_stop, }; /** @@ -1382,14 +1405,23 @@ static void *load_self_seq_start(struct seq_file *s, loff_t *pos) { struct task_smack *tsp = current_security(); - return smk_seq_start(s, pos, &tsp->smk_rules); + if (*pos == SEQ_READ_FINISHED) + return NULL; + if (list_empty(&tsp->smk_rules)) + return NULL; + return tsp->smk_rules.next; } static void *load_self_seq_next(struct seq_file *s, void *v, loff_t *pos) { struct task_smack *tsp = current_security(); + struct list_head *list = v; - return smk_seq_next(s, v, pos, &tsp->smk_rules); + if (list_is_last(list, &tsp->smk_rules)) { + *pos = SEQ_READ_FINISHED; + return NULL; + } + return list->next; } static int load_self_seq_show(struct seq_file *s, void *v) @@ -1421,11 +1453,16 @@ static int load_self_seq_show(struct seq_file *s, void *v) return 0; } +static void load_self_seq_stop(struct seq_file *s, void *v) +{ + /* No-op */ +} + static const struct seq_operations load_self_seq_ops = { .start = load_self_seq_start, .next = load_self_seq_next, .show = load_self_seq_show, - .stop = smk_seq_stop, + .stop = load_self_seq_stop, }; diff --git a/trunk/sound/pci/hda/hda_eld.c b/trunk/sound/pci/hda/hda_eld.c index 7ae7578bdcc0..1c8ddf547a2d 100644 --- a/trunk/sound/pci/hda/hda_eld.c +++ b/trunk/sound/pci/hda/hda_eld.c @@ -297,18 +297,10 @@ static int hdmi_update_eld(struct hdmi_eld *e, buf + ELD_FIXED_BYTES + mnl + 3 * i); } - /* - * HDMI sink's ELD info cannot always be retrieved for now, e.g. - * in console or for audio devices. Assume the highest speakers - * configuration, to _not_ prohibit multi-channel audio playback. - */ - if (!e->spk_alloc) - e->spk_alloc = 0xffff; - - e->eld_valid = true; return 0; out_fail: + e->eld_ver = 0; return -EINVAL; } @@ -331,6 +323,9 @@ int snd_hdmi_get_eld(struct hdmi_eld *eld, * ELD is valid, actual eld_size is assigned in hdmi_update_eld() */ + if (!eld->eld_valid) + return -ENOENT; + size = snd_hdmi_get_eld_size(codec, nid); if (size == 0) { /* wfg: workaround for ASUS P5E-VM HDMI board */ diff --git a/trunk/sound/pci/hda/hda_local.h b/trunk/sound/pci/hda/hda_local.h index 618ddad17236..6579e0f2bb57 100644 --- a/trunk/sound/pci/hda/hda_local.h +++ b/trunk/sound/pci/hda/hda_local.h @@ -653,9 +653,6 @@ struct hdmi_eld { int spk_alloc; int sad_count; struct cea_sad sad[ELD_MAX_SAD]; - /* - * all fields above eld_buffer will be cleared before updating ELD - */ char eld_buffer[ELD_MAX_SIZE]; #ifdef CONFIG_PROC_FS struct snd_info_entry *proc_entry; diff --git a/trunk/sound/pci/hda/patch_cirrus.c b/trunk/sound/pci/hda/patch_cirrus.c index 2fbab8e29576..2a2d8645ba09 100644 --- a/trunk/sound/pci/hda/patch_cirrus.c +++ b/trunk/sound/pci/hda/patch_cirrus.c @@ -237,15 +237,6 @@ static int cs_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo, return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); } -static void cs_update_input_select(struct hda_codec *codec) -{ - struct cs_spec *spec = codec->spec; - if (spec->cur_adc) - snd_hda_codec_write(codec, spec->cur_adc, 0, - AC_VERB_SET_CONNECT_SEL, - spec->adc_idx[spec->cur_input]); -} - /* * Analog capture */ @@ -259,7 +250,6 @@ static int cs_capture_pcm_prepare(struct hda_pcm_stream *hinfo, spec->cur_adc = spec->adc_nid[spec->cur_input]; spec->cur_adc_stream_tag = stream_tag; spec->cur_adc_format = format; - cs_update_input_select(codec); snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format); return 0; } @@ -699,8 +689,10 @@ static int change_cur_input(struct hda_codec *codec, unsigned int idx, spec->cur_adc_stream_tag, 0, spec->cur_adc_format); } + snd_hda_codec_write(codec, spec->cur_adc, 0, + AC_VERB_SET_CONNECT_SEL, + spec->adc_idx[idx]); spec->cur_input = idx; - cs_update_input_select(codec); return 1; } @@ -981,7 +973,10 @@ static void cs_automic(struct hda_codec *codec) } else { spec->cur_input = spec->last_input; } - cs_update_input_select(codec); + + snd_hda_codec_write_cache(codec, spec->cur_adc, 0, + AC_VERB_SET_CONNECT_SEL, + spec->adc_idx[spec->cur_input]); } else { if (present) change_cur_input(codec, spec->automic_idx, 0); @@ -1078,7 +1073,9 @@ static void init_input(struct hda_codec *codec) cs_automic(codec); else { spec->cur_adc = spec->adc_nid[spec->cur_input]; - cs_update_input_select(codec); + snd_hda_codec_write(codec, spec->cur_adc, 0, + AC_VERB_SET_CONNECT_SEL, + spec->adc_idx[spec->cur_input]); } } else { change_cur_input(codec, spec->cur_input, 1); diff --git a/trunk/sound/pci/hda/patch_hdmi.c b/trunk/sound/pci/hda/patch_hdmi.c index 9850c5b481ea..81b7b791b3c3 100644 --- a/trunk/sound/pci/hda/patch_hdmi.c +++ b/trunk/sound/pci/hda/patch_hdmi.c @@ -65,10 +65,7 @@ struct hdmi_spec_per_pin { hda_nid_t pin_nid; int num_mux_nids; hda_nid_t mux_nids[HDA_MAX_CONNECTIONS]; - - struct hda_codec *codec; struct hdmi_eld sink_eld; - struct delayed_work work; }; struct hdmi_spec { @@ -748,7 +745,8 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, int pin_idx, * Unsolicited events */ -static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, bool retry); +static void hdmi_present_sense(struct hda_codec *codec, hda_nid_t pin_nid, + struct hdmi_eld *eld); static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res) { @@ -757,6 +755,7 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res) int pd = !!(res & AC_UNSOL_RES_PD); int eldv = !!(res & AC_UNSOL_RES_ELDV); int pin_idx; + struct hdmi_eld *eld; printk(KERN_INFO "HDMI hot plug event: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n", @@ -765,8 +764,17 @@ static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res) pin_idx = pin_nid_to_pin_index(spec, pin_nid); if (pin_idx < 0) return; + eld = &spec->pins[pin_idx].sink_eld; + + hdmi_present_sense(codec, pin_nid, eld); - hdmi_present_sense(&spec->pins[pin_idx], true); + /* + * HDMI sink's ELD info cannot always be retrieved for now, e.g. + * in console or for audio devices. Assume the highest speakers + * configuration, to _not_ prohibit multi-channel audio playback. + */ + if (!eld->spk_alloc) + eld->spk_alloc = 0xffff; } static void hdmi_non_intrinsic_event(struct hda_codec *codec, unsigned int res) @@ -960,11 +968,9 @@ static int hdmi_read_pin_conn(struct hda_codec *codec, int pin_idx) return 0; } -static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, bool retry) +static void hdmi_present_sense(struct hda_codec *codec, hda_nid_t pin_nid, + struct hdmi_eld *eld) { - struct hda_codec *codec = per_pin->codec; - struct hdmi_eld *eld = &per_pin->sink_eld; - hda_nid_t pin_nid = per_pin->pin_nid; /* * Always execute a GetPinSense verb here, even when called from * hdmi_intrinsic_event; for some NVIDIA HW, the unsolicited @@ -974,39 +980,26 @@ static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, bool retry) * the unsolicited response to avoid custom WARs. */ int present = snd_hda_pin_sense(codec, pin_nid); - bool eld_valid = false; - memset(eld, 0, offsetof(struct hdmi_eld, eld_buffer)); + memset(eld, 0, sizeof(*eld)); eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE); if (eld->monitor_present) - eld_valid = !!(present & AC_PINSENSE_ELDV); + eld->eld_valid = !!(present & AC_PINSENSE_ELDV); + else + eld->eld_valid = 0; printk(KERN_INFO "HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n", - codec->addr, pin_nid, eld->monitor_present, eld_valid); + codec->addr, pin_nid, eld->monitor_present, eld->eld_valid); - if (eld_valid) { + if (eld->eld_valid) if (!snd_hdmi_get_eld(eld, codec, pin_nid)) snd_hdmi_show_eld(eld); - else if (retry) { - queue_delayed_work(codec->bus->workq, - &per_pin->work, - msecs_to_jiffies(300)); - } - } snd_hda_input_jack_report(codec, pin_nid); } -static void hdmi_repoll_eld(struct work_struct *work) -{ - struct hdmi_spec_per_pin *per_pin = - container_of(to_delayed_work(work), struct hdmi_spec_per_pin, work); - - hdmi_present_sense(per_pin, false); -} - static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid) { struct hdmi_spec *spec = codec->spec; @@ -1235,7 +1228,7 @@ static int generic_hdmi_build_jack(struct hda_codec *codec, int pin_idx) if (err < 0) return err; - hdmi_present_sense(per_pin, false); + hdmi_present_sense(codec, per_pin->pin_nid, &per_pin->sink_eld); return 0; } @@ -1286,8 +1279,6 @@ static int generic_hdmi_init(struct hda_codec *codec) AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | pin_nid); - per_pin->codec = codec; - INIT_DELAYED_WORK(&per_pin->work, hdmi_repoll_eld); snd_hda_eld_proc_new(codec, eld, pin_idx); } return 0; @@ -1302,12 +1293,10 @@ static void generic_hdmi_free(struct hda_codec *codec) struct hdmi_spec_per_pin *per_pin = &spec->pins[pin_idx]; struct hdmi_eld *eld = &per_pin->sink_eld; - cancel_delayed_work(&per_pin->work); snd_hda_eld_proc_free(codec, eld); } snd_hda_input_jack_free(codec); - flush_workqueue(codec->bus->workq); kfree(spec); } diff --git a/trunk/sound/pci/hda/patch_realtek.c b/trunk/sound/pci/hda/patch_realtek.c index 336d14eb72af..308bb575bc06 100644 --- a/trunk/sound/pci/hda/patch_realtek.c +++ b/trunk/sound/pci/hda/patch_realtek.c @@ -1452,7 +1452,7 @@ static void alc_apply_fixup(struct hda_codec *codec, int action) switch (fix->type) { case ALC_FIXUP_SKU: if (action != ALC_FIXUP_ACT_PRE_PROBE || !fix->v.sku) - break; + break;; snd_printdd(KERN_INFO "hda_codec: %s: " "Apply sku override for %s\n", codec->chip_name, modelname); diff --git a/trunk/sound/pci/hda/patch_sigmatel.c b/trunk/sound/pci/hda/patch_sigmatel.c index 470f6f286e81..edc2b7bc177c 100644 --- a/trunk/sound/pci/hda/patch_sigmatel.c +++ b/trunk/sound/pci/hda/patch_sigmatel.c @@ -227,6 +227,7 @@ struct sigmatel_spec { /* power management */ unsigned int num_pwrs; + const unsigned int *pwr_mapping; const hda_nid_t *pwr_nids; const hda_nid_t *dac_list; @@ -373,15 +374,18 @@ static const unsigned long stac92hd73xx_capvols[] = { #define STAC92HD83_DAC_COUNT 3 -static const hda_nid_t stac92hd83xxx_pwr_nids[7] = { - 0x0a, 0x0b, 0x0c, 0xd, 0x0e, - 0x0f, 0x10 +static const hda_nid_t stac92hd83xxx_pwr_nids[4] = { + 0xa, 0xb, 0xd, 0xe, }; static const hda_nid_t stac92hd83xxx_slave_dig_outs[2] = { 0x1e, 0, }; +static const unsigned int stac92hd83xxx_pwr_mapping[4] = { + 0x03, 0x0c, 0x20, 0x40, +}; + static const hda_nid_t stac92hd83xxx_dmic_nids[] = { 0x11, 0x20, }; @@ -4466,12 +4470,8 @@ static int stac92xx_init(struct hda_codec *codec) stac_toggle_power_map(codec, nid, 1); continue; } - if (enable_pin_detect(codec, nid, STAC_PWR_EVENT)) { + if (enable_pin_detect(codec, nid, STAC_PWR_EVENT)) stac_issue_unsol_event(codec, nid); - continue; - } - /* none of the above, turn the port OFF */ - stac_toggle_power_map(codec, nid, 0); } /* sync mute LED */ @@ -4727,7 +4727,11 @@ static void stac_toggle_power_map(struct hda_codec *codec, hda_nid_t nid, if (idx >= spec->num_pwrs) return; - idx = 1 << idx; + /* several codecs have two power down bits */ + if (spec->pwr_mapping) + idx = spec->pwr_mapping[idx]; + else + idx = 1 << idx; val = snd_hda_codec_read(codec, codec->afg, 0, 0x0fec, 0x0) & 0xff; if (enable) @@ -5625,6 +5629,9 @@ static int patch_stac92hd83xxx(struct hda_codec *codec) snd_hda_codec_set_pincfg(codec, 0xf, 0x2181205e); } + /* reset pin power-down; Windows may leave these bits after reboot */ + snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7EC, 0); + snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7ED, 0); codec->no_trigger_sense = 1; codec->spec = spec; @@ -5634,6 +5641,7 @@ static int patch_stac92hd83xxx(struct hda_codec *codec) codec->slave_dig_outs = stac92hd83xxx_slave_dig_outs; spec->digbeep_nid = 0x21; spec->pwr_nids = stac92hd83xxx_pwr_nids; + spec->pwr_mapping = stac92hd83xxx_pwr_mapping; spec->num_pwrs = ARRAY_SIZE(stac92hd83xxx_pwr_nids); spec->multiout.dac_nids = spec->dac_nids; spec->init = stac92hd83xxx_core_init; @@ -5650,6 +5658,9 @@ static int patch_stac92hd83xxx(struct hda_codec *codec) stac92xx_set_config_regs(codec, stac92hd83xxx_brd_tbl[spec->board_config]); + if (spec->board_config != STAC_92HD83XXX_PWR_REF) + spec->num_pwrs = 0; + codec->patch_ops = stac92xx_patch_ops; if (find_mute_led_gpio(codec, 0)) @@ -5858,6 +5869,8 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) (codec->revision_id & 0xf) == 1) spec->stream_delay = 40; /* 40 milliseconds */ + /* no output amps */ + spec->num_pwrs = 0; /* disable VSW */ spec->init = stac92hd71bxx_core_init; unmute_init++; @@ -5872,6 +5885,8 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) if ((codec->revision_id & 0xf) == 1) spec->stream_delay = 40; /* 40 milliseconds */ + /* no output amps */ + spec->num_pwrs = 0; /* fallthru */ default: spec->init = stac92hd71bxx_core_init;