* [bug report] sfc/siena: Remove build references to missing functionality
@ 2022-05-16 7:13 Dan Carpenter
2022-05-18 15:07 ` Martin Habets
0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2022-05-16 7:13 UTC (permalink / raw)
To: habetsm.xilinx; +Cc: kernel-janitors
Hello Martin Habets,
The patch 956f2d86cb37: "sfc/siena: Remove build references to
missing functionality" from May 9, 2022, leads to the following
Smatch static checker warning:
drivers/net/ethernet/sfc/siena/tx.c:184 __efx_siena_enqueue_skb()
warn: duplicate check 'segments' (previous on line 158)
drivers/net/ethernet/sfc/siena/tx.c
139 netdev_tx_t __efx_siena_enqueue_skb(struct efx_tx_queue *tx_queue,
140 struct sk_buff *skb)
141 {
142 unsigned int old_insert_count = tx_queue->insert_count;
143 bool xmit_more = netdev_xmit_more();
144 bool data_mapped = false;
145 unsigned int segments;
146 unsigned int skb_len;
147 int rc;
148
149 skb_len = skb->len;
150 segments = skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 0;
151 if (segments == 1)
152 segments = 0; /* Don't use TSO for a single segment. */
153
154 /* Handle TSO first - it's *possible* (although unlikely) that we might
155 * be passed a packet to segment that's smaller than the copybreak/PIO
156 * size limit.
157 */
158 if (segments) {
159 rc = efx_siena_tx_tso_fallback(tx_queue, skb);
160 tx_queue->tso_fallbacks++;
161 if (rc == 0)
162 return 0;
163 goto err;
If segments is non-zero then we hit this goto.
164 } else if (skb->data_len && skb_len <= EFX_TX_CB_SIZE) {
165 /* Pad short packets or coalesce short fragmented packets. */
166 if (efx_enqueue_skb_copy(tx_queue, skb))
167 goto err;
168 tx_queue->cb_packets++;
169 data_mapped = true;
170 }
171
172 /* Map for DMA and create descriptors if we haven't done so already. */
173 if (!data_mapped && (efx_siena_tx_map_data(tx_queue, skb, segments)))
174 goto err;
175
176 efx_tx_maybe_stop_queue(tx_queue);
177
178 tx_queue->xmit_pending = true;
179
180 /* Pass off to hardware */
181 if (__netdev_tx_sent_queue(tx_queue->core_txq, skb_len, xmit_more))
182 efx_tx_send_pending(tx_queue->channel);
183
--> 184 if (segments) {
So this if statement can be deleted.
185 tx_queue->tso_bursts++;
186 tx_queue->tso_packets += segments;
187 tx_queue->tx_packets += segments;
188 } else {
189 tx_queue->tx_packets++;
190 }
191
192 return NETDEV_TX_OK;
193
194
195 err:
196 efx_siena_enqueue_unwind(tx_queue, old_insert_count);
197 dev_kfree_skb_any(skb);
198
199 /* If we're not expecting another transmit and we had something to push
200 * on this queue or a partner queue then we need to push here to get the
201 * previous packets out.
202 */
203 if (!xmit_more)
204 efx_tx_send_pending(tx_queue->channel);
205
206 return NETDEV_TX_OK;
207 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [bug report] sfc/siena: Remove build references to missing functionality
2022-05-16 7:13 [bug report] sfc/siena: Remove build references to missing functionality Dan Carpenter
@ 2022-05-18 15:07 ` Martin Habets
0 siblings, 0 replies; 2+ messages in thread
From: Martin Habets @ 2022-05-18 15:07 UTC (permalink / raw)
To: Dan Carpenter; +Cc: kernel-janitors
Hi Dan,
The analysis is correct. I'll post a patch for this.
Thanks!
Martin
On Mon, May 16, 2022 at 10:13:56AM +0300, Dan Carpenter wrote:
> Hello Martin Habets,
>
> The patch 956f2d86cb37: "sfc/siena: Remove build references to
> missing functionality" from May 9, 2022, leads to the following
> Smatch static checker warning:
>
> drivers/net/ethernet/sfc/siena/tx.c:184 __efx_siena_enqueue_skb()
> warn: duplicate check 'segments' (previous on line 158)
>
> drivers/net/ethernet/sfc/siena/tx.c
> 139 netdev_tx_t __efx_siena_enqueue_skb(struct efx_tx_queue *tx_queue,
> 140 struct sk_buff *skb)
> 141 {
> 142 unsigned int old_insert_count = tx_queue->insert_count;
> 143 bool xmit_more = netdev_xmit_more();
> 144 bool data_mapped = false;
> 145 unsigned int segments;
> 146 unsigned int skb_len;
> 147 int rc;
> 148
> 149 skb_len = skb->len;
> 150 segments = skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 0;
> 151 if (segments == 1)
> 152 segments = 0; /* Don't use TSO for a single segment. */
> 153
> 154 /* Handle TSO first - it's *possible* (although unlikely) that we might
> 155 * be passed a packet to segment that's smaller than the copybreak/PIO
> 156 * size limit.
> 157 */
> 158 if (segments) {
> 159 rc = efx_siena_tx_tso_fallback(tx_queue, skb);
> 160 tx_queue->tso_fallbacks++;
> 161 if (rc == 0)
> 162 return 0;
> 163 goto err;
>
> If segments is non-zero then we hit this goto.
>
> 164 } else if (skb->data_len && skb_len <= EFX_TX_CB_SIZE) {
> 165 /* Pad short packets or coalesce short fragmented packets. */
> 166 if (efx_enqueue_skb_copy(tx_queue, skb))
> 167 goto err;
> 168 tx_queue->cb_packets++;
> 169 data_mapped = true;
> 170 }
> 171
> 172 /* Map for DMA and create descriptors if we haven't done so already. */
> 173 if (!data_mapped && (efx_siena_tx_map_data(tx_queue, skb, segments)))
> 174 goto err;
> 175
> 176 efx_tx_maybe_stop_queue(tx_queue);
> 177
> 178 tx_queue->xmit_pending = true;
> 179
> 180 /* Pass off to hardware */
> 181 if (__netdev_tx_sent_queue(tx_queue->core_txq, skb_len, xmit_more))
> 182 efx_tx_send_pending(tx_queue->channel);
> 183
> --> 184 if (segments) {
>
> So this if statement can be deleted.
>
> 185 tx_queue->tso_bursts++;
> 186 tx_queue->tso_packets += segments;
> 187 tx_queue->tx_packets += segments;
> 188 } else {
> 189 tx_queue->tx_packets++;
> 190 }
> 191
> 192 return NETDEV_TX_OK;
> 193
> 194
> 195 err:
> 196 efx_siena_enqueue_unwind(tx_queue, old_insert_count);
> 197 dev_kfree_skb_any(skb);
> 198
> 199 /* If we're not expecting another transmit and we had something to push
> 200 * on this queue or a partner queue then we need to push here to get the
> 201 * previous packets out.
> 202 */
> 203 if (!xmit_more)
> 204 efx_tx_send_pending(tx_queue->channel);
> 205
> 206 return NETDEV_TX_OK;
> 207 }
>
> regards,
> dan carpenter
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-05-18 15:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-16 7:13 [bug report] sfc/siena: Remove build references to missing functionality Dan Carpenter
2022-05-18 15:07 ` Martin Habets
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.