svn commit: r360866 - head/sys/net
Author: melifaro Date: Sun May 10 09:34:48 2020 New Revision: 360866 URL: https://svnweb.freebsd.org/changeset/base/360866 Log: Remove rtalloc1(_fib) KPI. Last user of rtalloc1() KPI has been eliminated in rS360631. As kernel is now fully switched to use new routing KPI defined in rS359823, remove old lookup functions. Differential Revision:https://reviews.freebsd.org/D24776 Modified: head/sys/net/route.c head/sys/net/route.h Modified: head/sys/net/route.c == --- head/sys/net/route.cSun May 10 03:36:11 2020(r360865) +++ head/sys/net/route.cSun May 10 09:34:48 2020(r360866) @@ -420,76 +420,6 @@ sys_setfib(struct thread *td, struct setfib_args *uap) } /* - * Look up the route that matches the address given - * Or, at least try.. Create a cloned route if needed. - * - * The returned route, if any, is locked. - */ -struct rtentry * -rtalloc1(struct sockaddr *dst, int report, u_long ignflags) -{ - - return (rtalloc1_fib(dst, report, ignflags, RT_DEFAULT_FIB)); -} - -struct rtentry * -rtalloc1_fib(struct sockaddr *dst, int report, u_long ignflags, - u_int fibnum) -{ - RIB_RLOCK_TRACKER; - struct rib_head *rh; - struct radix_node *rn; - struct rtentry *newrt; - struct rt_addrinfo info; - int err = 0, msgtype = RTM_MISS; - - KASSERT((fibnum < rt_numfibs), ("rtalloc1_fib: bad fibnum")); - rh = rt_tables_get_rnh(fibnum, dst->sa_family); - newrt = NULL; - if (rh == NULL) - goto miss; - - /* -* Look up the address in the table for that Address Family -*/ - if ((ignflags & RTF_RNH_LOCKED) == 0) - RIB_RLOCK(rh); -#ifdef INVARIANTS - else - RIB_LOCK_ASSERT(rh); -#endif - rn = rh->rnh_matchaddr(dst, &rh->head); - if (rn && ((rn->rn_flags & RNF_ROOT) == 0)) { - newrt = RNTORT(rn); - RT_LOCK(newrt); - RT_ADDREF(newrt); - if ((ignflags & RTF_RNH_LOCKED) == 0) - RIB_RUNLOCK(rh); - return (newrt); - - } else if ((ignflags & RTF_RNH_LOCKED) == 0) - RIB_RUNLOCK(rh); - /* -* Either we hit the root or could not find any match, -* which basically means: "cannot get there from here". -*/ -miss: - RTSTAT_INC(rts_unreach); - - if (report) { - /* -* If required, report the failure to the supervising -* Authorities. -* For a delete, this is not an error. (report == 0) -*/ - bzero(&info, sizeof(info)); - info.rti_info[RTAX_DST] = dst; - rt_missmsg_fib(msgtype, &info, 0, err, fibnum); - } - return (newrt); -} - -/* * Remove a reference count from an rtentry. * If the count gets low enough, take it out of the routing table */ Modified: head/sys/net/route.h == --- head/sys/net/route.hSun May 10 03:36:11 2020(r360865) +++ head/sys/net/route.hSun May 10 09:34:48 2020(r360866) @@ -392,8 +392,6 @@ struct sockaddr *rtsock_fix_netmask(const struct socka /* * Note the following locking behavior: * - *rtalloc1() returns a locked rtentry - * *rtfree() and RTFREE_LOCKED() require a locked rtentry * *RTFREE() uses an unlocked entry. @@ -414,14 +412,12 @@ void rt_flushifroutes(struct ifnet *ifp); /* XXX MRT COMPAT VERSIONS THAT SET UNIVERSE to 0 */ /* Thes are used by old code not yet converted to use multiple FIBS */ -struct rtentry *rtalloc1(struct sockaddr *, int, u_long); int rtinit(struct ifaddr *, int, int); /* XXX MRT NEW VERSIONS THAT USE FIBs * For now the protocol indepedent versions are the same as the AF_INET ones * but this will change.. */ -struct rtentry *rtalloc1_fib(struct sockaddr *, int, u_long, u_int); int rtioctl_fib(u_long, caddr_t, u_int); int rtrequest_fib(int, struct sockaddr *, struct sockaddr *, struct sockaddr *, int, struct rtentry **, u_int); ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360869 - head/sys/netinet
Author: tuexen Date: Sun May 10 10:03:10 2020 New Revision: 360869 URL: https://svnweb.freebsd.org/changeset/base/360869 Log: Only drop DATA chunk with lower priorities as specified in RFC 7496. This issue was found by looking at a reproducer generated by syzkaller. MFC after:3 days Modified: head/sys/netinet/sctp_output.c Modified: head/sys/netinet/sctp_output.c == --- head/sys/netinet/sctp_output.c Sun May 10 09:50:44 2020 (r360868) +++ head/sys/netinet/sctp_output.c Sun May 10 10:03:10 2020 (r360869) @@ -6199,11 +6199,11 @@ sctp_prune_prsctp(struct sctp_tcb *stcb, * This one is PR-SCTP AND buffer space * limited type */ - if (chk->rec.data.timetodrop.tv_sec >= (long)srcv->sinfo_timetolive) { + if (chk->rec.data.timetodrop.tv_sec > (long)srcv->sinfo_timetolive) { /* * Lower numbers equates to higher * priority so if the one we are -* looking at has a larger or equal +* looking at has a larger * priority we want to drop the data * and NOT retransmit it. */ @@ -6234,7 +6234,7 @@ sctp_prune_prsctp(struct sctp_tcb *stcb, TAILQ_FOREACH_SAFE(chk, &asoc->send_queue, sctp_next, nchk) { /* Here we must move to the sent queue and mark */ if (PR_SCTP_BUF_ENABLED(chk->flags)) { - if (chk->rec.data.timetodrop.tv_sec >= (long)srcv->sinfo_timetolive) { + if (chk->rec.data.timetodrop.tv_sec > (long)srcv->sinfo_timetolive) { if (chk->data) { /* * We release the book_size @@ -12617,7 +12617,7 @@ sctp_lower_sosend(struct socket *so, top = SCTP_HEADER_TO_CHAIN(i_pak); sndlen = SCTP_HEADER_LEN(i_pak); } - SCTPDBG(SCTP_DEBUG_OUTPUT1, "Send called addr:%p send length %zu\n", + SCTPDBG(SCTP_DEBUG_OUTPUT1, "Send called addr:%p send length %zd\n", (void *)addr, sndlen); if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) && ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360870 - head/sys/compat/linuxkpi/common/include/linux
Author: manu Date: Sun May 10 13:07:00 2020 New Revision: 360870 URL: https://svnweb.freebsd.org/changeset/base/360870 Log: linuxkpi: Add bitmap_alloc and bitmap_free This is a simple call to kmallock_array/kfree, therefore include linux/slab.h as this is where the kmalloc_array/kfree definition is. Sponsored-by: The FreeBSD Foundation Reviewed by: hselsasky Differential Revision:https://reviews.freebsd.org/D24794 Modified: head/sys/compat/linuxkpi/common/include/linux/bitmap.h Modified: head/sys/compat/linuxkpi/common/include/linux/bitmap.h == --- head/sys/compat/linuxkpi/common/include/linux/bitmap.h Sun May 10 10:03:10 2020(r360869) +++ head/sys/compat/linuxkpi/common/include/linux/bitmap.h Sun May 10 13:07:00 2020(r360870) @@ -30,6 +30,7 @@ #define_LINUX_BITMAP_H_ #include +#include static inline void bitmap_zero(unsigned long *addr, const unsigned int size) @@ -307,6 +308,12 @@ bitmap_xor(unsigned long *dst, const unsigned long *sr for (i = 0; i != end; i++) dst[i] = src1[i] ^ src2[i]; +} + +static inline void +bitmap_free(const unsigned long *bitmap) +{ + kfree(bitmap); } #endif /* _LINUX_BITMAP_H_ */ ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360871 - head/sys/compat/linuxkpi/common/include/linux
Author: manu Date: Sun May 10 13:12:05 2020 New Revision: 360871 URL: https://svnweb.freebsd.org/changeset/base/360871 Log: linuxkpi: Really add bitmap_alloc and bitmap_zalloc This was missing in r360870 Sponsored-by: The FreeBSD Foundation Modified: head/sys/compat/linuxkpi/common/include/linux/bitmap.h Modified: head/sys/compat/linuxkpi/common/include/linux/bitmap.h == --- head/sys/compat/linuxkpi/common/include/linux/bitmap.h Sun May 10 13:07:00 2020(r360870) +++ head/sys/compat/linuxkpi/common/include/linux/bitmap.h Sun May 10 13:12:05 2020(r360871) @@ -310,6 +310,19 @@ bitmap_xor(unsigned long *dst, const unsigned long *sr dst[i] = src1[i] ^ src2[i]; } +static inline unsigned long * +bitmap_alloc(unsigned int size, gfp_t flags) +{ + return (kmalloc_array(BITS_TO_LONGS(size), + sizeof(unsigned long), flags)); +} + +static inline unsigned long * +bitmap_zalloc(unsigned int size, gfp_t flags) +{ + return (bitmap_alloc(size, flags | __GFP_ZERO)); +} + static inline void bitmap_free(const unsigned long *bitmap) { ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360872 - head/sys/dev/qlnx/qlnxe
Author: manu Date: Sun May 10 14:09:30 2020 New Revision: 360872 URL: https://svnweb.freebsd.org/changeset/base/360872 Log: qnlx: Do not redifines types. r360870 added linux/slab.h into liunx/bitmap.h and this include linux/types.h The qlnx driver is redefining some of those types so remove them and add an explicit linux/types.h include. Pointy hat: manu Reported by: Austin Shafer Modified: head/sys/dev/qlnx/qlnxe/bcm_osal.h Modified: head/sys/dev/qlnx/qlnxe/bcm_osal.h == --- head/sys/dev/qlnx/qlnxe/bcm_osal.h Sun May 10 13:12:05 2020 (r360871) +++ head/sys/dev/qlnx/qlnxe/bcm_osal.h Sun May 10 14:09:30 2020 (r360872) @@ -34,6 +34,8 @@ #include "ecore_status.h" #include +#include + #if __FreeBSD_version >= 1200032 #include #else @@ -112,11 +114,6 @@ extern void qlnx_vf_flr_update(void *p_hwfn); #define s32 uint32_t #ifndef QLNX_RDMA - -typedef uint16_t __le16; -typedef uint32_t __le32; -typedef uint16_t __be16; -typedef uint32_t __be32; static __inline unsigned long roundup_pow_of_two(unsigned long x) ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360877 - head/tools/pkgbase
Author: emaste Date: Sun May 10 16:11:19 2020 New Revision: 360877 URL: https://svnweb.freebsd.org/changeset/base/360877 Log: Add pkgbase METALOG parse/check tool `metalog.lua` is a script that reads METALOG file created by pkgbase (make packages) and generates reports about the installed system and issues. This was developed as part of Yang's W2020 University of Waterloo co- operative education term with the FreeBSD Foundation. kevans provided some initial review; we will iterate on it in the tree. Submitted by: Yang Wang <2...@outlook.jp> Sponsored by: The FreeBSD Foundation Differential Revision:https://reviews.freebsd.org/D24563 Added: head/tools/pkgbase/ head/tools/pkgbase/README.md (contents, props changed) head/tools/pkgbase/metalog_reader.lua (contents, props changed) Added: head/tools/pkgbase/README.md == --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/pkgbase/README.mdSun May 10 16:11:19 2020 (r360877) @@ -0,0 +1,61 @@ +`metalog.lua` is a script that reads METALOG file created by pkgbase +(make packages) and generates reports about the installed system +and issues + +the script accepts an mtree file in a format that's returned by +`mtree -c | mtree -C` + +synopsis: +``` +metalog_reader.lua [-h] [-a | -c | -p [-count] [-size] [-f...]] [-W...] [-v] metalog-path +``` + +options: + +* `-a` prints all scan results. this is the default option if no option is + provided. +* `-c` lints the file and gives warnings/errors, including duplication and + conflicting metadata + * `-Wcheck-notagdir` entries with dir type and no tags will be also included + the first time they appear (1) +* `-p` list all package names found in the file as exactly specified by + `tags=package=...` + * `-count` display the number of files of the package + * `-size` display the size of the package + * `-fsetgid` only include packages with setgid files + * `-fsetuid` only include packages with setuid files + * `-fsetid` only include packages with setgid or setuid files +* `-v` verbose mode +* `-h` help page + +some examples: + +* `metalog_reader.lua -a METALOG` + prints all scan results described below. this is the default option +* `metalog_reader.lua -c METALOG` + only prints errors and warnings found in the file +* `metalog_reader.lua -c -Wcheck-notagdir METALOG` + prints errors and warnings found in the file, including directories with no + tags +* `metalog_reader.lua -p METALOG` + only prints all the package names found in the file +* `metalog_reader.lua -p -count -size METALOG` + prints all the package names, followed by number of files, followed by total + size +* `metalog_reader.lua -p -size -fsetid METALOG` + prints packages that has either setuid/setgid files, followed by the total + size +* `metalog_reader.lua -p -fsetuid -fsetgid METALOG` + prints packages that has both setuid and setgid files (if more than one + filters are specified, they are composed using logic and) +* `metalog_reader.lua -p -count -size -fsetuid METALOG` + prints packages that has setuid files, followed by number of files and total + size + +(1) if we have two entries +``` +./bin type=dir uname=root gname=wheel mode=0755 +./bin type=dir uname=root gname=wheel mode=0755 tags=... +``` +by default, this is not warned. if the option is enabled, this will be warned +as the second line sufficiently covers the first line. Added: head/tools/pkgbase/metalog_reader.lua == --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/pkgbase/metalog_reader.lua Sun May 10 16:11:19 2020 (r360877) @@ -0,0 +1,521 @@ +#!/usr/libexec/flua + +-- SPDX-License-Identifier: BSD-2-Clause-FreeBSD +-- +-- Copyright(c) 2020 The FreeBSD Foundation. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- 1. Redistributions of source code must retain the above copyright +--notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above copyright +--notice, this list of conditions and the following disclaimer in the +--documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +-- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; O
svn commit: r360878 - head/sys/netinet
Author: tuexen Date: Sun May 10 17:19:19 2020 New Revision: 360878 URL: https://svnweb.freebsd.org/changeset/base/360878 Log: Ensure that we have a path when starting the T3 RXT timer. Reported by: syzbot+f2321629047f89486...@syzkaller.appspotmail.com MFC after:3 days Modified: head/sys/netinet/sctp_asconf.c head/sys/netinet/sctp_indata.c head/sys/netinet/sctp_input.c head/sys/netinet/sctp_timer.c head/sys/netinet/sctputil.c Modified: head/sys/netinet/sctp_asconf.c == --- head/sys/netinet/sctp_asconf.c Sun May 10 16:11:19 2020 (r360877) +++ head/sys/netinet/sctp_asconf.c Sun May 10 17:19:19 2020 (r360878) @@ -1032,9 +1032,14 @@ sctp_assoc_immediate_retrans(struct sctp_tcb *stcb, st (stcb->asoc.sent_queue_cnt > 0)) { struct sctp_tmit_chunk *chk; - chk = TAILQ_FIRST(&stcb->asoc.sent_queue); - sctp_timer_start(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, - stcb, chk->whoTo); + TAILQ_FOREACH(chk, &stcb->asoc.sent_queue, sctp_next) { + if (chk->whoTo != NULL) { + break; + } + } + if (chk != NULL) { + sctp_timer_start(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, chk->whoTo); + } } } return; Modified: head/sys/netinet/sctp_indata.c == --- head/sys/netinet/sctp_indata.c Sun May 10 16:11:19 2020 (r360877) +++ head/sys/netinet/sctp_indata.c Sun May 10 17:19:19 2020 (r360878) @@ -4439,7 +4439,12 @@ again: } } } - if (lchk) { + for (; lchk != NULL; lchk = TAILQ_NEXT(lchk, sctp_next)) { + if (lchk->whoTo != NULL) { + break; + } + } + if (lchk != NULL) { /* Assure a timer is up */ sctp_timer_start(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, lchk->whoTo); @@ -5279,7 +5284,12 @@ again: } } } - if (lchk) { + for (; lchk != NULL; lchk = TAILQ_NEXT(lchk, sctp_next)) { + if (lchk->whoTo != NULL) { + break; + } + } + if (lchk != NULL) { /* Assure a timer is up */ sctp_timer_start(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, lchk->whoTo); Modified: head/sys/netinet/sctp_input.c == --- head/sys/netinet/sctp_input.c Sun May 10 16:11:19 2020 (r360877) +++ head/sys/netinet/sctp_input.c Sun May 10 17:19:19 2020 (r360878) @@ -2956,6 +2956,7 @@ sctp_handle_cookie_ack(struct sctp_cookie_ack_chunk *c { /* cp must not be used, others call this without a c-ack :-) */ struct sctp_association *asoc; + struct sctp_tmit_chunk *chk; SCTPDBG(SCTP_DEBUG_INPUT2, "sctp_handle_cookie_ack: handling COOKIE-ACK\n"); @@ -3059,11 +3060,13 @@ sctp_handle_cookie_ack(struct sctp_cookie_ack_chunk *c closed_socket: /* Toss the cookie if I can */ sctp_toss_old_cookies(stcb, asoc); - if (!TAILQ_EMPTY(&asoc->sent_queue)) { - /* Restart the timer if we have pending data */ - struct sctp_tmit_chunk *chk; - - chk = TAILQ_FIRST(&asoc->sent_queue); + /* Restart the timer if we have pending data */ + TAILQ_FOREACH(chk, &asoc->sent_queue, sctp_next) { + if (chk->whoTo != NULL) { + break; + } + } + if (chk != NULL) { sctp_timer_start(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, chk->whoTo); } } @@ -5159,6 +5162,7 @@ process_control_chunks: } else { struct mbuf *ret_buf; struct sctp_inpcb *linp; + struct sctp_tmit_chunk *chk; if (stcb) { linp = NULL; @@ -5220,14 +5224,13 @@ process_control_chunks: got_auth = 1; auth_skipped = 0; } - if (!TAILQ_EMPTY(&stcb->asoc.sent_queue)) { - /*
svn commit: r360879 - head/sys/netinet
Author: tuexen Date: Sun May 10 17:43:42 2020 New Revision: 360879 URL: https://svnweb.freebsd.org/changeset/base/360879 Log: Remove trailing whitespace. Modified: head/sys/netinet/tcp_usrreq.c Modified: head/sys/netinet/tcp_usrreq.c == --- head/sys/netinet/tcp_usrreq.c Sun May 10 17:19:19 2020 (r360878) +++ head/sys/netinet/tcp_usrreq.c Sun May 10 17:43:42 2020 (r360879) @@ -1373,7 +1373,7 @@ tcp_usr_close(struct socket *so) NET_EPOCH_EXIT(et); } -static int +static int tcp_pru_options_support(struct tcpcb *tp, int flags) { /* ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360881 - in head/sys/powerpc: aim booke include powerpc
Author: jhibbits Date: Sun May 10 19:00:57 2020 New Revision: 360881 URL: https://svnweb.freebsd.org/changeset/base/360881 Log: powerpc: Add a CPU-custom machine check handler Summary: Some machine checks are process-recoverable, others are not. Let a CPU-specific handler decide what to do. This works around a machine check error hit while building www/firefox and mail/thunderbird, which would otherwise cause the build to fail. More work is needed to handle all possible machine check conditions, but this is sufficient to unblock some ports building. Differential Revision: https://reviews.freebsd.org/D23731 Modified: head/sys/powerpc/aim/aim_machdep.c head/sys/powerpc/aim/trap_subr64.S head/sys/powerpc/booke/machdep_e500.c head/sys/powerpc/include/cpu.h head/sys/powerpc/include/spr.h head/sys/powerpc/powerpc/trap.c Modified: head/sys/powerpc/aim/aim_machdep.c == --- head/sys/powerpc/aim/aim_machdep.c Sun May 10 18:17:25 2020 (r360880) +++ head/sys/powerpc/aim/aim_machdep.c Sun May 10 19:00:57 2020 (r360881) @@ -515,6 +515,32 @@ memcpy(pcpu->pc_aim.slb, PCPU_GET(aim.slb), sizeof(pcp #endif } +/* Return 0 on handled success, otherwise signal number. */ +int +cpu_machine_check(struct thread *td, struct trapframe *frame, int *ucode) +{ +#ifdef __powerpc64__ + /* +* This block is 64-bit CPU specific currently. Punt running in 32-bit +* mode on 64-bit CPUs. +*/ + /* Check if the important information is in DSISR */ + if ((frame->srr1 & SRR1_MCHK_DATA) != 0) { + printf("Machine check, DSISR: %016lx\n", frame->cpu.aim.dsisr); + /* SLB multi-hit is recoverable. */ + if ((frame->cpu.aim.dsisr & DSISR_MC_SLB_MULTIHIT) != 0) + return (0); + /* TODO: Add other machine check recovery procedures. */ + } else { + if ((frame->srr1 & SRR1_MCHK_IFETCH_M) == SRR1_MCHK_IFETCH_SLBMH) + return (0); + } +#endif + *ucode = BUS_OBJERR; + return (SIGBUS); +} + + #ifndef __powerpc64__ uint64_t va_to_vsid(pmap_t pm, vm_offset_t va) Modified: head/sys/powerpc/aim/trap_subr64.S == --- head/sys/powerpc/aim/trap_subr64.S Sun May 10 18:17:25 2020 (r360880) +++ head/sys/powerpc/aim/trap_subr64.S Sun May 10 19:00:57 2020 (r360881) @@ -797,6 +797,8 @@ generictrap: std %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) mfdar %r30 std %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DAR)(%r1) + mfdsisr %r30 + std %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) mfsprg1 %r1 /* restore SP, in case of branch */ mfsprg2 %r28/* save LR */ mfcr%r29/* save CR */ Modified: head/sys/powerpc/booke/machdep_e500.c == --- head/sys/powerpc/booke/machdep_e500.c Sun May 10 18:17:25 2020 (r360880) +++ head/sys/powerpc/booke/machdep_e500.c Sun May 10 19:00:57 2020 (r360881) @@ -119,3 +119,15 @@ void booke_disable_l2_cache(void) { } + +/* Return 0 on handled success, otherwise signal number. */ +int +cpu_machine_check(struct thread *td, struct trapframe *frame, int *ucode) +{ + register_t mcsr; + + mcsr = mfspr(SPR_MCSR); + + *ucode = BUS_OBJERR; + return (SIGBUS); +} Modified: head/sys/powerpc/include/cpu.h == --- head/sys/powerpc/include/cpu.h Sun May 10 18:17:25 2020 (r360880) +++ head/sys/powerpc/include/cpu.h Sun May 10 19:00:57 2020 (r360881) @@ -134,6 +134,8 @@ get_cyclecount(void) extern char btext[]; extern char etext[]; +struct thread; + #ifdef __powerpc64__ extern void enter_idle_powerx(void); extern uint64_t can_wakeup; @@ -146,5 +148,6 @@ voidcpu_sleep(void); void flush_disable_caches(void); void fork_trampoline(void); void swi_vm(void *); +intcpu_machine_check(struct thread *, struct trapframe *, int *); #endif /* _MACHINE_CPU_H_ */ Modified: head/sys/powerpc/include/spr.h == --- head/sys/powerpc/include/spr.h Sun May 10 18:17:25 2020 (r360880) +++ head/sys/powerpc/include/spr.h Sun May 10 19:00:57 2020 (r360881) @@ -108,6 +108,15 @@ #define DSISR_DABR 0x0040 /* DABR match */ #define DSISR_SEGMENT 0x0020 /* XXX; not in 6xx PEM */ #define DSISR_EAR 0x0010 /* eciwx/ecowx && EAR[E] == 0 */ +#define DSISR_MC_UE_DEFERRED0x8000 /* UE deferred error */ +#define DSISR_MC_UE_TABLEWA
svn commit: r360882 - head
Author: kevans Date: Sun May 10 20:28:38 2020 New Revision: 360882 URL: https://svnweb.freebsd.org/changeset/base/360882 Log: buildworld: add back in missing semicolon if foo; then blah else blah; fi has a drastically different meaning than if foo; then blah; else blah; fi. Fix it. Reported by: 0mp X-MFC-With: r360833 Modified: head/Makefile.inc1 Modified: head/Makefile.inc1 == --- head/Makefile.inc1 Sun May 10 19:00:57 2020(r360881) +++ head/Makefile.inc1 Sun May 10 20:28:38 2020(r360882) @@ -1409,7 +1409,7 @@ distributeworld installworld stageworld: _installcheck # basis, otherwise we'll just mention that we're not doing it to raise # awareness. @if which certctl>/dev/null; then \ - certctl rehash \ + certctl rehash; \ else \ echo "No certctl on the host, not rehashing target -- /etc/ssl may not be populated."; \ fi ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360885 - head/sys/netinet
Author: tuexen Date: Sun May 10 22:54:30 2020 New Revision: 360885 URL: https://svnweb.freebsd.org/changeset/base/360885 Log: Ensure that the SCTP iterator runs with an stcb and inp, which belong to each other. Reported by: syzbot+82d39d14f2f765e38...@syzkaller.appspotmail.com MFC after:3 days Modified: head/sys/netinet/sctputil.c Modified: head/sys/netinet/sctputil.c == --- head/sys/netinet/sctputil.c Sun May 10 21:37:39 2020(r360884) +++ head/sys/netinet/sctputil.c Sun May 10 22:54:30 2020(r360885) @@ -1489,6 +1489,7 @@ select_a_new_ep: } tinp = it->inp; it->inp = LIST_NEXT(it->inp, sctp_list); + it->stcb = NULL; SCTP_INP_RUNLOCK(tinp); if (it->inp == NULL) { goto done_with_iterator; @@ -1558,6 +1559,9 @@ select_a_new_ep: atomic_add_int(&it->stcb->asoc.refcnt, -1); iteration_count = 0; } + KASSERT(it->inp == it->stcb->sctp_ep, + ("%s: stcb %p does not belong to inp %p, but inp %p", +__func__, it->stcb, it->inp, it->stcb->sctp_ep)); /* run function on this one */ (*it->function_assoc) (it->inp, it->stcb, it->pointer, it->val); @@ -1590,6 +1594,7 @@ no_stcb: } else { it->inp = LIST_NEXT(it->inp, sctp_list); } + it->stcb = NULL; if (it->inp == NULL) { goto done_with_iterator; } ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360887 - in head/sys: conf powerpc/aim powerpc/booke powerpc/include powerpc/powerpc vm
Author: jhibbits Date: Mon May 11 02:33:37 2020 New Revision: 360887 URL: https://svnweb.freebsd.org/changeset/base/360887 Log: powerpc64: Implement Radix MMU for POWER9 CPUs Summary: POWER9 supports two MMU formats: traditional hashed page tables, and Radix page tables, similar to what's presesnt on most other architectures. The PowerISA also specifies a process table -- a table of page table pointers-- which on the POWER9 is only available with the Radix MMU, so we can take advantage of it with the Radix MMU driver. Written by Matt Macy. Differential Revision: https://reviews.freebsd.org/D19516 Added: head/sys/powerpc/aim/mmu_radix.c (contents, props changed) Modified: head/sys/conf/files.powerpc head/sys/powerpc/aim/aim_machdep.c head/sys/powerpc/aim/mmu_oea.c head/sys/powerpc/aim/mmu_oea64.c head/sys/powerpc/booke/pmap.c head/sys/powerpc/include/cpufunc.h head/sys/powerpc/include/mmuvar.h head/sys/powerpc/include/param.h head/sys/powerpc/include/pmap.h head/sys/powerpc/include/proc.h head/sys/powerpc/include/pte.h head/sys/powerpc/include/spr.h head/sys/powerpc/include/sr.h head/sys/powerpc/include/vmparam.h head/sys/powerpc/powerpc/machdep.c head/sys/powerpc/powerpc/mmu_if.m head/sys/powerpc/powerpc/pmap_dispatch.c head/sys/powerpc/powerpc/trap.c head/sys/vm/vm_fault.c Modified: head/sys/conf/files.powerpc == --- head/sys/conf/files.powerpc Mon May 11 01:20:40 2020(r360886) +++ head/sys/conf/files.powerpc Mon May 11 02:33:37 2020(r360887) @@ -135,6 +135,7 @@ powerpc/aim/locore.Soptionalaim no-obj powerpc/aim/aim_machdep.c optionalaim powerpc/aim/mmu_oea.c optionalaim powerpc powerpc/aim/mmu_oea64.coptionalaim +powerpc/aim/mmu_radix.coptionalaim powerpc64 powerpc/aim/moea64_if.moptionalaim powerpc/aim/moea64_native.coptionalaim powerpc/aim/mp_cpudep.coptionalaim Modified: head/sys/powerpc/aim/aim_machdep.c == --- head/sys/powerpc/aim/aim_machdep.c Mon May 11 01:20:40 2020 (r360886) +++ head/sys/powerpc/aim/aim_machdep.c Mon May 11 02:33:37 2020 (r360887) @@ -136,6 +136,8 @@ __FBSDID("$FreeBSD$"); struct bat battable[16]; #endif +int radix_mmu = 0; + #ifndef __powerpc64__ /* Bits for running on 64-bit systems in 32-bit mode. */ extern void*testppc64, *testppc64size; @@ -451,7 +453,14 @@ aim_cpu_init(vm_offset_t toc) * in case the platform module had a better idea of what we * should do. */ - if (cpu_features & PPC_FEATURE_64) + if (cpu_features2 & PPC_FEATURE2_ARCH_3_00) { + radix_mmu = 0; + TUNABLE_INT_FETCH("radix_mmu", &radix_mmu); + if (radix_mmu) + pmap_mmu_install(MMU_TYPE_RADIX, BUS_PROBE_GENERIC); + else + pmap_mmu_install(MMU_TYPE_G5, BUS_PROBE_GENERIC); + } else if (cpu_features & PPC_FEATURE_64) pmap_mmu_install(MMU_TYPE_G5, BUS_PROBE_GENERIC); else pmap_mmu_install(MMU_TYPE_OEA, BUS_PROBE_GENERIC); Modified: head/sys/powerpc/aim/mmu_oea.c == --- head/sys/powerpc/aim/mmu_oea.c Mon May 11 01:20:40 2020 (r360886) +++ head/sys/powerpc/aim/mmu_oea.c Mon May 11 02:33:37 2020 (r360887) @@ -322,6 +322,7 @@ void moea_dumpsys_map(mmu_t mmu, vm_paddr_t pa, size_t void moea_scan_init(mmu_t mmu); vm_offset_t moea_quick_enter_page(mmu_t mmu, vm_page_t m); void moea_quick_remove_page(mmu_t mmu, vm_offset_t addr); +boolean_t moea_page_is_mapped(mmu_t mmu, vm_page_t m); static int moea_map_user_ptr(mmu_t mmu, pmap_t pm, volatile const void *uaddr, void **kaddr, size_t ulen, size_t *klen); static int moea_decode_kernel_ptr(mmu_t mmu, vm_offset_t addr, @@ -364,6 +365,7 @@ static mmu_method_t moea_methods[] = { MMUMETHOD(mmu_page_set_memattr, moea_page_set_memattr), MMUMETHOD(mmu_quick_enter_page, moea_quick_enter_page), MMUMETHOD(mmu_quick_remove_page, moea_quick_remove_page), + MMUMETHOD(mmu_page_is_mapped, moea_page_is_mapped), /* Internal interfaces */ MMUMETHOD(mmu_bootstrap,moea_bootstrap), @@ -1102,6 +1104,12 @@ moea_quick_enter_page(mmu_t mmu, vm_page_t m) void moea_quick_remove_page(mmu_t mmu, vm_offset_t addr) { +} + +boolean_t +moea_page_is_mapped(mmu_t mmu, vm_page_t m) +{ + return (!LIST_EMPTY(&(m)->md.mdpg_pvoh)); } /* Modified: head/sys/powerpc/aim/mmu_oea64.c == --- head/sys/powerpc/aim/mmu_oea64.cMon May 11 01:20:40 2
Re: svn commit: r360233 - in head: contrib/jemalloc . . . : This partially breaks a 2-socket 32-bit powerpc (old PowerMac G4) based on head -r360311
[A new kind of experiment and partial results.] Given the zero'ed memory page(s) that for some of the example contexts include a page that should not be changing after initialization in my context (jemalloc global variables), I have attempted the following for such examples: A) Run gdb B) Attach to one of the live example processes. C) Check that the page is not zeroed yet. (print/x __je_sz_size2index_tab) D) protect the page containing the start of __je_sz_size2index_tab, using 0x1 as the PROT_READ mask. (print (int)mprotect(ADDRESS,1,0x1)) E) detach. The hope was to discover which of the following was involved: A) user-space code trying to write the page should get a SIGSEGV. In this case I'd likely be able to see what code was attempting the write. B) kernel-code doing something odd to the content or mapping of memory would not (or need not) lead to SIGSEGV. In this case I'd be unlikely to see what code lead to the zeros on the page. So far I've gotten only one failure example, nfsd during its handling of a SIGUSR1. Previous nfs mounts and dismounts worked fine, not asserting, indicating that at the time the page was not zeroed. I got no evidence of SIGSEGV from an attempted user space write to the page. But the nfsd.core shows the page as zeroed and the assert having caused abort(). That suggests the kernel side of things for what leads to the zeros. It turns out that just before the "unregsiteration()" activity is "killchildren()" activity: (gdb) list 971 972 static void 973 nfsd_exit(int status) 974 { 975 killchildren(); 976 unregistration(); 977 exit(status); 978 } (frame #12) used via: (gdb) list cleanup 954 /* 955 * Cleanup master after SIGUSR1. 956 */ 957 static void 958 cleanup(__unused int signo) 959 { 960 nfsd_exit(0); 961 } . . . and (for master): (void)signal(SIGUSR1, cleanup); This suggests the possibility that the zero'd pages could be associated with killing the child processes. (I've had a past aarch64 context where forking had problems with pages that were initially common to parent and child processes. In that context having the processes swap out [not just mostly paged out] and then swap back in was involved in showing the problem. The issue was fixed and was aarch64 specific. But it leaves me willing to consider fork-related memory management as possibly odd in some way for 32-bit powerpc.) Notes . . . Another possible kind of evidence: I've gone far longer with the machine doing just normal background processing with nothing failing on its own. This suggests that the (int)mprotect(ADDRESS,1,0x1) might be changing the context --or just doing the attach and detach in gdb does. I've nothing solid in this area so I'll ignore it, other than this note. === Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar) ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r360888 - head/sys/contrib/dev/ath/ath_hal/ar9300
Author: adrian Date: Mon May 11 05:53:12 2020 New Revision: 360888 URL: https://svnweb.freebsd.org/changeset/base/360888 Log: [ar9300] Disable unconditionally reducing transmit power in the case of FCC. Ok, yeah, the commit title is a bit misleading. This has to do with CDD (cyclic delay diversity) - how this and later wifi hardware transmits lower rates over more antennas. Eg, if you're transmitting legacy 11abg rates on 2 or 3 antennas, you COULD just send them all at the same time or you could delay each by tens/hundreds of nanoseconds to try and get some better diversity characteristics. However, this has a fun side effect - the antenna pattern is no longer a bunch of interacting dipoles, but are a bunch of interacting dipoles plus a bunch of changing phases. And it's frequency dependent - 50-200nS is not exactly the same fraction of a wavelength across all of 2GHz or 5GHz! Thus the power spectral density and maximum directional gain that you're effectively getting is not .. well, as flat as it once was. For more information, look up FCC/OET 13TR1003 in the FCC technical report database. It has pretty graphics and everything. Anyway, the problem lies thusly - the CDD code just subtracts another 3dB or 5dB for the lower rates based on transmit antenna configuration. However, it's not done based on operating configuration and it doesn't take into account how far from any regulatory limits the hardware is at. It also doesn't let us do things like transmit legacy rates and frames on a single antenna without losing up to 5dB when we absolutely don't need to in that case (there's no CDD used when one antenna is used!) This shows up as the hardware behaving even worse for longer distance links at 20MHz because, well, those are the exact rates losing a bunch more transmit power. * For lower power NICs (ie the majority of what is out there!) it's highly unlikely we're going to hit anywhere near the PSD limits. * It's doing it based on the existing limits from the CTL table (conformance testing limits) - this isn't the regulatory max! It's what the NIC is allowed to put out in each frequency and rate configuration! So things like band edges, power amplifier behaviour and maximum current draw apply here. Blindly subtracting 3 to 5dB from /this/ value is /very/ conservative.. * /and/ ath9k just plainly doesn't do any of this at all. So, for now disable it and get the TX power back, thus matching what ath9k in Linux is doing. If/once I get some more cycles I'll look at making it a bit more adaptive and really only kick in if we're a few dB away from hard regulatory limits. Tested: * AR9344 (2GHz + SoC, 2x2 configuration) - AP and STA modes * QCA9580 (5GHz 2x2 and 3x3 configurations) - AP and STA modes Modified: head/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_eeprom.c head/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_phy.c Modified: head/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_eeprom.c == --- head/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_eeprom.c Mon May 11 02:33:37 2020(r360887) +++ head/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_eeprom.c Mon May 11 05:53:12 2020(r360888) @@ -3040,6 +3040,33 @@ ar9300_eeprom_set_transmit_power(struct ath_hal *ah, ahp->reg_dmn = ath_hal_getctl(ah, chan); /* + * After reading FCC/OET 13TR1003 (Directional Gain of IEEE 802.11 + * MIMO devices employing cyclic delay diversity) and looking at what + * ath9k does, let's disable the CDD check until it's clearer exactly + * how the maximum cap should be applied here. + * + * Right now the CDD check is simply unconditionally reducing the + * gain of legacy and 1/2 stream rates depending upon the chainmask. + * (CDD is used when transmitting rates that don't already use up the + * full set of streams - eg OFDM or MCS0-7 on a 2 or 3 chain TX path.) + * + * It's dropping the 2-chain TX by 3dB and 3-chain by 5dB to "meet" + * power spectral density requirements but it's not currently taking + * into account how close to the regulatory limit the hardware/antenna + * system is already at. It doesn't help that the conductive testing + * limits have the array gain at 0dB for all AR9300/derivative + * configurations. + * + * It also doesn't let us do single chain transmit at the full allowed + * power for the regulatory/CTL limits as it subtracts it from what's + * programmed into the hardware. + * + * ath9k doesn't factor any of the CDD stuff into account, so I'm going + * to disable it here and in the TPC path until I get a better idea + * of what to really do here. + */ +#if 0 +/* * Always use CDD/direct per rate power table for register based approach. * For FCC, CDD calculations should
svn commit: r360889 - in head/sys/net: . route
Author: melifaro Date: Mon May 11 06:09:18 2020 New Revision: 360889 URL: https://svnweb.freebsd.org/changeset/base/360889 Log: Remove unused rnh_close callback from rtable & cleanup depends. rnh_close callbackes was used by the in[6]_clsroute() handlers, doing cleanup in the route cloning code. Route cloning was eliminated somewhere around r186119. Last callback user was eliminated in r186215, 11 years ago. Differential Revision:https://reviews.freebsd.org/D24793 Modified: head/sys/net/route.c head/sys/net/route/route_var.h Modified: head/sys/net/route.c == --- head/sys/net/route.cMon May 11 05:53:12 2020(r360888) +++ head/sys/net/route.cMon May 11 06:09:18 2020(r360889) @@ -426,11 +426,8 @@ sys_setfib(struct thread *td, struct setfib_args *uap) void rtfree(struct rtentry *rt) { - struct rib_head *rnh; KASSERT(rt != NULL,("%s: NULL rt", __func__)); - rnh = rt_tables_get_rnh(rt->rt_fibnum, rt_key(rt)->sa_family); - KASSERT(rnh != NULL,("%s: NULL rnh", __func__)); RT_LOCK_ASSERT(rt); @@ -445,18 +442,6 @@ rtfree(struct rtentry *rt) } /* -* On last reference give the "close method" a chance -* to cleanup private state. This also permits (for -* IPv4 and IPv6) a chance to decide if the routing table -* entry should be purged immediately or at a later time. -* When an immediate purge is to happen the close routine -* typically calls rtexpunge which clears the RTF_UP flag -* on the entry so that the code below reclaims the storage. -*/ - if (rt->rt_refcnt == 0 && rnh->rnh_close) - rnh->rnh_close((struct radix_node *)rt, &rnh->head); - - /* * If we are no longer "up" (and ref == 0) * then we can free the resources associated * with the route. @@ -1501,7 +1486,6 @@ add_route(struct rib_head *rnh, struct rt_addrinfo *in return (ENOBUFS); } rt->rt_flags = RTF_UP | flags; - rt->rt_fibnum = rnh->rib_fibnum; rt->rt_nhop = nh; /* Fill in dst */ Modified: head/sys/net/route/route_var.h == --- head/sys/net/route/route_var.h Mon May 11 05:53:12 2020 (r360888) +++ head/sys/net/route/route_var.h Mon May 11 06:09:18 2020 (r360889) @@ -50,7 +50,6 @@ struct rib_head { rn_lookup_f_t *rnh_lookup;/* exact match for sockaddr */ rn_walktree_t *rnh_walktree; /* traverse tree */ rn_walktree_from_t *rnh_walktree_from; /* traverse tree below a */ - rn_close_t *rnh_close; /*do something when the last ref drops*/ rnh_preadd_entry_f_t*rnh_preadd;/* hook to alter record prior to insertion */ rt_gen_trnh_gen;/* generation counter */ int rnh_multipath; /* multipath capable ? */ @@ -144,7 +143,6 @@ struct rtentry { int rt_flags; /* up/down?, host/net */ int rt_refcnt; /* # held references */ - u_int rt_fibnum; /* which FIB */ u_long rt_weight; /* absolute weight */ u_long rt_expire; /* lifetime for route, e.g. redirect */ #definert_endzero rt_mtx ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"