You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
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: (29 commits) drivers/net: Correct NULL test MAINTAINERS: networking drivers - Add git net-next tree net/sched: Fix module name in Kconfig cxgb3: fix GRO checksum check dst: call cond_resched() in dst_gc_task() netfilter: nf_conntrack: fix hash resizing with namespaces netfilter: xtables: compat out of scope fix netfilter: nf_conntrack: restrict runtime expect hashsize modifications netfilter: nf_conntrack: per netns nf_conntrack_cachep netfilter: nf_conntrack: fix memory corruption with multiple namespaces Bluetooth: Keep a copy of each HID device's report descriptor pktgen: Fix freezing problem igb: make certain to reassign legacy interrupt vectors after reset irda: add missing BKL in irnet_ppp ioctl irda: unbalanced lock_kernel in irnet_ppp ixgbe: Fix return of invalid txq ixgbe: Fix ixgbe_tx_map error path netxen: protect resource cleanup by rtnl lock netxen: fix tx timeout recovery for NX2031 chip Bluetooth: Enter active mode before establishing a SCO link. ...
This commit is contained in:
@@ -3836,6 +3836,7 @@ NETWORKING DRIVERS
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://www.linuxfoundation.org/en/Net
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git
|
||||
S: Odd Fixes
|
||||
F: drivers/net/
|
||||
F: include/linux/if_*
|
||||
|
||||
@@ -808,6 +808,7 @@ static int btmrvl_sdio_host_to_card(struct btmrvl_private *priv,
|
||||
|
||||
exit:
|
||||
sdio_release_host(card->func);
|
||||
kfree(tmpbuf);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -921,7 +921,7 @@ static int ax_probe(struct platform_device *pdev)
|
||||
size = (res->end - res->start) + 1;
|
||||
|
||||
ax->mem2 = request_mem_region(res->start, size, pdev->name);
|
||||
if (ax->mem == NULL) {
|
||||
if (ax->mem2 == NULL) {
|
||||
dev_err(&pdev->dev, "cannot reserve registers\n");
|
||||
ret = -ENXIO;
|
||||
goto exit_mem1;
|
||||
|
||||
+12
-8
@@ -2079,6 +2079,7 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs,
|
||||
struct sge_fl *fl, int len, int complete)
|
||||
{
|
||||
struct rx_sw_desc *sd = &fl->sdesc[fl->cidx];
|
||||
struct port_info *pi = netdev_priv(qs->netdev);
|
||||
struct sk_buff *skb = NULL;
|
||||
struct cpl_rx_pkt *cpl;
|
||||
struct skb_frag_struct *rx_frag;
|
||||
@@ -2116,11 +2117,18 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs,
|
||||
|
||||
if (!nr_frags) {
|
||||
offset = 2 + sizeof(struct cpl_rx_pkt);
|
||||
qs->lro_va = sd->pg_chunk.va + 2;
|
||||
}
|
||||
len -= offset;
|
||||
cpl = qs->lro_va = sd->pg_chunk.va + 2;
|
||||
|
||||
prefetch(qs->lro_va);
|
||||
if ((pi->rx_offload & T3_RX_CSUM) &&
|
||||
cpl->csum_valid && cpl->csum == htons(0xffff)) {
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
qs->port_stats[SGE_PSTAT_RX_CSUM_GOOD]++;
|
||||
} else
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
} else
|
||||
cpl = qs->lro_va;
|
||||
|
||||
len -= offset;
|
||||
|
||||
rx_frag += nr_frags;
|
||||
rx_frag->page = sd->pg_chunk.page;
|
||||
@@ -2136,12 +2144,8 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs,
|
||||
return;
|
||||
|
||||
skb_record_rx_queue(skb, qs - &adap->sge.qs[0]);
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
cpl = qs->lro_va;
|
||||
|
||||
if (unlikely(cpl->vlan_valid)) {
|
||||
struct net_device *dev = qs->netdev;
|
||||
struct port_info *pi = netdev_priv(dev);
|
||||
struct vlan_group *grp = pi->vlan_grp;
|
||||
|
||||
if (likely(grp != NULL)) {
|
||||
|
||||
@@ -421,6 +421,8 @@ static void igb_assign_vector(struct igb_q_vector *q_vector, int msix_vector)
|
||||
msixbm = E1000_EICR_RX_QUEUE0 << rx_queue;
|
||||
if (tx_queue > IGB_N0_QUEUE)
|
||||
msixbm |= E1000_EICR_TX_QUEUE0 << tx_queue;
|
||||
if (!adapter->msix_entries && msix_vector == 0)
|
||||
msixbm |= E1000_EIMS_OTHER;
|
||||
array_wr32(E1000_MSIXBM(0), msix_vector, msixbm);
|
||||
q_vector->eims_value = msixbm;
|
||||
break;
|
||||
@@ -877,7 +879,6 @@ static int igb_request_irq(struct igb_adapter *adapter)
|
||||
{
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
int err = 0;
|
||||
|
||||
if (adapter->msix_entries) {
|
||||
@@ -909,20 +910,7 @@ static int igb_request_irq(struct igb_adapter *adapter)
|
||||
igb_setup_all_tx_resources(adapter);
|
||||
igb_setup_all_rx_resources(adapter);
|
||||
} else {
|
||||
switch (hw->mac.type) {
|
||||
case e1000_82575:
|
||||
wr32(E1000_MSIXBM(0),
|
||||
(E1000_EICR_RX_QUEUE0 |
|
||||
E1000_EICR_TX_QUEUE0 |
|
||||
E1000_EIMS_OTHER));
|
||||
break;
|
||||
case e1000_82580:
|
||||
case e1000_82576:
|
||||
wr32(E1000_IVAR0, E1000_IVAR_VALID);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
igb_assign_vector(adapter->q_vector[0], 0);
|
||||
}
|
||||
|
||||
if (adapter->flags & IGB_FLAG_HAS_MSI) {
|
||||
@@ -1140,6 +1128,8 @@ int igb_up(struct igb_adapter *adapter)
|
||||
}
|
||||
if (adapter->msix_entries)
|
||||
igb_configure_msix(adapter);
|
||||
else
|
||||
igb_assign_vector(adapter->q_vector[0], 0);
|
||||
|
||||
/* Clear any pending interrupts. */
|
||||
rd32(E1000_ICR);
|
||||
|
||||
@@ -5179,7 +5179,7 @@ dma_error:
|
||||
ixgbe_unmap_and_free_tx_resource(adapter, tx_buffer_info);
|
||||
}
|
||||
|
||||
return count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ixgbe_tx_queue(struct ixgbe_adapter *adapter,
|
||||
@@ -5329,8 +5329,11 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
|
||||
struct ixgbe_adapter *adapter = netdev_priv(dev);
|
||||
int txq = smp_processor_id();
|
||||
|
||||
if (adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE)
|
||||
if (adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE) {
|
||||
while (unlikely(txq >= dev->real_num_tx_queues))
|
||||
txq -= dev->real_num_tx_queues;
|
||||
return txq;
|
||||
}
|
||||
|
||||
#ifdef IXGBE_FCOE
|
||||
if ((adapter->flags & IXGBE_FLAG_FCOE_ENABLED) &&
|
||||
|
||||
@@ -1941,7 +1941,7 @@ static void netxen_tx_timeout_task(struct work_struct *work)
|
||||
netif_wake_queue(adapter->netdev);
|
||||
|
||||
clear_bit(__NX_RESETTING, &adapter->state);
|
||||
|
||||
return;
|
||||
} else {
|
||||
clear_bit(__NX_RESETTING, &adapter->state);
|
||||
if (!netxen_nic_reset_context(adapter)) {
|
||||
@@ -2240,7 +2240,9 @@ netxen_detach_work(struct work_struct *work)
|
||||
|
||||
netxen_nic_down(adapter, netdev);
|
||||
|
||||
rtnl_lock();
|
||||
netxen_nic_detach(adapter);
|
||||
rtnl_unlock();
|
||||
|
||||
status = NXRD32(adapter, NETXEN_PEG_HALT_STATUS1);
|
||||
|
||||
|
||||
+3
-5
@@ -1025,11 +1025,8 @@ static void sky2_prefetch_init(struct sky2_hw *hw, u32 qaddr,
|
||||
static inline struct sky2_tx_le *get_tx_le(struct sky2_port *sky2, u16 *slot)
|
||||
{
|
||||
struct sky2_tx_le *le = sky2->tx_le + *slot;
|
||||
struct tx_ring_info *re = sky2->tx_ring + *slot;
|
||||
|
||||
*slot = RING_NEXT(*slot, sky2->tx_ring_size);
|
||||
re->flags = 0;
|
||||
re->skb = NULL;
|
||||
le->ctrl = 0;
|
||||
return le;
|
||||
}
|
||||
@@ -1622,8 +1619,7 @@ static unsigned tx_le_req(const struct sk_buff *skb)
|
||||
return count;
|
||||
}
|
||||
|
||||
static void sky2_tx_unmap(struct pci_dev *pdev,
|
||||
const struct tx_ring_info *re)
|
||||
static void sky2_tx_unmap(struct pci_dev *pdev, struct tx_ring_info *re)
|
||||
{
|
||||
if (re->flags & TX_MAP_SINGLE)
|
||||
pci_unmap_single(pdev, pci_unmap_addr(re, mapaddr),
|
||||
@@ -1633,6 +1629,7 @@ static void sky2_tx_unmap(struct pci_dev *pdev,
|
||||
pci_unmap_page(pdev, pci_unmap_addr(re, mapaddr),
|
||||
pci_unmap_len(re, maplen),
|
||||
PCI_DMA_TODEVICE);
|
||||
re->flags = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1839,6 +1836,7 @@ static void sky2_tx_complete(struct sky2_port *sky2, u16 done)
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
|
||||
re->skb = NULL;
|
||||
dev_kfree_skb_any(skb);
|
||||
|
||||
sky2->tx_next = RING_NEXT(idx, sky2->tx_ring_size);
|
||||
|
||||
@@ -11,6 +11,8 @@ struct nf_conntrack_ecache;
|
||||
struct netns_ct {
|
||||
atomic_t count;
|
||||
unsigned int expect_count;
|
||||
unsigned int htable_size;
|
||||
struct kmem_cache *nf_conntrack_cachep;
|
||||
struct hlist_nulls_head *hash;
|
||||
struct hlist_head *expect_hash;
|
||||
struct hlist_nulls_head unconfirmed;
|
||||
@@ -28,5 +30,6 @@ struct netns_ct {
|
||||
#endif
|
||||
int hash_vmalloc;
|
||||
int expect_vmalloc;
|
||||
char *slabname;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -40,6 +40,7 @@ struct netns_ipv4 {
|
||||
struct xt_table *iptable_security;
|
||||
struct xt_table *nat_table;
|
||||
struct hlist_head *nat_bysource;
|
||||
unsigned int nat_htable_size;
|
||||
int nat_vmalloced;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -377,6 +377,9 @@ struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8
|
||||
|
||||
if (acl->state == BT_CONNECTED &&
|
||||
(sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
|
||||
acl->power_save = 1;
|
||||
hci_conn_enter_active_mode(acl);
|
||||
|
||||
if (lmp_esco_capable(hdev))
|
||||
hci_setup_sync(sco, acl->handle);
|
||||
else
|
||||
|
||||
@@ -1699,6 +1699,7 @@ static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_bu
|
||||
break;
|
||||
|
||||
case 0x1c: /* SCO interval rejected */
|
||||
case 0x1a: /* Unsupported Remote Feature */
|
||||
case 0x1f: /* Unspecified error */
|
||||
if (conn->out && conn->attempt < 2) {
|
||||
conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
|
||||
|
||||
+24
-25
@@ -703,29 +703,9 @@ static void hidp_close(struct hid_device *hid)
|
||||
static int hidp_parse(struct hid_device *hid)
|
||||
{
|
||||
struct hidp_session *session = hid->driver_data;
|
||||
struct hidp_connadd_req *req = session->req;
|
||||
unsigned char *buf;
|
||||
int ret;
|
||||
|
||||
buf = kmalloc(req->rd_size, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
if (copy_from_user(buf, req->rd_data, req->rd_size)) {
|
||||
kfree(buf);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
ret = hid_parse_report(session->hid, buf, req->rd_size);
|
||||
|
||||
kfree(buf);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
session->req = NULL;
|
||||
|
||||
return 0;
|
||||
return hid_parse_report(session->hid, session->rd_data,
|
||||
session->rd_size);
|
||||
}
|
||||
|
||||
static int hidp_start(struct hid_device *hid)
|
||||
@@ -770,12 +750,24 @@ static int hidp_setup_hid(struct hidp_session *session,
|
||||
bdaddr_t src, dst;
|
||||
int err;
|
||||
|
||||
session->rd_data = kzalloc(req->rd_size, GFP_KERNEL);
|
||||
if (!session->rd_data)
|
||||
return -ENOMEM;
|
||||
|
||||
if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) {
|
||||
err = -EFAULT;
|
||||
goto fault;
|
||||
}
|
||||
session->rd_size = req->rd_size;
|
||||
|
||||
hid = hid_allocate_device();
|
||||
if (IS_ERR(hid))
|
||||
return PTR_ERR(hid);
|
||||
if (IS_ERR(hid)) {
|
||||
err = PTR_ERR(hid);
|
||||
goto fault;
|
||||
}
|
||||
|
||||
session->hid = hid;
|
||||
session->req = req;
|
||||
|
||||
hid->driver_data = session;
|
||||
|
||||
baswap(&src, &bt_sk(session->ctrl_sock->sk)->src);
|
||||
@@ -806,6 +798,10 @@ failed:
|
||||
hid_destroy_device(hid);
|
||||
session->hid = NULL;
|
||||
|
||||
fault:
|
||||
kfree(session->rd_data);
|
||||
session->rd_data = NULL;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -900,6 +896,9 @@ unlink:
|
||||
session->hid = NULL;
|
||||
}
|
||||
|
||||
kfree(session->rd_data);
|
||||
session->rd_data = NULL;
|
||||
|
||||
purge:
|
||||
skb_queue_purge(&session->ctrl_transmit);
|
||||
skb_queue_purge(&session->intr_transmit);
|
||||
|
||||
@@ -154,7 +154,9 @@ struct hidp_session {
|
||||
struct sk_buff_head ctrl_transmit;
|
||||
struct sk_buff_head intr_transmit;
|
||||
|
||||
struct hidp_connadd_req *req;
|
||||
/* Report descriptor */
|
||||
__u8 *rd_data;
|
||||
uint rd_size;
|
||||
};
|
||||
|
||||
static inline void hidp_schedule(struct hidp_session *session)
|
||||
|
||||
@@ -252,7 +252,6 @@ static void rfcomm_session_timeout(unsigned long arg)
|
||||
BT_DBG("session %p state %ld", s, s->state);
|
||||
|
||||
set_bit(RFCOMM_TIMED_OUT, &s->flags);
|
||||
rfcomm_session_put(s);
|
||||
rfcomm_schedule(RFCOMM_SCHED_TIMEO);
|
||||
}
|
||||
|
||||
@@ -1151,7 +1150,11 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
|
||||
break;
|
||||
|
||||
case BT_DISCONN:
|
||||
rfcomm_session_put(s);
|
||||
/* When socket is closed and we are not RFCOMM
|
||||
* initiator rfcomm_process_rx already calls
|
||||
* rfcomm_session_put() */
|
||||
if (s->sock->sk->sk_state != BT_CLOSED)
|
||||
rfcomm_session_put(s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1920,6 +1923,7 @@ static inline void rfcomm_process_sessions(void)
|
||||
if (test_and_clear_bit(RFCOMM_TIMED_OUT, &s->flags)) {
|
||||
s->state = BT_DISCONN;
|
||||
rfcomm_send_disc(s, 0);
|
||||
rfcomm_session_put(s);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <net/net_namespace.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
#include <net/dst.h>
|
||||
|
||||
@@ -79,6 +80,7 @@ loop:
|
||||
while ((dst = next) != NULL) {
|
||||
next = dst->next;
|
||||
prefetch(&next->next);
|
||||
cond_resched();
|
||||
if (likely(atomic_read(&dst->__refcnt))) {
|
||||
last->next = dst;
|
||||
last = dst;
|
||||
|
||||
@@ -3524,6 +3524,7 @@ static int pktgen_thread_worker(void *arg)
|
||||
wait_event_interruptible_timeout(t->queue,
|
||||
t->control != 0,
|
||||
HZ/10);
|
||||
try_to_freeze();
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -83,7 +83,7 @@ static struct kmem_cache *ccid_kmem_cache_create(int obj_size, char *slab_name_f
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(slab_name_fmt, sizeof(slab_name_fmt), fmt, args);
|
||||
vsnprintf(slab_name_fmt, CCID_SLAB_NAME_LENGTH, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
slab = kmem_cache_create(slab_name_fmt, sizeof(struct ccid) + obj_size, 0,
|
||||
|
||||
+5
-3
@@ -19,7 +19,9 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#define CCID_MAX 255
|
||||
/* maximum value for a CCID (RFC 4340, 19.5) */
|
||||
#define CCID_MAX 255
|
||||
#define CCID_SLAB_NAME_LENGTH 32
|
||||
|
||||
struct tcp_info;
|
||||
|
||||
@@ -49,8 +51,8 @@ struct ccid_operations {
|
||||
const char *ccid_name;
|
||||
struct kmem_cache *ccid_hc_rx_slab,
|
||||
*ccid_hc_tx_slab;
|
||||
char ccid_hc_rx_slab_name[32];
|
||||
char ccid_hc_tx_slab_name[32];
|
||||
char ccid_hc_rx_slab_name[CCID_SLAB_NAME_LENGTH];
|
||||
char ccid_hc_tx_slab_name[CCID_SLAB_NAME_LENGTH];
|
||||
__u32 ccid_hc_rx_obj_size,
|
||||
ccid_hc_tx_obj_size;
|
||||
/* Interface Routines */
|
||||
|
||||
+2
-2
@@ -161,8 +161,8 @@ static __init int dccpprobe_init(void)
|
||||
if (!proc_net_fops_create(&init_net, procname, S_IRUSR, &dccpprobe_fops))
|
||||
goto err0;
|
||||
|
||||
ret = try_then_request_module((register_jprobe(&dccp_send_probe) == 0),
|
||||
"dccp");
|
||||
try_then_request_module((ret = register_jprobe(&dccp_send_probe)) == 0,
|
||||
"dccp");
|
||||
if (ret)
|
||||
goto err1;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user