mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/ieee802154/fakehard.c drivers/net/e1000e/ich8lan.c drivers/net/e1000e/phy.c drivers/net/netxen/netxen_nic_init.c drivers/net/wireless/ath/ath9k/main.c
This commit is contained in:
commit
9b963e5d0e
31 changed files with 297 additions and 260 deletions
|
|
@ -364,6 +364,7 @@ struct pktgen_dev {
|
|||
* device name (not when the inject is
|
||||
* started as it used to do.)
|
||||
*/
|
||||
char odevname[32];
|
||||
struct flow_state *flows;
|
||||
unsigned cflows; /* Concurrent flows (config) */
|
||||
unsigned lflow; /* Flow length (config) */
|
||||
|
|
@ -427,7 +428,7 @@ static const char version[] =
|
|||
static int pktgen_remove_device(struct pktgen_thread *t, struct pktgen_dev *i);
|
||||
static int pktgen_add_device(struct pktgen_thread *t, const char *ifname);
|
||||
static struct pktgen_dev *pktgen_find_dev(struct pktgen_thread *t,
|
||||
const char *ifname);
|
||||
const char *ifname, bool exact);
|
||||
static int pktgen_device_event(struct notifier_block *, unsigned long, void *);
|
||||
static void pktgen_run_all_threads(void);
|
||||
static void pktgen_reset_all_threads(void);
|
||||
|
|
@ -529,7 +530,7 @@ static int pktgen_if_show(struct seq_file *seq, void *v)
|
|||
seq_printf(seq,
|
||||
" frags: %d delay: %llu clone_skb: %d ifname: %s\n",
|
||||
pkt_dev->nfrags, (unsigned long long) pkt_dev->delay,
|
||||
pkt_dev->clone_skb, pkt_dev->odev->name);
|
||||
pkt_dev->clone_skb, pkt_dev->odevname);
|
||||
|
||||
seq_printf(seq, " flows: %u flowlen: %u\n", pkt_dev->cflows,
|
||||
pkt_dev->lflow);
|
||||
|
|
@ -1689,13 +1690,13 @@ static int pktgen_thread_show(struct seq_file *seq, void *v)
|
|||
if_lock(t);
|
||||
list_for_each_entry(pkt_dev, &t->if_list, list)
|
||||
if (pkt_dev->running)
|
||||
seq_printf(seq, "%s ", pkt_dev->odev->name);
|
||||
seq_printf(seq, "%s ", pkt_dev->odevname);
|
||||
|
||||
seq_printf(seq, "\nStopped: ");
|
||||
|
||||
list_for_each_entry(pkt_dev, &t->if_list, list)
|
||||
if (!pkt_dev->running)
|
||||
seq_printf(seq, "%s ", pkt_dev->odev->name);
|
||||
seq_printf(seq, "%s ", pkt_dev->odevname);
|
||||
|
||||
if (t->result[0])
|
||||
seq_printf(seq, "\nResult: %s\n", t->result);
|
||||
|
|
@ -1818,9 +1819,10 @@ static struct pktgen_dev *__pktgen_NN_threads(const char *ifname, int remove)
|
|||
{
|
||||
struct pktgen_thread *t;
|
||||
struct pktgen_dev *pkt_dev = NULL;
|
||||
bool exact = (remove == FIND);
|
||||
|
||||
list_for_each_entry(t, &pktgen_threads, th_list) {
|
||||
pkt_dev = pktgen_find_dev(t, ifname);
|
||||
pkt_dev = pktgen_find_dev(t, ifname, exact);
|
||||
if (pkt_dev) {
|
||||
if (remove) {
|
||||
if_lock(t);
|
||||
|
|
@ -1995,7 +1997,7 @@ static void pktgen_setup_inject(struct pktgen_dev *pkt_dev)
|
|||
"queue_map_min (zero-based) (%d) exceeds valid range "
|
||||
"[0 - %d] for (%d) queues on %s, resetting\n",
|
||||
pkt_dev->queue_map_min, (ntxq ?: 1) - 1, ntxq,
|
||||
pkt_dev->odev->name);
|
||||
pkt_dev->odevname);
|
||||
pkt_dev->queue_map_min = ntxq - 1;
|
||||
}
|
||||
if (pkt_dev->queue_map_max >= ntxq) {
|
||||
|
|
@ -2003,7 +2005,7 @@ static void pktgen_setup_inject(struct pktgen_dev *pkt_dev)
|
|||
"queue_map_max (zero-based) (%d) exceeds valid range "
|
||||
"[0 - %d] for (%d) queues on %s, resetting\n",
|
||||
pkt_dev->queue_map_max, (ntxq ?: 1) - 1, ntxq,
|
||||
pkt_dev->odev->name);
|
||||
pkt_dev->odevname);
|
||||
pkt_dev->queue_map_max = ntxq - 1;
|
||||
}
|
||||
|
||||
|
|
@ -3263,7 +3265,7 @@ static int pktgen_stop_device(struct pktgen_dev *pkt_dev)
|
|||
|
||||
if (!pkt_dev->running) {
|
||||
printk(KERN_WARNING "pktgen: interface: %s is already "
|
||||
"stopped\n", pkt_dev->odev->name);
|
||||
"stopped\n", pkt_dev->odevname);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
@ -3467,7 +3469,7 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev)
|
|||
default: /* Drivers are not supposed to return other values! */
|
||||
if (net_ratelimit())
|
||||
pr_info("pktgen: %s xmit error: %d\n",
|
||||
odev->name, ret);
|
||||
pkt_dev->odevname, ret);
|
||||
pkt_dev->errors++;
|
||||
/* fallthru */
|
||||
case NETDEV_TX_LOCKED:
|
||||
|
|
@ -3570,13 +3572,18 @@ static int pktgen_thread_worker(void *arg)
|
|||
}
|
||||
|
||||
static struct pktgen_dev *pktgen_find_dev(struct pktgen_thread *t,
|
||||
const char *ifname)
|
||||
const char *ifname, bool exact)
|
||||
{
|
||||
struct pktgen_dev *p, *pkt_dev = NULL;
|
||||
if_lock(t);
|
||||
size_t len = strlen(ifname);
|
||||
|
||||
if_lock(t);
|
||||
list_for_each_entry(p, &t->if_list, list)
|
||||
if (strncmp(p->odev->name, ifname, IFNAMSIZ) == 0) {
|
||||
if (strncmp(p->odevname, ifname, len) == 0) {
|
||||
if (p->odevname[len]) {
|
||||
if (exact || p->odevname[len] != '@')
|
||||
continue;
|
||||
}
|
||||
pkt_dev = p;
|
||||
break;
|
||||
}
|
||||
|
|
@ -3632,6 +3639,7 @@ static int pktgen_add_device(struct pktgen_thread *t, const char *ifname)
|
|||
if (!pkt_dev)
|
||||
return -ENOMEM;
|
||||
|
||||
strcpy(pkt_dev->odevname, ifname);
|
||||
pkt_dev->flows = vmalloc(MAX_CFLOWS * sizeof(struct flow_state));
|
||||
if (pkt_dev->flows == NULL) {
|
||||
kfree(pkt_dev);
|
||||
|
|
|
|||
|
|
@ -175,12 +175,14 @@ static void sta_addba_resp_timer_expired(unsigned long data)
|
|||
|
||||
/* check if the TID waits for addBA response */
|
||||
spin_lock_bh(&sta->lock);
|
||||
if (!(*state & HT_ADDBA_REQUESTED_MSK)) {
|
||||
if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK)) !=
|
||||
HT_ADDBA_REQUESTED_MSK) {
|
||||
spin_unlock_bh(&sta->lock);
|
||||
*state = HT_AGG_STATE_IDLE;
|
||||
#ifdef CONFIG_MAC80211_HT_DEBUG
|
||||
printk(KERN_DEBUG "timer expired on tid %d but we are not "
|
||||
"expecting addBA response there", tid);
|
||||
"(or no longer) expecting addBA response there",
|
||||
tid);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
|
@ -649,21 +651,21 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
|
|||
|
||||
state = &sta->ampdu_mlme.tid_state_tx[tid];
|
||||
|
||||
del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
|
||||
|
||||
spin_lock_bh(&sta->lock);
|
||||
|
||||
if (!(*state & HT_ADDBA_REQUESTED_MSK))
|
||||
goto timer_still_needed;
|
||||
goto out;
|
||||
|
||||
if (mgmt->u.action.u.addba_resp.dialog_token !=
|
||||
sta->ampdu_mlme.tid_tx[tid]->dialog_token) {
|
||||
#ifdef CONFIG_MAC80211_HT_DEBUG
|
||||
printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid);
|
||||
#endif /* CONFIG_MAC80211_HT_DEBUG */
|
||||
goto timer_still_needed;
|
||||
goto out;
|
||||
}
|
||||
|
||||
del_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
|
||||
|
||||
#ifdef CONFIG_MAC80211_HT_DEBUG
|
||||
printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid);
|
||||
#endif /* CONFIG_MAC80211_HT_DEBUG */
|
||||
|
|
@ -682,10 +684,6 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
|
|||
___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR);
|
||||
}
|
||||
|
||||
goto out;
|
||||
|
||||
timer_still_needed:
|
||||
add_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
|
||||
out:
|
||||
spin_unlock_bh(&sta->lock);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -600,6 +600,14 @@ struct ieee80211_local {
|
|||
*/
|
||||
bool suspended;
|
||||
|
||||
/*
|
||||
* Resuming is true while suspended, but when we're reprogramming the
|
||||
* hardware -- at that time it's allowed to use ieee80211_queue_work()
|
||||
* again even though some other parts of the stack are still suspended
|
||||
* and we still drop received frames to avoid waking the stack.
|
||||
*/
|
||||
bool resuming;
|
||||
|
||||
/*
|
||||
* quiescing is true during the suspend process _only_ to
|
||||
* ease timer cancelling etc.
|
||||
|
|
|
|||
|
|
@ -520,9 +520,9 @@ EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic);
|
|||
*/
|
||||
static bool ieee80211_can_queue_work(struct ieee80211_local *local)
|
||||
{
|
||||
if (WARN(local->suspended, "queueing ieee80211 work while "
|
||||
"going to suspend\n"))
|
||||
return false;
|
||||
if (WARN(local->suspended && !local->resuming,
|
||||
"queueing ieee80211 work while going to suspend\n"))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1033,13 +1033,9 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|||
struct sta_info *sta;
|
||||
unsigned long flags;
|
||||
int res;
|
||||
bool from_suspend = local->suspended;
|
||||
|
||||
/*
|
||||
* We're going to start the hardware, at that point
|
||||
* we are no longer suspended and can RX frames.
|
||||
*/
|
||||
local->suspended = false;
|
||||
if (local->suspended)
|
||||
local->resuming = true;
|
||||
|
||||
/* restart hardware */
|
||||
if (local->open_count) {
|
||||
|
|
@ -1137,11 +1133,14 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|||
* If this is for hw restart things are still running.
|
||||
* We may want to change that later, however.
|
||||
*/
|
||||
if (!from_suspend)
|
||||
if (!local->suspended)
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/* first set suspended false, then resuming */
|
||||
local->suspended = false;
|
||||
mb();
|
||||
local->resuming = false;
|
||||
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
switch(sdata->vif.type) {
|
||||
|
|
|
|||
|
|
@ -128,9 +128,8 @@ EXPORT_SYMBOL(nf_log_packet);
|
|||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
static void *seq_start(struct seq_file *seq, loff_t *pos)
|
||||
__acquires(RCU)
|
||||
{
|
||||
rcu_read_lock();
|
||||
mutex_lock(&nf_log_mutex);
|
||||
|
||||
if (*pos >= ARRAY_SIZE(nf_loggers))
|
||||
return NULL;
|
||||
|
|
@ -149,9 +148,8 @@ static void *seq_next(struct seq_file *s, void *v, loff_t *pos)
|
|||
}
|
||||
|
||||
static void seq_stop(struct seq_file *s, void *v)
|
||||
__releases(RCU)
|
||||
{
|
||||
rcu_read_unlock();
|
||||
mutex_unlock(&nf_log_mutex);
|
||||
}
|
||||
|
||||
static int seq_show(struct seq_file *s, void *v)
|
||||
|
|
@ -161,7 +159,7 @@ static int seq_show(struct seq_file *s, void *v)
|
|||
struct nf_logger *t;
|
||||
int ret;
|
||||
|
||||
logger = rcu_dereference(nf_loggers[*pos]);
|
||||
logger = nf_loggers[*pos];
|
||||
|
||||
if (!logger)
|
||||
ret = seq_printf(s, "%2lld NONE (", *pos);
|
||||
|
|
@ -171,22 +169,16 @@ static int seq_show(struct seq_file *s, void *v)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
mutex_lock(&nf_log_mutex);
|
||||
list_for_each_entry(t, &nf_loggers_l[*pos], list[*pos]) {
|
||||
ret = seq_printf(s, "%s", t->name);
|
||||
if (ret < 0) {
|
||||
mutex_unlock(&nf_log_mutex);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
if (&t->list[*pos] != nf_loggers_l[*pos].prev) {
|
||||
ret = seq_printf(s, ",");
|
||||
if (ret < 0) {
|
||||
mutex_unlock(&nf_log_mutex);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
mutex_unlock(&nf_log_mutex);
|
||||
|
||||
return seq_printf(s, ")\n");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ static bool limit_mt_check(const struct xt_mtchk_param *par)
|
|||
|
||||
priv = kmalloc(sizeof(*priv), GFP_KERNEL);
|
||||
if (priv == NULL)
|
||||
return -ENOMEM;
|
||||
return false;
|
||||
|
||||
/* For SMP, we only want to use one set of state. */
|
||||
r->master = priv;
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ static int xt_osf_remove_callback(struct sock *ctnl, struct sk_buff *skb,
|
|||
{
|
||||
struct xt_osf_user_finger *f;
|
||||
struct xt_osf_finger *sf;
|
||||
int err = ENOENT;
|
||||
int err = -ENOENT;
|
||||
|
||||
if (!osf_attrs[OSF_ATTR_FINGER])
|
||||
return -EINVAL;
|
||||
|
|
|
|||
|
|
@ -1191,6 +1191,7 @@ static long rfkill_fop_ioctl(struct file *file, unsigned int cmd,
|
|||
#endif
|
||||
|
||||
static const struct file_operations rfkill_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = rfkill_fop_open,
|
||||
.read = rfkill_fop_read,
|
||||
.write = rfkill_fop_write,
|
||||
|
|
|
|||
|
|
@ -423,16 +423,6 @@ void sctp_retransmit_mark(struct sctp_outq *q,
|
|||
if ((reason == SCTP_RTXR_FAST_RTX &&
|
||||
(chunk->fast_retransmit == SCTP_NEED_FRTX)) ||
|
||||
(reason != SCTP_RTXR_FAST_RTX && !chunk->tsn_gap_acked)) {
|
||||
/* If this chunk was sent less then 1 rto ago, do not
|
||||
* retransmit this chunk, but give the peer time
|
||||
* to acknowlege it. Do this only when
|
||||
* retransmitting due to T3 timeout.
|
||||
*/
|
||||
if (reason == SCTP_RTXR_T3_RTX &&
|
||||
time_before(jiffies, chunk->sent_at +
|
||||
transport->last_rto))
|
||||
continue;
|
||||
|
||||
/* RFC 2960 6.2.1 Processing a Received SACK
|
||||
*
|
||||
* C) Any time a DATA chunk is marked for
|
||||
|
|
|
|||
|
|
@ -479,7 +479,6 @@ static void sctp_do_8_2_transport_strike(struct sctp_association *asoc,
|
|||
* that indicates that we have an outstanding HB.
|
||||
*/
|
||||
if (!is_hb || transport->hb_sent) {
|
||||
transport->last_rto = transport->rto;
|
||||
transport->rto = min((transport->rto * 2), transport->asoc->rto_max);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer,
|
|||
* given destination transport address, set RTO to the protocol
|
||||
* parameter 'RTO.Initial'.
|
||||
*/
|
||||
peer->last_rto = peer->rto = msecs_to_jiffies(sctp_rto_initial);
|
||||
peer->rto = msecs_to_jiffies(sctp_rto_initial);
|
||||
peer->rtt = 0;
|
||||
peer->rttvar = 0;
|
||||
peer->srtt = 0;
|
||||
|
|
@ -385,7 +385,6 @@ void sctp_transport_update_rto(struct sctp_transport *tp, __u32 rtt)
|
|||
tp->rto = tp->asoc->rto_max;
|
||||
|
||||
tp->rtt = rtt;
|
||||
tp->last_rto = tp->rto;
|
||||
|
||||
/* Reset rto_pending so that a new RTT measurement is started when a
|
||||
* new data chunk is sent.
|
||||
|
|
@ -637,7 +636,7 @@ void sctp_transport_reset(struct sctp_transport *t)
|
|||
t->cwnd = min(4*asoc->pathmtu, max_t(__u32, 2*asoc->pathmtu, 4380));
|
||||
t->burst_limited = 0;
|
||||
t->ssthresh = asoc->peer.i.a_rwnd;
|
||||
t->last_rto = t->rto = asoc->rto_initial;
|
||||
t->rto = asoc->rto_initial;
|
||||
t->rtt = 0;
|
||||
t->srtt = 0;
|
||||
t->rttvar = 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue