Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: of/phylib: Use device tree properties to initialize Marvell PHYs. phylib: Add support for Marvell 88E1149R devices. phylib: Use common page register definition for Marvell PHYs. qlge: Fix incorrect usage of module parameters and netdev msg level ipv6: fix missing in6_ifa_put in addrconf SuperH IrDA: correct Baud rate error correction atl1c: Fix hardware type check for enabling OTP CLK net: allow GFP_HIGHMEM in __vmalloc() bonding: change list contact to netdev@vger.kernel.org e1000: fix screaming IRQ
This commit is contained in:
commit
3cbaa0f7a7
@ -1359,7 +1359,7 @@ F: include/net/bluetooth/
|
|||||||
|
|
||||||
BONDING DRIVER
|
BONDING DRIVER
|
||||||
M: Jay Vosburgh <fubar@us.ibm.com>
|
M: Jay Vosburgh <fubar@us.ibm.com>
|
||||||
L: bonding-devel@lists.sourceforge.net
|
L: netdev@vger.kernel.org
|
||||||
W: http://sourceforge.net/projects/bonding/
|
W: http://sourceforge.net/projects/bonding/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/bonding/
|
F: drivers/net/bonding/
|
||||||
|
@ -82,7 +82,7 @@ static int atl1c_get_permanent_address(struct atl1c_hw *hw)
|
|||||||
addr[0] = addr[1] = 0;
|
addr[0] = addr[1] = 0;
|
||||||
AT_READ_REG(hw, REG_OTP_CTRL, &otp_ctrl_data);
|
AT_READ_REG(hw, REG_OTP_CTRL, &otp_ctrl_data);
|
||||||
if (atl1c_check_eeprom_exist(hw)) {
|
if (atl1c_check_eeprom_exist(hw)) {
|
||||||
if (hw->nic_type == athr_l1c || hw->nic_type == athr_l2c_b) {
|
if (hw->nic_type == athr_l1c || hw->nic_type == athr_l2c) {
|
||||||
/* Enable OTP CLK */
|
/* Enable OTP CLK */
|
||||||
if (!(otp_ctrl_data & OTP_CTRL_CLK_EN)) {
|
if (!(otp_ctrl_data & OTP_CTRL_CLK_EN)) {
|
||||||
otp_ctrl_data |= OTP_CTRL_CLK_EN;
|
otp_ctrl_data |= OTP_CTRL_CLK_EN;
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
char e1000_driver_name[] = "e1000";
|
char e1000_driver_name[] = "e1000";
|
||||||
static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
|
static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
|
||||||
#define DRV_VERSION "7.3.21-k6-NAPI"
|
#define DRV_VERSION "7.3.21-k8-NAPI"
|
||||||
const char e1000_driver_version[] = DRV_VERSION;
|
const char e1000_driver_version[] = DRV_VERSION;
|
||||||
static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
|
static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
|
||||||
|
|
||||||
@ -485,9 +485,6 @@ void e1000_down(struct e1000_adapter *adapter)
|
|||||||
struct net_device *netdev = adapter->netdev;
|
struct net_device *netdev = adapter->netdev;
|
||||||
u32 rctl, tctl;
|
u32 rctl, tctl;
|
||||||
|
|
||||||
/* signal that we're down so the interrupt handler does not
|
|
||||||
* reschedule our watchdog timer */
|
|
||||||
set_bit(__E1000_DOWN, &adapter->flags);
|
|
||||||
|
|
||||||
/* disable receives in the hardware */
|
/* disable receives in the hardware */
|
||||||
rctl = er32(RCTL);
|
rctl = er32(RCTL);
|
||||||
@ -508,6 +505,13 @@ void e1000_down(struct e1000_adapter *adapter)
|
|||||||
|
|
||||||
e1000_irq_disable(adapter);
|
e1000_irq_disable(adapter);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Setting DOWN must be after irq_disable to prevent
|
||||||
|
* a screaming interrupt. Setting DOWN also prevents
|
||||||
|
* timers and tasks from rescheduling.
|
||||||
|
*/
|
||||||
|
set_bit(__E1000_DOWN, &adapter->flags);
|
||||||
|
|
||||||
del_timer_sync(&adapter->tx_fifo_stall_timer);
|
del_timer_sync(&adapter->tx_fifo_stall_timer);
|
||||||
del_timer_sync(&adapter->watchdog_timer);
|
del_timer_sync(&adapter->watchdog_timer);
|
||||||
del_timer_sync(&adapter->phy_info_timer);
|
del_timer_sync(&adapter->phy_info_timer);
|
||||||
|
@ -258,7 +258,7 @@ static int sh_sir_set_baudrate(struct sh_sir_self *self, u32 baudrate)
|
|||||||
|
|
||||||
/* Baud Rate Error Correction x 10000 */
|
/* Baud Rate Error Correction x 10000 */
|
||||||
u32 rate_err_array[] = {
|
u32 rate_err_array[] = {
|
||||||
0000, 0625, 1250, 1875,
|
0, 625, 1250, 1875,
|
||||||
2500, 3125, 3750, 4375,
|
2500, 3125, 3750, 4375,
|
||||||
5000, 5625, 6250, 6875,
|
5000, 5625, 6250, 6875,
|
||||||
7500, 8125, 8750, 9375,
|
7500, 8125, 8750, 9375,
|
||||||
|
@ -30,11 +30,14 @@
|
|||||||
#include <linux/ethtool.h>
|
#include <linux/ethtool.h>
|
||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
#include <linux/marvell_phy.h>
|
#include <linux/marvell_phy.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
|
#define MII_MARVELL_PHY_PAGE 22
|
||||||
|
|
||||||
#define MII_M1011_IEVENT 0x13
|
#define MII_M1011_IEVENT 0x13
|
||||||
#define MII_M1011_IEVENT_CLEAR 0x0000
|
#define MII_M1011_IEVENT_CLEAR 0x0000
|
||||||
|
|
||||||
@ -80,7 +83,6 @@
|
|||||||
#define MII_88E1121_PHY_LED_CTRL 16
|
#define MII_88E1121_PHY_LED_CTRL 16
|
||||||
#define MII_88E1121_PHY_LED_PAGE 3
|
#define MII_88E1121_PHY_LED_PAGE 3
|
||||||
#define MII_88E1121_PHY_LED_DEF 0x0030
|
#define MII_88E1121_PHY_LED_DEF 0x0030
|
||||||
#define MII_88E1121_PHY_PAGE 22
|
|
||||||
|
|
||||||
#define MII_M1011_PHY_STATUS 0x11
|
#define MII_M1011_PHY_STATUS 0x11
|
||||||
#define MII_M1011_PHY_STATUS_1000 0x8000
|
#define MII_M1011_PHY_STATUS_1000 0x8000
|
||||||
@ -186,13 +188,94 @@ static int marvell_config_aneg(struct phy_device *phydev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF_MDIO
|
||||||
|
/*
|
||||||
|
* Set and/or override some configuration registers based on the
|
||||||
|
* marvell,reg-init property stored in the of_node for the phydev.
|
||||||
|
*
|
||||||
|
* marvell,reg-init = <reg-page reg mask value>,...;
|
||||||
|
*
|
||||||
|
* There may be one or more sets of <reg-page reg mask value>:
|
||||||
|
*
|
||||||
|
* reg-page: which register bank to use.
|
||||||
|
* reg: the register.
|
||||||
|
* mask: if non-zero, ANDed with existing register value.
|
||||||
|
* value: ORed with the masked value and written to the regiser.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static int marvell_of_reg_init(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
const __be32 *paddr;
|
||||||
|
int len, i, saved_page, current_page, page_changed, ret;
|
||||||
|
|
||||||
|
if (!phydev->dev.of_node)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
paddr = of_get_property(phydev->dev.of_node, "marvell,reg-init", &len);
|
||||||
|
if (!paddr || len < (4 * sizeof(*paddr)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
saved_page = phy_read(phydev, MII_MARVELL_PHY_PAGE);
|
||||||
|
if (saved_page < 0)
|
||||||
|
return saved_page;
|
||||||
|
page_changed = 0;
|
||||||
|
current_page = saved_page;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
len /= sizeof(*paddr);
|
||||||
|
for (i = 0; i < len - 3; i += 4) {
|
||||||
|
u16 reg_page = be32_to_cpup(paddr + i);
|
||||||
|
u16 reg = be32_to_cpup(paddr + i + 1);
|
||||||
|
u16 mask = be32_to_cpup(paddr + i + 2);
|
||||||
|
u16 val_bits = be32_to_cpup(paddr + i + 3);
|
||||||
|
int val;
|
||||||
|
|
||||||
|
if (reg_page != current_page) {
|
||||||
|
current_page = reg_page;
|
||||||
|
page_changed = 1;
|
||||||
|
ret = phy_write(phydev, MII_MARVELL_PHY_PAGE, reg_page);
|
||||||
|
if (ret < 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
val = 0;
|
||||||
|
if (mask) {
|
||||||
|
val = phy_read(phydev, reg);
|
||||||
|
if (val < 0) {
|
||||||
|
ret = val;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
val &= mask;
|
||||||
|
}
|
||||||
|
val |= val_bits;
|
||||||
|
|
||||||
|
ret = phy_write(phydev, reg, val);
|
||||||
|
if (ret < 0)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
}
|
||||||
|
err:
|
||||||
|
if (page_changed) {
|
||||||
|
i = phy_write(phydev, MII_MARVELL_PHY_PAGE, saved_page);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = i;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static int marvell_of_reg_init(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_OF_MDIO */
|
||||||
|
|
||||||
static int m88e1121_config_aneg(struct phy_device *phydev)
|
static int m88e1121_config_aneg(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
int err, oldpage, mscr;
|
int err, oldpage, mscr;
|
||||||
|
|
||||||
oldpage = phy_read(phydev, MII_88E1121_PHY_PAGE);
|
oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE);
|
||||||
|
|
||||||
err = phy_write(phydev, MII_88E1121_PHY_PAGE,
|
err = phy_write(phydev, MII_MARVELL_PHY_PAGE,
|
||||||
MII_88E1121_PHY_MSCR_PAGE);
|
MII_88E1121_PHY_MSCR_PAGE);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
@ -218,7 +301,7 @@ static int m88e1121_config_aneg(struct phy_device *phydev)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
phy_write(phydev, MII_88E1121_PHY_PAGE, oldpage);
|
phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage);
|
||||||
|
|
||||||
err = phy_write(phydev, MII_BMCR, BMCR_RESET);
|
err = phy_write(phydev, MII_BMCR, BMCR_RESET);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@ -229,11 +312,11 @@ static int m88e1121_config_aneg(struct phy_device *phydev)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
oldpage = phy_read(phydev, MII_88E1121_PHY_PAGE);
|
oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE);
|
||||||
|
|
||||||
phy_write(phydev, MII_88E1121_PHY_PAGE, MII_88E1121_PHY_LED_PAGE);
|
phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_88E1121_PHY_LED_PAGE);
|
||||||
phy_write(phydev, MII_88E1121_PHY_LED_CTRL, MII_88E1121_PHY_LED_DEF);
|
phy_write(phydev, MII_88E1121_PHY_LED_CTRL, MII_88E1121_PHY_LED_DEF);
|
||||||
phy_write(phydev, MII_88E1121_PHY_PAGE, oldpage);
|
phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage);
|
||||||
|
|
||||||
err = genphy_config_aneg(phydev);
|
err = genphy_config_aneg(phydev);
|
||||||
|
|
||||||
@ -244,9 +327,9 @@ static int m88e1318_config_aneg(struct phy_device *phydev)
|
|||||||
{
|
{
|
||||||
int err, oldpage, mscr;
|
int err, oldpage, mscr;
|
||||||
|
|
||||||
oldpage = phy_read(phydev, MII_88E1121_PHY_PAGE);
|
oldpage = phy_read(phydev, MII_MARVELL_PHY_PAGE);
|
||||||
|
|
||||||
err = phy_write(phydev, MII_88E1121_PHY_PAGE,
|
err = phy_write(phydev, MII_MARVELL_PHY_PAGE,
|
||||||
MII_88E1121_PHY_MSCR_PAGE);
|
MII_88E1121_PHY_MSCR_PAGE);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
@ -258,7 +341,7 @@ static int m88e1318_config_aneg(struct phy_device *phydev)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = phy_write(phydev, MII_88E1121_PHY_PAGE, oldpage);
|
err = phy_write(phydev, MII_MARVELL_PHY_PAGE, oldpage);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@ -368,6 +451,9 @@ static int m88e1111_config_init(struct phy_device *phydev)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = marvell_of_reg_init(phydev);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
err = phy_write(phydev, MII_BMCR, BMCR_RESET);
|
err = phy_write(phydev, MII_BMCR, BMCR_RESET);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@ -398,7 +484,7 @@ static int m88e1118_config_init(struct phy_device *phydev)
|
|||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Change address */
|
/* Change address */
|
||||||
err = phy_write(phydev, 0x16, 0x0002);
|
err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0002);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@ -408,7 +494,7 @@ static int m88e1118_config_init(struct phy_device *phydev)
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
/* Change address */
|
/* Change address */
|
||||||
err = phy_write(phydev, 0x16, 0x0003);
|
err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0003);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@ -420,8 +506,42 @@ static int m88e1118_config_init(struct phy_device *phydev)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
err = marvell_of_reg_init(phydev);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
/* Reset address */
|
/* Reset address */
|
||||||
err = phy_write(phydev, 0x16, 0x0);
|
err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = phy_write(phydev, MII_BMCR, BMCR_RESET);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int m88e1149_config_init(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
/* Change address */
|
||||||
|
err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0002);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
/* Enable 1000 Mbit */
|
||||||
|
err = phy_write(phydev, 0x15, 0x1048);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = marvell_of_reg_init(phydev);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
/* Reset address */
|
||||||
|
err = phy_write(phydev, MII_MARVELL_PHY_PAGE, 0x0);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@ -491,6 +611,10 @@ static int m88e1145_config_init(struct phy_device *phydev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = marvell_of_reg_init(phydev);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -684,6 +808,19 @@ static struct phy_driver marvell_drivers[] = {
|
|||||||
.config_intr = &marvell_config_intr,
|
.config_intr = &marvell_config_intr,
|
||||||
.driver = { .owner = THIS_MODULE },
|
.driver = { .owner = THIS_MODULE },
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.phy_id = MARVELL_PHY_ID_88E1149R,
|
||||||
|
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
||||||
|
.name = "Marvell 88E1149R",
|
||||||
|
.features = PHY_GBIT_FEATURES,
|
||||||
|
.flags = PHY_HAS_INTERRUPT,
|
||||||
|
.config_init = &m88e1149_config_init,
|
||||||
|
.config_aneg = &m88e1118_config_aneg,
|
||||||
|
.read_status = &genphy_read_status,
|
||||||
|
.ack_interrupt = &marvell_ack_interrupt,
|
||||||
|
.config_intr = &marvell_config_intr,
|
||||||
|
.driver = { .owner = THIS_MODULE },
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.phy_id = MARVELL_PHY_ID_88E1240,
|
.phy_id = MARVELL_PHY_ID_88E1240,
|
||||||
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
||||||
@ -735,6 +872,7 @@ static struct mdio_device_id __maybe_unused marvell_tbl[] = {
|
|||||||
{ 0x01410e10, 0xfffffff0 },
|
{ 0x01410e10, 0xfffffff0 },
|
||||||
{ 0x01410cb0, 0xfffffff0 },
|
{ 0x01410cb0, 0xfffffff0 },
|
||||||
{ 0x01410cd0, 0xfffffff0 },
|
{ 0x01410cd0, 0xfffffff0 },
|
||||||
|
{ 0x01410e50, 0xfffffff0 },
|
||||||
{ 0x01410e30, 0xfffffff0 },
|
{ 0x01410e30, 0xfffffff0 },
|
||||||
{ 0x01410e90, 0xfffffff0 },
|
{ 0x01410e90, 0xfffffff0 },
|
||||||
{ }
|
{ }
|
||||||
|
@ -62,15 +62,15 @@ static const u32 default_msg =
|
|||||||
/* NETIF_MSG_PKTDATA | */
|
/* NETIF_MSG_PKTDATA | */
|
||||||
NETIF_MSG_HW | NETIF_MSG_WOL | 0;
|
NETIF_MSG_HW | NETIF_MSG_WOL | 0;
|
||||||
|
|
||||||
static int debug = 0x00007fff; /* defaults above */
|
static int debug = -1; /* defaults above */
|
||||||
module_param(debug, int, 0);
|
module_param(debug, int, 0664);
|
||||||
MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
|
MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
|
||||||
|
|
||||||
#define MSIX_IRQ 0
|
#define MSIX_IRQ 0
|
||||||
#define MSI_IRQ 1
|
#define MSI_IRQ 1
|
||||||
#define LEG_IRQ 2
|
#define LEG_IRQ 2
|
||||||
static int qlge_irq_type = MSIX_IRQ;
|
static int qlge_irq_type = MSIX_IRQ;
|
||||||
module_param(qlge_irq_type, int, MSIX_IRQ);
|
module_param(qlge_irq_type, int, 0664);
|
||||||
MODULE_PARM_DESC(qlge_irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy.");
|
MODULE_PARM_DESC(qlge_irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy.");
|
||||||
|
|
||||||
static int qlge_mpi_coredump;
|
static int qlge_mpi_coredump;
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#define MARVELL_PHY_ID_88E1118 0x01410e10
|
#define MARVELL_PHY_ID_88E1118 0x01410e10
|
||||||
#define MARVELL_PHY_ID_88E1121R 0x01410cb0
|
#define MARVELL_PHY_ID_88E1121R 0x01410cb0
|
||||||
#define MARVELL_PHY_ID_88E1145 0x01410cd0
|
#define MARVELL_PHY_ID_88E1145 0x01410cd0
|
||||||
|
#define MARVELL_PHY_ID_88E1149R 0x01410e50
|
||||||
#define MARVELL_PHY_ID_88E1240 0x01410e30
|
#define MARVELL_PHY_ID_88E1240 0x01410e30
|
||||||
#define MARVELL_PHY_ID_88E1318S 0x01410e90
|
#define MARVELL_PHY_ID_88E1318S 0x01410e90
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ struct ceph_buffer *ceph_buffer_new(size_t len, gfp_t gfp)
|
|||||||
if (b->vec.iov_base) {
|
if (b->vec.iov_base) {
|
||||||
b->is_vmalloc = false;
|
b->is_vmalloc = false;
|
||||||
} else {
|
} else {
|
||||||
b->vec.iov_base = __vmalloc(len, gfp, PAGE_KERNEL);
|
b->vec.iov_base = __vmalloc(len, gfp | __GFP_HIGHMEM, PAGE_KERNEL);
|
||||||
if (!b->vec.iov_base) {
|
if (!b->vec.iov_base) {
|
||||||
kfree(b);
|
kfree(b);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -45,9 +45,7 @@ int reqsk_queue_alloc(struct request_sock_queue *queue,
|
|||||||
nr_table_entries = roundup_pow_of_two(nr_table_entries + 1);
|
nr_table_entries = roundup_pow_of_two(nr_table_entries + 1);
|
||||||
lopt_size += nr_table_entries * sizeof(struct request_sock *);
|
lopt_size += nr_table_entries * sizeof(struct request_sock *);
|
||||||
if (lopt_size > PAGE_SIZE)
|
if (lopt_size > PAGE_SIZE)
|
||||||
lopt = __vmalloc(lopt_size,
|
lopt = vzalloc(lopt_size);
|
||||||
GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO,
|
|
||||||
PAGE_KERNEL);
|
|
||||||
else
|
else
|
||||||
lopt = kzalloc(lopt_size, GFP_KERNEL);
|
lopt = kzalloc(lopt_size, GFP_KERNEL);
|
||||||
if (lopt == NULL)
|
if (lopt == NULL)
|
||||||
|
@ -365,7 +365,7 @@ static struct tnode *tnode_alloc(size_t size)
|
|||||||
if (size <= PAGE_SIZE)
|
if (size <= PAGE_SIZE)
|
||||||
return kzalloc(size, GFP_KERNEL);
|
return kzalloc(size, GFP_KERNEL);
|
||||||
else
|
else
|
||||||
return __vmalloc(size, GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL);
|
return vzalloc(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __tnode_vfree(struct work_struct *arg)
|
static void __tnode_vfree(struct work_struct *arg)
|
||||||
|
@ -2758,13 +2758,13 @@ static int addrconf_ifdown(struct net_device *dev, int how)
|
|||||||
ifa->state = INET6_IFADDR_STATE_DEAD;
|
ifa->state = INET6_IFADDR_STATE_DEAD;
|
||||||
spin_unlock_bh(&ifa->state_lock);
|
spin_unlock_bh(&ifa->state_lock);
|
||||||
|
|
||||||
if (state == INET6_IFADDR_STATE_DEAD) {
|
if (state != INET6_IFADDR_STATE_DEAD) {
|
||||||
in6_ifa_put(ifa);
|
|
||||||
} else {
|
|
||||||
__ipv6_ifa_notify(RTM_DELADDR, ifa);
|
__ipv6_ifa_notify(RTM_DELADDR, ifa);
|
||||||
atomic_notifier_call_chain(&inet6addr_chain,
|
atomic_notifier_call_chain(&inet6addr_chain,
|
||||||
NETDEV_DOWN, ifa);
|
NETDEV_DOWN, ifa);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
in6_ifa_put(ifa);
|
||||||
write_lock_bh(&idev->lock);
|
write_lock_bh(&idev->lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ struct hlist_head *xfrm_hash_alloc(unsigned int sz)
|
|||||||
if (sz <= PAGE_SIZE)
|
if (sz <= PAGE_SIZE)
|
||||||
n = kzalloc(sz, GFP_KERNEL);
|
n = kzalloc(sz, GFP_KERNEL);
|
||||||
else if (hashdist)
|
else if (hashdist)
|
||||||
n = __vmalloc(sz, GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL);
|
n = vzalloc(sz);
|
||||||
else
|
else
|
||||||
n = (struct hlist_head *)
|
n = (struct hlist_head *)
|
||||||
__get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
|
__get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
|
||||||
|
Loading…
Reference in New Issue
Block a user