From 3c16cc698b8304b51b95daa02cfc4d12efb325a7 Mon Sep 17 00:00:00 2001 From: Tushar Dave Date: Fri, 14 Sep 2012 02:21:37 +0000 Subject: [PATCH] --- yaml --- r: 340466 b: refs/heads/master c: 6e97c170db3878695cb48b5021fffe442ec0aeb0 h: refs/heads/master v: v3 --- [refs] | 2 +- .../net/ethernet/emulex/benet/be_cmds.c | 7 +++-- .../net/ethernet/emulex/benet/be_cmds.h | 12 ++------- .../net/ethernet/emulex/benet/be_main.c | 4 +-- .../net/ethernet/intel/e1000e/netdev.c | 11 ++++++++ trunk/net/core/rtnetlink.c | 6 ++--- trunk/net/ipv4/tcp_ipv4.c | 7 ++--- trunk/net/ipv6/route.c | 26 +++++++++---------- trunk/net/ipv6/tcp_ipv6.c | 4 +-- 9 files changed, 41 insertions(+), 38 deletions(-) diff --git a/[refs] b/[refs] index 1faf1ea7d4ff..6f25d36186f0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b3ce5ae1fb6ba45c70e7c4d144182d38f0b0aef7 +refs/heads/master: 6e97c170db3878695cb48b5021fffe442ec0aeb0 diff --git a/trunk/drivers/net/ethernet/emulex/benet/be_cmds.c b/trunk/drivers/net/ethernet/emulex/benet/be_cmds.c index 7ea1ea4ff242..8d35750eace8 100644 --- a/trunk/drivers/net/ethernet/emulex/benet/be_cmds.c +++ b/trunk/drivers/net/ethernet/emulex/benet/be_cmds.c @@ -2160,7 +2160,7 @@ int be_cmd_get_flash_crc(struct be_adapter *adapter, u8 *flashed_crc, int offset) { struct be_mcc_wrb *wrb; - struct be_cmd_read_flash_crc *req; + struct be_cmd_write_flashrom *req; int status; spin_lock_bh(&adapter->mcc_lock); @@ -2173,8 +2173,7 @@ int be_cmd_get_flash_crc(struct be_adapter *adapter, u8 *flashed_crc, req = embedded_payload(wrb); be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, - OPCODE_COMMON_READ_FLASHROM, sizeof(*req), - wrb, NULL); + OPCODE_COMMON_READ_FLASHROM, sizeof(*req)+4, wrb, NULL); req->params.op_type = cpu_to_le32(OPTYPE_REDBOOT); req->params.op_code = cpu_to_le32(FLASHROM_OPER_REPORT); @@ -2183,7 +2182,7 @@ int be_cmd_get_flash_crc(struct be_adapter *adapter, u8 *flashed_crc, status = be_mcc_notify_wait(adapter); if (!status) - memcpy(flashed_crc, req->crc, 4); + memcpy(flashed_crc, req->params.data_buf, 4); err: spin_unlock_bh(&adapter->mcc_lock); diff --git a/trunk/drivers/net/ethernet/emulex/benet/be_cmds.h b/trunk/drivers/net/ethernet/emulex/benet/be_cmds.h index 06fc22738b9d..68de6c6b786c 100644 --- a/trunk/drivers/net/ethernet/emulex/benet/be_cmds.h +++ b/trunk/drivers/net/ethernet/emulex/benet/be_cmds.h @@ -1156,22 +1156,14 @@ struct flashrom_params { u32 op_type; u32 data_buf_size; u32 offset; + u8 data_buf[4]; }; struct be_cmd_write_flashrom { struct be_cmd_req_hdr hdr; struct flashrom_params params; - u8 data_buf[32768]; - u8 rsvd[4]; -} __packed; - -/* cmd to read flash crc */ -struct be_cmd_read_flash_crc { - struct be_cmd_req_hdr hdr; - struct flashrom_params params; - u8 crc[4]; - u8 rsvd[4]; }; + /**************** Lancer Firmware Flash ************/ struct amap_lancer_write_obj_context { u8 write_length[24]; diff --git a/trunk/drivers/net/ethernet/emulex/benet/be_main.c b/trunk/drivers/net/ethernet/emulex/benet/be_main.c index 5e48674f7245..68665da26a68 100644 --- a/trunk/drivers/net/ethernet/emulex/benet/be_main.c +++ b/trunk/drivers/net/ethernet/emulex/benet/be_main.c @@ -3114,7 +3114,7 @@ static int be_flash(struct be_adapter *adapter, const u8 *img, flash_op = FLASHROM_OPER_SAVE; } - memcpy(req->data_buf, img, num_bytes); + memcpy(req->params.data_buf, img, num_bytes); img += num_bytes; status = be_cmd_write_flashrom(adapter, flash_cmd, optype, flash_op, num_bytes); @@ -3471,7 +3471,7 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw) const u8 *p; int status = 0, i = 0, num_imgs = 0, ufi_type = 0; - flash_cmd.size = sizeof(struct be_cmd_write_flashrom); + flash_cmd.size = sizeof(struct be_cmd_write_flashrom) + 32*1024; flash_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, flash_cmd.size, &flash_cmd.dma, GFP_KERNEL); if (!flash_cmd.va) { diff --git a/trunk/drivers/net/ethernet/intel/e1000e/netdev.c b/trunk/drivers/net/ethernet/intel/e1000e/netdev.c index f444eb0b76d8..dadb13be479a 100644 --- a/trunk/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/trunk/drivers/net/ethernet/intel/e1000e/netdev.c @@ -5067,6 +5067,17 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, return NETDEV_TX_OK; } + /* + * The minimum packet size with TCTL.PSP set is 17 bytes so + * pad skb in order to meet this minimum size requirement + */ + if (unlikely(skb->len < 17)) { + if (skb_pad(skb, 17 - skb->len)) + return NETDEV_TX_OK; + skb->len = 17; + skb_set_tail_pointer(skb, 17); + } + mss = skb_shinfo(skb)->gso_size; if (mss) { u8 hdr_len; diff --git a/trunk/net/core/rtnetlink.c b/trunk/net/core/rtnetlink.c index 64fe3cca2a4e..76d4c2c3c89b 100644 --- a/trunk/net/core/rtnetlink.c +++ b/trunk/net/core/rtnetlink.c @@ -128,7 +128,7 @@ static rtnl_doit_func rtnl_get_doit(int protocol, int msgindex) if (tab == NULL || tab[msgindex].doit == NULL) tab = rtnl_msg_handlers[PF_UNSPEC]; - return tab[msgindex].doit; + return tab ? tab[msgindex].doit : NULL; } static rtnl_dumpit_func rtnl_get_dumpit(int protocol, int msgindex) @@ -143,7 +143,7 @@ static rtnl_dumpit_func rtnl_get_dumpit(int protocol, int msgindex) if (tab == NULL || tab[msgindex].dumpit == NULL) tab = rtnl_msg_handlers[PF_UNSPEC]; - return tab[msgindex].dumpit; + return tab ? tab[msgindex].dumpit : NULL; } static rtnl_calcit_func rtnl_get_calcit(int protocol, int msgindex) @@ -158,7 +158,7 @@ static rtnl_calcit_func rtnl_get_calcit(int protocol, int msgindex) if (tab == NULL || tab[msgindex].calcit == NULL) tab = rtnl_msg_handlers[PF_UNSPEC]; - return tab[msgindex].calcit; + return tab ? tab[msgindex].calcit : NULL; } /** diff --git a/trunk/net/ipv4/tcp_ipv4.c b/trunk/net/ipv4/tcp_ipv4.c index 694ea4c557f8..ef998b008a57 100644 --- a/trunk/net/ipv4/tcp_ipv4.c +++ b/trunk/net/ipv4/tcp_ipv4.c @@ -1918,6 +1918,7 @@ EXPORT_SYMBOL(tcp_v4_do_rcv); void tcp_v4_early_demux(struct sk_buff *skb) { + struct net *net = dev_net(skb->dev); const struct iphdr *iph; const struct tcphdr *th; struct sock *sk; @@ -1925,16 +1926,16 @@ void tcp_v4_early_demux(struct sk_buff *skb) if (skb->pkt_type != PACKET_HOST) return; - if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct tcphdr))) + if (!pskb_may_pull(skb, ip_hdrlen(skb) + sizeof(struct tcphdr))) return; iph = ip_hdr(skb); - th = tcp_hdr(skb); + th = (struct tcphdr *) ((char *)iph + ip_hdrlen(skb)); if (th->doff < sizeof(struct tcphdr) / 4) return; - sk = __inet_lookup_established(dev_net(skb->dev), &tcp_hashinfo, + sk = __inet_lookup_established(net, &tcp_hashinfo, iph->saddr, th->source, iph->daddr, ntohs(th->dest), skb->skb_iif); diff --git a/trunk/net/ipv6/route.c b/trunk/net/ipv6/route.c index c42650cf8d4d..126da562d3eb 100644 --- a/trunk/net/ipv6/route.c +++ b/trunk/net/ipv6/route.c @@ -397,32 +397,32 @@ static int rt6_info_hash_nhsfn(unsigned int candidate_count, { unsigned int val = fl6->flowi6_proto; - val ^= (__force u32)fl6->daddr.s6_addr32[0]; - val ^= (__force u32)fl6->daddr.s6_addr32[1]; - val ^= (__force u32)fl6->daddr.s6_addr32[2]; - val ^= (__force u32)fl6->daddr.s6_addr32[3]; + val ^= fl6->daddr.s6_addr32[0]; + val ^= fl6->daddr.s6_addr32[1]; + val ^= fl6->daddr.s6_addr32[2]; + val ^= fl6->daddr.s6_addr32[3]; - val ^= (__force u32)fl6->saddr.s6_addr32[0]; - val ^= (__force u32)fl6->saddr.s6_addr32[1]; - val ^= (__force u32)fl6->saddr.s6_addr32[2]; - val ^= (__force u32)fl6->saddr.s6_addr32[3]; + val ^= fl6->saddr.s6_addr32[0]; + val ^= fl6->saddr.s6_addr32[1]; + val ^= fl6->saddr.s6_addr32[2]; + val ^= fl6->saddr.s6_addr32[3]; /* Work only if this not encapsulated */ switch (fl6->flowi6_proto) { case IPPROTO_UDP: case IPPROTO_TCP: case IPPROTO_SCTP: - val ^= (__force u16)fl6->fl6_sport; - val ^= (__force u16)fl6->fl6_dport; + val ^= fl6->fl6_sport; + val ^= fl6->fl6_dport; break; case IPPROTO_ICMPV6: - val ^= (__force u16)fl6->fl6_icmp_type; - val ^= (__force u16)fl6->fl6_icmp_code; + val ^= fl6->fl6_icmp_type; + val ^= fl6->fl6_icmp_code; break; } /* RFC6438 recommands to use flowlabel */ - val ^= (__force u32)fl6->flowlabel; + val ^= fl6->flowlabel; /* Perhaps, we need to tune, this function? */ val = val ^ (val >> 7) ^ (val >> 12); diff --git a/trunk/net/ipv6/tcp_ipv6.c b/trunk/net/ipv6/tcp_ipv6.c index bb6782e84996..26175bffbaa0 100644 --- a/trunk/net/ipv6/tcp_ipv6.c +++ b/trunk/net/ipv6/tcp_ipv6.c @@ -1741,11 +1741,11 @@ static void tcp_v6_early_demux(struct sk_buff *skb) skb->destructor = sock_edemux; if (sk->sk_state != TCP_TIME_WAIT) { struct dst_entry *dst = sk->sk_rx_dst; - + struct inet_sock *icsk = inet_sk(sk); if (dst) dst = dst_check(dst, inet6_sk(sk)->rx_dst_cookie); if (dst && - inet_sk(sk)->rx_dst_ifindex == skb->skb_iif) + icsk->rx_dst_ifindex == skb->skb_iif) skb_dst_set_noref(skb, dst); } }