From owner-p4-projects@FreeBSD.ORG Fri Mar 30 00:26:23 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9E81716A403; Fri, 30 Mar 2007 00:26:23 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7585616A401 for ; Fri, 30 Mar 2007 00:26:23 +0000 (UTC) (envelope-from jkim@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 66D8A13C4CE for ; Fri, 30 Mar 2007 00:26:23 +0000 (UTC) (envelope-from jkim@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l2U0QNW9079136 for ; Fri, 30 Mar 2007 00:26:23 GMT (envelope-from jkim@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l2U0QM1R079133 for perforce@freebsd.org; Fri, 30 Mar 2007 00:26:22 GMT (envelope-from jkim@freebsd.org) Date: Fri, 30 Mar 2007 00:26:22 GMT Message-Id: <200703300026.l2U0QM1R079133@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jkim@freebsd.org using -f From: Jung-uk Kim To: Perforce Change Reviews Cc: Subject: PERFORCE change 116894 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Mar 2007 00:26:23 -0000 http://perforce.freebsd.org/chv.cgi?CH=116894 Change 116894 by jkim@jkim_hammer on 2007/03/30 00:25:28 IFC Affected files ... .. //depot/projects/linuxolator/src/sys/amd64/amd64/cpu_switch.S#6 integrate .. //depot/projects/linuxolator/src/sys/amd64/amd64/genassym.c#7 integrate .. //depot/projects/linuxolator/src/sys/amd64/amd64/machdep.c#16 integrate .. //depot/projects/linuxolator/src/sys/amd64/include/pcb.h#4 integrate .. //depot/projects/linuxolator/src/sys/amd64/include/segments.h#3 integrate .. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_locore.s#4 integrate .. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_machdep.c#47 integrate .. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_proto.h#23 integrate .. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_syscall.h#23 integrate .. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_sysent.c#22 integrate .. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_sysvec.c#12 integrate .. //depot/projects/linuxolator/src/sys/amd64/linux32/syscalls.master#23 integrate .. //depot/projects/linuxolator/src/sys/dev/isp/isp.c#14 integrate .. //depot/projects/linuxolator/src/sys/netinet/in.c#6 integrate Differences ... ==== //depot/projects/linuxolator/src/sys/amd64/amd64/cpu_switch.S#6 (text+ko) ==== @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/amd64/cpu_switch.S,v 1.155 2006/12/20 04:40:38 davidxu Exp $ + * $FreeBSD: src/sys/amd64/amd64/cpu_switch.S,v 1.156 2007/03/30 00:06:20 jkim Exp $ */ #include ==== //depot/projects/linuxolator/src/sys/amd64/amd64/genassym.c#7 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.160 2006/12/20 04:40:38 davidxu Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.161 2007/03/30 00:06:20 jkim Exp $"); #include "opt_compat.h" #include "opt_kstack_pages.h" ==== //depot/projects/linuxolator/src/sys/amd64/amd64/machdep.c#16 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.669 2007/01/27 18:13:24 jkoshy Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.670 2007/03/30 00:06:20 jkim Exp $"); #include "opt_atalk.h" #include "opt_atpic.h" ==== //depot/projects/linuxolator/src/sys/amd64/include/pcb.h#4 (text+ko) ==== @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: @(#)pcb.h 5.10 (Berkeley) 5/12/91 - * $FreeBSD: src/sys/amd64/include/pcb.h,v 1.62 2005/09/27 21:11:35 peter Exp $ + * $FreeBSD: src/sys/amd64/include/pcb.h,v 1.63 2007/03/30 00:06:21 jkim Exp $ */ #ifndef _AMD64_PCB_H_ ==== //depot/projects/linuxolator/src/sys/amd64/include/segments.h#3 (text+ko) ==== @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: @(#)segments.h 7.1 (Berkeley) 5/9/91 - * $FreeBSD: src/sys/amd64/include/segments.h,v 1.38 2004/04/05 21:25:51 imp Exp $ + * $FreeBSD: src/sys/amd64/include/segments.h,v 1.39 2007/03/30 00:06:21 jkim Exp $ */ #ifndef _MACHINE_SEGMENTS_H_ ==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_locore.s#4 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/amd64/linux32/linux32_locore.s,v 1.1 2004/08/16 07:55:06 tjr Exp $ */ +/* $FreeBSD: src/sys/amd64/linux32/linux32_locore.s,v 1.2 2007/03/30 00:06:21 jkim Exp $ */ #include "linux32_assym.h" /* system definitions */ #include /* miscellaneous asm macros */ ==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_machdep.c#47 (text+ko) ==== @@ -29,7 +29,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.36 2007/03/02 00:08:47 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.37 2007/03/30 00:06:21 jkim Exp $"); #include #include ==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_proto.h#23 (text+ko) ==== @@ -2,8 +2,8 @@ * System call prototypes. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.30 2007/03/29 02:11:46 julian Exp $ - * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.26 2007/02/15 01:13:36 jkim Exp + * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.31 2007/03/30 00:08:21 jkim Exp $ + * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.28 2007/03/30 00:06:21 jkim Exp */ #ifndef _LINUX_SYSPROTO_H_ ==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_syscall.h#23 (text+ko) ==== @@ -2,8 +2,8 @@ * System call numbers. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.30 2007/03/29 02:11:46 julian Exp $ - * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.26 2007/02/15 01:13:36 jkim Exp + * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.31 2007/03/30 00:08:21 jkim Exp $ + * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.28 2007/03/30 00:06:21 jkim Exp */ #define LINUX_SYS_exit 1 ==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_sysent.c#22 (text+ko) ==== @@ -2,8 +2,8 @@ * System call switch table. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.30 2007/03/29 02:11:46 julian Exp $ - * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.26 2007/02/15 01:13:36 jkim Exp + * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.31 2007/03/30 00:08:21 jkim Exp $ + * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.28 2007/03/30 00:06:21 jkim Exp */ #include ==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_sysvec.c#12 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.26 2006/12/03 21:06:07 netchild Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.27 2007/03/30 00:06:21 jkim Exp $"); #include "opt_compat.h" #ifndef COMPAT_IA32 ==== //depot/projects/linuxolator/src/sys/amd64/linux32/syscalls.master#23 (text+ko) ==== @@ -1,4 +1,4 @@ - $FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.27 2007/03/29 02:11:46 julian Exp $ + $FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.28 2007/03/30 00:06:21 jkim Exp $ ; @(#)syscalls.master 8.1 (Berkeley) 7/19/93 ; System call name/number master file (or rather, slave, from LINUX). ==== //depot/projects/linuxolator/src/sys/dev/isp/isp.c#14 (text+ko) ==== @@ -46,7 +46,7 @@ #endif #ifdef __FreeBSD__ #include -__FBSDID("$FreeBSD: src/sys/dev/isp/isp.c,v 1.144 2007/03/22 23:38:31 mjacob Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/isp/isp.c,v 1.145 2007/03/29 21:29:26 mjacob Exp $"); #include #endif #ifdef __OpenBSD__ @@ -4068,7 +4068,7 @@ } hdlidx = fcp->isp_ini_map[XS_TGT(xs)] - 1; - isp_prt(isp, ISP_LOGDEBUG1, "XS_TGT(xs)=%d- handle value %d", + isp_prt(isp, ISP_LOGDEBUG1, "XS_TGT(xs)=%d- hdlidx value %d", XS_TGT(xs), hdlidx); if (hdlidx < 0 || hdlidx >= MAX_FC_TARG) { XS_SETERR(xs, HBA_SELTIMEOUT); @@ -4296,7 +4296,7 @@ * Issue a bus reset. */ if (IS_24XX(isp)) { - isp_prt(isp, ISP_LOGWARN, "RESET BUS NOT IMPLETENTED"); + isp_prt(isp, ISP_LOGWARN, "RESET BUS NOT IMPLEMENTED"); break; } else if (IS_FC(isp)) { mbs.param[1] = 10; @@ -4325,7 +4325,7 @@ case ISPCTL_RESET_DEV: tgt = (*((int *) arg)) & 0xffff; if (IS_24XX(isp)) { - isp_prt(isp, ISP_LOGWARN, "RESET DEV NOT IMPLETENTED"); + isp_prt(isp, ISP_LOGWARN, "RESET DEV NOT IMPLEMENTED"); break; } else if (IS_FC(isp)) { if (FCPARAM(isp)->isp_2klogin) { @@ -4362,7 +4362,7 @@ break; } if (IS_24XX(isp)) { - isp_prt(isp, ISP_LOGWARN, "ABORT CMD NOT IMPLETENTED"); + isp_prt(isp, ISP_LOGWARN, "ABORT CMD NOT IMPLEMENTED"); break; } else if (IS_FC(isp)) { if (FCPARAM(isp)->isp_sccfw) { ==== //depot/projects/linuxolator/src/sys/netinet/in.c#6 (text+ko) ==== @@ -28,7 +28,7 @@ * SUCH DAMAGE. * * @(#)in.c 8.4 (Berkeley) 1/9/95 - * $FreeBSD: src/sys/netinet/in.c,v 1.97 2007/03/20 00:36:10 bms Exp $ + * $FreeBSD: src/sys/netinet/in.c,v 1.98 2007/03/29 21:39:22 bms Exp $ */ #include "opt_carp.h" @@ -224,13 +224,17 @@ register struct ifreq *ifr = (struct ifreq *)data; register struct in_ifaddr *ia = 0, *iap; register struct ifaddr *ifa; + struct in_addr allhosts_addr; struct in_addr dst; struct in_ifaddr *oia; struct in_aliasreq *ifra = (struct in_aliasreq *)data; struct sockaddr_in oldaddr; int error, hostIsNew, iaIsNew, maskIsNew, s; + int iaIsFirst; + iaIsFirst = 0; iaIsNew = 0; + allhosts_addr.s_addr = htonl(INADDR_ALLHOSTS_GROUP); switch (cmd) { case SIOCALIFADDR: @@ -281,6 +285,8 @@ break; } } + if (ia == NULL) + iaIsFirst = 1; } switch (cmd) { @@ -422,8 +428,11 @@ (struct sockaddr_in *) &ifr->ifr_addr, 1); if (error != 0 && iaIsNew) break; - if (error == 0) + if (error == 0) { + if (iaIsFirst && (ifp->if_flags & IFF_MULTICAST) != 0) + in_addmulti(&allhosts_addr, ifp); EVENTHANDLER_INVOKE(ifaddr_event, ifp); + } return (0); case SIOCSIFNETMASK: @@ -466,8 +475,11 @@ if ((ifp->if_flags & IFF_BROADCAST) && (ifra->ifra_broadaddr.sin_family == AF_INET)) ia->ia_broadaddr = ifra->ifra_broadaddr; - if (error == 0) + if (error == 0) { + if (iaIsFirst && (ifp->if_flags & IFF_MULTICAST) != 0) + in_addmulti(&allhosts_addr, ifp); EVENTHANDLER_INVOKE(ifaddr_event, ifp); + } return (error); case SIOCDIFADDR: @@ -502,8 +514,27 @@ s = splnet(); TAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifa_link); TAILQ_REMOVE(&in_ifaddrhead, ia, ia_link); - if (ia->ia_addr.sin_family == AF_INET) + if (ia->ia_addr.sin_family == AF_INET) { LIST_REMOVE(ia, ia_hash); + /* + * If this is the last IPv4 address configured on this + * interface, leave the all-hosts group. + * XXX: This is quite ugly because of locking and structure. + */ + oia = NULL; + IFP_TO_IA(ifp, oia); + if (oia == NULL) { + struct in_multi *inm; + + IFF_LOCKGIANT(ifp); + IN_MULTI_LOCK(); + IN_LOOKUP_MULTI(allhosts_addr, ifp, inm); + if (inm != NULL) + in_delmulti_locked(inm); + IN_MULTI_UNLOCK(); + IFF_UNLOCKGIANT(ifp); + } + } IFAFREE(&ia->ia_ifa); splx(s); @@ -792,16 +823,6 @@ if ((error = in_addprefix(ia, flags)) != 0) return (error); - /* - * If the interface supports multicast, join the "all hosts" - * multicast group on that interface. - */ - if (ifp->if_flags & IFF_MULTICAST) { - struct in_addr addr; - - addr.s_addr = htonl(INADDR_ALLHOSTS_GROUP); - in_addmulti(&addr, ifp); - } return (error); } @@ -1113,6 +1134,9 @@ igmp_leavegroup(inm); ifma = inm->inm_ifma; +#ifdef DIAGNOSTIC + printf("%s: purging ifma %p\n", __func__, ifma); +#endif KASSERT(ifma->ifma_protospec == inm, ("%s: ifma_protospec != inm", __func__)); ifma->ifma_protospec = NULL; @@ -1134,6 +1158,9 @@ struct in_multi *inm; struct in_multi *oinm; +#ifdef DIAGNOSTIC + printf("%s: purging ifp %p\n", __func__, ifp); +#endif IFF_LOCKGIANT(ifp); IN_MULTI_LOCK(); LIST_FOREACH_SAFE(inm, &in_multihead, inm_link, oinm) {