Rather than fix questionable ifnet list locking in the implementation of
the kern.polling.enable sysctl, remove the sysctl. It has been deprecated since FreeBSD 6 in favour of per-ifnet polling flags. Reviewed by: luigi Approved by: re (kib)
This commit is contained in:
parent
d931ea0961
commit
a38fdf2946
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=196267
@ -87,6 +87,16 @@ feature.
|
||||
It is turned on and off with help of
|
||||
.Xr ifconfig 8
|
||||
command.
|
||||
.Pp
|
||||
The historic
|
||||
.Va kern.polling.enable ,
|
||||
which enabled polling for all interfaces, can be replaced with the following
|
||||
code:
|
||||
.Bd -literal
|
||||
for i in `ifconfig -l` ;
|
||||
do ifconfig $i polling; # use -polling to disable
|
||||
done
|
||||
.Ed
|
||||
.Ss MIB Variables
|
||||
The operation of
|
||||
.Nm
|
||||
@ -156,15 +166,6 @@ Default is 20.
|
||||
How many active devices have registered for
|
||||
.Nm .
|
||||
.Pp
|
||||
.It Va kern.polling.enable
|
||||
Legacy MIB, that was used to enable or disable polling globally.
|
||||
Currently if set to 1,
|
||||
.Nm
|
||||
is enabled on all capable interfaces.
|
||||
If set to 0,
|
||||
.Nm
|
||||
is disabled on all interfaces.
|
||||
.Pp
|
||||
.It Va kern.polling.short_ticks
|
||||
.It Va kern.polling.lost_polls
|
||||
.It Va kern.polling.pending_polls
|
||||
|
@ -46,8 +46,6 @@ __FBSDID("$FreeBSD$");
|
||||
#include <net/netisr.h> /* for NETISR_POLL */
|
||||
#include <net/vnet.h>
|
||||
|
||||
static int poll_switch(SYSCTL_HANDLER_ARGS);
|
||||
|
||||
void hardclock_device_poll(void); /* hook from hardclock */
|
||||
|
||||
static struct mtx poll_mtx;
|
||||
@ -230,10 +228,6 @@ static uint32_t poll_handlers; /* next free entry in pr[]. */
|
||||
SYSCTL_UINT(_kern_polling, OID_AUTO, handlers, CTLFLAG_RD,
|
||||
&poll_handlers, 0, "Number of registered poll handlers");
|
||||
|
||||
static int polling = 0;
|
||||
SYSCTL_PROC(_kern_polling, OID_AUTO, enable, CTLTYPE_UINT | CTLFLAG_RW,
|
||||
0, sizeof(int), poll_switch, "I", "Switch polling for all interfaces");
|
||||
|
||||
static uint32_t phase;
|
||||
SYSCTL_UINT(_kern_polling, OID_AUTO, phase, CTLFLAG_RD,
|
||||
&phase, 0, "Polling phase");
|
||||
@ -538,49 +532,6 @@ ether_poll_deregister(struct ifnet *ifp)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Legacy interface for turning polling on all interfaces at one time.
|
||||
*/
|
||||
static int
|
||||
poll_switch(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
struct ifnet *ifp;
|
||||
int error;
|
||||
int val = polling;
|
||||
|
||||
error = sysctl_handle_int(oidp, &val, 0, req);
|
||||
if (error || !req->newptr )
|
||||
return (error);
|
||||
|
||||
if (val == polling)
|
||||
return (0);
|
||||
|
||||
if (val < 0 || val > 1)
|
||||
return (EINVAL);
|
||||
|
||||
polling = val;
|
||||
|
||||
IFNET_RLOCK();
|
||||
TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
|
||||
if (ifp->if_capabilities & IFCAP_POLLING) {
|
||||
struct ifreq ifr;
|
||||
|
||||
if (val == 1)
|
||||
ifr.ifr_reqcap =
|
||||
ifp->if_capenable | IFCAP_POLLING;
|
||||
else
|
||||
ifr.ifr_reqcap =
|
||||
ifp->if_capenable & ~IFCAP_POLLING;
|
||||
(void) (*ifp->if_ioctl)(ifp, SIOCSIFCAP, (caddr_t)&ifr);
|
||||
}
|
||||
}
|
||||
IFNET_RUNLOCK();
|
||||
|
||||
log(LOG_ERR, "kern.polling.enable is deprecated. Use ifconfig(8)");
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
poll_idle(void)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user