Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 130552
b: refs/heads/master
c: 012703e
h: refs/heads/master
v: v3
  • Loading branch information
Ralf Baechle committed Jan 30, 2009
1 parent 71d1176 commit 35e9e02
Show file tree
Hide file tree
Showing 25 changed files with 359 additions and 345 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 878b8619f711280fd05845e21956434b5e588cc4
refs/heads/master: 012703e0fc9fb1d6cdf778c49f45b796a85ef5bc
3 changes: 2 additions & 1 deletion trunk/arch/mips/kernel/mips-mt-fpaff.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ asmlinkage long mipsmt_sys_sched_setaffinity(pid_t pid, unsigned int len,

euid = current_euid();
retval = -EPERM;
if (euid != p->euid && euid != p->uid && !capable(CAP_SYS_NICE)) {
if (euid != p->cred->euid && euid != p->cred->uid &&
!capable(CAP_SYS_NICE)) {
read_unlock(&tasklist_lock);
goto out_unlock;
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/char/selection.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ int set_selection(const struct tiocl_selection __user *sel, struct tty_struct *t

/* Allocate a new buffer before freeing the old one ... */
multiplier = use_unicode ? 3 : 1; /* chars can take up to 3 bytes */
bp = kmalloc(((sel_end-sel_start)/2+1)*multiplier, GFP_KERNEL);
bp = kmalloc((sel_end-sel_start)/2*multiplier+1, GFP_KERNEL);
if (!bp) {
printk(KERN_WARNING "selection: kmalloc() failed\n");
clear_selection();
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/gpu/drm/drm_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ drm_gem_object_alloc(struct drm_device *dev, size_t size)
obj = kcalloc(1, sizeof(*obj), GFP_KERNEL);

obj->dev = dev;
obj->filp = shmem_file_setup("drm mm object", size, VM_NORESERVE);
obj->filp = shmem_file_setup("drm mm object", size, 0);
if (IS_ERR(obj->filp)) {
kfree(obj);
return NULL;
Expand Down
11 changes: 2 additions & 9 deletions trunk/drivers/net/igb/e1000_82575.c
Original file line number Diff line number Diff line change
Expand Up @@ -699,18 +699,11 @@ static s32 igb_check_for_link_82575(struct e1000_hw *hw)

/* SGMII link check is done through the PCS register. */
if ((hw->phy.media_type != e1000_media_type_copper) ||
(igb_sgmii_active_82575(hw))) {
(igb_sgmii_active_82575(hw)))
ret_val = igb_get_pcs_speed_and_duplex_82575(hw, &speed,
&duplex);
/*
* Use this flag to determine if link needs to be checked or
* not. If we have link clear the flag so that we do not
* continue to check for link.
*/
hw->mac.get_link_status = !hw->mac.serdes_has_link;
} else {
else
ret_val = igb_check_for_copper_link(hw);
}

return ret_val;
}
Expand Down
9 changes: 5 additions & 4 deletions trunk/drivers/net/igb/igb.h
Original file line number Diff line number Diff line change
Expand Up @@ -300,10 +300,11 @@ struct igb_adapter {

#define IGB_FLAG_HAS_MSI (1 << 0)
#define IGB_FLAG_MSI_ENABLE (1 << 1)
#define IGB_FLAG_DCA_ENABLED (1 << 2)
#define IGB_FLAG_IN_NETPOLL (1 << 3)
#define IGB_FLAG_QUAD_PORT_A (1 << 4)
#define IGB_FLAG_NEED_CTX_IDX (1 << 5)
#define IGB_FLAG_HAS_DCA (1 << 2)
#define IGB_FLAG_DCA_ENABLED (1 << 3)
#define IGB_FLAG_IN_NETPOLL (1 << 5)
#define IGB_FLAG_QUAD_PORT_A (1 << 6)
#define IGB_FLAG_NEED_CTX_IDX (1 << 7)

enum e1000_state_t {
__IGB_TESTING,
Expand Down
24 changes: 14 additions & 10 deletions trunk/drivers/net/igb/igb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,11 +206,10 @@ static int __init igb_init_module(void)

global_quad_port_a = 0;

ret = pci_register_driver(&igb_driver);
#ifdef CONFIG_IGB_DCA
dca_register_notify(&dca_notifier);
#endif

ret = pci_register_driver(&igb_driver);
return ret;
}

Expand Down Expand Up @@ -1157,10 +1156,11 @@ static int __devinit igb_probe(struct pci_dev *pdev,

/* set flags */
switch (hw->mac.type) {
case e1000_82576:
case e1000_82575:
adapter->flags |= IGB_FLAG_HAS_DCA;
adapter->flags |= IGB_FLAG_NEED_CTX_IDX;
break;
case e1000_82576:
default:
break;
}
Expand Down Expand Up @@ -1310,7 +1310,8 @@ static int __devinit igb_probe(struct pci_dev *pdev,
goto err_register;

#ifdef CONFIG_IGB_DCA
if (dca_add_requester(&pdev->dev) == 0) {
if ((adapter->flags & IGB_FLAG_HAS_DCA) &&
(dca_add_requester(&pdev->dev) == 0)) {
adapter->flags |= IGB_FLAG_DCA_ENABLED;
dev_info(&pdev->dev, "DCA enabled\n");
/* Always use CB2 mode, difference is masked
Expand Down Expand Up @@ -1834,11 +1835,11 @@ static void igb_setup_rctl(struct igb_adapter *adapter)
rctl |= E1000_RCTL_SECRC;

/*
* disable store bad packets and clear size bits.
* disable store bad packets, long packet enable, and clear size bits.
*/
rctl &= ~(E1000_RCTL_SBP | E1000_RCTL_SZ_256);
rctl &= ~(E1000_RCTL_SBP | E1000_RCTL_LPE | E1000_RCTL_SZ_256);

/* enable LPE when to prevent packets larger than max_frame_size */
if (adapter->netdev->mtu > ETH_DATA_LEN)
rctl |= E1000_RCTL_LPE;

/* Setup buffer sizes */
Expand All @@ -1864,7 +1865,7 @@ static void igb_setup_rctl(struct igb_adapter *adapter)
*/
/* allocations using alloc_page take too long for regular MTU
* so only enable packet split for jumbo frames */
if (adapter->netdev->mtu > ETH_DATA_LEN) {
if (rctl & E1000_RCTL_LPE) {
adapter->rx_ps_hdr_size = IGB_RXBUFFER_128;
srrctl |= adapter->rx_ps_hdr_size <<
E1000_SRRCTL_BSIZEHDRSIZE_SHIFT;
Expand Down Expand Up @@ -3472,16 +3473,19 @@ static int __igb_notify_dca(struct device *dev, void *data)
struct e1000_hw *hw = &adapter->hw;
unsigned long event = *(unsigned long *)data;

if (!(adapter->flags & IGB_FLAG_HAS_DCA))
goto out;

switch (event) {
case DCA_PROVIDER_ADD:
/* if already enabled, don't do it again */
if (adapter->flags & IGB_FLAG_DCA_ENABLED)
break;
adapter->flags |= IGB_FLAG_DCA_ENABLED;
/* Always use CB2 mode, difference is masked
* in the CB driver. */
wr32(E1000_DCA_CTRL, 2);
if (dca_add_requester(dev) == 0) {
adapter->flags |= IGB_FLAG_DCA_ENABLED;
dev_info(&adapter->pdev->dev, "DCA enabled\n");
igb_setup_dca(adapter);
break;
Expand All @@ -3498,7 +3502,7 @@ static int __igb_notify_dca(struct device *dev, void *data)
}
break;
}

out:
return 0;
}

Expand Down
59 changes: 18 additions & 41 deletions trunk/drivers/net/sfc/efx.c
Original file line number Diff line number Diff line change
Expand Up @@ -676,16 +676,17 @@ static int efx_init_port(struct efx_nic *efx)
rc = efx->phy_op->init(efx);
if (rc)
return rc;
mutex_lock(&efx->mac_lock);
efx->phy_op->reconfigure(efx);

mutex_lock(&efx->mac_lock);
rc = falcon_switch_mac(efx);
mutex_unlock(&efx->mac_lock);
if (rc)
goto fail;
efx->mac_op->reconfigure(efx);

efx->port_initialized = true;
efx_stats_enable(efx);
efx->stats_enabled = true;
return 0;

fail:
Expand Down Expand Up @@ -734,7 +735,6 @@ static void efx_fini_port(struct efx_nic *efx)
if (!efx->port_initialized)
return;

efx_stats_disable(efx);
efx->phy_op->fini(efx);
efx->port_initialized = false;

Expand Down Expand Up @@ -1361,20 +1361,6 @@ static int efx_net_stop(struct net_device *net_dev)
return 0;
}

void efx_stats_disable(struct efx_nic *efx)
{
spin_lock(&efx->stats_lock);
++efx->stats_disable_count;
spin_unlock(&efx->stats_lock);
}

void efx_stats_enable(struct efx_nic *efx)
{
spin_lock(&efx->stats_lock);
--efx->stats_disable_count;
spin_unlock(&efx->stats_lock);
}

/* Context: process, dev_base_lock or RTNL held, non-blocking. */
static struct net_device_stats *efx_net_stats(struct net_device *net_dev)
{
Expand All @@ -1383,12 +1369,12 @@ static struct net_device_stats *efx_net_stats(struct net_device *net_dev)
struct net_device_stats *stats = &net_dev->stats;

/* Update stats if possible, but do not wait if another thread
* is updating them or if MAC stats fetches are temporarily
* disabled; slightly stale stats are acceptable.
* is updating them (or resetting the NIC); slightly stale
* stats are acceptable.
*/
if (!spin_trylock(&efx->stats_lock))
return stats;
if (!efx->stats_disable_count) {
if (efx->stats_enabled) {
efx->mac_op->update_stats(efx);
falcon_update_nic_stats(efx);
}
Expand Down Expand Up @@ -1636,30 +1622,31 @@ static void efx_unregister_netdev(struct efx_nic *efx)

/* Tears down the entire software state and most of the hardware state
* before reset. */
void efx_reset_down(struct efx_nic *efx, enum reset_type method,
struct ethtool_cmd *ecmd)
void efx_reset_down(struct efx_nic *efx, struct ethtool_cmd *ecmd)
{
EFX_ASSERT_RESET_SERIALISED(efx);

efx_stats_disable(efx);
/* The net_dev->get_stats handler is quite slow, and will fail
* if a fetch is pending over reset. Serialise against it. */
spin_lock(&efx->stats_lock);
efx->stats_enabled = false;
spin_unlock(&efx->stats_lock);

efx_stop_all(efx);
mutex_lock(&efx->mac_lock);
mutex_lock(&efx->spi_lock);

efx->phy_op->get_settings(efx, ecmd);

efx_fini_channels(efx);
if (efx->port_initialized && method != RESET_TYPE_INVISIBLE)
efx->phy_op->fini(efx);
}

/* This function will always ensure that the locks acquired in
* efx_reset_down() are released. A failure return code indicates
* that we were unable to reinitialise the hardware, and the
* driver should be disabled. If ok is false, then the rx and tx
* engines are not restarted, pending a RESET_DISABLE. */
int efx_reset_up(struct efx_nic *efx, enum reset_type method,
struct ethtool_cmd *ecmd, bool ok)
int efx_reset_up(struct efx_nic *efx, struct ethtool_cmd *ecmd, bool ok)
{
int rc;

Expand All @@ -1671,15 +1658,6 @@ int efx_reset_up(struct efx_nic *efx, enum reset_type method,
ok = false;
}

if (efx->port_initialized && method != RESET_TYPE_INVISIBLE) {
if (ok) {
rc = efx->phy_op->init(efx);
if (rc)
ok = false;
} else
efx->port_initialized = false;
}

if (ok) {
efx_init_channels(efx);

Expand All @@ -1692,7 +1670,7 @@ int efx_reset_up(struct efx_nic *efx, enum reset_type method,

if (ok) {
efx_start_all(efx);
efx_stats_enable(efx);
efx->stats_enabled = true;
}
return rc;
}
Expand Down Expand Up @@ -1724,7 +1702,7 @@ static int efx_reset(struct efx_nic *efx)

EFX_INFO(efx, "resetting (%d)\n", method);

efx_reset_down(efx, method, &ecmd);
efx_reset_down(efx, &ecmd);

rc = falcon_reset_hw(efx, method);
if (rc) {
Expand All @@ -1743,10 +1721,10 @@ static int efx_reset(struct efx_nic *efx)

/* Leave device stopped if necessary */
if (method == RESET_TYPE_DISABLE) {
efx_reset_up(efx, method, &ecmd, false);
efx_reset_up(efx, &ecmd, false);
rc = -EIO;
} else {
rc = efx_reset_up(efx, method, &ecmd, true);
rc = efx_reset_up(efx, &ecmd, true);
}

out_disable:
Expand Down Expand Up @@ -1898,7 +1876,6 @@ static int efx_init_struct(struct efx_nic *efx, struct efx_nic_type *type,
efx->rx_checksum_enabled = true;
spin_lock_init(&efx->netif_stop_lock);
spin_lock_init(&efx->stats_lock);
efx->stats_disable_count = 1;
mutex_init(&efx->mac_lock);
efx->mac_op = &efx_dummy_mac_operations;
efx->phy_op = &efx_dummy_phy_operations;
Expand Down
9 changes: 3 additions & 6 deletions trunk/drivers/net/sfc/efx.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,13 @@ extern void efx_process_channel_now(struct efx_channel *channel);
extern void efx_flush_queues(struct efx_nic *efx);

/* Ports */
extern void efx_stats_disable(struct efx_nic *efx);
extern void efx_stats_enable(struct efx_nic *efx);
extern void efx_reconfigure_port(struct efx_nic *efx);
extern void __efx_reconfigure_port(struct efx_nic *efx);

/* Reset handling */
extern void efx_reset_down(struct efx_nic *efx, enum reset_type method,
struct ethtool_cmd *ecmd);
extern int efx_reset_up(struct efx_nic *efx, enum reset_type method,
struct ethtool_cmd *ecmd, bool ok);
extern void efx_reset_down(struct efx_nic *efx, struct ethtool_cmd *ecmd);
extern int efx_reset_up(struct efx_nic *efx, struct ethtool_cmd *ecmd,
bool ok);

/* Global */
extern void efx_schedule_reset(struct efx_nic *efx, enum reset_type type);
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/net/sfc/ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,9 @@ int efx_ethtool_set_settings(struct net_device *net_dev,
struct efx_nic *efx = netdev_priv(net_dev);
int rc;

if (EFX_WORKAROUND_13963(efx) && !ecmd->autoneg)
return -EINVAL;

/* Falcon GMAC does not support 1000Mbps HD */
if (ecmd->speed == SPEED_1000 && ecmd->duplex != DUPLEX_FULL) {
EFX_LOG(efx, "rejecting unsupported 1000Mbps HD"
Expand Down
Loading

0 comments on commit 35e9e02

Please sign in to comment.