Date: Tue, 13 Mar 2018 13:05:56 +0100 From: Henri Hennebert <hlh@restart.be> To: freebsd-arm@freebsd.org Subject: Re: 3 problems with Pine64+ 12.0-CURRENT r328259 Message-ID: <fa88d375-9df8-5b81-4a27-9c6f575a111f@restart.be> In-Reply-To: <fdf7ea24-6ada-dbb1-146a-0bf6fde11d29@restart.be> References: <fdf7ea24-6ada-dbb1-146a-0bf6fde11d29@restart.be>
next in thread | previous in thread | raw e-mail | index | archive | help
On 01/29/2018 14:15, Henri Hennebert wrote: > Hello, > > I encounter some problems with r328259 on Pine64+ 2GB > > 1. to complete boot I must boot in verbose mode else kernel freeze after: > > ... > Timecounters tick every 1.000 msec > usbus0: 480Mbps High Speed USB v2.0 > usbus1: 12Mbps Full Speed USB v1.0 > --- freeze --- Solved since r329463 > > 2. If I run multiple times `periodic daily` with root on a USB disk > connected with a auto powered hub, time drift too fast even with ntpd > running. Now I'm running r330758 and the time drift is still there. The ntpd log say that _every_ time the problem arise, the drift is around -178.95 > > 3. The connection to internet with mpd5 and a box in bridge mode has > a sluggish throughput (7 to 9 KB/s) > The same config running r320599 has a throughput of 3 to 4MB/s. This > r320599 run with this patch (Bug 220140): > > --- sys/netgraph/ng_iface.c.orig 2017-06-19 19:50:51.428612000 +0700 > +++ sys/netgraph/ng_iface.c 2017-06-19 19:51:31.196104000 +0700 > @@ -64,6 +64,7 @@ > #include <sys/errno.h> > #include <sys/proc.h> > #include <sys/random.h> > +#include <sys/rmlock.h> > #include <sys/sockio.h> > #include <sys/socket.h> > #include <sys/syslog.h> > @@ -112,9 +113,15 @@ struct ng_iface_private { > int unit; /* Interface unit number */ > node_p node; /* Our netgraph node */ > hook_p hooks[NUM_FAMILIES]; /* Hook for each address family */ > + struct rmlock lock; /* Protect private data changes */ > }; > typedef struct ng_iface_private *priv_p; > > +#define PRIV_RLOCK(priv, t) rm_rlock(&priv->lock, t) > +#define PRIV_RUNLOCK(priv, t) rm_runlock(&priv->lock, t) > +#define PRIV_WLOCK(priv) rm_wlock(&priv->lock) > +#define PRIV_WUNLOCK(priv) rm_wunlock(&priv->lock) > + > /* Interface methods */ > static void ng_iface_start(struct ifnet *ifp); > static int ng_iface_ioctl(struct ifnet *ifp, u_long cmd, caddr_t > data); > @@ -431,6 +438,7 @@ ng_iface_bpftap(struct ifnet *ifp, struc > static int > ng_iface_send(struct ifnet *ifp, struct mbuf *m, sa_family_t sa) > { > + struct rm_priotracker priv_tracker; > const priv_p priv = (priv_p) ifp->if_softc; > const iffam_p iffam = get_iffam_from_af(sa); > int error; > @@ -448,7 +456,9 @@ ng_iface_send(struct ifnet *ifp, struct > > /* Send packet. If hook is not connected, mbuf will get freed. */ > NG_OUTBOUND_THREAD_REF(); > + PRIV_RLOCK(priv, &priv_tracker); > NG_SEND_DATA_ONLY(error, *get_hook_from_iffam(priv, iffam), m); > + PRIV_RUNLOCK(priv, &priv_tracker); > NG_OUTBOUND_THREAD_UNREF(); > > /* Update stats. */ > @@ -516,6 +526,8 @@ ng_iface_constructor(node_p node) > return (ENOMEM); > } > > + rm_init(&priv->lock, "ng_iface private rmlock"); > + > /* Link them together */ > ifp->if_softc = priv; > priv->ifp = ifp; > @@ -562,16 +574,21 @@ static int > ng_iface_newhook(node_p node, hook_p hook, const char *name) > { > const iffam_p iffam = get_iffam_from_name(name); > + const priv_p priv = NG_NODE_PRIVATE(node); > hook_p *hookptr; > > if (iffam == NULL) > return (EPFNOSUPPORT); > - hookptr = get_hook_from_iffam(NG_NODE_PRIVATE(node), iffam); > - if (*hookptr != NULL) > + PRIV_WLOCK(priv); > + hookptr = get_hook_from_iffam(priv, iffam); > + if (*hookptr != NULL) { > + PRIV_WUNLOCK(priv); > return (EISCONN); > + } > *hookptr = hook; > NG_HOOK_HI_STACK(hook); > NG_HOOK_SET_TO_INBOUND(hook); > + PRIV_WUNLOCK(priv); > return (0); > } > > @@ -730,6 +747,7 @@ ng_iface_shutdown(node_p node) > CURVNET_RESTORE(); > priv->ifp = NULL; > free_unr(V_ng_iface_unit, priv->unit); > + rm_destroy(&priv->lock); > free(priv, M_NETGRAPH_IFACE); > NG_NODE_SET_PRIVATE(node, NULL); > NG_NODE_UNREF(node); > @@ -748,7 +766,9 @@ ng_iface_disconnect(hook_p hook) > > if (iffam == NULL) > panic("%s", __func__); > + PRIV_WLOCK(priv); > *get_hook_from_iffam(priv, iffam) = NULL; > + PRIV_WUNLOCK(priv); > return (0); > } > > Does someone else encounter those problems? > > Henri > _______________________________________________ > freebsd-arm@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-arm > To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?fa88d375-9df8-5b81-4a27-9c6f575a111f>