From: Eric Dumazet <edumazet@kernel.org>
To: Stanislaw Gruszka <stf_xl@wp.pl>
Cc: Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
netdev@vger.kernel.org, linux-wireless@vger.kernel.org,
Eric Dumazet <edumazet@kernel.org>
Subject: [PATCH -next] wifi: rt2x00: use skb_put_padto() for beacon padding
Date: Fri, 16 Oct 2026 12:16:02 +0200 [thread overview]
Message-ID: <20261016101602.2770015-1-edumazet@kernel.org> (raw)
rt2800_write_beacon(), rt61pci_write_beacon() and rt73usb_write_beacon()
pad the beacon with skb_pad(), which does not change skb->len, and
then have to add the padding length again when writing the beacon
to the hardware.
Use skb_put_padto() instead, and remove the padding_len variables.
No functional change: the beacon skb is freed right after
being written to the hardware.
Signed-off-by: Eric Dumazet <edumazet@kernel.org>
---
Part of a medium term plan to get rid of skb_pad(), source of many mistakes.
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 8 +++-----
drivers/net/wireless/ralink/rt2x00/rt61pci.c | 9 +++------
drivers/net/wireless/ralink/rt2x00/rt73usb.c | 8 +++-----
3 files changed, 9 insertions(+), 16 deletions(-)
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index 2e2e382b624757ffcd826f37faebc36f38d04f11..4f7beca668bb032ef469e19e8919afd6316fe3eb 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -1414,7 +1414,6 @@ void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc)
struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
unsigned int beacon_base;
- unsigned int padding_len;
u32 orig_reg, reg;
const int txwi_desc_size = entry->queue->winfo_size;
@@ -1452,10 +1451,9 @@ void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc)
/*
* Write entire beacon with TXWI and padding to register.
*/
- padding_len = roundup(entry->skb->len, 4) - entry->skb->len;
- if (padding_len && skb_pad(entry->skb, padding_len)) {
+ if (skb_put_padto(entry->skb, roundup(entry->skb->len, 4))) {
rt2x00_err(rt2x00dev, "Failure padding beacon, aborting\n");
- /* skb freed by skb_pad() on failure */
+ /* skb freed by skb_put_padto() on failure */
entry->skb = NULL;
rt2800_register_write(rt2x00dev, BCN_TIME_CFG, orig_reg);
return;
@@ -1464,7 +1462,7 @@ void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc)
beacon_base = rt2800_hw_beacon_base(rt2x00dev, entry->entry_idx);
rt2800_register_multiwrite(rt2x00dev, beacon_base, entry->skb->data,
- entry->skb->len + padding_len);
+ entry->skb->len);
__set_bit(ENTRY_BCN_ENABLED, &entry->flags);
/*
diff --git a/drivers/net/wireless/ralink/rt2x00/rt61pci.c b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
index d4783658b2c5dbb69ab6c715a23ac8814ef3afb0..974a6d85b37b600f9cac22055c7a0fe0e17e2d5f 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
@@ -1875,7 +1875,6 @@ static void rt61pci_write_beacon(struct queue_entry *entry,
struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
struct queue_entry_priv_mmio *entry_priv = entry->priv_data;
unsigned int beacon_base;
- unsigned int padding_len;
u32 orig_reg, reg;
/*
@@ -1900,10 +1899,9 @@ static void rt61pci_write_beacon(struct queue_entry *entry,
/*
* Write entire beacon with descriptor and padding to register.
*/
- padding_len = roundup(entry->skb->len, 4) - entry->skb->len;
- if (padding_len && skb_pad(entry->skb, padding_len)) {
+ if (skb_put_padto(entry->skb, roundup(entry->skb->len, 4))) {
rt2x00_err(rt2x00dev, "Failure padding beacon, aborting\n");
- /* skb freed by skb_pad() on failure */
+ /* skb freed by skb_put_padto() on failure */
entry->skb = NULL;
rt2x00mmio_register_write(rt2x00dev, TXRX_CSR9, orig_reg);
return;
@@ -1913,8 +1911,7 @@ static void rt61pci_write_beacon(struct queue_entry *entry,
rt2x00mmio_register_multiwrite(rt2x00dev, beacon_base,
entry_priv->desc, TXINFO_SIZE);
rt2x00mmio_register_multiwrite(rt2x00dev, beacon_base + TXINFO_SIZE,
- entry->skb->data,
- entry->skb->len + padding_len);
+ entry->skb->data, entry->skb->len);
/*
* Enable beaconing again.
diff --git a/drivers/net/wireless/ralink/rt2x00/rt73usb.c b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
index d6b7174d087a26c7a403b8b743d59f9fb5f9fb62..ee308bcf0bed00edea24278deb1770f035012998 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt73usb.c
@@ -1523,7 +1523,6 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
{
struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
unsigned int beacon_base;
- unsigned int padding_len;
u32 orig_reg, reg;
/*
@@ -1554,10 +1553,9 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
/*
* Write entire beacon with descriptor and padding to register.
*/
- padding_len = roundup(entry->skb->len, 4) - entry->skb->len;
- if (padding_len && skb_pad(entry->skb, padding_len)) {
+ if (skb_put_padto(entry->skb, roundup(entry->skb->len, 4))) {
rt2x00_err(rt2x00dev, "Failure padding beacon, aborting\n");
- /* skb freed by skb_pad() on failure */
+ /* skb freed by skb_put_padto() on failure */
entry->skb = NULL;
rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, orig_reg);
return;
@@ -1565,7 +1563,7 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
beacon_base = HW_BEACON_OFFSET(entry->entry_idx);
rt2x00usb_register_multiwrite(rt2x00dev, beacon_base, entry->skb->data,
- entry->skb->len + padding_len);
+ entry->skb->len);
/*
* Enable beaconing again.
--
2.53.0
next reply other threads:[~2026-10-16 10:16 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 10:16 Eric Dumazet [this message]
2026-10-16 12:23 ` [PATCH -next] wifi: rt2x00: use skb_put_padto() for beacon padding Stanislaw Gruszka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261016101602.2770015-1-edumazet@kernel.org \
--to=edumazet@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=stf_xl@wp.pl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.