Date: Thu, 15 Jan 2015 06:14:43 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r277210 - in projects/ifnet: contrib/compiler-rt/lib/sanitizer_common contrib/elftoolchain/elfcopy contrib/ntp/ntpd sys/amd64/conf sys/arm/broadcom/bcm2835 sys/arm/ti/cpsw sys/boot/comm... Message-ID: <201501150614.t0F6Ehhx070069@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Thu Jan 15 06:14:42 2015 New Revision: 277210 URL: https://svnweb.freebsd.org/changeset/base/277210 Log: Merge head. Added: projects/ifnet/sys/amd64/conf/MINIMAL - copied unchanged from r277209, head/sys/amd64/conf/MINIMAL Modified: projects/ifnet/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc projects/ifnet/contrib/elftoolchain/elfcopy/sections.c projects/ifnet/contrib/ntp/ntpd/ntp_io.c projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_bsc.c projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_bscvar.h projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c projects/ifnet/sys/arm/ti/cpsw/if_cpsw.c projects/ifnet/sys/boot/common/load_elf_obj.c projects/ifnet/sys/boot/fdt/dts/arm/beaglebone-black.dts projects/ifnet/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/trim_map.c projects/ifnet/sys/fs/devfs/devfs_devs.c projects/ifnet/sys/kern/kern_conf.c projects/ifnet/sys/kern/uipc_mbuf.c projects/ifnet/sys/sys/mbuf.h projects/ifnet/sys/sys/module.h projects/ifnet/usr.sbin/kldxref/kldxref.c Directory Properties: projects/ifnet/ (props changed) projects/ifnet/contrib/compiler-rt/ (props changed) projects/ifnet/contrib/elftoolchain/ (props changed) projects/ifnet/contrib/ntp/ (props changed) projects/ifnet/sys/ (props changed) projects/ifnet/sys/boot/ (props changed) projects/ifnet/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/ifnet/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ============================================================================== --- projects/ifnet/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc Thu Jan 15 06:14:42 2015 (r277210) @@ -97,7 +97,6 @@ # include <sys/link_elf.h> # include <netinet/ip_mroute.h> # include <netinet/in.h> -# include <netinet/ip_compat.h> # include <net/ethernet.h> # include <net/ppp_defs.h> # include <glob.h> Modified: projects/ifnet/contrib/elftoolchain/elfcopy/sections.c ============================================================================== --- projects/ifnet/contrib/elftoolchain/elfcopy/sections.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/contrib/elftoolchain/elfcopy/sections.c Thu Jan 15 06:14:42 2015 (r277210) @@ -777,6 +777,8 @@ resync_sections(struct elfcopy *ecp) continue; /* Align section offset. */ + if (s->align == 0) + s->align = 1; if (off <= s->off) { if (!s->loadable) s->off = roundup(off, s->align); Modified: projects/ifnet/contrib/ntp/ntpd/ntp_io.c ============================================================================== --- projects/ifnet/contrib/ntp/ntpd/ntp_io.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/contrib/ntp/ntpd/ntp_io.c Thu Jan 15 06:14:42 2015 (r277210) @@ -1176,12 +1176,13 @@ set_wildcard_reuse(int family, int on) #ifdef INCLUDE_IPV6_SUPPORT static isc_boolean_t -is_anycast(struct sockaddr *sa, char *name) +is_not_bindable(struct sockaddr *sa, char *name) { -#if defined(SIOCGIFAFLAG_IN6) && defined(IN6_IFF_ANYCAST) +#if defined(SIOCGIFAFLAG_IN6) && \ + (defined(IN6_IFF_ANYCAST) || defined(IN6_IFF_NOTREADY)) struct in6_ifreq ifr6; int fd; - u_int32_t flags6; + u_int32_t flags6, exclude = 0; if (sa->sa_family != AF_INET6) return ISC_FALSE; @@ -1197,9 +1198,15 @@ is_anycast(struct sockaddr *sa, char *na } close(fd); flags6 = ifr6.ifr_ifru.ifru_flags6; - if ((flags6 & IN6_IFF_ANYCAST) != 0) +#if defined(IN6_IFF_ANYCAST) + exclude |= IN6_IFF_ANYCAST; +#endif /* !IN6_IFF_ANYCAST */ +#if defined(IN6_IFF_NOTREADY) + exclude |= IN6_IFF_NOTREADY; +#endif /* !IN6_IFF_NOTREADY */ + if ((flags6 & exclude) != 0) return ISC_TRUE; -#endif /* !SIOCGIFAFLAG_IN6 || !IN6_IFF_ANYCAST */ +#endif /* !SIOCGIFAFLAG_IN6 || !(IN6_IFF_ANYCAST && IN6_IFF_NOTREADY) */ return ISC_FALSE; } #endif /* !INCLUDE_IPV6_SUPPORT */ @@ -1344,7 +1351,7 @@ update_interfaces( continue; #ifdef INCLUDE_IPV6_SUPPORT - if (is_anycast((struct sockaddr *)&interface.sin, isc_if.name)) + if (is_not_bindable((struct sockaddr *)&interface.sin, isc_if.name)) continue; #endif /* !INCLUDE_IPV6_SUPPORT */ Copied: projects/ifnet/sys/amd64/conf/MINIMAL (from r277209, head/sys/amd64/conf/MINIMAL) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ifnet/sys/amd64/conf/MINIMAL Thu Jan 15 06:14:42 2015 (r277210, copy of r277209, head/sys/amd64/conf/MINIMAL) @@ -0,0 +1,145 @@ +# +# MINIMAL -- Mostly Minimal kernel configuration file for FreeBSD/amd64 +# +# Many definitions of minimal are possible. The one this file follows is +# GENERIC, minus all functionality that can be replaced by loading kernel +# modules. +# +# Exceptions: +# o While UFS is buildable as a module, the current module lacks +# some features (ACL, GJOURNAL) that GENERIC includes. +# o acpi as a module has been reported flakey and not well tested, so +# is included in the kernel. +# o random is included due to uncertaty... +# o Many networking things are included +# +# For now, please run changes to these list past imp@freebsd.org +# +# For more information on this file, please read the config(5) manual page, +# and/or the handbook section on Kernel Configuration Files: +# +# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html +# +# The handbook is also available locally in /usr/share/doc/handbook +# if you've installed the doc distribution, otherwise always see the +# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the +# latest information. +# +# An exhaustive list of options and more detailed explanations of the +# device lines is also present in the ../../conf/NOTES and NOTES files. +# If you are in doubt as to the purpose or necessity of a line, check first +# in NOTES. +# +# $FreeBSD$ + +cpu HAMMER +ident MINIMAL + +makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols +makeoptions WITH_CTF=1 # Run ctfconvert(1) for DTrace support + +options SCHED_ULE # ULE scheduler +options PREEMPTION # Enable kernel thread preemption +options INET # InterNETworking +options INET6 # IPv6 communications protocols +options TCP_OFFLOAD # TCP offload +options SCTP # Stream Control Transmission Protocol +options FFS # Berkeley Fast Filesystem +options SOFTUPDATES # Enable FFS soft updates support +options UFS_ACL # Support for access control lists +options UFS_DIRHASH # Improve performance on big directories +options UFS_GJOURNAL # Enable gjournal-based UFS journaling +options QUOTA # Enable disk quotas for UFS +options MD_ROOT # MD is a potential root device +options COMPAT_FREEBSD32 # Compatible with i386 binaries +options COMPAT_FREEBSD4 # Compatible with FreeBSD4 +options COMPAT_FREEBSD5 # Compatible with FreeBSD5 +options COMPAT_FREEBSD6 # Compatible with FreeBSD6 +options COMPAT_FREEBSD7 # Compatible with FreeBSD7 +options COMPAT_FREEBSD9 # Compatible with FreeBSD9 +options COMPAT_FREEBSD10 # Compatible with FreeBSD10 +options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI +options KTRACE # ktrace(1) support +options STACK # stack(9) support +options SYSVSHM # SYSV-style shared memory +options SYSVMSG # SYSV-style message queues +options SYSVSEM # SYSV-style semaphores +options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions +options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed. +options KBD_INSTALL_CDEV # install a CDEV entry in /dev +options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4) +options AUDIT # Security event auditing +options CAPABILITY_MODE # Capsicum capability mode +options CAPABILITIES # Capsicum capabilities +options MAC # TrustedBSD MAC Framework +options KDTRACE_FRAME # Ensure frames are compiled in +options KDTRACE_HOOKS # Kernel DTrace hooks +options DDB_CTF # Kernel ELF linker loads CTF data +options INCLUDE_CONFIG_FILE # Include this file in kernel + +# Debugging support. Always need this: +options KDB # Enable kernel debugger support. +options KDB_TRACE # Print a stack trace for a panic. +# For full debugger support use (turn off in stable branch): +options DDB # Support DDB. +options GDB # Support remote GDB. +options DEADLKRES # Enable the deadlock resolver +options INVARIANTS # Enable calls of extra sanity checking +options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS +options WITNESS # Enable checks to detect deadlocks and cycles +options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed +options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones + +# Make an SMP-capable kernel by default +options SMP # Symmetric MultiProcessor Kernel + +# CPU frequency control +device cpufreq + +# Bus support. +device acpi +options ACPI_DMAR +device pci + +# atkbdc0 controls both the keyboard and the PS/2 mouse +device atkbdc # AT keyboard controller +device atkbd # AT keyboard +device psm # PS/2 mouse + +device kbdmux # keyboard multiplexer + +device vga # VGA video card driver +options VESA # Add support for VESA BIOS Extensions (VBE) + +device splash # Splash screen and screen saver support + +# syscons is the default console driver, resembling an SCO console +device sc +options SC_PIXEL_MODE # add support for the raster text mode + +# vt is the new video console driver +device vt +device vt_vga +device vt_efifb + +device agp # support several AGP chipsets + +# Pseudo devices. +device loop # Network loopback +device random # Entropy device +device padlock_rng # VIA Padlock RNG +device rdrand_rng # Intel Bull Mountain RNG +device ether # Ethernet support +device vlan # 802.1Q VLAN support +device tun # Packet tunnel. +device gif # IPv6 and IPv4 tunneling + +# The `bpf' device enables the Berkeley Packet Filter. +# Be aware of the administrative consequences of enabling this! +# Note that 'bpf' is required for DHCP. +device bpf # Berkeley packet filter + +# Xen HVM Guest Optimizations +# NOTE: XENHVM depends on xenpci. They must be added or removed together. +options XENHVM # Xen HVM kernel infrastructure +device xenpci # Xen HVM Hypervisor services driver Modified: projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_bsc.c ============================================================================== --- projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_bsc.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_bsc.c Thu Jan 15 06:14:42 2015 (r277210) @@ -252,6 +252,7 @@ bcm_bsc_attach(device_t dev) } if (i == nitems(bcm_bsc_pins)) { device_printf(dev, "only bsc0 and bsc1 are supported\n"); + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res); return (ENXIO); } @@ -262,6 +263,7 @@ bcm_bsc_attach(device_t dev) gpio = devclass_get_device(devclass_find("gpio"), 0); if (!gpio) { device_printf(dev, "cannot find gpio0\n"); + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res); return (ENXIO); } bcm_gpio_set_alternate(gpio, bcm_bsc_pins[i].sda, BCM_GPIO_ALT0); Modified: projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_bscvar.h ============================================================================== --- projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_bscvar.h Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_bscvar.h Thu Jan 15 06:14:42 2015 (r277210) @@ -58,9 +58,9 @@ struct bcm_bsc_softc { #define BCM_I2C_ERROR 0x04 #define BCM_BSC_WRITE(_sc, _off, _val) \ - bus_space_write_4(_sc->sc_bst, _sc->sc_bsh, _off, _val) + bus_space_write_4((_sc)->sc_bst, (_sc)->sc_bsh, _off, _val) #define BCM_BSC_READ(_sc, _off) \ - bus_space_read_4(_sc->sc_bst, _sc->sc_bsh, _off) + bus_space_read_4((_sc)->sc_bst, (_sc)->sc_bsh, _off) #define BCM_BSC_LOCK(_sc) \ mtx_lock(&(_sc)->sc_mtx) Modified: projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c ============================================================================== --- projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c Thu Jan 15 06:14:42 2015 (r277210) @@ -64,8 +64,6 @@ __FBSDID("$FreeBSD$"); #define MHZ2HZ(freq) ((freq) * (1000 * 1000)) #define OFFSET2MVOLT(val) (1200 + ((val) * 25)) #define MVOLT2OFFSET(val) (((val) - 1200) / 25) -#define RAW2K(temp) (((temp) + 273150) / 1000) -#define K2RAW(temp) (((temp) * 1000) - 273150) #define DEFAULT_ARM_FREQUENCY 700 #define DEFAULT_CORE_FREQUENCY 250 @@ -77,6 +75,7 @@ __FBSDID("$FreeBSD$"); #define MSG_ERROR -999999999 #define MHZSTEP 100 #define HZSTEP (MHZ2HZ(MHZSTEP)) +#define TZ_ZEROC 2732 #define VC_LOCK(sc) do { \ sema_wait(&vc_sema); \ @@ -1215,7 +1214,7 @@ sysctl_bcm2835_devcpu_temperature(SYSCTL return (EIO); /* 1/1000 celsius (raw) to 1/10 kelvin */ - val = RAW2K(val) * 10; + val = val / 100 + TZ_ZEROC; err = sysctl_handle_int(oidp, &val, 0, req); if (err || !req->newptr) /* error || read request */ Modified: projects/ifnet/sys/arm/ti/cpsw/if_cpsw.c ============================================================================== --- projects/ifnet/sys/arm/ti/cpsw/if_cpsw.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/arm/ti/cpsw/if_cpsw.c Thu Jan 15 06:14:42 2015 (r277210) @@ -396,9 +396,9 @@ cpsw_dump_slot(struct cpsw_softc *sc, st printf("\n"); if (slot->mbuf) { printf(" Ether: %14D\n", - (char *)(slot->mbuf->m_hdr.mh_data), " "); + (char *)(slot->mbuf->m_data), " "); printf(" Packet: %16D\n", - (char *)(slot->mbuf->m_hdr.mh_data) + 14, " "); + (char *)(slot->mbuf->m_data) + 14, " "); } } @@ -611,7 +611,7 @@ cpsw_attach(device_t dev) /* Allocate the null mbuf and pre-sync it. */ sc->null_mbuf = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); - memset(sc->null_mbuf->m_hdr.mh_data, 0, sc->null_mbuf->m_ext.ext_size); + memset(sc->null_mbuf->m_data, 0, sc->null_mbuf->m_ext.ext_size); bus_dmamap_create(sc->mbuf_dtag, 0, &sc->null_mbuf_dmamap); bus_dmamap_load_mbuf_sg(sc->mbuf_dtag, sc->null_mbuf_dmamap, sc->null_mbuf, segs, &nsegs, BUS_DMA_NOWAIT); @@ -1292,8 +1292,8 @@ cpsw_rx_dequeue(struct cpsw_softc *sc) /* Set up mbuf */ /* TODO: track SOP/EOP bits to assemble a full mbuf out of received fragments. */ - slot->mbuf->m_hdr.mh_data += bd.bufoff; - slot->mbuf->m_hdr.mh_len = bd.pktlen - 4; + slot->mbuf->m_data += bd.bufoff; + slot->mbuf->m_len = bd.pktlen - 4; slot->mbuf->m_pkthdr.len = bd.pktlen - 4; slot->mbuf->m_flags |= M_PKTHDR; slot->mbuf->m_pkthdr.rcvif = ifp; @@ -1461,7 +1461,7 @@ cpsw_tx_enqueue(struct cpsw_softc *sc) bus_dmamap_unload(sc->mbuf_dtag, slot->dmamap); if (padlen > 0) /* May as well add padding. */ m_append(slot->mbuf, padlen, - sc->null_mbuf->m_hdr.mh_data); + sc->null_mbuf->m_data); m0 = m_defrag(slot->mbuf, M_NOWAIT); if (m0 == NULL) { if_printf(sc->ifp, Modified: projects/ifnet/sys/boot/common/load_elf_obj.c ============================================================================== --- projects/ifnet/sys/boot/common/load_elf_obj.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/boot/common/load_elf_obj.c Thu Jan 15 06:14:42 2015 (r277210) @@ -416,6 +416,7 @@ __elfN(obj_parse_modmetadata)(struct pre modcnt++; break; case MDT_MODULE: + case MDT_PNP_INFO: break; default: printf("unknown type %d\n", md.md_type); Modified: projects/ifnet/sys/boot/fdt/dts/arm/beaglebone-black.dts ============================================================================== --- projects/ifnet/sys/boot/fdt/dts/arm/beaglebone-black.dts Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/boot/fdt/dts/arm/beaglebone-black.dts Thu Jan 15 06:14:42 2015 (r277210) @@ -144,10 +144,9 @@ status = "okay"; non-removable; }; - i2c@44e0b000 { - pmic@24 { + pmic@48 { compatible = "ti,am335x-pmic"; reg = <0x48>; }; Modified: projects/ifnet/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/trim_map.c ============================================================================== --- projects/ifnet/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/trim_map.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/trim_map.c Thu Jan 15 06:14:42 2015 (r277210) @@ -440,7 +440,7 @@ trim_map_vdev_commit(spa_t *spa, zio_t * if (tm == NULL) return; - timelimit = gethrtime() - trim_timeout * NANOSEC; + timelimit = gethrtime() - (hrtime_t)trim_timeout * NANOSEC; if (vd->vdev_isl2cache) { txgsafe = UINT64_MAX; txgtarget = UINT64_MAX; Modified: projects/ifnet/sys/fs/devfs/devfs_devs.c ============================================================================== --- projects/ifnet/sys/fs/devfs/devfs_devs.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/fs/devfs/devfs_devs.c Thu Jan 15 06:14:42 2015 (r277210) @@ -137,6 +137,12 @@ devfs_alloc(int flags) vfs_timestamp(&ts); cdev->si_atime = cdev->si_mtime = cdev->si_ctime = ts; cdev->si_cred = NULL; + /* + * Avoid race with dev_rel() by setting the initial + * reference count to 1. This last reference is taken + * by the destroy_dev() function. + */ + cdev->si_refcount = 1; return (cdev); } Modified: projects/ifnet/sys/kern/kern_conf.c ============================================================================== --- projects/ifnet/sys/kern/kern_conf.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/kern/kern_conf.c Thu Jan 15 06:14:42 2015 (r277210) @@ -1048,8 +1048,6 @@ destroy_devl(struct cdev *dev) /* Remove name marking */ dev->si_flags &= ~SI_NAMED; - dev->si_refcount++; /* Avoid race with dev_rel() */ - /* If we are a child, remove us from the parents list */ if (dev->si_flags & SI_CHILD) { LIST_REMOVE(dev, si_siblings); Modified: projects/ifnet/sys/kern/uipc_mbuf.c ============================================================================== --- projects/ifnet/sys/kern/uipc_mbuf.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/kern/uipc_mbuf.c Thu Jan 15 06:14:42 2015 (r277210) @@ -88,11 +88,38 @@ SYSCTL_INT(_kern_ipc, OID_AUTO, m_defrag * Ensure the correct size of various mbuf parameters. It could be off due * to compiler-induced padding and alignment artifacts. */ -CTASSERT(sizeof(struct mbuf) == MSIZE); CTASSERT(MSIZE - offsetof(struct mbuf, m_dat) == MLEN); CTASSERT(MSIZE - offsetof(struct mbuf, m_pktdat) == MHLEN); /* + * mbuf data storage should be 64-bit aligned regardless of architectural + * pointer size; check this is the case with and without a packet header. + */ +CTASSERT(offsetof(struct mbuf, m_dat) % 8 == 0); +CTASSERT(offsetof(struct mbuf, m_pktdat) % 8 == 0); + +/* + * While the specific values here don't matter too much (i.e., +/- a few + * words), we do want to ensure that changes to these values are carefully + * reasoned about and properly documented. This is especially the case as + * network-protocol and device-driver modules encode these layouts, and must + * be recompiled if the structures change. Check these values at compile time + * against the ones documented in comments in mbuf.h. + * + * NB: Possibly they should be documented there via #define's and not just + * comments. + */ +#if defined(__LP64__) +CTASSERT(offsetof(struct mbuf, m_dat) == 32); +CTASSERT(sizeof(struct pkthdr) == 56); +CTASSERT(sizeof(struct struct_m_ext) == 48); +#else +CTASSERT(offsetof(struct mbuf, m_dat) == 24); +CTASSERT(sizeof(struct pkthdr) == 48); +CTASSERT(sizeof(struct struct_m_ext) == 28); +#endif + +/* * m_get2() allocates minimum mbuf that would fit "size" argument. */ struct mbuf * Modified: projects/ifnet/sys/sys/mbuf.h ============================================================================== --- projects/ifnet/sys/sys/mbuf.h Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/sys/mbuf.h Thu Jan 15 06:14:42 2015 (r277210) @@ -60,9 +60,15 @@ * MLEN is data length in a normal mbuf. * MHLEN is data length in an mbuf with pktheader. * MINCLSIZE is a smallest amount of data that should be put into cluster. + * + * Compile-time assertions in uipc_mbuf.c test these values to ensure that + * they are sensible. */ -#define MLEN ((int)(MSIZE - sizeof(struct m_hdr))) -#define MHLEN ((int)(MLEN - sizeof(struct pkthdr))) +struct mbuf; +#define MHSIZE offsetof(struct mbuf, M_dat.M_databuf) +#define MPKTHSIZE offsetof(struct mbuf, M_dat.MH.MH_dat.MH_databuf) +#define MLEN ((int)(MSIZE - MHSIZE)) +#define MHLEN ((int)(MSIZE - MPKTHSIZE)) #define MINCLSIZE (MHLEN + 1) #ifdef _KERNEL @@ -126,6 +132,8 @@ struct m_tag { * Record/packet header in first mbuf of chain; valid only if M_PKTHDR is set. * Size ILP32: 48 * LP64: 56 + * Compile-time assertions in uipc_mbuf.c test these values to ensure that + * they are correct. */ struct pkthdr { struct ifnet *rcvif; /* rcv interface */ @@ -174,8 +182,10 @@ struct pkthdr { * set. * Size ILP32: 28 * LP64: 48 + * Compile-time assertions in uipc_mbuf.c test these values to ensure that + * they are correct. */ -struct m_ext { +struct struct_m_ext { volatile u_int *ext_cnt; /* pointer to ref count info */ caddr_t ext_buf; /* start of buffer */ uint32_t ext_size; /* size of buffer, for ext_free */ @@ -192,28 +202,55 @@ struct m_ext { * purposes. */ struct mbuf { - struct m_hdr m_hdr; + /* + * Header present at the beginning of every mbuf. + * Size ILP32: 24 + * LP64: 32 + * Compile-time assertions in uipc_mbuf.c test these values to ensure + * that they are correct. + */ + union { + struct mbuf *m; + SLIST_ENTRY(mbuf) slist; + STAILQ_ENTRY(mbuf) stailq; + } mu_next; /* next buffer in chain */ + union { + struct mbuf *m; + SLIST_ENTRY(mbuf) slist; + STAILQ_ENTRY(mbuf) stailq; + } mu_nextpkt; /* next chain in queue/record */ + caddr_t m_data; /* location of data */ + int32_t m_len; /* amount of data in this mbuf */ + uint32_t m_type:8, /* type of data in this mbuf */ + m_flags:24; /* flags; see below */ +#if !defined(__LP64__) + uint32_t m_pad; /* pad for 64bit alignment */ +#endif + + /* + * A set of optional headers (packet header, external storage header) + * and internal data storage. Historically, these arrays were sized + * to MHLEN (space left after a packet header) and MLEN (space left + * after only a regular mbuf header); they are now variable size in + * order to support future work on variable-size mbufs. + */ union { struct { struct pkthdr MH_pkthdr; /* M_PKTHDR set */ union { - struct m_ext MH_ext; /* M_EXT set */ - char MH_databuf[MHLEN]; + struct struct_m_ext MH_ext; /* M_EXT set */ + char MH_databuf[0]; } MH_dat; } MH; - char M_databuf[MLEN]; /* !M_PKTHDR, !M_EXT */ + char M_databuf[0]; /* !M_PKTHDR, !M_EXT */ } M_dat; }; -#define m_next m_hdr.mh_next.m -#define m_slist m_hdr.mh_next.slist -#define m_stailq m_hdr.mh_next.stailq -#define m_len m_hdr.mh_len -#define m_data m_hdr.mh_data -#define m_type m_hdr.mh_type -#define m_flags m_hdr.mh_flags -#define m_nextpkt m_hdr.mh_nextpkt.m -#define m_slistpkt m_hdr.mh_nextpkt.slist -#define m_stailqpkt m_hdr.mh_nextpkt.stailq +#define m_next mu_next.m +#define m_slist mu_next.slist +#define m_stailq mu_next.stailq +#define m_nextpkt mu_nextpkt.m +#define m_slistpkt mu_nextpkt.slist +#define m_stailqpkt mu_nextpkt.stailq #define m_pkthdr M_dat.MH.MH_pkthdr #define m_ext M_dat.MH.MH_dat.MH_ext #define m_pktdat M_dat.MH.MH_dat.MH_databuf Modified: projects/ifnet/sys/sys/module.h ============================================================================== --- projects/ifnet/sys/sys/module.h Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/sys/sys/module.h Thu Jan 15 06:14:42 2015 (r277210) @@ -35,6 +35,7 @@ #define MDT_DEPEND 1 /* argument is a module name */ #define MDT_MODULE 2 /* module declaration */ #define MDT_VERSION 3 /* module version(s) */ +#define MDT_PNP_INFO 4 /* Plug and play hints record */ #define MDT_STRUCT_VERSION 1 /* version of metadata structure */ #define MDT_SETNAME "modmetadata_set" Modified: projects/ifnet/usr.sbin/kldxref/kldxref.c ============================================================================== --- projects/ifnet/usr.sbin/kldxref/kldxref.c Thu Jan 15 02:22:52 2015 (r277209) +++ projects/ifnet/usr.sbin/kldxref/kldxref.c Thu Jan 15 06:14:42 2015 (r277210) @@ -172,6 +172,10 @@ parse_entry(struct mod_metadata *md, con record_string(kldname); } break; + case MDT_PNP_INFO: + if (dflag) { + printf(" pnp info for bus %s\n", cval); + } default: warnx("unknown metadata record %d in file %s", md->md_type, kldname); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201501150614.t0F6Ehhx070069>