Commit 734c1409 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller

r8169: remove ancient GCC bug workaround in a second place

Remove ancient GCC bug workaround in a second place and factor out
rtl_8169_get_txd_opts1.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fd0fb612
...@@ -5840,6 +5840,16 @@ static void rtl8169_tx_timeout(struct net_device *dev) ...@@ -5840,6 +5840,16 @@ static void rtl8169_tx_timeout(struct net_device *dev)
rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_PENDING); rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_PENDING);
} }
static __le32 rtl8169_get_txd_opts1(u32 opts0, u32 len, unsigned int entry)
{
u32 status = opts0 | len;
if (entry == NUM_TX_DESC - 1)
status |= RingEnd;
return cpu_to_le32(status);
}
static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb, static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
u32 *opts) u32 *opts)
{ {
...@@ -5852,7 +5862,7 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb, ...@@ -5852,7 +5862,7 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) { for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) {
const skb_frag_t *frag = info->frags + cur_frag; const skb_frag_t *frag = info->frags + cur_frag;
dma_addr_t mapping; dma_addr_t mapping;
u32 status, len; u32 len;
void *addr; void *addr;
entry = (entry + 1) % NUM_TX_DESC; entry = (entry + 1) % NUM_TX_DESC;
...@@ -5868,11 +5878,7 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb, ...@@ -5868,11 +5878,7 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
goto err_out; goto err_out;
} }
status = opts[0] | len; txd->opts1 = rtl8169_get_txd_opts1(opts[0], len, entry);
if (entry == NUM_TX_DESC - 1)
status |= RingEnd;
txd->opts1 = cpu_to_le32(status);
txd->opts2 = cpu_to_le32(opts[1]); txd->opts2 = cpu_to_le32(opts[1]);
txd->addr = cpu_to_le64(mapping); txd->addr = cpu_to_le64(mapping);
...@@ -6068,8 +6074,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, ...@@ -6068,8 +6074,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
struct TxDesc *txd = tp->TxDescArray + entry; struct TxDesc *txd = tp->TxDescArray + entry;
struct device *d = tp_to_dev(tp); struct device *d = tp_to_dev(tp);
dma_addr_t mapping; dma_addr_t mapping;
u32 status, len; u32 opts[2], len;
u32 opts[2];
int frags; int frags;
if (unlikely(!TX_FRAGS_READY_FOR(tp, skb_shinfo(skb)->nr_frags))) { if (unlikely(!TX_FRAGS_READY_FOR(tp, skb_shinfo(skb)->nr_frags))) {
...@@ -6118,9 +6123,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, ...@@ -6118,9 +6123,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
/* Force memory writes to complete before releasing descriptor */ /* Force memory writes to complete before releasing descriptor */
dma_wmb(); dma_wmb();
/* Anti gcc 2.95.3 bugware (sic) */ txd->opts1 = rtl8169_get_txd_opts1(opts[0], len, entry);
status = opts[0] | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
txd->opts1 = cpu_to_le32(status);
/* Force all memory writes to complete before notifying device */ /* Force all memory writes to complete before notifying device */
wmb(); wmb();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment