Re: Pump my sched: fewer SCHED_LOCK() & kill p_priority

2019-06-23 Thread Amit Kulkarni
On Fri, 21 Jun 2019 21:54:18 -0700
Mike Larkin  wrote:

> On Fri, Jun 21, 2019 at 05:11:26PM -0300, Martin Pieuchot wrote:
> > On 06/06/19(Thu) 15:16, Martin Pieuchot wrote:
> > > On 02/06/19(Sun) 16:41, Martin Pieuchot wrote:
> > > > On 01/06/19(Sat) 18:55, Martin Pieuchot wrote:
> > > > > Diff below exists mainly for documentation and test purposes.  If
> > > > > you're not interested about how to break the scheduler internals in
> > > > > pieces, don't read further and go straight to testing!
> > > > > 
> > > > > - First change is to stop calling tsleep(9) at PUSER.  That makes
> > > > >   it clear that all "sleeping priorities" are smaller than PUSER.
> > > > >   That's important to understand for the diff below.  `p_priority'
> > > > >   is currently a placeholder for the "sleeping priority" and the
> > > > >   "runnqueue priority".  Both fields are separated by this diff.
> > > > > 
> > > > > - When a thread goes to sleep, the priority argument of tsleep(9) is
> > > > >   now recorded in `p_slpprio'.  This argument can be considered as 
> > > > > part
> > > > >   of the sleep queue.  Its purpose is to place the thread into a 
> > > > > higher
> > > > >   runqueue when awoken.
> > > > > 
> > > > > - Currently, for stopped threads, `p_priority' correspond to 
> > > > > `p_usrpri'. 
> > > > >   So setrunnable() has been untangled to place SSTOP and SSLEEP 
> > > > > threads
> > > > >   in the preferred queue without having to use `p_priority'.  Note 
> > > > > that
> > > > >   `p_usrpri' is still recalculated *after* having called 
> > > > > setrunqueue().
> > > > >   This is currently fine because setrunnable() is called with 
> > > > > SCHED_LOCK() 
> > > > >   but it will be racy when we'll split it.
> > > > > 
> > > > > - A new field, `p_runprio' has been introduced.  It should be 
> > > > > considered
> > > > >   as part of the per-CPU runqueues.  It indicates where a current 
> > > > > thread
> > > > >   is placed.
> > > > > 
> > > > > - `spc_curpriority' is now updated at every context-switch.  That 
> > > > > means
> > > > >need_resched() won't be called after comparing an out-of-date 
> > > > > value.
> > > > >At the same time, `p_usrpri' is initialized to the highest possible
> > > > >value for idle threads.
> > > > > 
> > > > > - resched_proc() was calling need_resched() in the following 
> > > > > conditions:
> > > > >- If the SONPROC thread has a higher priority that the current
> > > > >  running thread (itself).
> > > > >- Twice in setrunnable() when we know that p_priority <= p_usrpri.
> > > > >- If schedcpu() considered that a thread, after updating its prio,
> > > > >  should preempt the one running on the CPU pointed by `p_cpu'. 
> > > > > 
> > > > >   The diff below simplify all of that by calling need_resched() when:
> > > > >- A thread is inserted in a CPU runqueue at a higher priority than
> > > > >  the one SONPROC.
> > > > >- schedcpu() decides that a thread in SRUN state should preempt the
> > > > >  one SONPROC.
> > > > > 
> > > > > - `p_estcpu' `p_usrpri' and `p_slptime' which represent the "priority"
> > > > >   of a thread are now updated while holding a per-thread mutex.  As a
> > > > >   result schedclock() and donice() no longer takes the SCHED_LOCK(),
> > > > >   and schedcpu() almost never take it.
> > > > > 
> > > > > - With this diff top(1) and ps(1) will report the "real" `p_usrpi' 
> > > > > value
> > > > >   when displaying priorities.  This is helpful to understand what's
> > > > >   happening:
> > > > > 
> > > > > load averages:  0.99,  0.56,  0.25   
> > > > > two.lab.grenadille.net 23:42:10
> > > > > 70 threads: 68 idle, 2 on processor   
> > > > >  up  0:09
> > > > > CPU0:  0.0% user,  0.0% nice, 51.0% sys,  2.0% spin,  0.0% intr, 
> > > > > 47.1% idle
> > > > > CPU1:  2.0% user,  0.0% nice, 51.0% sys,  3.9% spin,  0.0% intr, 
> > > > > 43.1% idle
> > > > > Memory: Real: 47M/1005M act/tot Free: 2937M Cache: 812M Swap: 0K/4323M
> > > > > 
> > > > >   PID  TID PRI NICE  SIZE   RES STATE WAIT  TIMECPU 
> > > > > COMMAND
> > > > > 81000   145101  7200K 1664K sleep/1   bored 1:15 36.96% 
> > > > > softnet
> > > > > 47133   244097  730 2984K 4408K sleep/1   netio 1:06 35.06% 
> > > > > cvs 
> > > > > 64749   522184  660  176K  148K onproc/1  - 0:55 28.81% 
> > > > > nfsd
> > > > > 21615   602473 12700K 1664K sleep/0   - 7:22  0.00% 
> > > > > idle0  
> > > > > 12413   606242 12700K 1664K sleep/1   - 7:08  0.00% 
> > > > > idle1
> > > > > 85778   338258  500 4936K 7308K idle  select0:10  0.00% 
> > > > > ssh  
> > > > > 22771   575513  500  176K  148K sleep/0   nfsd  0:02  0.00% 
> > > > > nfsd 
> > > > > 
> > > > > 
> > > > > 
> > > > > - The removal of `p_priority' and the change that makes mi_switch()
> > > > >   always update `spc_curpriority' might introduce some 

