mirror of https://gitee.com/openkylin/linux.git
- Artem's removal of dead code continues (RPX, MBX860)
- Two krealloc() abuse fixes -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.13 (GNU/Linux) iEYEABECAAYFAlGLydsACgkQdwG7hYl686O3ZwCfYIJUdE/VADo53j3SwDbCEa15 pMgAnA13t6dKgC74Xqk5dd65KKaw64WB =nbL9 -----END PGP SIGNATURE----- Merge tag 'for-linus-20130509' of git://git.infradead.org/~dwmw2/random-2.6 Pull misc fixes from David Woodhouse: "This is some miscellaneous cleanups that don't really belong anywhere else (or were ignored), that have been sitting in linux-next for some time. Two of them are fixes resulting from my audit of krealloc() usage that don't seem to have elicited any response when I posted them, and the other three are patches from Artem removing dead code." * tag 'for-linus-20130509' of git://git.infradead.org/~dwmw2/random-2.6: pcmcia: remove RPX board stuff m68k: remove rpxlite stuff pcmcia: remove Motorola MBX860 support params: Fix potential memory leak in add_sysfs_param() dell-laptop: Fix krealloc() misuse in parse_da_table()
This commit is contained in:
commit
f741df1f3a
|
@ -480,23 +480,6 @@ typedef struct scc_enet {
|
||||||
#define SICR_ENET_CLKRT ((uint)0x0000003d)
|
#define SICR_ENET_CLKRT ((uint)0x0000003d)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_RPXLITE
|
|
||||||
/* This ENET stuff is for the MPC850 with ethernet on SCC2. Some of
|
|
||||||
* this may be unique to the RPX-Lite configuration.
|
|
||||||
* Note TENA is on Port B.
|
|
||||||
*/
|
|
||||||
#define PA_ENET_RXD ((ushort)0x0004)
|
|
||||||
#define PA_ENET_TXD ((ushort)0x0008)
|
|
||||||
#define PA_ENET_TCLK ((ushort)0x0200)
|
|
||||||
#define PA_ENET_RCLK ((ushort)0x0800)
|
|
||||||
#define PB_ENET_TENA ((uint)0x00002000)
|
|
||||||
#define PC_ENET_CLSN ((ushort)0x0040)
|
|
||||||
#define PC_ENET_RENA ((ushort)0x0080)
|
|
||||||
|
|
||||||
#define SICR_ENET_MASK ((uint)0x0000ff00)
|
|
||||||
#define SICR_ENET_CLKRT ((uint)0x00003d00)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_BSEIP
|
#ifdef CONFIG_BSEIP
|
||||||
/* This ENET stuff is for the MPC823 with ethernet on SCC2.
|
/* This ENET stuff is for the MPC823 with ethernet on SCC2.
|
||||||
* This is unique to the BSE ip-Engine board.
|
* This is unique to the BSE ip-Engine board.
|
||||||
|
|
|
@ -68,12 +68,6 @@ MODULE_LICENSE("Dual MPL/GPL");
|
||||||
|
|
||||||
#if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B)
|
#if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B)
|
||||||
|
|
||||||
/* The RPX series use SLOT_B */
|
|
||||||
#if defined(CONFIG_RPXCLASSIC) || defined(CONFIG_RPXLITE)
|
|
||||||
#define CONFIG_PCMCIA_SLOT_B
|
|
||||||
#define CONFIG_BD_IS_MHZ
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The ADS board use SLOT_A */
|
/* The ADS board use SLOT_A */
|
||||||
#ifdef CONFIG_ADS
|
#ifdef CONFIG_ADS
|
||||||
#define CONFIG_PCMCIA_SLOT_A
|
#define CONFIG_PCMCIA_SLOT_A
|
||||||
|
@ -253,81 +247,6 @@ static irqreturn_t m8xx_interrupt(int irq, void *dev);
|
||||||
|
|
||||||
#define PCMCIA_BMT_LIMIT (15*4) /* Bus Monitor Timeout value */
|
#define PCMCIA_BMT_LIMIT (15*4) /* Bus Monitor Timeout value */
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
|
||||||
/* board specific stuff: */
|
|
||||||
/* voltage_set(), hardware_enable() and hardware_disable() */
|
|
||||||
/* ------------------------------------------------------------------------- */
|
|
||||||
/* RPX Boards from Embedded Planet */
|
|
||||||
|
|
||||||
#if defined(CONFIG_RPXCLASSIC) || defined(CONFIG_RPXLITE)
|
|
||||||
|
|
||||||
/* The RPX boards seems to have it's bus monitor timeout set to 6*8 clocks.
|
|
||||||
* SYPCR is write once only, therefore must the slowest memory be faster
|
|
||||||
* than the bus monitor or we will get a machine check due to the bus timeout.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define PCMCIA_BOARD_MSG "RPX CLASSIC or RPX LITE"
|
|
||||||
|
|
||||||
#undef PCMCIA_BMT_LIMIT
|
|
||||||
#define PCMCIA_BMT_LIMIT (6*8)
|
|
||||||
|
|
||||||
static int voltage_set(int slot, int vcc, int vpp)
|
|
||||||
{
|
|
||||||
u32 reg = 0;
|
|
||||||
|
|
||||||
switch (vcc) {
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case 33:
|
|
||||||
reg |= BCSR1_PCVCTL4;
|
|
||||||
break;
|
|
||||||
case 50:
|
|
||||||
reg |= BCSR1_PCVCTL5;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (vpp) {
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case 33:
|
|
||||||
case 50:
|
|
||||||
if (vcc == vpp)
|
|
||||||
reg |= BCSR1_PCVCTL6;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
break;
|
|
||||||
case 120:
|
|
||||||
reg |= BCSR1_PCVCTL7;
|
|
||||||
default:
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!((vcc == 50) || (vcc == 0)))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* first, turn off all power */
|
|
||||||
|
|
||||||
out_be32(((u32 *) RPX_CSR_ADDR),
|
|
||||||
in_be32(((u32 *) RPX_CSR_ADDR)) & ~(BCSR1_PCVCTL4 |
|
|
||||||
BCSR1_PCVCTL5 |
|
|
||||||
BCSR1_PCVCTL6 |
|
|
||||||
BCSR1_PCVCTL7));
|
|
||||||
|
|
||||||
/* enable new powersettings */
|
|
||||||
|
|
||||||
out_be32(((u32 *) RPX_CSR_ADDR), in_be32(((u32 *) RPX_CSR_ADDR)) | reg);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define socket_get(_slot_) PCMCIA_SOCKET_KEY_5V
|
|
||||||
#define hardware_enable(_slot_) /* No hardware to enable */
|
|
||||||
#define hardware_disable(_slot_) /* No hardware to disable */
|
|
||||||
|
|
||||||
#endif /* CONFIG_RPXCLASSIC */
|
|
||||||
|
|
||||||
/* FADS Boards from Motorola */
|
/* FADS Boards from Motorola */
|
||||||
|
|
||||||
#if defined(CONFIG_FADS)
|
#if defined(CONFIG_FADS)
|
||||||
|
@ -419,65 +338,6 @@ static inline int voltage_set(int slot, int vcc, int vpp)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
|
||||||
/* Motorola MBX860 */
|
|
||||||
|
|
||||||
#if defined(CONFIG_MBX)
|
|
||||||
|
|
||||||
#define PCMCIA_BOARD_MSG "MBX"
|
|
||||||
|
|
||||||
static int voltage_set(int slot, int vcc, int vpp)
|
|
||||||
{
|
|
||||||
u8 reg = 0;
|
|
||||||
|
|
||||||
switch (vcc) {
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case 33:
|
|
||||||
reg |= CSR2_VCC_33;
|
|
||||||
break;
|
|
||||||
case 50:
|
|
||||||
reg |= CSR2_VCC_50;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (vpp) {
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case 33:
|
|
||||||
case 50:
|
|
||||||
if (vcc == vpp)
|
|
||||||
reg |= CSR2_VPP_VCC;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
break;
|
|
||||||
case 120:
|
|
||||||
if ((vcc == 33) || (vcc == 50))
|
|
||||||
reg |= CSR2_VPP_12;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* first, turn off all power */
|
|
||||||
out_8((u8 *) MBX_CSR2_ADDR,
|
|
||||||
in_8((u8 *) MBX_CSR2_ADDR) & ~(CSR2_VCC_MASK | CSR2_VPP_MASK));
|
|
||||||
|
|
||||||
/* enable new powersettings */
|
|
||||||
out_8((u8 *) MBX_CSR2_ADDR, in_8((u8 *) MBX_CSR2_ADDR) | reg);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define socket_get(_slot_) PCMCIA_SOCKET_KEY_5V
|
|
||||||
#define hardware_enable(_slot_) /* No hardware to enable */
|
|
||||||
#define hardware_disable(_slot_) /* No hardware to disable */
|
|
||||||
|
|
||||||
#endif /* CONFIG_MBX */
|
|
||||||
|
|
||||||
#if defined(CONFIG_PRxK)
|
#if defined(CONFIG_PRxK)
|
||||||
#include <asm/cpld.h>
|
#include <asm/cpld.h>
|
||||||
extern volatile fpga_pc_regs *fpga_pc;
|
extern volatile fpga_pc_regs *fpga_pc;
|
||||||
|
|
|
@ -284,6 +284,7 @@ static void __init parse_da_table(const struct dmi_header *dm)
|
||||||
{
|
{
|
||||||
/* Final token is a terminator, so we don't want to copy it */
|
/* Final token is a terminator, so we don't want to copy it */
|
||||||
int tokens = (dm->length-11)/sizeof(struct calling_interface_token)-1;
|
int tokens = (dm->length-11)/sizeof(struct calling_interface_token)-1;
|
||||||
|
struct calling_interface_token *new_da_tokens;
|
||||||
struct calling_interface_structure *table =
|
struct calling_interface_structure *table =
|
||||||
container_of(dm, struct calling_interface_structure, header);
|
container_of(dm, struct calling_interface_structure, header);
|
||||||
|
|
||||||
|
@ -296,12 +297,13 @@ static void __init parse_da_table(const struct dmi_header *dm)
|
||||||
da_command_address = table->cmdIOAddress;
|
da_command_address = table->cmdIOAddress;
|
||||||
da_command_code = table->cmdIOCode;
|
da_command_code = table->cmdIOCode;
|
||||||
|
|
||||||
da_tokens = krealloc(da_tokens, (da_num_tokens + tokens) *
|
new_da_tokens = krealloc(da_tokens, (da_num_tokens + tokens) *
|
||||||
sizeof(struct calling_interface_token),
|
sizeof(struct calling_interface_token),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
|
|
||||||
if (!da_tokens)
|
if (!new_da_tokens)
|
||||||
return;
|
return;
|
||||||
|
da_tokens = new_da_tokens;
|
||||||
|
|
||||||
memcpy(da_tokens+da_num_tokens, table->tokens,
|
memcpy(da_tokens+da_num_tokens, table->tokens,
|
||||||
sizeof(struct calling_interface_token) * tokens);
|
sizeof(struct calling_interface_token) * tokens);
|
||||||
|
|
|
@ -613,10 +613,13 @@ static __modinit int add_sysfs_param(struct module_kobject *mk,
|
||||||
sizeof(*mk->mp) + sizeof(mk->mp->attrs[0]) * (num+1),
|
sizeof(*mk->mp) + sizeof(mk->mp->attrs[0]) * (num+1),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!new) {
|
if (!new) {
|
||||||
kfree(mk->mp);
|
kfree(attrs);
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
/* Despite looking like the typical realloc() bug, this is safe.
|
||||||
|
* We *want* the old 'attrs' to be freed either way, and we'll store
|
||||||
|
* the new one in the success case. */
|
||||||
attrs = krealloc(attrs, sizeof(new->grp.attrs[0])*(num+2), GFP_KERNEL);
|
attrs = krealloc(attrs, sizeof(new->grp.attrs[0])*(num+2), GFP_KERNEL);
|
||||||
if (!attrs) {
|
if (!attrs) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
|
|
Loading…
Reference in New Issue