From: EUNBONG SONG <eunb.song@samsung.com>
To: netdev@vger.kernel.org
Subject: Fwd: [PATCH] phydev: Add sysctl variable for polling interval of phy
Date: Sun, 10 Mar 2013 23:44:00 +0000 (GMT) [thread overview]
Message-ID: <2566257.7001362959040495.JavaMail.weblogic@epv6ml10> (raw)
From d55a22be52e5a768409aa0999d6636cdfc369676 Mon Sep 17 00:00:00 2001
From: eunbonsong
Date: Sun, 10 Mar 2013 04:57:39 -0700
Subject: [PATCH] phydev: Add sysctl variable for polling interval of phy state
This adds a dev.phy.phy_poll_interval sysctl variable. This value is represented in milliseconds.
And phy_state_machine() is scheduled as this variable.
I think HZ is enough for PC. But sometimes especially in network devices
such as switches,routers, needs more granularity for detecting phy state change.
---
drivers/net/phy/phy.c | 4 +++-
drivers/net/phy/phy_device.c | 43 ++++++++++++++++++++++++++++++++++++++++++
include/linux/phy.h | 1 -
3 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index ef9ea92..126a69f 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -42,6 +42,8 @@
#include
#include
+extern unsigned long sysctl_phy_poll_interval;
+
/**
* phy_print_status - Convenience function to print out the current phy status
* @phydev: the phy_device struct
@@ -966,7 +968,7 @@ void phy_state_machine(struct work_struct *work)
if (err < 0)
phy_error(phydev);
- schedule_delayed_work(&phydev->state_queue, PHY_STATE_TIME * HZ);
+ schedule_delayed_work(&phydev->state_queue, msecs_to_jiffies(sysctl_phy_poll_interval));
}
static inline void mmd_phy_indirect(struct mii_bus *bus, int prtad, int devad,
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 3657b4a..c2697e2 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -33,6 +33,7 @@
#include
#include
#include
+#include
#include
#include
@@ -42,6 +43,45 @@ MODULE_DESCRIPTION("PHY library");
MODULE_AUTHOR("Andy Fleming");
MODULE_LICENSE("GPL");
+unsigned long sysctl_phy_poll_interval = 1000;
+static unsigned long min_phy_poll_interval = 1;
+static unsigned long max_phy_poll_interval = 10000;
+
+static struct ctl_table_header *phy_table_header;
+
+static ctl_table phy_table[] = {
+ {
+ .procname = "phy_poll_interval",
+ .data = &sysctl_phy_poll_interval,
+ .maxlen = sizeof(long),
+ .mode = 0644,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &min_phy_poll_interval,
+ .extra2 = &max_phy_poll_interval,
+ },
+ { }
+};
+
+static ctl_table phy_dir_table[] = {
+ {
+ .procname = "phy",
+ .maxlen = 0,
+ .mode = 0555,
+ .child = phy_table,
+ },
+ {}
+};
+
+static ctl_table phy_root_table[] = {
+ {
+ .procname = "dev",
+ .maxlen = 0,
+ .mode = 0555,
+ .child = phy_dir_table,
+ },
+ {}
+};
+
void phy_device_free(struct phy_device *phydev)
{
put_device(&phydev->dev);
@@ -1134,6 +1174,8 @@ static int __init phy_init(void)
if (rc)
mdio_bus_exit();
+ phy_table_header = register_sysctl_table(phy_root_table);
+
return rc;
}
@@ -1141,6 +1183,7 @@ static void __exit phy_exit(void)
{
phy_driver_unregister(&genphy_driver);
mdio_bus_exit();
+ unregister_sysctl_table(phy_table_header);
}
subsys_initcall(phy_init);
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 33999ad..0cbc1fe 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -68,7 +68,6 @@ typedef enum {
#define PHY_INIT_TIMEOUT 100000
-#define PHY_STATE_TIME 1
#define PHY_FORCE_TIMEOUT 10
#define PHY_AN_TIMEOUT 10
--
1.7.10.4
next reply other threads:[~2013-03-10 23:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-10 23:44 EUNBONG SONG [this message]
2013-03-11 10:45 ` Fwd: [PATCH] phydev: Add sysctl variable for polling interval of phy Florian Fainelli
2013-03-11 20:39 ` Ben Hutchings
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=2566257.7001362959040495.JavaMail.weblogic@epv6ml10 \
--to=eunb.song@samsung.com \
--cc=netdev@vger.kernel.org \
/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.