PERFORCE change 116894 for review
Jung-uk Kim
jkim at FreeBSD.org
Fri Mar 30 00:26:23 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=116894
Change 116894 by jkim at 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 <machine/asmacros.h>
==== //depot/projects/linuxolator/src/sys/amd64/amd64/genassym.c#7 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <machine/asmacros.h> /* miscellaneous asm macros */
==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_machdep.c#47 (text+ko) ====
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__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 <sys/param.h>
#include <sys/kernel.h>
==== //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 <bsm/audit_kevents.h>
==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_sysvec.c#12 (text+ko) ====
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <dev/isp/isp_freebsd.h>
#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) {
More information about the p4-projects
mailing list