Date: Tue, 12 Mar 2013 12:07:45 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r248191 - in user/attilio/vmobj-readlock: . lib/libnetgraph share/examples share/examples/cvsup share/misc sys/amd64/amd64 sys/amd64/include sys/arm/at91 sys/arm/include sys/dev/acpica ... Message-ID: <201303121207.r2CC7jFQ066175@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: attilio Date: Tue Mar 12 12:07:45 2013 New Revision: 248191 URL: http://svnweb.freebsd.org/changeset/base/248191 Log: MFC Deleted: user/attilio/vmobj-readlock/share/examples/cvsup/ports-supfile user/attilio/vmobj-readlock/share/examples/cvsup/refuse user/attilio/vmobj-readlock/share/examples/cvsup/refuse.README Modified: user/attilio/vmobj-readlock/ObsoleteFiles.inc user/attilio/vmobj-readlock/lib/libnetgraph/msg.c user/attilio/vmobj-readlock/share/examples/Makefile user/attilio/vmobj-readlock/share/examples/cvsup/README user/attilio/vmobj-readlock/share/examples/cvsup/cvs-supfile user/attilio/vmobj-readlock/share/examples/cvsup/stable-supfile user/attilio/vmobj-readlock/share/misc/organization.dot user/attilio/vmobj-readlock/sys/amd64/amd64/pmap.c user/attilio/vmobj-readlock/sys/amd64/include/pmap.h user/attilio/vmobj-readlock/sys/arm/at91/if_ate.c user/attilio/vmobj-readlock/sys/arm/include/signal.h user/attilio/vmobj-readlock/sys/dev/acpica/acpi_hpet.c user/attilio/vmobj-readlock/sys/dev/ath/ath_hal/ar9002/ar9285_btcoex.c user/attilio/vmobj-readlock/sys/dev/iscsi/initiator/isc_soc.c user/attilio/vmobj-readlock/sys/dev/sound/pci/hda/hdaa_patches.c user/attilio/vmobj-readlock/sys/dev/sound/pci/hda/hdac.h user/attilio/vmobj-readlock/sys/dev/usb/serial/uftdi.c user/attilio/vmobj-readlock/sys/dev/usb/usbdevs user/attilio/vmobj-readlock/sys/fs/nfs/nfsport.h user/attilio/vmobj-readlock/sys/i386/i386/pmap.c user/attilio/vmobj-readlock/sys/i386/include/pmap.h user/attilio/vmobj-readlock/sys/kern/kern_synch.c user/attilio/vmobj-readlock/sys/kern/kern_time.c user/attilio/vmobj-readlock/sys/kern/subr_sleepqueue.c user/attilio/vmobj-readlock/sys/kern/uipc_socket.c user/attilio/vmobj-readlock/sys/kern/uipc_syscalls.c user/attilio/vmobj-readlock/sys/kern/uipc_usrreq.c user/attilio/vmobj-readlock/sys/modules/ath/Makefile user/attilio/vmobj-readlock/sys/net/if_bridge.c user/attilio/vmobj-readlock/sys/netinet/libalias/alias_db.c user/attilio/vmobj-readlock/sys/netinet6/raw_ip6.c user/attilio/vmobj-readlock/sys/vm/vm_page.c user/attilio/vmobj-readlock/sys/xdr/xdr_mbuf.c user/attilio/vmobj-readlock/usr.bin/top/machine.c user/attilio/vmobj-readlock/usr.sbin/bhyve/pci_passthru.c Directory Properties: user/attilio/vmobj-readlock/ (props changed) user/attilio/vmobj-readlock/sys/ (props changed) user/attilio/vmobj-readlock/usr.sbin/bhyve/ (props changed) Modified: user/attilio/vmobj-readlock/ObsoleteFiles.inc ============================================================================== --- user/attilio/vmobj-readlock/ObsoleteFiles.inc Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/ObsoleteFiles.inc Tue Mar 12 12:07:45 2013 (r248191) @@ -38,6 +38,10 @@ # xargs -n1 | sort | uniq -d; # done +# 20130311: Ports are no more available via cvsup +OLD_FILES+=usr/share/examples/cvsup/ports-supfile +OLD_FILES+=usr/share/examples/cvsup/refuse +OLD_FILES+=usr/share/examples/cvsup/refuse.README # 20130309: NWFS and NCP supports removed OLD_FILES+=usr/bin/ncplist OLD_FILES+=usr/bin/ncplogin Modified: user/attilio/vmobj-readlock/lib/libnetgraph/msg.c ============================================================================== --- user/attilio/vmobj-readlock/lib/libnetgraph/msg.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/lib/libnetgraph/msg.c Tue Mar 12 12:07:45 2013 (r248191) @@ -234,7 +234,7 @@ NgDeliverMsg(int cs, const char *path, } /* Wait for reply if there should be one. */ - if (msg->header.cmd & NGM_HASREPLY) { + if (msg->header.cmd & NGM_HASREPLY && !(msg->header.flags & NGF_RESP)) { struct pollfd rfds; int n; Modified: user/attilio/vmobj-readlock/share/examples/Makefile ============================================================================== --- user/attilio/vmobj-readlock/share/examples/Makefile Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/share/examples/Makefile Tue Mar 12 12:07:45 2013 (r248191) @@ -52,9 +52,6 @@ XFILES= BSD_daemon/FreeBSD.pfa \ csh/dot.cshrc \ cvsup/README \ cvsup/cvs-supfile \ - cvsup/ports-supfile \ - cvsup/refuse \ - cvsup/refuse.README \ cvsup/stable-supfile \ cvsup/standard-supfile \ diskless/ME \ Modified: user/attilio/vmobj-readlock/share/examples/cvsup/README ============================================================================== --- user/attilio/vmobj-readlock/share/examples/cvsup/README Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/share/examples/cvsup/README Tue Mar 12 12:07:45 2013 (r248191) @@ -19,8 +19,6 @@ To maintain the sources for the FreeBSD- standard-supfile Main source tree - ports-supfile Ports collection - To maintain the sources for the FreeBSD-stable release, use: stable-supfile Main source tree @@ -28,7 +26,7 @@ To maintain the sources for the FreeBSD- To maintain a copy of the CVS repository containing all versions of FreeBSD, use: - cvs-supfile Main source tree and ports collection + cvs-supfile Main source tree collection IMPORTANT: Before you use any of the supfiles in this directory, you will need to edit in an appropriate "host" setting. See: Modified: user/attilio/vmobj-readlock/share/examples/cvsup/cvs-supfile ============================================================================== --- user/attilio/vmobj-readlock/share/examples/cvsup/cvs-supfile Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/share/examples/cvsup/cvs-supfile Tue Mar 12 12:07:45 2013 (r248191) @@ -43,9 +43,8 @@ # prefix=/home/ncvs # This specifies where to place the requested files. A # setting of "/home/ncvs" will place all of the files -# requested in /home/ncvs (e.g., "/home/ncvs/src/bin", -# "/home/ncvs/ports/archivers"). The prefix directory -# must exist in order to run CVSup. +# requested in /home/ncvs (e.g., "/home/ncvs/src/bin"). +# The prefix directory must exist in order to run CVSup. # Defaults that apply to all the collections # @@ -68,13 +67,6 @@ # mega-collection. It includes all of the individual "src-*" collections. src-all -## Ports Collection. -# -# The easiest way to get the ports tree is to use the "ports-all" -# mega-collection. It includes all of the individual "ports-*" -# collections, -ports-all - ## Projects # # This collection retrieves the projects tree of the FreeBSD Modified: user/attilio/vmobj-readlock/share/examples/cvsup/stable-supfile ============================================================================== --- user/attilio/vmobj-readlock/share/examples/cvsup/stable-supfile Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/share/examples/cvsup/stable-supfile Tue Mar 12 12:07:45 2013 (r248191) @@ -46,21 +46,6 @@ # in "/usr/src" (e.g., "/usr/src/bin", "/usr/src/lib"). # The prefix directory must exist in order to run CVSup. # -############################################################################### -# -# DANGER! WARNING! LOOK OUT! VORSICHT! -# -# If you add any of the ports collections to this file, be sure to -# specify them with a "tag" value set to ".", like this: -# -# ports-all tag=. -# -# If you leave out the "tag=." portion, CVSup will delete all of -# the files in your ports. That is because the ports -# collections do not use the same tags as the main part of the FreeBSD -# source tree. -# -############################################################################### # Defaults that apply to all the collections # Modified: user/attilio/vmobj-readlock/share/misc/organization.dot ============================================================================== --- user/attilio/vmobj-readlock/share/misc/organization.dot Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/share/misc/organization.dot Tue Mar 12 12:07:45 2013 (r248191) @@ -30,7 +30,7 @@ coresecretary [label="Core Team Secretar doccommitters [label="Doc/www Committers\ndoc-committers@FreeBSD.org"] doceng [label="Documentation Engineering Team\ndoceng@FreeBSD.org\ngjb, blackend,\ngabor, hrs"] portscommitters [label="Ports Committers\nports-committers@FreeBSD.org"] -portmgr [label="Port Management Team\nportmgr@FreeBSD.org\ntabthorpe, marcus, bapt, beat,\nerwin, linimon, pav,\nitetcu, miwi"] +portmgr [label="Port Management Team\nportmgr@FreeBSD.org\ntabthorpe, marcus, bapt, \nerwin, pav,\nitetcu, miwi"] portmgrsecretary [label="Port Management Team Secretary\nportmgr-secretary@FreeBSD.org\ntabthorpe"] re [label="Primary Release Engineering Team\nre@FreeBSD.org\nkib, blackend, jpaetzel, hrs, kensmith"] secteam [label="Security Team\nsecteam@FreeBSD.org\nsimon, qingli, delphij,\nremko, philip, stas, cperciva,\ncsjp, rwatson, miwi, bz"] @@ -43,13 +43,12 @@ srccommitters [label="Src Committers\nsr accounts [label="Accounts Team\naccounts@FreeBSD.org\nmarkm, simon, kensmith,\ndhw"] backups [label="Backup Administrators\nbackups@FreeBSD.org\nsimon, kensmith,\ndhw"] -bugmeister [label="Bugmeister Team\nbugmeister@FreeBSD.org\neadler, gavin, gonzo, linimon"] +bugmeister [label="Bugmeister Team\nbugmeister@FreeBSD.org\neadler, gavin, gonzo"] clusteradm [label="Cluster Administrators\nclusteradm@FreeBSD.org\nbrd, simon, ps,\nkensmith, peter"] cvsupmaster [label="CVSup Mirror Site Coordinators\ncvsup-master@FreeBSD.org\nkuriyama, jdp,\nkensmith"] dnsadm [label="DNS Administrators\ndnsadm@FreeBSD.org\nbillf, dg, ps,\nkensmith, peter"] mirroradmin [label="FTP/WWW Mirror Site Coordinators\nmirror-admin@FreeBSD.org\nkuriyama, kensmith"] ncvs [label="CVS src Repository Managers\nncvs@FreeBSD.org\njoe, kuriyama, markm,\nsimon, peter"] -pcvs [label="CVS ports Repository Managers\npcvs@FreeBSD.org\nmarcus, joe, kuriyama,\nmarkm, simon"] perforceadmin [label="Perforce Repository Administrators\nperforce-admin@FreeBSD.org\nscottl, kensmith, gordon,\nrwatson, peter, dhw"] postmaster [label="Postmaster Team\npostmaster@FreeBSD.org\njmb, brd, sahil, dhw"] refadm [label="Reference Systems Administrators\nrefadm@FreeBSD.org\njake, billf, markm, simon,\nobrien, ps, kensmith,\npeter, dhw"] @@ -70,8 +69,6 @@ _admin -> backups _admin -> bugmeister _admin -> clusteradm _admin -> ncvs -_admin -> pcvs -_admin -> dcvs _admin -> cvsupmaster _admin -> dnsadm _admin -> mirroradmin Modified: user/attilio/vmobj-readlock/sys/amd64/amd64/pmap.c ============================================================================== --- user/attilio/vmobj-readlock/sys/amd64/amd64/pmap.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/amd64/amd64/pmap.c Tue Mar 12 12:07:45 2013 (r248191) @@ -131,6 +131,7 @@ __FBSDID("$FreeBSD$"); #include <vm/vm_extern.h> #include <vm/vm_pageout.h> #include <vm/vm_pager.h> +#include <vm/vm_radix.h> #include <vm/vm_reserv.h> #include <vm/uma.h> @@ -306,7 +307,6 @@ static boolean_t pmap_try_insert_pv_entr static void pmap_update_pde(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, pd_entry_t newpde); static void pmap_update_pde_invalidate(vm_offset_t va, pd_entry_t newpde); -static vm_page_t pmap_vmpage_splay(vm_pindex_t pindex, vm_page_t root); static vm_page_t _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, struct rwlock **lockp); @@ -1528,31 +1528,12 @@ pmap_add_delayed_free_list(vm_page_t m, * for mapping a distinct range of virtual addresses. The pmap's collection is * ordered by this virtual address range. */ -static void +static __inline void pmap_insert_pt_page(pmap_t pmap, vm_page_t mpte) { - vm_page_t root; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - root = pmap->pm_root; - if (root == NULL) { - mpte->md.pv_left = NULL; - mpte->md.pv_right = NULL; - } else { - root = pmap_vmpage_splay(mpte->pindex, root); - if (mpte->pindex < root->pindex) { - mpte->md.pv_left = root->md.pv_left; - mpte->md.pv_right = root; - root->md.pv_left = NULL; - } else if (mpte->pindex == root->pindex) - panic("pmap_insert_pt_page: pindex already inserted"); - else { - mpte->md.pv_right = root->md.pv_right; - mpte->md.pv_left = root; - root->md.pv_right = NULL; - } - } - pmap->pm_root = mpte; + vm_radix_insert(&pmap->pm_root, mpte->pindex, mpte); } /* @@ -1560,19 +1541,12 @@ pmap_insert_pt_page(pmap_t pmap, vm_page * specified pmap's collection of idle page table pages. Returns NULL if there * is no page table page corresponding to the specified virtual address. */ -static vm_page_t +static __inline vm_page_t pmap_lookup_pt_page(pmap_t pmap, vm_offset_t va) { - vm_page_t mpte; - vm_pindex_t pindex = pmap_pde_pindex(va); PMAP_LOCK_ASSERT(pmap, MA_OWNED); - if ((mpte = pmap->pm_root) != NULL && mpte->pindex != pindex) { - mpte = pmap_vmpage_splay(pindex, mpte); - if ((pmap->pm_root = mpte)->pindex != pindex) - mpte = NULL; - } - return (mpte); + return (vm_radix_lookup(&pmap->pm_root, pmap_pde_pindex(va))); } /* @@ -1580,31 +1554,12 @@ pmap_lookup_pt_page(pmap_t pmap, vm_offs * of idle page table pages. The specified page table page must be a member of * the pmap's collection. */ -static void +static __inline void pmap_remove_pt_page(pmap_t pmap, vm_page_t mpte) { - vm_page_t root; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - if (mpte != pmap->pm_root) { - root = pmap_vmpage_splay(mpte->pindex, pmap->pm_root); - KASSERT(mpte == root, - ("pmap_remove_pt_page: mpte %p is missing from pmap %p", - mpte, pmap)); - } - if (mpte->md.pv_left == NULL) - root = mpte->md.pv_right; - else { - root = pmap_vmpage_splay(mpte->pindex, mpte->md.pv_left); - root->md.pv_right = mpte->md.pv_right; - } - pmap->pm_root = root; - - /* - * Reinitialize the pv_list which could be dirty now because of the - * splay tree work. - */ - TAILQ_INIT(&mpte->md.pv_list); + vm_radix_remove(&pmap->pm_root, mpte->pindex); } /* @@ -1680,61 +1635,6 @@ _pmap_unwire_ptp(pmap_t pmap, vm_offset_ } /* - * Implements Sleator and Tarjan's top-down splay algorithm. Returns - * the vm_page containing the given pindex. If, however, that - * pindex is not found in the pmap, returns a vm_page that is - * adjacent to the pindex, coming before or after it. - */ -static vm_page_t -pmap_vmpage_splay(vm_pindex_t pindex, vm_page_t root) -{ - struct vm_page dummy; - vm_page_t lefttreemax, righttreemin, y; - - if (root == NULL) - return (root); - lefttreemax = righttreemin = &dummy; - for (;; root = y) { - if (pindex < root->pindex) { - if ((y = root->md.pv_left) == NULL) - break; - if (pindex < y->pindex) { - /* Rotate right. */ - root->md.pv_left = y->md.pv_right; - y->md.pv_right = root; - root = y; - if ((y = root->md.pv_left) == NULL) - break; - } - /* Link into the new root's right tree. */ - righttreemin->md.pv_left = root; - righttreemin = root; - } else if (pindex > root->pindex) { - if ((y = root->md.pv_right) == NULL) - break; - if (pindex > y->pindex) { - /* Rotate left. */ - root->md.pv_right = y->md.pv_left; - y->md.pv_left = root; - root = y; - if ((y = root->md.pv_right) == NULL) - break; - } - /* Link into the new root's left tree. */ - lefttreemax->md.pv_right = root; - lefttreemax = root; - } else - break; - } - /* Assemble the new root. */ - lefttreemax->md.pv_right = root->md.pv_left; - righttreemin->md.pv_left = root->md.pv_right; - root->md.pv_left = dummy.md.pv_right; - root->md.pv_right = dummy.md.pv_left; - return (root); -} - -/* * After removing a page table entry, this routine is used to * conditionally free the page, and manage the hold/wire counts. */ @@ -1756,7 +1656,7 @@ pmap_pinit0(pmap_t pmap) PMAP_LOCK_INIT(pmap); pmap->pm_pml4 = (pml4_entry_t *)PHYS_TO_DMAP(KPML4phys); - pmap->pm_root = NULL; + pmap->pm_root.rt_root = 0; CPU_ZERO(&pmap->pm_active); PCPU_SET(curpmap, pmap); TAILQ_INIT(&pmap->pm_pvchunk); @@ -1797,7 +1697,7 @@ pmap_pinit(pmap_t pmap) /* install self-referential address mapping entry(s) */ pmap->pm_pml4[PML4PML4I] = VM_PAGE_TO_PHYS(pml4pg) | PG_V | PG_RW | PG_A | PG_M; - pmap->pm_root = NULL; + pmap->pm_root.rt_root = 0; CPU_ZERO(&pmap->pm_active); TAILQ_INIT(&pmap->pm_pvchunk); bzero(&pmap->pm_stats, sizeof pmap->pm_stats); @@ -2039,7 +1939,7 @@ pmap_release(pmap_t pmap) KASSERT(pmap->pm_stats.resident_count == 0, ("pmap_release: pmap resident count %ld != 0", pmap->pm_stats.resident_count)); - KASSERT(pmap->pm_root == NULL, + KASSERT(vm_radix_is_empty(&pmap->pm_root), ("pmap_release: pmap has reserved page table page(s)")); m = PHYS_TO_VM_PAGE(pmap->pm_pml4[PML4PML4I] & PG_FRAME); Modified: user/attilio/vmobj-readlock/sys/amd64/include/pmap.h ============================================================================== --- user/attilio/vmobj-readlock/sys/amd64/include/pmap.h Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/amd64/include/pmap.h Tue Mar 12 12:07:45 2013 (r248191) @@ -150,6 +150,8 @@ #include <sys/_lock.h> #include <sys/_mutex.h> +#include <vm/_vm_radix.h> + typedef u_int64_t pd_entry_t; typedef u_int64_t pt_entry_t; typedef u_int64_t pdp_entry_t; @@ -235,20 +237,10 @@ struct pv_entry; struct pv_chunk; struct md_page { - union { - TAILQ_HEAD(,pv_entry) pvi_list; - struct { - vm_page_t pii_left; - vm_page_t pii_right; - } pvi_siters; - } pv_structs; - int pat_mode; + TAILQ_HEAD(,pv_entry) pv_list; + int pat_mode; }; -#define pv_list pv_structs.pvi_list -#define pv_left pv_structs.pvi_siters.pii_left -#define pv_right pv_structs.pvi_siters.pii_right - /* * The kernel virtual address (KVA) of the level 4 page table page is always * within the direct map (DMAP) region. @@ -260,7 +252,7 @@ struct pmap { cpuset_t pm_active; /* active on cpus */ /* spare u_int here due to padding */ struct pmap_statistics pm_stats; /* pmap statistics */ - vm_page_t pm_root; /* spare page table pages */ + struct vm_radix pm_root; /* spare page table pages */ }; typedef struct pmap *pmap_t; Modified: user/attilio/vmobj-readlock/sys/arm/at91/if_ate.c ============================================================================== --- user/attilio/vmobj-readlock/sys/arm/at91/if_ate.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/arm/at91/if_ate.c Tue Mar 12 12:07:45 2013 (r248191) @@ -899,12 +899,9 @@ ate_intr(void *xsc) /* FCS is not coppied into mbuf. */ remain = (sc->rx_descs[idx].status & ETH_LEN_MASK) - 4; - /* Get an appropriately sized mbuf */ - if (remain + ETHER_ALIGN >= MINCLSIZE) - mb = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); - else - MGETHDR(mb, M_NOWAIT, MT_DATA); - + /* Get an appropriately sized mbuf. */ + mb = m_get2(M_NOWAIT, MT_DATA, M_PKTHDR, + remain + ETHER_ALIGN); if (mb == NULL) { sc->ifp->if_iqdrops++; rxdhead->status = 0; Modified: user/attilio/vmobj-readlock/sys/arm/include/signal.h ============================================================================== --- user/attilio/vmobj-readlock/sys/arm/include/signal.h Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/arm/include/signal.h Tue Mar 12 12:07:45 2013 (r248191) @@ -42,6 +42,7 @@ typedef long sig_atomic_t; #if __BSD_VISIBLE struct sigcontext { + int _dummy; }; #endif Modified: user/attilio/vmobj-readlock/sys/dev/acpica/acpi_hpet.c ============================================================================== --- user/attilio/vmobj-readlock/sys/dev/acpica/acpi_hpet.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/dev/acpica/acpi_hpet.c Tue Mar 12 12:07:45 2013 (r248191) @@ -675,7 +675,8 @@ hpet_attach(device_t dev) if (t->pcpu_master >= 0) { t->et.et_flags |= ET_FLAGS_PERCPU; t->et.et_quality += 100; - } + } else if (mp_ncpus >= 8) + t->et.et_quality -= 100; if ((t->caps & HPET_TCAP_PER_INT) == 0) t->et.et_quality -= 10; t->et.et_frequency = sc->freq; Modified: user/attilio/vmobj-readlock/sys/dev/ath/ath_hal/ar9002/ar9285_btcoex.c ============================================================================== --- user/attilio/vmobj-readlock/sys/dev/ath/ath_hal/ar9002/ar9285_btcoex.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/dev/ath/ath_hal/ar9002/ar9285_btcoex.c Tue Mar 12 12:07:45 2013 (r248191) @@ -50,7 +50,7 @@ ar9285BTCoexAntennaDiversity(struct ath_ if ((ahp->ah_btCoexFlag & HAL_BT_COEX_FLAG_ANT_DIV_ALLOW) || (AH5212(ah)->ah_diversity != HAL_ANT_VARIABLE)) { if ((ahp->ah_btCoexFlag & HAL_BT_COEX_FLAG_ANT_DIV_ENABLE) && - (AH5212(ah)->ah_diversity == HAL_ANT_VARIABLE)) { + (AH5212(ah)->ah_antControl == HAL_ANT_VARIABLE)) { /* Enable antenna diversity */ ant_div_control1 = HAL_BT_COEX_ANTDIV_CONTROL1_ENABLE; ant_div_control2 = HAL_BT_COEX_ANTDIV_CONTROL2_ENABLE; @@ -63,7 +63,7 @@ ar9285BTCoexAntennaDiversity(struct ath_ OS_REG_WRITE(ah, AR_PHY_SWITCH_COM, HAL_BT_COEX_ANT_DIV_SWITCH_COM); OS_REG_RMW(ah, AR_PHY_SWITCH_CHAIN_0, 0, 0xf0000000); - } else if (AH5212(ah)->ah_diversity == HAL_ANT_FIXED_B) { + } else if (AH5212(ah)->ah_antControl == HAL_ANT_FIXED_B) { /* Disable antenna diversity. Use antenna B(LNA2) only. */ ant_div_control1 = HAL_BT_COEX_ANTDIV_CONTROL1_FIXED_B; ant_div_control2 = HAL_BT_COEX_ANTDIV_CONTROL2_FIXED_B; Modified: user/attilio/vmobj-readlock/sys/dev/iscsi/initiator/isc_soc.c ============================================================================== --- user/attilio/vmobj-readlock/sys/dev/iscsi/initiator/isc_soc.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/dev/iscsi/initiator/isc_soc.c Tue Mar 12 12:07:45 2013 (r248191) @@ -91,7 +91,7 @@ isc_sendPDU(isc_session_t *sp, pduq_t *p /* | mbuf for the iSCSI header */ - MGETHDR(mh, M_TRYWAIT, MT_DATA); + MGETHDR(mh, M_WAITOK, MT_DATA); mh->m_pkthdr.rcvif = NULL; mh->m_next = NULL; mh->m_len = sizeof(union ipdu_u); @@ -132,7 +132,7 @@ isc_sendPDU(isc_session_t *sp, pduq_t *p while(len > 0) { int l; - MGET(md, M_TRYWAIT, MT_DATA); + MGET(md, M_WAITOK, MT_DATA); md->m_ext.ref_cnt = &ou_refcnt; l = min(MCLBYTES, len); debug(4, "setting ext_free(arg=%p len/l=%d/%d)", pq->buf, len, l); @@ -150,7 +150,7 @@ isc_sendPDU(isc_session_t *sp, pduq_t *p off += l; } if(((pp->ds_len & 03) != 0) || ISOK2DIG(sp->dataDigest, pp)) { - MGET(md, M_TRYWAIT, MT_DATA); + MGET(md, M_WAITOK, MT_DATA); if(pp->ds_len & 03) len = 4 - (pp->ds_len & 03); else Modified: user/attilio/vmobj-readlock/sys/dev/sound/pci/hda/hdaa_patches.c ============================================================================== --- user/attilio/vmobj-readlock/sys/dev/sound/pci/hda/hdaa_patches.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/dev/sound/pci/hda/hdaa_patches.c Tue Mar 12 12:07:45 2013 (r248191) @@ -344,7 +344,9 @@ hdac_pin_patch(struct hdaa_widget *w) break; } } else if (id == HDA_CODEC_ALC269 && - subid == LENOVO_X1CRBN_SUBVENDOR) { + (subid == LENOVO_X1CRBN_SUBVENDOR || + subid == LENOVO_T430_SUBVENDOR || + subid == LENOVO_T430S_SUBVENDOR)) { switch (nid) { case 21: patch = "as=1 seq=15"; Modified: user/attilio/vmobj-readlock/sys/dev/sound/pci/hda/hdac.h ============================================================================== --- user/attilio/vmobj-readlock/sys/dev/sound/pci/hda/hdac.h Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/dev/sound/pci/hda/hdac.h Tue Mar 12 12:07:45 2013 (r248191) @@ -225,6 +225,8 @@ #define LENOVO_X220_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21da) #define LENOVO_X300_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x20ac) #define LENOVO_T420_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21ce) +#define LENOVO_T430_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21f3) +#define LENOVO_T430S_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21fb) #define LENOVO_T520_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21cf) #define LENOVO_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0xffff) Modified: user/attilio/vmobj-readlock/sys/dev/usb/serial/uftdi.c ============================================================================== --- user/attilio/vmobj-readlock/sys/dev/usb/serial/uftdi.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/dev/usb/serial/uftdi.c Tue Mar 12 12:07:45 2013 (r248191) @@ -753,6 +753,8 @@ static const STRUCT_USB_HOST_ID uftdi_de UFTDI_DEV(MOBILITY, USB_SERIAL, UFTDI_TYPE_AUTO), UFTDI_DEV(OLIMEX, ARM_USB_OCD, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG), UFTDI_DEV(OLIMEX, ARM_USB_OCD_H, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG), + UFTDI_DEV(OPTO, CRD7734, UFTDI_TYPE_AUTO), + UFTDI_DEV(OPTO, CRD7734_1, UFTDI_TYPE_AUTO), UFTDI_DEV(PAPOUCH, AD4USB, UFTDI_TYPE_AUTO), UFTDI_DEV(PAPOUCH, AP485, UFTDI_TYPE_AUTO), UFTDI_DEV(PAPOUCH, AP485_2, UFTDI_TYPE_AUTO), Modified: user/attilio/vmobj-readlock/sys/dev/usb/usbdevs ============================================================================== --- user/attilio/vmobj-readlock/sys/dev/usb/usbdevs Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/dev/usb/usbdevs Tue Mar 12 12:07:45 2013 (r248191) @@ -323,6 +323,7 @@ vendor GUNZE 0x0637 Gunze Electronics U vendor AVISION 0x0638 Avision vendor TEAC 0x0644 TEAC vendor ACTON 0x0647 Acton Research Corp. +vendor OPTO 0x065a Optoelectronics Co., Ltd vendor SGI 0x065e Silicon Graphics vendor SANWASUPPLY 0x0663 Sanwa Supply vendor MEGATEC 0x0665 Megatec @@ -3150,6 +3151,13 @@ product OPTION ICON321 0xd031 Globetrot product OPTION ICON505 0xd055 Globetrotter iCON 505 product OPTION ICON452 0x7901 Globetrotter iCON 452 +/* Optoelectronics Co., Ltd */ +product OPTO BARCODE 0x0001 Barcode Reader +product OPTO OPTICONCODE 0x0009 Opticon Code Reader +product OPTO BARCODE_1 0xa002 Barcode Reader +product OPTO CRD7734 0xc000 USB Cradle CRD-7734-RU +product OPTO CRD7734_1 0xc001 USB Cradle CRD-7734-RU + /* OvisLink product */ product OVISLINK RT3072 0x3072 RT3072 Modified: user/attilio/vmobj-readlock/sys/fs/nfs/nfsport.h ============================================================================== --- user/attilio/vmobj-readlock/sys/fs/nfs/nfsport.h Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/fs/nfs/nfsport.h Tue Mar 12 12:07:45 2013 (r248191) @@ -140,32 +140,32 @@ * Allocate mbufs. Must succeed and never set the mbuf ptr to NULL. */ #define NFSMGET(m) do { \ - MGET((m), M_TRYWAIT, MT_DATA); \ + MGET((m), M_WAITOK, MT_DATA); \ while ((m) == NULL ) { \ (void) nfs_catnap(PZERO, 0, "nfsmget"); \ - MGET((m), M_TRYWAIT, MT_DATA); \ + MGET((m), M_WAITOK, MT_DATA); \ } \ } while (0) #define NFSMGETHDR(m) do { \ - MGETHDR((m), M_TRYWAIT, MT_DATA); \ + MGETHDR((m), M_WAITOK, MT_DATA); \ while ((m) == NULL ) { \ (void) nfs_catnap(PZERO, 0, "nfsmget"); \ - MGETHDR((m), M_TRYWAIT, MT_DATA); \ + MGETHDR((m), M_WAITOK, MT_DATA); \ } \ } while (0) #define NFSMCLGET(m, w) do { \ - MGET((m), M_TRYWAIT, MT_DATA); \ + MGET((m), M_WAITOK, MT_DATA); \ while ((m) == NULL ) { \ (void) nfs_catnap(PZERO, 0, "nfsmget"); \ - MGET((m), M_TRYWAIT, MT_DATA); \ + MGET((m), M_WAITOK, MT_DATA); \ } \ MCLGET((m), (w)); \ } while (0) #define NFSMCLGETHDR(m, w) do { \ - MGETHDR((m), M_TRYWAIT, MT_DATA); \ + MGETHDR((m), M_WAITOK, MT_DATA); \ while ((m) == NULL ) { \ (void) nfs_catnap(PZERO, 0, "nfsmget"); \ - MGETHDR((m), M_TRYWAIT, MT_DATA); \ + MGETHDR((m), M_WAITOK, MT_DATA); \ } \ } while (0) #define NFSMTOD mtod Modified: user/attilio/vmobj-readlock/sys/i386/i386/pmap.c ============================================================================== --- user/attilio/vmobj-readlock/sys/i386/i386/pmap.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/i386/i386/pmap.c Tue Mar 12 12:07:45 2013 (r248191) @@ -133,6 +133,7 @@ __FBSDID("$FreeBSD$"); #include <vm/vm_extern.h> #include <vm/vm_pageout.h> #include <vm/vm_pager.h> +#include <vm/vm_radix.h> #include <vm/vm_reserv.h> #include <vm/uma.h> @@ -330,7 +331,6 @@ static boolean_t pmap_try_insert_pv_entr static void pmap_update_pde(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, pd_entry_t newpde); static void pmap_update_pde_invalidate(vm_offset_t va, pd_entry_t newpde); -static vm_page_t pmap_vmpage_splay(vm_pindex_t pindex, vm_page_t root); static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags); @@ -1604,31 +1604,12 @@ pmap_add_delayed_free_list(vm_page_t m, * for mapping a distinct range of virtual addresses. The pmap's collection is * ordered by this virtual address range. */ -static void +static __inline void pmap_insert_pt_page(pmap_t pmap, vm_page_t mpte) { - vm_page_t root; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - root = pmap->pm_root; - if (root == NULL) { - mpte->md.pv_left = NULL; - mpte->md.pv_right = NULL; - } else { - root = pmap_vmpage_splay(mpte->pindex, root); - if (mpte->pindex < root->pindex) { - mpte->md.pv_left = root->md.pv_left; - mpte->md.pv_right = root; - root->md.pv_left = NULL; - } else if (mpte->pindex == root->pindex) - panic("pmap_insert_pt_page: pindex already inserted"); - else { - mpte->md.pv_right = root->md.pv_right; - mpte->md.pv_left = root; - root->md.pv_right = NULL; - } - } - pmap->pm_root = mpte; + vm_radix_insert(&pmap->pm_root, mpte->pindex, mpte); } /* @@ -1636,19 +1617,12 @@ pmap_insert_pt_page(pmap_t pmap, vm_page * specified pmap's collection of idle page table pages. Returns NULL if there * is no page table page corresponding to the specified virtual address. */ -static vm_page_t +static __inline vm_page_t pmap_lookup_pt_page(pmap_t pmap, vm_offset_t va) { - vm_page_t mpte; - vm_pindex_t pindex = va >> PDRSHIFT; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - if ((mpte = pmap->pm_root) != NULL && mpte->pindex != pindex) { - mpte = pmap_vmpage_splay(pindex, mpte); - if ((pmap->pm_root = mpte)->pindex != pindex) - mpte = NULL; - } - return (mpte); + return (vm_radix_lookup(&pmap->pm_root, va >> PDRSHIFT)); } /* @@ -1656,27 +1630,12 @@ pmap_lookup_pt_page(pmap_t pmap, vm_offs * of idle page table pages. The specified page table page must be a member of * the pmap's collection. */ -static void +static __inline void pmap_remove_pt_page(pmap_t pmap, vm_page_t mpte) { - vm_page_t root; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - if (mpte != pmap->pm_root) - pmap_vmpage_splay(mpte->pindex, pmap->pm_root); - if (mpte->md.pv_left == NULL) - root = mpte->md.pv_right; - else { - root = pmap_vmpage_splay(mpte->pindex, mpte->md.pv_left); - root->md.pv_right = mpte->md.pv_right; - } - pmap->pm_root = root; - - /* - * Reinitialize the pv_list which could be dirty now because of the - * splay tree work. - */ - TAILQ_INIT(&mpte->md.pv_list); + vm_radix_remove(&pmap->pm_root, mpte->pindex); } /* @@ -1730,61 +1689,6 @@ _pmap_unwire_ptp(pmap_t pmap, vm_page_t } /* - * Implements Sleator and Tarjan's top-down splay algorithm. Returns - * the vm_page containing the given pindex. If, however, that - * pindex is not found in the pmap, returns a vm_page that is - * adjacent to the pindex, coming before or after it. - */ -static vm_page_t -pmap_vmpage_splay(vm_pindex_t pindex, vm_page_t root) -{ - struct vm_page dummy; - vm_page_t lefttreemax, righttreemin, y; - - if (root == NULL) - return (root); - lefttreemax = righttreemin = &dummy; - for (;; root = y) { - if (pindex < root->pindex) { - if ((y = root->md.pv_left) == NULL) - break; - if (pindex < y->pindex) { - /* Rotate right. */ - root->md.pv_left = y->md.pv_right; - y->md.pv_right = root; - root = y; - if ((y = root->md.pv_left) == NULL) - break; - } - /* Link into the new root's right tree. */ - righttreemin->md.pv_left = root; - righttreemin = root; - } else if (pindex > root->pindex) { - if ((y = root->md.pv_right) == NULL) - break; - if (pindex > y->pindex) { - /* Rotate left. */ - root->md.pv_right = y->md.pv_left; - y->md.pv_left = root; - root = y; - if ((y = root->md.pv_right) == NULL) - break; - } - /* Link into the new root's left tree. */ - lefttreemax->md.pv_right = root; - lefttreemax = root; - } else - break; - } - /* Assemble the new root. */ - lefttreemax->md.pv_right = root->md.pv_left; - righttreemin->md.pv_left = root->md.pv_right; - root->md.pv_left = dummy.md.pv_right; - root->md.pv_right = dummy.md.pv_left; - return (root); -} - -/* * After removing a page table entry, this routine is used to * conditionally free the page, and manage the hold/wire counts. */ @@ -1818,7 +1722,7 @@ pmap_pinit0(pmap_t pmap) #ifdef PAE pmap->pm_pdpt = (pdpt_entry_t *)(KERNBASE + (vm_offset_t)IdlePDPT); #endif - pmap->pm_root = NULL; + pmap->pm_root.rt_root = 0; CPU_ZERO(&pmap->pm_active); PCPU_SET(curpmap, pmap); TAILQ_INIT(&pmap->pm_pvchunk); @@ -1857,9 +1761,9 @@ pmap_pinit(pmap_t pmap) KASSERT(pmap_kextract((vm_offset_t)pmap->pm_pdpt) < (4ULL<<30), ("pmap_pinit: pdpt above 4g")); #endif - pmap->pm_root = NULL; + pmap->pm_root.rt_root = 0; } - KASSERT(pmap->pm_root == NULL, + KASSERT(vm_radix_is_empty(&pmap->pm_root), ("pmap_pinit: pmap has reserved page table page(s)")); /* @@ -2123,7 +2027,7 @@ pmap_release(pmap_t pmap) KASSERT(pmap->pm_stats.resident_count == 0, ("pmap_release: pmap resident count %ld != 0", pmap->pm_stats.resident_count)); - KASSERT(pmap->pm_root == NULL, + KASSERT(vm_radix_is_empty(&pmap->pm_root), ("pmap_release: pmap has reserved page table page(s)")); pmap_lazyfix(pmap); Modified: user/attilio/vmobj-readlock/sys/i386/include/pmap.h ============================================================================== --- user/attilio/vmobj-readlock/sys/i386/include/pmap.h Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/i386/include/pmap.h Tue Mar 12 12:07:45 2013 (r248191) @@ -159,6 +159,8 @@ #include <sys/_lock.h> #include <sys/_mutex.h> +#include <vm/_vm_radix.h> + #ifdef PAE typedef uint64_t pdpt_entry_t; @@ -426,20 +428,10 @@ struct pv_entry; struct pv_chunk; struct md_page { - union { - TAILQ_HEAD(,pv_entry) pvi_list; - struct { - vm_page_t pii_left; - vm_page_t pii_right; - } pvi_siters; - } pv_structs; - int pat_mode; + TAILQ_HEAD(,pv_entry) pv_list; + int pat_mode; }; -#define pv_list pv_structs.pvi_list -#define pv_left pv_structs.pvi_siters.pii_left -#define pv_right pv_structs.pvi_siters.pii_right - struct pmap { struct mtx pm_mtx; pd_entry_t *pm_pdir; /* KVA of page directory */ @@ -451,7 +443,7 @@ struct pmap { pdpt_entry_t *pm_pdpt; /* KVA of page director pointer table */ #endif - vm_page_t pm_root; /* spare page table pages */ + struct vm_radix pm_root; /* spare page table pages */ }; typedef struct pmap *pmap_t; Modified: user/attilio/vmobj-readlock/sys/kern/kern_synch.c ============================================================================== --- user/attilio/vmobj-readlock/sys/kern/kern_synch.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/kern/kern_synch.c Tue Mar 12 12:07:45 2013 (r248191) @@ -85,7 +85,7 @@ SYSINIT(synch_setup, SI_SUB_KICK_SCHEDUL NULL); int hogticks; -static int pause_wchan; +static uint8_t pause_wchan[MAXCPU]; static struct callout loadav_callout; @@ -198,7 +198,8 @@ _sleep(void *ident, struct lock_object * if (TD_ON_SLEEPQ(td)) sleepq_remove(td, td->td_wchan); - if (ident == &pause_wchan) + if ((uint8_t *)ident >= &pause_wchan[0] && + (uint8_t *)ident <= &pause_wchan[MAXCPU - 1]) sleepq_flags = SLEEPQ_PAUSE; else sleepq_flags = SLEEPQ_SLEEP; @@ -372,7 +373,7 @@ pause_sbt(const char *wmesg, sbintime_t DELAY((sbt & 0xffffffff) / SBT_1US); return (0); } - return (_sleep(&pause_wchan, NULL, 0, wmesg, sbt, pr, flags)); + return (_sleep(&pause_wchan[curcpu], NULL, 0, wmesg, sbt, pr, flags)); } /* Modified: user/attilio/vmobj-readlock/sys/kern/kern_time.c ============================================================================== --- user/attilio/vmobj-readlock/sys/kern/kern_time.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/kern/kern_time.c Tue Mar 12 12:07:45 2013 (r248191) @@ -477,7 +477,7 @@ kern_clock_getres(struct thread *td, clo return (0); } -static int nanowait; +static uint8_t nanowait[MAXCPU]; int kern_nanosleep(struct thread *td, struct timespec *rqt, struct timespec *rmt) @@ -503,8 +503,8 @@ kern_nanosleep(struct thread *td, struct if (TIMESEL(&sbt, tmp)) sbt += tc_tick_sbt; sbt += tmp; - error = tsleep_sbt(&nanowait, PWAIT | PCATCH, "nanslp", sbt, prec, - C_ABSOLUTE); + error = tsleep_sbt(&nanowait[curcpu], PWAIT | PCATCH, "nanslp", + sbt, prec, C_ABSOLUTE); if (error != EWOULDBLOCK) { if (error == ERESTART) error = EINTR; Modified: user/attilio/vmobj-readlock/sys/kern/subr_sleepqueue.c ============================================================================== --- user/attilio/vmobj-readlock/sys/kern/subr_sleepqueue.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/kern/subr_sleepqueue.c Tue Mar 12 12:07:45 2013 (r248191) @@ -88,16 +88,14 @@ __FBSDID("$FreeBSD$"); #endif /* - * Constants for the hash table of sleep queue chains. These constants are - * the same ones that 4BSD (and possibly earlier versions of BSD) used. - * Basically, we ignore the lower 8 bits of the address since most wait - * channel pointers are aligned and only look at the next 7 bits for the - * hash. SC_TABLESIZE must be a power of two for SC_MASK to work properly. + * Constants for the hash table of sleep queue chains. + * SC_TABLESIZE must be a power of two for SC_MASK to work properly. */ -#define SC_TABLESIZE 128 /* Must be power of 2. */ +#define SC_TABLESIZE 256 /* Must be power of 2. */ #define SC_MASK (SC_TABLESIZE - 1) #define SC_SHIFT 8 -#define SC_HASH(wc) (((uintptr_t)(wc) >> SC_SHIFT) & SC_MASK) +#define SC_HASH(wc) ((((uintptr_t)(wc) >> SC_SHIFT) ^ (uintptr_t)(wc)) & \ + SC_MASK) #define SC_LOOKUP(wc) &sleepq_chains[SC_HASH(wc)] #define NR_SLEEPQS 2 /* Modified: user/attilio/vmobj-readlock/sys/kern/uipc_socket.c ============================================================================== --- user/attilio/vmobj-readlock/sys/kern/uipc_socket.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/kern/uipc_socket.c Tue Mar 12 12:07:45 2013 (r248191) @@ -136,6 +136,7 @@ __FBSDID("$FreeBSD$"); #include <sys/uio.h> #include <sys/jail.h> #include <sys/syslog.h> +#include <netinet/in.h> #include <net/vnet.h> @@ -565,8 +566,12 @@ sonewconn(struct socket *head, int conns /* * The accept socket may be tearing down but we just * won a race on the ACCEPT_LOCK. + * However, if sctp_peeloff() is called on a 1-to-many + * style socket, the SO_ACCEPTCONN doesn't need to be set. */ - if (!(head->so_options & SO_ACCEPTCONN)) { + if (!(head->so_options & SO_ACCEPTCONN) && + ((head->so_proto->pr_protocol != IPPROTO_SCTP) || + (head->so_type != SOCK_SEQPACKET))) { SOCK_LOCK(so); so->so_head = NULL; sofree(so); /* NB: returns ACCEPT_UNLOCK'ed. */ Modified: user/attilio/vmobj-readlock/sys/kern/uipc_syscalls.c ============================================================================== --- user/attilio/vmobj-readlock/sys/kern/uipc_syscalls.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/kern/uipc_syscalls.c Tue Mar 12 12:07:45 2013 (r248191) @@ -2386,8 +2386,10 @@ sys_sctp_peeloff(td, uap) CURVNET_SET(head->so_vnet); so = sonewconn(head, SS_ISCONNECTED); - if (so == NULL) + if (so == NULL) { + error = ENOMEM; goto noconnection; + } /* * Before changing the flags on the socket, we have to bump the * reference count. Otherwise, if the protocol calls sofree(), Modified: user/attilio/vmobj-readlock/sys/kern/uipc_usrreq.c ============================================================================== --- user/attilio/vmobj-readlock/sys/kern/uipc_usrreq.c Tue Mar 12 12:02:06 2013 (r248190) +++ user/attilio/vmobj-readlock/sys/kern/uipc_usrreq.c Tue Mar 12 12:07:45 2013 (r248191) @@ -282,7 +282,7 @@ static void unp_dispose(struct mbuf *); static void unp_shutdown(struct unpcb *); static void unp_drop(struct unpcb *, int); static void unp_gc(__unused void *, int); -static void unp_scan(struct mbuf *, void (*)(struct file *)); +static void unp_scan(struct mbuf *, void (*)(struct filedescent **, int)); static void unp_discard(struct file *); static void unp_freerights(struct filedescent **, int); static void unp_init(void); @@ -2135,17 +2135,22 @@ static int unp_marked; static int unp_unreachable; static void -unp_accessable(struct file *fp) +unp_accessable(struct filedescent **fdep, int fdcount) { struct unpcb *unp; + struct file *fp; + int i; - if ((unp = fptounp(fp)) == NULL) - return; - if (unp->unp_gcflag & UNPGC_REF) - return; - unp->unp_gcflag &= ~UNPGC_DEAD; - unp->unp_gcflag |= UNPGC_REF; - unp_marked++; + for (i = 0; i < fdcount; i++) { + fp = fdep[i]->fde_file; + if ((unp = fptounp(fp)) == NULL) + continue; + if (unp->unp_gcflag & UNPGC_REF) + continue; + unp->unp_gcflag &= ~UNPGC_DEAD; + unp->unp_gcflag |= UNPGC_REF; + unp_marked++; + } } static void @@ -2292,19 +2297,16 @@ unp_dispose(struct mbuf *m) { if (m) - unp_scan(m, unp_discard); + unp_scan(m, unp_freerights); } static void -unp_scan(struct mbuf *m0, void (*op)(struct file *)) +unp_scan(struct mbuf *m0, void (*op)(struct filedescent **, int)) { struct mbuf *m; - struct filedescent **fdep; struct cmsghdr *cm; void *data; - int i; socklen_t clen, datalen; - int qfds; while (m0 != NULL) { for (m = m0; m; m = m->m_next) { @@ -2324,10 +2326,8 @@ unp_scan(struct mbuf *m0, void (*op)(str if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SCM_RIGHTS) { - qfds = datalen / sizeof(*fdep); - fdep = data; - for (i = 0; i < qfds; i++) - (*op)(fdep[i]->fde_file); + (*op)(data, datalen / *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201303121207.r2CC7jFQ066175>