Skip site navigation (1)Skip section navigation (2)
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>