.. | .. |
---|
884 | 884 | } |
---|
885 | 885 | #endif |
---|
886 | 886 | addr |= MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, desc->addr)); |
---|
| 887 | +#ifdef CONFIG_MACB_USE_HWSTAMP |
---|
| 888 | + if (bp->hw_dma_cap & HW_DMA_CAP_PTP) |
---|
| 889 | + addr &= ~GEM_BIT(DMA_RXVALID); |
---|
| 890 | +#endif |
---|
887 | 891 | return addr; |
---|
888 | 892 | } |
---|
889 | 893 | |
---|
.. | .. |
---|
1963 | 1967 | bool cloned = skb_cloned(*skb) || skb_header_cloned(*skb) || |
---|
1964 | 1968 | skb_is_nonlinear(*skb); |
---|
1965 | 1969 | int padlen = ETH_ZLEN - (*skb)->len; |
---|
1966 | | - int headroom = skb_headroom(*skb); |
---|
1967 | 1970 | int tailroom = skb_tailroom(*skb); |
---|
1968 | 1971 | struct sk_buff *nskb; |
---|
1969 | 1972 | u32 fcs; |
---|
.. | .. |
---|
1977 | 1980 | /* FCS could be appeded to tailroom. */ |
---|
1978 | 1981 | if (tailroom >= ETH_FCS_LEN) |
---|
1979 | 1982 | goto add_fcs; |
---|
1980 | | - /* FCS could be appeded by moving data to headroom. */ |
---|
1981 | | - else if (!cloned && headroom + tailroom >= ETH_FCS_LEN) |
---|
1982 | | - padlen = 0; |
---|
1983 | 1983 | /* No room for FCS, need to reallocate skb. */ |
---|
1984 | 1984 | else |
---|
1985 | 1985 | padlen = ETH_FCS_LEN; |
---|
.. | .. |
---|
1988 | 1988 | padlen += ETH_FCS_LEN; |
---|
1989 | 1989 | } |
---|
1990 | 1990 | |
---|
1991 | | - if (!cloned && headroom + tailroom >= padlen) { |
---|
1992 | | - (*skb)->data = memmove((*skb)->head, (*skb)->data, (*skb)->len); |
---|
1993 | | - skb_set_tail_pointer(*skb, (*skb)->len); |
---|
1994 | | - } else { |
---|
| 1991 | + if (cloned || tailroom < padlen) { |
---|
1995 | 1992 | nskb = skb_copy_expand(*skb, 0, padlen, GFP_ATOMIC); |
---|
1996 | 1993 | if (!nskb) |
---|
1997 | 1994 | return -ENOMEM; |
---|