From: Heiner Kallweit <hkallweit1@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>, Andrew Lunn <andrew+netdev@lunn.ch>,
Russell King - ARM Linux <linux@armlinux.org.uk>,
Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <edumazet@google.com>,
David Miller <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>
Subject: [PATCH net-next v2 2/2] net: phy: fixed_phy: replace IDA with a bitmap
Date: Sun, 11 Jan 2026 13:43:22 +0100 [thread overview]
Message-ID: <d4614463-d532-41fc-92e9-ef97107aceb5@gmail.com> (raw)
In-Reply-To: <110f676d-727c-4575-abe4-e383f98fc38f@gmail.com>
Size of array fmb_fixed_phys is small, so we can use a simple bitmap
instead of an IDA to manage dynamic allocation of fixed PHY's.
find_first_zero_bit() isn't atomic, so we need the loop to rule out
double allocation of a PHY address.
Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
v2:
- patch added
---
drivers/net/phy/fixed_phy.c | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c
index 7d6078d1570..0b83fb30a54 100644
--- a/drivers/net/phy/fixed_phy.c
+++ b/drivers/net/phy/fixed_phy.c
@@ -16,7 +16,6 @@
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/of.h>
-#include <linux/idr.h>
#include <linux/netdevice.h>
#include "swphy.h"
@@ -32,13 +31,13 @@ struct fixed_phy {
int (*link_update)(struct net_device *, struct fixed_phy_status *);
};
+static DECLARE_BITMAP(fixed_phy_ids, NUM_FP);
static struct fixed_phy fmb_fixed_phys[NUM_FP];
static struct mii_bus *fmb_mii_bus;
-static DEFINE_IDA(phy_fixed_ida);
static struct fixed_phy *fixed_phy_find(int addr)
{
- return ida_exists(&phy_fixed_ida, addr) ? fmb_fixed_phys + addr : NULL;
+ return test_bit(addr, fixed_phy_ids) ? fmb_fixed_phys + addr : NULL;
}
int fixed_phy_change_carrier(struct net_device *dev, bool new_carrier)
@@ -113,7 +112,20 @@ static void fixed_phy_del(int phy_addr)
return;
memset(fp, 0, sizeof(*fp));
- ida_free(&phy_fixed_ida, phy_addr);
+ clear_bit(phy_addr, fixed_phy_ids);
+}
+
+static int fixed_phy_get_free_addr(void)
+{
+ int addr;
+
+ do {
+ addr = find_first_zero_bit(fixed_phy_ids, NUM_FP);
+ if (addr == NUM_FP)
+ return -ENOSPC;
+ } while (test_and_set_bit(addr, fixed_phy_ids));
+
+ return addr;
}
struct phy_device *fixed_phy_register(const struct fixed_phy_status *status,
@@ -131,7 +143,7 @@ struct phy_device *fixed_phy_register(const struct fixed_phy_status *status,
return ERR_PTR(-EPROBE_DEFER);
/* Get the next available PHY address, up to NUM_FP */
- phy_addr = ida_alloc_max(&phy_fixed_ida, NUM_FP - 1, GFP_KERNEL);
+ phy_addr = fixed_phy_get_free_addr();
if (phy_addr < 0)
return ERR_PTR(phy_addr);
@@ -210,8 +222,6 @@ static void __exit fixed_mdio_bus_exit(void)
{
mdiobus_unregister(fmb_mii_bus);
mdiobus_free(fmb_mii_bus);
-
- ida_destroy(&phy_fixed_ida);
}
module_exit(fixed_mdio_bus_exit);
--
2.52.0
next prev parent reply other threads:[~2026-01-11 12:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-11 12:40 [PATCH net-next v2 0/2] net: phy: fixed_phy: replace list of fixed PHYs with static array Heiner Kallweit
2026-01-11 12:41 ` [PATCH net-next v2 1/2] " Heiner Kallweit
2026-01-11 12:43 ` Heiner Kallweit [this message]
2026-01-12 10:36 ` [PATCH net-next v2 0/2] " Maxime Chevallier
2026-01-14 3:00 ` patchwork-bot+netdevbpf
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=d4614463-d532-41fc-92e9-ef97107aceb5@gmail.com \
--to=hkallweit1@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/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.