ospfd: point-to-point on ethernet interfaces

2019-06-23 Thread Remi Locherer
Diff below adds to ospfd point to point support for Ethernet interfaces.
I successfully tested this against Junos and FastIron.

I first made the key word in the config "point-to-point". But then I
changed to "type p2p". The later would allow for "type nbma" or "type p2mp"
should we implement these types.

On Junos it looks like this:

area 0.0.0.0 {
interface ge-0/0/1.0 {
interface-type p2p;
}
}

On FastIron it's similar to IOS:

interface ethernet 1/2/1
 ip address 10.10.10.5 255.255.255.0
 ip ospf area 0
 ip ospf network point-to-point

Comments, test reports and OKs are welcome.

Remi


Index: interface.c
===
RCS file: /cvs/src/usr.sbin/ospfd/interface.c,v
retrieving revision 1.82
diff -u -p -r1.82 interface.c
--- interface.c 11 Mar 2018 13:16:49 -  1.82
+++ interface.c 23 Jun 2019 11:27:57 -
@@ -190,6 +190,8 @@ if_new(struct kif *kif, struct kif_addr 
if (kif->flags & IFF_BROADCAST &&
kif->flags & IFF_MULTICAST)
iface->type = IF_TYPE_BROADCAST;
+   if (iface->p2p)
+   iface->type = IF_TYPE_POINTOPOINT;
if (kif->flags & IFF_LOOPBACK) {
iface->type = IF_TYPE_POINTOPOINT;
iface->passive = 1;
@@ -351,6 +353,9 @@ if_act_start(struct iface *iface)
orig_rtr_lsa(iface->area);
return (0);
}
+
+   if (iface->p2p)
+   iface->type = IF_TYPE_POINTOPOINT;
 
switch (iface->type) {
case IF_TYPE_POINTOPOINT:
Index: ospfd.c
===
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.c,v
retrieving revision 1.108
diff -u -p -r1.108 ospfd.c
--- ospfd.c 16 May 2019 05:49:22 -  1.108
+++ ospfd.c 23 Jun 2019 21:06:44 -
@@ -911,6 +911,22 @@ merge_interfaces(struct area *a, struct 
if_fsm(i, IF_EVT_UP);
}
 
+   if (i->p2p != xi->p2p) {
+   /* re-add interface to enable or disable DR election */
+   if (ospfd_process == PROC_OSPF_ENGINE)
+   if_fsm(i, IF_EVT_DOWN);
+   else if (ospfd_process == PROC_RDE_ENGINE)
+   rde_nbr_iface_del(i);
+   LIST_REMOVE(i, entry);
+   if_del(i);
+   LIST_REMOVE(xi, entry);
+   LIST_INSERT_HEAD(>iface_list, xi, entry);
+   xi->area = a;
+   if (ospfd_process == PROC_OSPF_ENGINE)
+   xi->state = IF_STA_NEW;
+   continue;
+   }
+
strlcpy(i->dependon, xi->dependon,
sizeof(i->dependon));
i->depend_ok = xi->depend_ok;
Index: ospfd.conf.5
===
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.conf.5,v
retrieving revision 1.57
diff -u -p -r1.57 ospfd.conf.5
--- ospfd.conf.510 Jun 2019 06:07:15 -  1.57
+++ ospfd.conf.523 Jun 2019 22:10:32 -
@@ -419,6 +419,9 @@ Router.
 .It Ic transmit-delay Ar seconds
 Set the transmit delay.
 The default value is 1; valid range is 1\-3600 seconds.
+.It Ic type p2p
+Set the interface type to point to point.
+This disables the election of a DR and BDR for the given interface.
 .El
 .Sh FILES
 .Bl -tag -width "/etc/ospfd.conf" -compact
Index: ospfd.h
===
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.h,v
retrieving revision 1.104
diff -u -p -r1.104 ospfd.h
--- ospfd.h 16 May 2019 05:49:22 -  1.104
+++ ospfd.h 23 Jun 2019 11:28:24 -
@@ -363,6 +363,7 @@ struct iface {
u_int8_t linkstate;
u_int8_t priority;
u_int8_t passive;
+   u_int8_t p2p;
 };
 
 struct ifaddrchange {
Index: parse.y
===
RCS file: /cvs/src/usr.sbin/ospfd/parse.y,v
retrieving revision 1.98
diff -u -p -r1.98 parse.y
--- parse.y 7 Jun 2019 04:57:45 -   1.98
+++ parse.y 23 Jun 2019 22:04:22 -
@@ -129,7 +129,7 @@ typedef struct {
 %token AREA INTERFACE ROUTERID FIBPRIORITY FIBUPDATE REDISTRIBUTE RTLABEL
 %token RDOMAIN RFC1583COMPAT STUB ROUTER SPFDELAY SPFHOLDTIME EXTTAG
 %token AUTHKEY AUTHTYPE AUTHMD AUTHMDKEYID
-%token METRIC PASSIVE
+%token METRIC P2P PASSIVE
 %token HELLOINTERVAL FASTHELLOINTERVAL TRANSMITDELAY
 %token RETRANSMITINTERVAL ROUTERDEADTIME ROUTERPRIORITY
 %token SET TYPE
@@ -743,6 +743,7 @@ interfaceopts_l : interfaceopts_l interf
;
 
 interfaceoptsl : PASSIVE   { iface->passive = 1; }
+   | TYPE P2P  { iface->p2p = 1; }
| DEMOTE STRING {

gemini lake gpio

2019-06-23 Thread James Hastings
New driver for Gemini Lake GPIO controller.

Nearly identical to Apollo Lake with few changes.
Pad configuration is now 16 bytes starting at offset 0x600.

Index: share/man/man4/Makefile
===
RCS file: /cvs/src/share/man/man4/Makefile,v
retrieving revision 1.714
diff -u -p -u -r1.714 Makefile
--- share/man/man4/Makefile 17 Jun 2019 18:28:17 -  1.714
+++ share/man/man4/Makefile 22 Jun 2019 08:49:36 -
@@ -27,7 +27,8 @@ MAN=  aac.4 abcrtc.4 ac97.4 acphy.4 acrtc
eso.4 ess.4 et.4 etherip.4 etphy.4 ex.4 exphy.4 exrtc.4 \
fanpwr.4 fd.4 fdc.4 fec.4 fins.4 fintek.4 fms.4 fusbtc.4 fuse.4 \
fxp.4 gdt.4 gentbi.4 gem.4 gif.4 \
-   glenv.4 gpio.4 gpiodcf.4 gpioiic.4 gpioow.4 gpr.4 gre.4 gscsio.4 \
+   glenv.4 glkgpio.4 gpio.4 gpiodcf.4 gpioiic.4 gpioow.4 \
+   gpr.4 gre.4 gscsio.4 \
hds.4 hiclock.4 hidwusb.4 hifn.4 hil.4 hilid.4 hilkbd.4 hilms.4 \
hireset.4 hitemp.4 hme.4 hotplug.4 hsq.4 \
hvn.4 hvs.4 hyperv.4 \
Index: share/man/man4/acpi.4
===
RCS file: /cvs/src/share/man/man4/acpi.4,v
retrieving revision 1.58
diff -u -p -u -r1.58 acpi.4
--- share/man/man4/acpi.4   17 Jun 2019 18:28:17 -  1.58
+++ share/man/man4/acpi.4   22 Jun 2019 08:49:36 -
@@ -100,6 +100,8 @@ AMD cryptographic co-processor
 Intel Cherry View GPIO controller
 .It Xr dwiic 4
 Synopsys DesignWare I2C controller
+.It Xr glkgpio 4
+Intel Gemini Lake GPIO controller
 .It Xr tpm 4
 Trusted Platform Module device
 .El
Index: share/man/man4/glkgpio.4
===
RCS file: share/man/man4/glkgpio.4
diff -N share/man/man4/glkgpio.4
--- /dev/null   1 Jan 1970 00:00:00 -
+++ share/man/man4/glkgpio.422 Jun 2019 08:49:36 -
@@ -0,0 +1,50 @@
+.\"$OpenBSD$
+.\"
+.\" Copyright (c) 2019 James Hastings
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate$
+.Dt GLKGPIO 4
+.Os
+.Sh NAME
+.Nm glkgpio
+.Nd Intel Gemini Lake GPIO controller
+.Sh SYNOPSIS
+.Cd "glkgpio* at acpi?"
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for the GPIO controllers found on Intel's Gemini
+Lake SoC.
+It does not provide direct device driver entry points but makes its
+functions available to
+.Xr acpi 4 .
+.Sh SEE ALSO
+.Xr acpi 4 ,
+.Xr intro 4
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Ox 6.6 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An James Hastings
+based on the
+.Xr bytgpio 4
+driver by
+.An Mark Kettenis Aq Mt kette...@openbsd.org .
Index: sys/arch/amd64/conf/GENERIC
===
RCS file: /cvs/src/sys/arch/amd64/conf/GENERIC,v
retrieving revision 1.474
diff -u -p -u -r1.474 GENERIC
--- sys/arch/amd64/conf/GENERIC 17 Jun 2019 18:28:17 -  1.474
+++ sys/arch/amd64/conf/GENERIC 22 Jun 2019 08:49:37 -
@@ -64,6 +64,7 @@ aibs* at acpi?
 aplgpio*   at acpi?
 bytgpio*   at acpi?
 chvgpio*   at acpi?
+glkgpio*   at acpi?
 sdhc*  at acpi?
 acpicbkbd* at acpi?
 acpials*   at acpi?
Index: sys/arch/amd64/conf/RAMDISK_CD
===
RCS file: /cvs/src/sys/arch/amd64/conf/RAMDISK_CD,v
retrieving revision 1.180
diff -u -p -u -r1.180 RAMDISK_CD
--- sys/arch/amd64/conf/RAMDISK_CD  17 Jun 2019 18:28:18 -  1.180
+++ sys/arch/amd64/conf/RAMDISK_CD  22 Jun 2019 08:49:37 -
@@ -47,6 +47,7 @@ bytgpio*  at acpi?
 sdhc*  at acpi?
 acpihve*   at acpi?
 chvgpio*at acpi?
+glkgpio*   at acpi?
 
 mpbios0at bios0
 
Index: sys/dev/acpi/files.acpi
===
RCS file: /cvs/src/sys/dev/acpi/files.acpi,v
retrieving revision 1.51
diff -u -p -u -r1.51 files.acpi
--- sys/dev/acpi/files.acpi 17 Jun 2019 18:28:18 -  1.51
+++ sys/dev/acpi/files.acpi 22 Jun 2019 08:49:39 -
@@ -131,6 +131,11 @@ device chvgpio
 attach chvgpio at acpi
 file   dev/acpi/chvgpio.c  chvgpio
 
+# Intel Gemini Lake GPIO
+device glkgpio
+attach glkgpio at acpi
+file   dev/acpi/glkgpio.c  

Fix regress/sys/rtable for octeon

2019-06-23 Thread Moritz Buhl
Hi,
while running regression tests on an octeon ERL, I noticed that
no-macro-redefined flag was not known to the compiler.
I added some #undefs and some hours ago a change to art_walk made
the tests fail too.

The no-macro-redefine was added 3 month ago.

Thanks,
mbuhl

Index: regress/sys/net/rtable/Makefile.inc
===
RCS file: /mount/openbsd/cvs/src/regress/sys/net/rtable/Makefile.inc,v
retrieving revision 1.4
diff -u -p -r1.4 Makefile.inc
--- regress/sys/net/rtable/Makefile.inc 31 Mar 2019 14:03:40 -  1.4
+++ regress/sys/net/rtable/Makefile.inc 21 Jun 2019 18:26:06 -
@@ -9,6 +9,6 @@ SRCS+=  art.c
 CFLAGS+=   -DART
 .endif
 
-CPPFLAGS+= -I${TOPDIR} -Wall -Wno-macro-redefined
+CPPFLAGS+= -I${TOPDIR} -Wall
 
 .PATH: ${TOPDIR} ${TOPDIR}/../../../../sys/net
Index: regress/sys/net/rtable/srp_compat.h
===
RCS file: /mount/openbsd/cvs/src/regress/sys/net/rtable/srp_compat.h,v
retrieving revision 1.5
diff -u -p -r1.5 srp_compat.h
--- regress/sys/net/rtable/srp_compat.h 27 Jul 2017 13:34:30 -  1.5
+++ regress/sys/net/rtable/srp_compat.h 21 Jun 2019 14:38:33 -
@@ -48,7 +48,9 @@ srp_swap_locked(struct srp *srp, void *n
  */
 
 #define SRPL_INIT(_sl) SLIST_INIT(_sl)
+#undef SRPL_HEAD
 #define SRPL_HEAD(name, entry) SLIST_HEAD(name, entry)
+#undef SRPL_ENTRY
 #define SRPL_ENTRY(type)   SLIST_ENTRY(type)
 
 #define SRPL_FIRST(_sr, _sl)   SLIST_FIRST(_sl);
Index: regress/sys/net/rtable/delete/main.c
===
RCS file: /mount/openbsd/cvs/src/regress/sys/net/rtable/delete/main.c,v
retrieving revision 1.5
diff -u -p -r1.5 main.c
--- regress/sys/net/rtable/delete/main.c15 Nov 2016 10:43:41 -  
1.5
+++ regress/sys/net/rtable/delete/main.c21 Jun 2019 18:20:20 -
@@ -58,9 +58,9 @@ main(int argc, char *argv[])
 
do_from_file(0, AF_INET6, filename, route_insert);
 
-   rtable_walk(0, AF_INET6, rtentry_delete, NULL);
+   rtable_walk(0, AF_INET6, NULL, rtentry_delete, NULL);
 
-   rtable_walk(0, AF_INET6, rtentry_dump, NULL);
+   rtable_walk(0, AF_INET6, NULL, rtentry_dump, NULL);
 
 #ifdef ART
struct art_root *ar;
Index: regress/sys/net/rtable/fullfeed/main.c
===
RCS file: /mount/openbsd/cvs/src/regress/sys/net/rtable/fullfeed/main.c,v
retrieving revision 1.3
diff -u -p -r1.3 main.c
--- regress/sys/net/rtable/fullfeed/main.c  15 Nov 2016 10:43:41 -  
1.3
+++ regress/sys/net/rtable/fullfeed/main.c  21 Jun 2019 18:20:38 -
@@ -53,7 +53,7 @@ main(int argc, char *argv[])
do_from_file(0, af, filename, route_insert);
do_from_file(0, af, filename, route_lookup);
 
-   rtable_walk(0, af, rtentry_dump, NULL);
+   rtable_walk(0, af, NULL, rtentry_dump, NULL);
 
do_from_file(0, af, filename, route_delete);
 



Re: bgpd fix mrt table dumps

2019-06-23 Thread Sebastian Benoit
Claudio Jeker(cje...@diehard.n-r-g.com) on 2019.06.22 10:30:46 +0200:
> Once again I broke mrt table dumps a bit. This time by not dumping the

sorry about that.

> community data anymore. Add this back by adding the needed code in
> rde_community.c and some other minor adjustments.
> 
> With this the just commited regress test passes again :)

and i checked the dumps, and the code looks ok.

> -- 
> :wq Claudio
> 
> Index: mrt.c
> ===
> RCS file: /cvs/src/usr.sbin/bgpd/mrt.c,v
> retrieving revision 1.95
> diff -u -p -r1.95 mrt.c
> --- mrt.c 22 Jun 2019 05:44:05 -  1.95
> +++ mrt.c 22 Jun 2019 06:34:50 -
> @@ -34,7 +34,8 @@
>  #include "mrt.h"
>  #include "log.h"
>  
> -int mrt_attr_dump(struct ibuf *, struct rde_aspath *, struct bgpd_addr *, 
> int);
> +int mrt_attr_dump(struct ibuf *, struct rde_aspath *, struct rde_community *,
> +struct bgpd_addr *, int);
>  int mrt_dump_entry_mp(struct mrt *, struct prefix *, u_int16_t,
>  struct rde_peer*);
>  int mrt_dump_entry(struct mrt *, struct prefix *, u_int16_t, struct 
> rde_peer*);
> @@ -143,8 +144,8 @@ fail:
>  }
>  
>  int
> -mrt_attr_dump(struct ibuf *buf, struct rde_aspath *a, struct bgpd_addr 
> *nexthop,
> -int v2)
> +mrt_attr_dump(struct ibuf *buf, struct rde_aspath *a, struct rde_community 
> *c,
> +struct bgpd_addr *nexthop, int v2)
>  {
>   struct attr *oa;
>   u_char  *pdata;
> @@ -188,6 +189,10 @@ mrt_attr_dump(struct ibuf *buf, struct r
>   if (attr_writebuf(buf, ATTR_WELL_KNOWN, ATTR_LOCALPREF, , 4) == -1)
>   return (-1);
>  
> + /* communities */
> + if (community_writebuf(buf, c) == -1)
> + return (-1);
> +
>   /* dump all other path attributes without modification */
>   for (l = 0; l < a->others_len; l++) {
>   if ((oa = a->others[l]) == NULL)
> @@ -272,7 +277,8 @@ mrt_dump_entry_mp(struct mrt *mrt, struc
>   return (-1);
>   }
>  
> - if (mrt_attr_dump(buf, prefix_aspath(p), NULL, 0) == -1) {
> + if (mrt_attr_dump(buf, prefix_aspath(p), prefix_communities(p),
> + NULL, 0) == -1) {
>   log_warnx("mrt_dump_entry_mp: mrt_attr_dump error");
>   goto fail;
>   }
> @@ -401,7 +407,8 @@ mrt_dump_entry(struct mrt *mrt, struct p
>   nh = 
>   } else
>   nh = >exit_nexthop;
> - if (mrt_attr_dump(buf, prefix_aspath(p), nh, 0) == -1) {
> + if (mrt_attr_dump(buf, prefix_aspath(p), prefix_communities(p),
> + nh, 0) == -1) {
>   log_warnx("mrt_dump_entry: mrt_attr_dump error");
>   ibuf_free(buf);
>   return (-1);
> @@ -529,7 +536,8 @@ mrt_dump_entry_v2(struct mrt *mrt, struc
>   log_warn("%s: ibuf_dynamic", __func__);
>   return (-1);
>   }
> - if (mrt_attr_dump(tbuf, prefix_aspath(p), nh, 1) == -1) {
> + if (mrt_attr_dump(tbuf, prefix_aspath(p), prefix_communities(p),
> + nh, 1) == -1) {
>   log_warnx("%s: mrt_attr_dump error", __func__);
>   ibuf_free(buf);
>   return (-1);
> @@ -641,7 +649,7 @@ mrt_dump_peer(struct ibuf *buf, struct r
>   goto fail;
>   }
>   break;
> - case AID_UNSPEC: /* XXX special handling for peer_self? */
> + case AID_UNSPEC: /* XXX special handling for peerself? */
>   DUMP_NLONG(buf, 0);
>   break;
>   default:
> Index: rde.h
> ===
> RCS file: /cvs/src/usr.sbin/bgpd/rde.h,v
> retrieving revision 1.217
> diff -u -p -r1.217 rde.h
> --- rde.h 22 Jun 2019 05:44:05 -  1.217
> +++ rde.h 22 Jun 2019 06:34:50 -
> @@ -395,20 +395,21 @@ u_char  *aspath_override(struct aspath *
>   u_int16_t *);
>  int   aspath_lenmatch(struct aspath *, enum aslen_spec, u_int);
>  
> -int   community_match(struct rde_community *, struct community *,
> +int  community_match(struct rde_community *, struct community *,
>   struct rde_peer *);
> -int   community_set(struct rde_community *, struct community *,
> +int  community_set(struct rde_community *, struct community *,
>   struct rde_peer *);
> -void  community_delete(struct rde_community *, struct community *,
> +void community_delete(struct rde_community *, struct community *,
>   struct rde_peer *);
>  
> -int   community_add(struct rde_community *, int, void *, size_t);
> -int   community_large_add(struct rde_community *, int, void *, size_t);
> -int   community_ext_add(struct rde_community *, int, void *, size_t);
> +int  community_add(struct rde_community *, int, void *, size_t);
> +int  community_large_add(struct rde_community *, int, void *, size_t);
> +int  community_ext_add(struct rde_community *, int, void *, 

Re: [patch] rsync: fix free() on uninitialized pointer with -rx and same device

2019-06-23 Thread Sebastian Benoit
Hiltjo Posthuma(hil...@codemadness.org) on 2019.06.21 13:32:10 +0200:
> On Wed, Jun 12, 2019 at 06:58:31PM +0200, Hiltjo Posthuma wrote:
> > On Thu, Jun 06, 2019 at 02:14:05PM +0200, Christian Weisgerber wrote:
> > > Bj??rn Ketelaars:
> > > 
> > > > Diff below is based on the latest diff from naddy@. Changes:
> > > > - reallocarray likes type_t, as such changes type of nxdev and i;
> > > > - use reallocarray instead of malloc as xdev is initialised as NULL.
> > > 
> > > ok naddy@
> > > 
> > > -- 
> > > Christian "naddy" Weisgerber  na...@mips.inka.de
> > > 
> > 
> > Looks good to me.
> > 
> > I have 2 or 3 more patches locally. It would be nice if the above patch can 
> > get
> > committed so I can rebase and send a clean patch.
> > 
> 
> Hi,
> 
> This patch has not been committed yet. Is it possible to commit it or does it
> need further work/review? If so, I'm happy to help.

I just commited it,
Thanks forthe reminder!

/Benno