From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 00:37:29 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C7E1A106566B; Sun, 12 Aug 2012 00:37:29 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B121D8FC0A; Sun, 12 Aug 2012 00:37:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7C0bTZr017208; Sun, 12 Aug 2012 00:37:29 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7C0bTZo017201; Sun, 12 Aug 2012 00:37:29 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208120037.q7C0bTZo017201@svn.freebsd.org> From: Adrian Chadd Date: Sun, 12 Aug 2012 00:37:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239204 - head/sys/dev/ath X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 00:37:29 -0000 Author: adrian Date: Sun Aug 12 00:37:29 2012 New Revision: 239204 URL: http://svn.freebsd.org/changeset/base/239204 Log: Break out ath_draintxq() into a method and un-methodize ath_tx_processq(). Now that I understand what's going on with this, I've realised that it's going to be quite difficult to implement a processq method in the EDMA case. Because there's a separate TX status FIFO, I can't just run processq() on each EDMA TXQ to see what's finished. i have to actually run the TX status queue and handle individual TXQs. So: * unmethodize ath_tx_processq(); * leave ath_tx_draintxq() as a method, as it only uses the completion status for debugging rather than actively completing the frames (ie, all frames here are failed); * Methodize ath_draintxq(). The EDMA ath_draintxq() will have to take care of running the TX completion FIFO before (potentially) freeing frames in the queue. The only two places where ath_tx_draintxq() (on a single TXQ) are used: * ath_draintxq(); and * the CABQ handling in the beacon setup code - it drains the CABQ before populating the CABQ with frames for a new beacon (when doing multi-VAP operation.) So it's quite possible that once I methodize the CABQ and beacon handling, I can just drop ath_tx_draintxq() in its entirety. Finally, it's also quite possible that I can remove ath_tx_draintxq() in the future and just "teach" it to not check the status when doing EDMA. Modified: head/sys/dev/ath/if_ath.c head/sys/dev/ath/if_ath_misc.h head/sys/dev/ath/if_ath_tx.c head/sys/dev/ath/if_ath_tx.h head/sys/dev/ath/if_ath_tx_edma.c head/sys/dev/ath/if_athvar.h Modified: head/sys/dev/ath/if_ath.c ============================================================================== --- head/sys/dev/ath/if_ath.c Sun Aug 12 00:25:35 2012 (r239203) +++ head/sys/dev/ath/if_ath.c Sun Aug 12 00:37:29 2012 (r239204) @@ -168,12 +168,13 @@ static struct ath_txq *ath_txq_setup(str static int ath_tx_setup(struct ath_softc *, int, int); static void ath_tx_cleanupq(struct ath_softc *, struct ath_txq *); static void ath_tx_cleanup(struct ath_softc *); +static int ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq, + int dosched); static void ath_tx_proc_q0(void *, int); static void ath_tx_proc_q0123(void *, int); static void ath_tx_proc(void *, int); static void ath_txq_sched_tasklet(void *, int); static int ath_chan_set(struct ath_softc *, struct ieee80211_channel *); -static void ath_draintxq(struct ath_softc *, ATH_RESET_TYPE reset_type); static void ath_chan_change(struct ath_softc *, struct ieee80211_channel *); static void ath_scan_start(struct ieee80211com *); static void ath_scan_end(struct ieee80211com *); @@ -3585,8 +3586,8 @@ ath_tx_update_busy(struct ath_softc *sc) * Kick the packet scheduler if needed. This can occur from this * particular task. */ -int -ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched) +static int +ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched) { struct ath_hal *ah = sc->sc_ah; struct ath_buf *bf; @@ -4093,8 +4094,8 @@ ath_stoptxdma(struct ath_softc *sc) /* * Drain the transmit queues and reclaim resources. */ -static void -ath_draintxq(struct ath_softc *sc, ATH_RESET_TYPE reset_type) +void +ath_legacy_tx_drain(struct ath_softc *sc, ATH_RESET_TYPE reset_type) { #ifdef ATH_DEBUG struct ath_hal *ah = sc->sc_ah; Modified: head/sys/dev/ath/if_ath_misc.h ============================================================================== --- head/sys/dev/ath/if_ath_misc.h Sun Aug 12 00:25:35 2012 (r239203) +++ head/sys/dev/ath/if_ath_misc.h Sun Aug 12 00:37:29 2012 (r239204) @@ -96,9 +96,10 @@ extern void ath_descdma_cleanup(struct a struct ath_descdma *dd, ath_bufhead *head); extern void ath_legacy_attach_comp_func(struct ath_softc *sc); + extern void ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq); -extern int ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *txq, - int dosched); +extern void ath_legacy_tx_drain(struct ath_softc *sc, + ATH_RESET_TYPE reset_type); /* * This is only here so that the RX proc function can call it. Modified: head/sys/dev/ath/if_ath_tx.c ============================================================================== --- head/sys/dev/ath/if_ath_tx.c Sun Aug 12 00:25:35 2012 (r239203) +++ head/sys/dev/ath/if_ath_tx.c Sun Aug 12 00:37:29 2012 (r239204) @@ -4571,6 +4571,7 @@ ath_xmit_setup_legacy(struct ath_softc * sc->sc_tx.xmit_dma_restart = ath_legacy_tx_dma_restart; sc->sc_tx.xmit_handoff = ath_legacy_xmit_handoff; - sc->sc_tx.xmit_processq = ath_legacy_tx_processq; + sc->sc_tx.xmit_drainq = ath_legacy_tx_draintxq; + sc->sc_tx.xmit_drain = ath_legacy_tx_drain; } Modified: head/sys/dev/ath/if_ath_tx.h ============================================================================== --- head/sys/dev/ath/if_ath_tx.h Sun Aug 12 00:25:35 2012 (r239203) +++ head/sys/dev/ath/if_ath_tx.h Sun Aug 12 00:37:29 2012 (r239204) @@ -134,10 +134,11 @@ extern void ath_addba_response_timeout(s (_sc)->sc_tx.xmit_dma_restart((_sc), (_txq)) #define ath_tx_handoff(_sc, _txq, _bf) \ (_sc)->sc_tx.xmit_handoff((_sc), (_txq), (_bf)) + #define ath_tx_draintxq(_sc, _txq) \ (_sc)->sc_tx.xmit_drainq((_sc), (_txq)) -#define ath_tx_processq(_sc, _txq, _dosched) \ - (_sc)->sc_tx.xmit_processq((_sc), (_txq), (_dosched)) +#define ath_draintxq(_sc, _rtype) \ + (_sc)->sc_tx.xmit_drain((_sc), (_rtype)) extern void ath_xmit_setup_legacy(struct ath_softc *sc); Modified: head/sys/dev/ath/if_ath_tx_edma.c ============================================================================== --- head/sys/dev/ath/if_ath_tx_edma.c Sun Aug 12 00:25:35 2012 (r239203) +++ head/sys/dev/ath/if_ath_tx_edma.c Sun Aug 12 00:37:29 2012 (r239204) @@ -349,26 +349,21 @@ ath_edma_dma_txteardown(struct ath_softc } /* - * Process frames in the current queue and if necessary, re-schedule the - * software TXQ scheduler for this TXQ. - * - * XXX This is again a pain in the ass to do because the status descriptor - * information is in the TX status FIFO, not with the current descriptor. + * Drain all TXQs, potentially after completing the existing completed + * frames. */ -static int -ath_edma_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched) +static void +ath_edma_tx_drain(struct ath_softc *sc, ATH_RESET_TYPE reset_type) { device_printf(sc->sc_dev, "%s: called\n", __func__); - return (0); } /* * Completely drain the TXQ, completing frames that were completed. * - * XXX this is going to be a complete pain in the ass because the - * completion status is in the TX status FIFO, not with the descriptor - * itself. Sigh. + * This is only called to _explictly_ drain the frames from a queue + * without caring if they were completed or not. */ static void ath_edma_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq) @@ -446,6 +441,6 @@ ath_xmit_setup_edma(struct ath_softc *sc sc->sc_tx.xmit_dma_restart = ath_edma_dma_restart; sc->sc_tx.xmit_handoff = ath_edma_xmit_handoff; - sc->sc_tx.xmit_processq = ath_edma_tx_processq; sc->sc_tx.xmit_drainq = ath_edma_tx_draintxq; + sc->sc_tx.xmit_drain = ath_edma_tx_drain; } Modified: head/sys/dev/ath/if_athvar.h ============================================================================== --- head/sys/dev/ath/if_athvar.h Sun Aug 12 00:25:35 2012 (r239203) +++ head/sys/dev/ath/if_athvar.h Sun Aug 12 00:37:29 2012 (r239204) @@ -417,10 +417,15 @@ struct ath_tx_methods { void (*xmit_handoff)(struct ath_softc *sc, struct ath_txq *txq, struct ath_buf *bf); + /* + * This is only required by the CABQ code as well as + * xmit_drain(). + */ void (*xmit_drainq)(struct ath_softc *sc, struct ath_txq *txq); - int (*xmit_processq)(struct ath_softc *sc, - struct ath_txq *txq, int dosched); + + void (*xmit_drain)(struct ath_softc *sc, + ATH_RESET_TYPE reset_type); }; struct ath_softc { From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 00:46:16 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4C025106566B; Sun, 12 Aug 2012 00:46:16 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2C6678FC08; Sun, 12 Aug 2012 00:46:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7C0kGF8017936; Sun, 12 Aug 2012 00:46:16 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7C0kF3R017929; Sun, 12 Aug 2012 00:46:15 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208120046.q7C0kF3R017929@svn.freebsd.org> From: Adrian Chadd Date: Sun, 12 Aug 2012 00:46:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239205 - head/sys/dev/ath X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 00:46:16 -0000 Author: adrian Date: Sun Aug 12 00:46:15 2012 New Revision: 239205 URL: http://svn.freebsd.org/changeset/base/239205 Log: Revert the ath_tx_draintxq() method, and instead teach it the minimum necessary to "do" EDMA. It was just using the TX completion status for logging information about the descriptor completion. Since with EDMA we don't know this without checking the TX completion FIFO, we can't provide this information. So don't. Modified: head/sys/dev/ath/if_ath.c head/sys/dev/ath/if_ath_misc.h head/sys/dev/ath/if_ath_tx.c head/sys/dev/ath/if_ath_tx.h head/sys/dev/ath/if_ath_tx_edma.c head/sys/dev/ath/if_athvar.h Modified: head/sys/dev/ath/if_ath.c ============================================================================== --- head/sys/dev/ath/if_ath.c Sun Aug 12 00:37:29 2012 (r239204) +++ head/sys/dev/ath/if_ath.c Sun Aug 12 00:46:15 2012 (r239205) @@ -3987,7 +3987,7 @@ ath_tx_freebuf(struct ath_softc *sc, str } void -ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq) +ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq) { #ifdef ATH_DEBUG struct ath_hal *ah = sc->sc_ah; @@ -4013,6 +4013,17 @@ ath_legacy_tx_draintxq(struct ath_softc bf = TAILQ_FIRST(&txq->axq_q); if (bf == NULL) { txq->axq_link = NULL; + /* + * There's currently no flag that indicates + * a buffer is on the FIFO. So until that + * occurs, just clear the FIFO counter here. + * + * Yes, this means that if something in parallel + * is pushing things onto this TXQ and pushing + * _that_ into the hardware, things will get + * very fruity very quickly. + */ + txq->axq_fifo_depth = 0; ATH_TXQ_UNLOCK(txq); break; } @@ -4022,10 +4033,20 @@ ath_legacy_tx_draintxq(struct ath_softc #ifdef ATH_DEBUG if (sc->sc_debug & ATH_DEBUG_RESET) { struct ieee80211com *ic = sc->sc_ifp->if_l2com; + int status = 0; - ath_printtxbuf(sc, bf, txq->axq_qnum, ix, - ath_hal_txprocdesc(ah, bf->bf_lastds, + /* + * EDMA operation has a TX completion FIFO + * separate from the TX descriptor, so this + * method of checking the "completion" status + * is wrong. + */ + if (! sc->sc_isedma) { + status = (ath_hal_txprocdesc(ah, + bf->bf_lastds, &bf->bf_status.ds_txstat) == HAL_OK); + } + ath_printtxbuf(sc, bf, txq->axq_qnum, ix, status); ieee80211_dump_pkt(ic, mtod(bf->bf_m, const uint8_t *), bf->bf_m->m_len, 0, -1); } Modified: head/sys/dev/ath/if_ath_misc.h ============================================================================== --- head/sys/dev/ath/if_ath_misc.h Sun Aug 12 00:37:29 2012 (r239204) +++ head/sys/dev/ath/if_ath_misc.h Sun Aug 12 00:46:15 2012 (r239205) @@ -97,7 +97,8 @@ extern void ath_descdma_cleanup(struct a extern void ath_legacy_attach_comp_func(struct ath_softc *sc); -extern void ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq); +extern void ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq); + extern void ath_legacy_tx_drain(struct ath_softc *sc, ATH_RESET_TYPE reset_type); Modified: head/sys/dev/ath/if_ath_tx.c ============================================================================== --- head/sys/dev/ath/if_ath_tx.c Sun Aug 12 00:37:29 2012 (r239204) +++ head/sys/dev/ath/if_ath_tx.c Sun Aug 12 00:46:15 2012 (r239205) @@ -4572,6 +4572,5 @@ ath_xmit_setup_legacy(struct ath_softc * sc->sc_tx.xmit_dma_restart = ath_legacy_tx_dma_restart; sc->sc_tx.xmit_handoff = ath_legacy_xmit_handoff; - sc->sc_tx.xmit_drainq = ath_legacy_tx_draintxq; sc->sc_tx.xmit_drain = ath_legacy_tx_drain; } Modified: head/sys/dev/ath/if_ath_tx.h ============================================================================== --- head/sys/dev/ath/if_ath_tx.h Sun Aug 12 00:37:29 2012 (r239204) +++ head/sys/dev/ath/if_ath_tx.h Sun Aug 12 00:46:15 2012 (r239205) @@ -134,9 +134,6 @@ extern void ath_addba_response_timeout(s (_sc)->sc_tx.xmit_dma_restart((_sc), (_txq)) #define ath_tx_handoff(_sc, _txq, _bf) \ (_sc)->sc_tx.xmit_handoff((_sc), (_txq), (_bf)) - -#define ath_tx_draintxq(_sc, _txq) \ - (_sc)->sc_tx.xmit_drainq((_sc), (_txq)) #define ath_draintxq(_sc, _rtype) \ (_sc)->sc_tx.xmit_drain((_sc), (_rtype)) Modified: head/sys/dev/ath/if_ath_tx_edma.c ============================================================================== --- head/sys/dev/ath/if_ath_tx_edma.c Sun Aug 12 00:37:29 2012 (r239204) +++ head/sys/dev/ath/if_ath_tx_edma.c Sun Aug 12 00:46:15 2012 (r239205) @@ -360,19 +360,6 @@ ath_edma_tx_drain(struct ath_softc *sc, } /* - * Completely drain the TXQ, completing frames that were completed. - * - * This is only called to _explictly_ drain the frames from a queue - * without caring if they were completed or not. - */ -static void -ath_edma_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq) -{ - - device_printf(sc->sc_dev, "%s: called\n", __func__); -} - -/* * Process the TX status queue. */ static void @@ -441,6 +428,5 @@ ath_xmit_setup_edma(struct ath_softc *sc sc->sc_tx.xmit_dma_restart = ath_edma_dma_restart; sc->sc_tx.xmit_handoff = ath_edma_xmit_handoff; - sc->sc_tx.xmit_drainq = ath_edma_tx_draintxq; sc->sc_tx.xmit_drain = ath_edma_tx_drain; } Modified: head/sys/dev/ath/if_athvar.h ============================================================================== --- head/sys/dev/ath/if_athvar.h Sun Aug 12 00:37:29 2012 (r239204) +++ head/sys/dev/ath/if_athvar.h Sun Aug 12 00:46:15 2012 (r239205) @@ -416,14 +416,6 @@ struct ath_tx_methods { struct ath_txq *txq); void (*xmit_handoff)(struct ath_softc *sc, struct ath_txq *txq, struct ath_buf *bf); - - /* - * This is only required by the CABQ code as well as - * xmit_drain(). - */ - void (*xmit_drainq)(struct ath_softc *sc, - struct ath_txq *txq); - void (*xmit_drain)(struct ath_softc *sc, ATH_RESET_TYPE reset_type); }; From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 00:56:56 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AB7C7106564A; Sun, 12 Aug 2012 00:56:56 +0000 (UTC) (envelope-from davidxu@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 95FE88FC17; Sun, 12 Aug 2012 00:56:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7C0uusD018990; Sun, 12 Aug 2012 00:56:56 GMT (envelope-from davidxu@svn.freebsd.org) Received: (from davidxu@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7C0uu86018988; Sun, 12 Aug 2012 00:56:56 GMT (envelope-from davidxu@svn.freebsd.org) Message-Id: <201208120056.q7C0uu86018988@svn.freebsd.org> From: David Xu Date: Sun, 12 Aug 2012 00:56:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239206 - head/lib/libthr/thread X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 00:56:56 -0000 Author: davidxu Date: Sun Aug 12 00:56:56 2012 New Revision: 239206 URL: http://svn.freebsd.org/changeset/base/239206 Log: Do defered mutex wakeup once. Modified: head/lib/libthr/thread/thr_cond.c Modified: head/lib/libthr/thread/thr_cond.c ============================================================================== --- head/lib/libthr/thread/thr_cond.c Sun Aug 12 00:46:15 2012 (r239205) +++ head/lib/libthr/thread/thr_cond.c Sun Aug 12 00:56:56 2012 (r239206) @@ -239,6 +239,7 @@ cond_wait_user(struct pthread_cond *cvp, _thr_clear_wake(curthread); _sleepq_unlock(cvp); if (defered) { + defered = 0; if ((mp->m_lock.m_owner & UMUTEX_CONTESTED) == 0) (void)_umtx_op_err(&mp->m_lock, UMTX_OP_MUTEX_WAKE2, mp->m_lock.m_flags, 0, 0); From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 14:16:22 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2AA5E106566C; Sun, 12 Aug 2012 14:16:22 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 153F88FC0C; Sun, 12 Aug 2012 14:16:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CEGLoT094315; Sun, 12 Aug 2012 14:16:21 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CEGL11094313; Sun, 12 Aug 2012 14:16:21 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208121416.q7CEGL11094313@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Sun, 12 Aug 2012 14:16:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239210 - head/sys/boot/common X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 14:16:22 -0000 Author: ae Date: Sun Aug 12 14:16:21 2012 New Revision: 239210 URL: http://svn.freebsd.org/changeset/base/239210 Log: Add more debug messages. Modified: head/sys/boot/common/disk.c Modified: head/sys/boot/common/disk.c ============================================================================== --- head/sys/boot/common/disk.c Sun Aug 12 09:23:55 2012 (r239209) +++ head/sys/boot/common/disk.c Sun Aug 12 14:16:21 2012 (r239210) @@ -162,7 +162,7 @@ disk_open(struct disk_devdesc *dev, off_ dev->d_opendata = od; od->mediasize = mediasize; od->sectorsize = sectorsize; - DEBUG("open '%s', unit %d slice %d partition %d", + DEBUG("%s: unit %d, slice %d, partition %d", disk_fmtdev(dev), dev->d_unit, dev->d_slice, dev->d_partition); /* Determine disk layout. */ @@ -206,10 +206,14 @@ disk_open(struct disk_devdesc *dev, off_ out: if (table != NULL) ptable_close(table); + if (rc != 0) { if (od->table != NULL) ptable_close(od->table); free(od); + DEBUG("%s: could not open", disk_fmtdev(dev)); + } else { + DEBUG("%s: offset %lld", disk_fmtdev(dev), dev->d_offset); } return (rc); } @@ -220,6 +224,7 @@ disk_close(struct disk_devdesc *dev) struct open_disk *od; od = (struct open_disk *)dev->d_opendata; + DEBUG("%s: closed", disk_fmtdev(dev)); ptable_close(od->table); free(od); return (0); From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 14:32:31 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 038F4106566B; Sun, 12 Aug 2012 14:32:31 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E37418FC12; Sun, 12 Aug 2012 14:32:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CEWUQN096201; Sun, 12 Aug 2012 14:32:30 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CEWUR3096199; Sun, 12 Aug 2012 14:32:30 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208121432.q7CEWUR3096199@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Sun, 12 Aug 2012 14:32:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239211 - head/sys/boot/i386/libi386 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 14:32:31 -0000 Author: ae Date: Sun Aug 12 14:32:30 2012 New Revision: 239211 URL: http://svn.freebsd.org/changeset/base/239211 Log: Add another debug message. Modified: head/sys/boot/i386/libi386/biosdisk.c Modified: head/sys/boot/i386/libi386/biosdisk.c ============================================================================== --- head/sys/boot/i386/libi386/biosdisk.c Sun Aug 12 14:16:21 2012 (r239210) +++ head/sys/boot/i386/libi386/biosdisk.c Sun Aug 12 14:32:30 2012 (r239211) @@ -240,6 +240,8 @@ bd_int13probe(struct bdinfo *bd) bd->bd_sectors = params.sectors; bd->bd_sectorsize = params.sector_size; } + DEBUG("unit 0x%x flags %x, sectors %llu, sectorsize %u", + bd->bd_unit, bd->bd_flags, bd->bd_sectors, bd->bd_sectorsize); return (1); } From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 16:58:39 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 01BD2106566B; Sun, 12 Aug 2012 16:58:39 +0000 (UTC) (envelope-from mjacob@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A5A608FC08; Sun, 12 Aug 2012 16:58:38 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CGwc4E011400; Sun, 12 Aug 2012 16:58:38 GMT (envelope-from mjacob@svn.freebsd.org) Received: (from mjacob@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CGwcDF011398; Sun, 12 Aug 2012 16:58:38 GMT (envelope-from mjacob@svn.freebsd.org) Message-Id: <201208121658.q7CGwcDF011398@svn.freebsd.org> From: Matt Jacob Date: Sun, 12 Aug 2012 16:58:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239212 - head/sys/cam/scsi X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 16:58:39 -0000 Author: mjacob Date: Sun Aug 12 16:58:38 2012 New Revision: 239212 URL: http://svn.freebsd.org/changeset/base/239212 Log: Add missing VERIFY_10 definition. MFC after: 1 month Modified: head/sys/cam/scsi/scsi_all.h Modified: head/sys/cam/scsi/scsi_all.h ============================================================================== --- head/sys/cam/scsi/scsi_all.h Sun Aug 12 14:32:30 2012 (r239211) +++ head/sys/cam/scsi/scsi_all.h Sun Aug 12 16:58:38 2012 (r239212) @@ -984,6 +984,7 @@ struct ata_pass_16 { #define WRITE_10 0x2A #define POSITION_TO_ELEMENT 0x2B #define WRITE_VERIFY_10 0x2E +#define VERIFY_10 0x2F #define SYNCHRONIZE_CACHE 0x35 #define READ_DEFECT_DATA_10 0x37 #define WRITE_BUFFER 0x3B From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 17:01:07 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A238A106564A; Sun, 12 Aug 2012 17:01:07 +0000 (UTC) (envelope-from mjacob@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8380F8FC14; Sun, 12 Aug 2012 17:01:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CH17oN011689; Sun, 12 Aug 2012 17:01:07 GMT (envelope-from mjacob@svn.freebsd.org) Received: (from mjacob@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CH17ub011685; Sun, 12 Aug 2012 17:01:07 GMT (envelope-from mjacob@svn.freebsd.org) Message-Id: <201208121701.q7CH17ub011685@svn.freebsd.org> From: Matt Jacob Date: Sun, 12 Aug 2012 17:01:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239213 - head/sys/cam/scsi X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 17:01:07 -0000 Author: mjacob Date: Sun Aug 12 17:01:07 2012 New Revision: 239213 URL: http://svn.freebsd.org/changeset/base/239213 Log: 1. Remove SEN support. I doubt there are any working examples of this hardware still running (close to twenty years now). 2. Quiesece and use ENC_VLOG instead of ENC_LOG for most complaints. That is, they're visible with bootverbose, but otherwise quiesced and not repeatedly spamming messages with constant reminders that hardware in this space is rarely fully compliant. MFC after: 1 month Modified: head/sys/cam/scsi/scsi_enc.c head/sys/cam/scsi/scsi_enc_safte.c head/sys/cam/scsi/scsi_enc_ses.c Modified: head/sys/cam/scsi/scsi_enc.c ============================================================================== --- head/sys/cam/scsi/scsi_enc.c Sun Aug 12 16:58:38 2012 (r239212) +++ head/sys/cam/scsi/scsi_enc.c Sun Aug 12 17:01:07 2012 (r239213) @@ -60,9 +60,6 @@ MALLOC_DEFINE(M_SCSIENC, "SCSI ENC", "SC /* Enclosure type independent driver */ -#define SEN_ID "UNISYS SUN_SEN" -#define SEN_ID_LEN 24 - static d_open_t enc_open; static d_close_t enc_close; static d_ioctl_t enc_ioctl; @@ -630,9 +627,8 @@ enc_log(struct enc_softc *enc, const cha /* * Is this a device that supports enclosure services? * - * It's a a pretty simple ruleset- if it is device type 0x0D (13), it's - * an ENC device. If it happens to be an old UNISYS SEN device, we can - * handle that too. + * It's a a pretty simple ruleset- if it is device type + * 0x0D (13), it's an ENCLOSURE device. */ #define SAFTE_START 44 @@ -659,13 +655,9 @@ enc_type(struct ccb_getdev *cgd) iqd = (unsigned char *)&cgd->inq_data; buflen = min(sizeof(cgd->inq_data), SID_ADDITIONAL_LENGTH(&cgd->inq_data)); - if (buflen < 8+SEN_ID_LEN) - return (ENC_NONE); if ((iqd[0] & 0x1f) == T_ENCLOSURE) { - if (STRNCMP(&iqd[8], SEN_ID, SEN_ID_LEN) == 0) { - return (ENC_SEN); - } else if ((iqd[2] & 0x7) > 2) { + if ((iqd[2] & 0x7) > 2) { return (ENC_SES); } else { return (ENC_SES_SCSI2); @@ -920,7 +912,6 @@ enc_ctor(struct cam_periph *periph, void case ENC_SEMB_SAFT: err = safte_softc_init(enc); break; - case ENC_SEN: case ENC_NONE: default: ENC_FREE(enc); @@ -997,9 +988,6 @@ enc_ctor(struct cam_periph *periph, void case ENC_SES_PASSTHROUGH: tname = "ENC Passthrough Device"; break; - case ENC_SEN: - tname = "UNISYS SEN Device (NOT HANDLED YET)"; - break; case ENC_SAFT: tname = "SAF-TE Compliant Device"; break; Modified: head/sys/cam/scsi/scsi_enc_safte.c ============================================================================== --- head/sys/cam/scsi/scsi_enc_safte.c Sun Aug 12 16:58:38 2012 (r239212) +++ head/sys/cam/scsi/scsi_enc_safte.c Sun Aug 12 17:01:07 2012 (r239213) @@ -220,7 +220,7 @@ struct scfg { static char *safte_2little = "Too Little Data Returned (%d) at line %d\n"; #define SAFT_BAIL(r, x) \ if ((r) >= (x)) { \ - ENC_LOG(enc, safte_2little, x, __LINE__);\ + ENC_VLOG(enc, safte_2little, x, __LINE__);\ return (EIO); \ } @@ -269,7 +269,7 @@ safte_process_config(enc_softc_t *enc, s if (error != 0) return (error); if (xfer_len < 6) { - ENC_LOG(enc, "too little data (%d) for configuration\n", + ENC_VLOG(enc, "too little data (%d) for configuration\n", xfer_len); return (EIO); } @@ -435,7 +435,7 @@ safte_process_status(enc_softc_t *enc, s break; default: cache->elm_map[oid].encstat[0] = SES_OBJSTAT_UNSUPPORTED; - ENC_LOG(enc, "Unknown fan%d status 0x%x\n", i, + ENC_VLOG(enc, "Unknown fan%d status 0x%x\n", i, buf[r] & 0xff); break; } @@ -495,7 +495,7 @@ safte_process_status(enc_softc_t *enc, s cfg->enc_status |= SES_ENCSTAT_INFO; break; default: - ENC_LOG(enc, "unknown power supply %d status (0x%x)\n", + ENC_VLOG(enc, "unknown power supply %d status (0x%x)\n", i, buf[r] & 0xff); break; } @@ -543,7 +543,7 @@ safte_process_status(enc_softc_t *enc, s default: cache->elm_map[oid].encstat[0] = SES_OBJSTAT_UNSUPPORTED; - ENC_LOG(enc, "unknown lock status 0x%x\n", + ENC_VLOG(enc, "unknown lock status 0x%x\n", buf[r] & 0xff); break; } Modified: head/sys/cam/scsi/scsi_enc_ses.c ============================================================================== --- head/sys/cam/scsi/scsi_enc_ses.c Sun Aug 12 16:58:38 2012 (r239212) +++ head/sys/cam/scsi/scsi_enc_ses.c Sun Aug 12 17:01:07 2012 (r239213) @@ -1175,7 +1175,7 @@ ses_set_timed_completion(enc_softc_t *en err = cam_periph_runccb(ccb, enc_error, ENC_CFLAGS, ENC_FLAGS|SF_QUIET_IR, NULL); if (ccb->ccb_h.status != CAM_REQ_CMP) { - ENC_LOG(enc, "Timed Completion Unsupported\n"); + ENC_VLOG(enc, "Timed Completion Unsupported\n"); goto release; } @@ -1198,7 +1198,7 @@ ses_set_timed_completion(enc_softc_t *en err = cam_periph_runccb(ccb, enc_error, ENC_CFLAGS, ENC_FLAGS, NULL); if (ccb->ccb_h.status != CAM_REQ_CMP) { - ENC_LOG(enc, "Timed Completion Set Failed\n"); + ENC_VLOG(enc, "Timed Completion Set Failed\n"); goto release; } @@ -1244,14 +1244,14 @@ ses_process_pages(enc_softc_t *enc, stru goto out; } if (xfer_len < sizeof(*page)) { - ENC_LOG(enc, "Unable to parse Diag Pages List Header\n"); + ENC_VLOG(enc, "Unable to parse Diag Pages List Header\n"); err = EIO; goto out; } page = (struct scsi_diag_page *)*bufp; length = scsi_2btoul(page->length); if (length + offsetof(struct scsi_diag_page, params) > xfer_len) { - ENC_LOG(enc, "Diag Pages List Too Long\n"); + ENC_VLOG(enc, "Diag Pages List Too Long\n"); goto out; } ENC_DLOG(enc, "%s: page length %d, xfer_len %d\n", @@ -1318,7 +1318,7 @@ ses_process_config(enc_softc_t *enc, str goto out; } if (xfer_len < sizeof(cfg_page->hdr)) { - ENC_LOG(enc, "Unable to parse SES Config Header\n"); + ENC_VLOG(enc, "Unable to parse SES Config Header\n"); err = EIO; goto out; } @@ -1326,7 +1326,7 @@ ses_process_config(enc_softc_t *enc, str cfg_page = (struct ses_cfg_page *)buf; length = ses_page_length(&cfg_page->hdr); if (length > xfer_len) { - ENC_LOG(enc, "Enclosure Config Page Too Long\n"); + ENC_VLOG(enc, "Enclosure Config Page Too Long\n"); goto out; } last_valid_byte = &buf[length - 1]; @@ -1377,7 +1377,7 @@ ses_process_config(enc_softc_t *enc, str while (cur_subenc <= last_subenc) { if (!ses_enc_desc_is_complete(buf_subenc, last_valid_byte)) { - ENC_LOG(enc, "Enclosure %d Beyond End of " + ENC_VLOG(enc, "Enclosure %d Beyond End of " "Descriptors\n", cur_subenc - subencs); err = EIO; goto out; @@ -1416,7 +1416,7 @@ ses_process_config(enc_softc_t *enc, str sestype = ses_types; while (cur_buf_type <= last_buf_type) { if (&cur_buf_type->etype_txt_len > last_valid_byte) { - ENC_LOG(enc, "Runt Enclosure Type Header %d\n", + ENC_VLOG(enc, "Runt Enclosure Type Header %d\n", sestype - ses_types); err = EIO; goto out; @@ -1424,7 +1424,7 @@ ses_process_config(enc_softc_t *enc, str sestype->hdr = cur_buf_type; sestype->text = type_text; type_text += cur_buf_type->etype_txt_len; - ENC_LOG(enc, " Type Desc[%d]: Type 0x%x, MaxElt %d, In Subenc " + ENC_VLOG(enc, " Type Desc[%d]: Type 0x%x, MaxElt %d, In Subenc " "%d, Text Length %d: %.*s\n", sestype - ses_types, sestype->hdr->etype_elm_type, sestype->hdr->etype_maxelt, sestype->hdr->etype_subenc, sestype->hdr->etype_txt_len, @@ -1529,12 +1529,12 @@ ses_process_status(enc_softc_t *enc, str * could happen... Need to use dynamic discovery of the size. */ if (length > xfer_len) { - ENC_LOG(enc, "Enclosure Status Page Too Long\n"); + ENC_VLOG(enc, "Enclosure Status Page Too Long\n"); goto out; } /* Make sure the length contains at least one header and status */ if (length < (sizeof(*page) + sizeof(*page->elements))) { - ENC_LOG(enc, "Enclosure Status Page Too Short\n"); + ENC_VLOG(enc, "Enclosure Status Page Too Short\n"); goto out; } @@ -1576,11 +1576,11 @@ ses_process_status(enc_softc_t *enc, str } if (ses_iter_next(&iter) != NULL) { - ENC_LOG(enc, "Status page, length insufficient for " + ENC_VLOG(enc, "Status page, length insufficient for " "expected number of objects\n"); } else { if (cur_stat <= last_stat) - ENC_LOG(enc, "Status page, exhausted objects before " + ENC_VLOG(enc, "Status page, exhausted objects before " "exhausing page\n"); enc_update_request(enc, SES_PUBLISH_CACHE); err = 0; @@ -1706,11 +1706,11 @@ ses_process_elm_addlstatus(enc_softc_t * ENC_DLOG(enc, "Additional Element Status Page Length 0x%x\n", length); /* Make sure the length includes at least one header. */ if (length < sizeof(*hdr)+sizeof(struct ses_elm_addlstatus_base_hdr)) { - ENC_LOG(enc, "Runt Additional Element Status Page\n"); + ENC_VLOG(enc, "Runt Additional Element Status Page\n"); goto out; } if (length > xfer_len) { - ENC_LOG(enc, "Additional Element Status Page Too Long\n"); + ENC_VLOG(enc, "Additional Element Status Page Too Long\n"); goto out; } @@ -1763,7 +1763,7 @@ ses_process_elm_addlstatus(enc_softc_t * if (iter.individual_element_index > expected_index && status_type == TYPE_ADDLSTATUS_MANDATORY) { - ENC_LOG(enc, "%s: provided element " + ENC_VLOG(enc, "%s: provided element " "index %d skips mandatory status " " element at index %d\n", __func__, eip_hdr->element_index, @@ -1784,7 +1784,7 @@ ses_process_elm_addlstatus(enc_softc_t * /* Make sure the descriptor is within bounds */ if ((offset + elmpriv->addl.hdr->length) > length) { - ENC_LOG(enc, "Element %d Beyond End " + ENC_VLOG(enc, "Element %d Beyond End " "of Additional Element Status Descriptors\n", iter.global_element_index); err = EIO; @@ -1814,7 +1814,7 @@ ses_process_elm_addlstatus(enc_softc_t * iter.global_element_index); break; default: - ENC_LOG(enc, "Element %d: Unknown Additional Element " + ENC_VLOG(enc, "Element %d: Unknown Additional Element " "Protocol 0x%x\n", iter.global_element_index, ses_elm_addlstatus_proto(elmpriv->addl.hdr)); goto out; @@ -1931,11 +1931,11 @@ ses_process_elm_descs(enc_softc_t *enc, phdr = &ses_cache->elm_descs_page->hdr; plength = ses_page_length(phdr); if (xfer_len < sizeof(struct ses_page_hdr)) { - ENC_LOG(enc, "Runt Element Descriptor Page\n"); + ENC_VLOG(enc, "Runt Element Descriptor Page\n"); goto out; } if (plength > xfer_len) { - ENC_LOG(enc, "Element Descriptor Page Too Long\n"); + ENC_VLOG(enc, "Element Descriptor Page Too Long\n"); goto out; } @@ -1953,7 +1953,7 @@ ses_process_elm_descs(enc_softc_t *enc, && (element = ses_iter_next(&iter)) != NULL) { if ((offset + sizeof(struct ses_elm_desc_hdr)) > plength) { - ENC_LOG(enc, "Element %d Descriptor Header Past " + ENC_VLOG(enc, "Element %d Descriptor Header Past " "End of Buffer\n", iter.global_element_index); goto out; } @@ -1963,7 +1963,7 @@ ses_process_elm_descs(enc_softc_t *enc, iter.global_element_index, iter.type_index, iter.type_element_index, length, offset); if ((offset + sizeof(*hdr) + length) > plength) { - ENC_LOG(enc, "Element%d Descriptor Past " + ENC_VLOG(enc, "Element%d Descriptor Past " "End of Buffer\n", iter.global_element_index); goto out; } @@ -2138,7 +2138,7 @@ static int ses_get_elm_addlstatus_fc(enc_softc_t *enc, enc_cache_t *enc_cache, uint8_t *buf, int bufsiz) { - ENC_LOG(enc, "FC Device Support Stubbed in Additional Status Page\n"); + ENC_VLOG(enc, "FC Device Support Stubbed in Additional Status Page\n"); return (ENODEV); } @@ -2385,7 +2385,7 @@ ses_get_elm_addlstatus_sas_type0(enc_sof physz = addl->proto_hdr.sas->base_hdr.num_phys; physz *= sizeof(struct ses_elm_sas_device_phy); if (physz > (bufsiz - offset + 4)) { - ENC_LOG(enc, "Element %d Device Phy List Beyond End Of Buffer\n", + ENC_VLOG(enc, "Element %d Device Phy List Beyond End Of Buffer\n", nobj); err = EIO; goto out; @@ -2440,7 +2440,7 @@ ses_get_elm_addlstatus_sas_type1(enc_sof physz = addl->proto_hdr.sas->base_hdr.num_phys * sizeof(struct ses_elm_sas_expander_phy); if (physz > (bufsiz - offset)) { - ENC_LOG(enc, "Element %d: Expander Phy List Beyond " + ENC_VLOG(enc, "Element %d: Expander Phy List Beyond " "End Of Buffer\n", nobj); err = EIO; goto out; @@ -2452,7 +2452,7 @@ ses_get_elm_addlstatus_sas_type1(enc_sof physz = addl->proto_hdr.sas->base_hdr.num_phys * sizeof(struct ses_elm_sas_port_phy); if (physz > (bufsiz - offset + 4)) { - ENC_LOG(enc, "Element %d: Port Phy List Beyond End " + ENC_VLOG(enc, "Element %d: Port Phy List Beyond End " "Of Buffer\n", nobj); err = EIO; goto out; @@ -2504,7 +2504,7 @@ ses_get_elm_addlstatus_sas(enc_softc_t * case ELMTYP_ARRAY_DEV: break; default: - ENC_LOG(enc, "Element %d has Additional Status type 0, " + ENC_VLOG(enc, "Element %d has Additional Status type 0, " "invalid for SES element type 0x%x\n", nobj, ses_cache->ses_types[tidx].hdr->etype_elm_type); err = ENODEV; @@ -2522,7 +2522,7 @@ ses_get_elm_addlstatus_sas(enc_softc_t * case ELMTYP_ESCC: break; default: - ENC_LOG(enc, "Element %d has Additional Status type 1, " + ENC_VLOG(enc, "Element %d has Additional Status type 1, " "invalid for SES element type 0x%x\n", nobj, ses_cache->ses_types[tidx].hdr->etype_elm_type); err = ENODEV; @@ -2532,7 +2532,7 @@ ses_get_elm_addlstatus_sas(enc_softc_t * bufsiz, eip, nobj); break; default: - ENC_LOG(enc, "Element %d of type 0x%x has Additional Status " + ENC_VLOG(enc, "Element %d of type 0x%x has Additional Status " "of unknown type 0x%x\n", nobj, ses_cache->ses_types[tidx].hdr->etype_elm_type, dtype); err = ENODEV; From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 17:53:07 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B0309106566B; Sun, 12 Aug 2012 17:53:07 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 97EEF8FC15; Sun, 12 Aug 2012 17:53:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CHr7qO017199; Sun, 12 Aug 2012 17:53:07 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CHr7VU017178; Sun, 12 Aug 2012 17:53:07 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208121753.q7CHr7VU017178@svn.freebsd.org> From: Hans Petter Selasky Date: Sun, 12 Aug 2012 17:53:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239214 - in head/sys: dev/usb dev/usb/controller sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 17:53:07 -0000 Author: hselasky Date: Sun Aug 12 17:53:06 2012 New Revision: 239214 URL: http://svn.freebsd.org/changeset/base/239214 Log: Add support for the so-called streams feature of BULK endpoints in SUPER-speed mode, USB 3.0. This feature has not been tested yet, due to lack of hardware. This feature is useful when implementing protocols like UASP, USB attached SCSI which promises higher USB mass storage throughput. This patch also implements support for hardware processing of endpoints for increased performance. The switching to hardware processing of an endpoint is done via a callback to the USB controller driver. The stream feature is implemented like a variant of a hardware USB protocol. USB controller drivers implementing device mode needs to be updated to implement the new "xfer_stall" USB controller method and remove the "xfer" argument from the "set_stall" method. The API's toward existing USB drivers are preserved. To setup a USB transfer in stream mode, set the "stream_id" field of the USB config structure to the desired value. The maximum number of BULK streams is currently hardcoded and limited to 8 via a define in usb_freebsd.h. All USB drivers should be re-compiled after this change. LibUSB will be updated next week to support streams mode. A new IOCTL to setup BULK streams as already been implemented. The ugen device nodes currently only supports stream ID zero. The FreeBSD version has been bumped. MFC after: 2 weeks Modified: head/sys/dev/usb/controller/at91dci.c head/sys/dev/usb/controller/atmegadci.c head/sys/dev/usb/controller/avr32dci.c head/sys/dev/usb/controller/dwc_otg.c head/sys/dev/usb/controller/musb_otg.c head/sys/dev/usb/controller/uss820dci.c head/sys/dev/usb/controller/xhci.c head/sys/dev/usb/controller/xhci.h head/sys/dev/usb/usb.h head/sys/dev/usb/usb_controller.h head/sys/dev/usb/usb_core.h head/sys/dev/usb/usb_debug.c head/sys/dev/usb/usb_device.c head/sys/dev/usb/usb_freebsd.h head/sys/dev/usb/usb_generic.c head/sys/dev/usb/usb_hub.c head/sys/dev/usb/usb_ioctl.h head/sys/dev/usb/usb_request.c head/sys/dev/usb/usb_transfer.c head/sys/dev/usb/usbdi.h head/sys/sys/param.h Modified: head/sys/dev/usb/controller/at91dci.c ============================================================================== --- head/sys/dev/usb/controller/at91dci.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/controller/at91dci.c Sun Aug 12 17:53:06 2012 (r239214) @@ -1226,7 +1226,14 @@ at91dci_device_done(struct usb_xfer *xfe } static void -at91dci_set_stall(struct usb_device *udev, struct usb_xfer *xfer, +at91dci_xfer_stall(struct usb_xfer *xfer) +{ + USB_BUS_LOCK_ASSERT(udev->bus, MA_OWNED); + at91dci_device_done(xfer, USB_ERR_STALLED); +} + +static void +at91dci_set_stall(struct usb_device *udev, struct usb_endpoint *ep, uint8_t *did_stall) { struct at91dci_softc *sc; @@ -1237,10 +1244,6 @@ at91dci_set_stall(struct usb_device *ude DPRINTFN(5, "endpoint=%p\n", ep); - if (xfer) { - /* cancel any ongoing transfers */ - at91dci_device_done(xfer, USB_ERR_STALLED); - } /* set FORCESTALL */ sc = AT9100_DCI_BUS2SC(udev->bus); csr_reg = (ep->edesc->bEndpointAddress & UE_ADDR); @@ -2332,6 +2335,7 @@ struct usb_bus_methods at91dci_bus_metho .xfer_unsetup = &at91dci_xfer_unsetup, .get_hw_ep_profile = &at91dci_get_hw_ep_profile, .set_stall = &at91dci_set_stall, + .xfer_stall = &at91dci_xfer_stall, .clear_stall = &at91dci_clear_stall, .roothub_exec = &at91dci_roothub_exec, .xfer_poll = &at91dci_do_poll, Modified: head/sys/dev/usb/controller/atmegadci.c ============================================================================== --- head/sys/dev/usb/controller/atmegadci.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/controller/atmegadci.c Sun Aug 12 17:53:06 2012 (r239214) @@ -1113,7 +1113,13 @@ atmegadci_device_done(struct usb_xfer *x } static void -atmegadci_set_stall(struct usb_device *udev, struct usb_xfer *xfer, +atmegadci_xfer_stall(struct usb_xfer *xfer) +{ + atmegadci_device_done(xfer, USB_ERR_STALLED); +} + +static void +atmegadci_set_stall(struct usb_device *udev, struct usb_endpoint *ep, uint8_t *did_stall) { struct atmegadci_softc *sc; @@ -1123,10 +1129,6 @@ atmegadci_set_stall(struct usb_device *u DPRINTFN(5, "endpoint=%p\n", ep); - if (xfer) { - /* cancel any ongoing transfers */ - atmegadci_device_done(xfer, USB_ERR_STALLED); - } sc = ATMEGA_BUS2SC(udev->bus); /* get endpoint number */ ep_no = (ep->edesc->bEndpointAddress & UE_ADDR); @@ -2151,6 +2153,7 @@ struct usb_bus_methods atmegadci_bus_met .xfer_setup = &atmegadci_xfer_setup, .xfer_unsetup = &atmegadci_xfer_unsetup, .get_hw_ep_profile = &atmegadci_get_hw_ep_profile, + .xfer_stall = &atmegadci_xfer_stall, .set_stall = &atmegadci_set_stall, .clear_stall = &atmegadci_clear_stall, .roothub_exec = &atmegadci_roothub_exec, Modified: head/sys/dev/usb/controller/avr32dci.c ============================================================================== --- head/sys/dev/usb/controller/avr32dci.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/controller/avr32dci.c Sun Aug 12 17:53:06 2012 (r239214) @@ -1080,7 +1080,13 @@ avr32dci_device_done(struct usb_xfer *xf } static void -avr32dci_set_stall(struct usb_device *udev, struct usb_xfer *xfer, +avr32dci_xfer_stall(struct usb_xfer *xfer) +{ + avr32dci_device_done(xfer, USB_ERR_STALLED); +} + +static void +avr32dci_set_stall(struct usb_device *udev, struct usb_endpoint *pipe, uint8_t *did_stall) { struct avr32dci_softc *sc; @@ -1090,10 +1096,6 @@ avr32dci_set_stall(struct usb_device *ud DPRINTFN(5, "pipe=%p\n", pipe); - if (xfer) { - /* cancel any ongoing transfers */ - avr32dci_device_done(xfer, USB_ERR_STALLED); - } sc = AVR32_BUS2SC(udev->bus); /* get endpoint number */ ep_no = (pipe->edesc->bEndpointAddress & UE_ADDR); @@ -2096,6 +2098,7 @@ struct usb_bus_methods avr32dci_bus_meth .xfer_setup = &avr32dci_xfer_setup, .xfer_unsetup = &avr32dci_xfer_unsetup, .get_hw_ep_profile = &avr32dci_get_hw_ep_profile, + .xfer_stall = &avr32dci_xfer_stall, .set_stall = &avr32dci_set_stall, .clear_stall = &avr32dci_clear_stall, .roothub_exec = &avr32dci_roothub_exec, Modified: head/sys/dev/usb/controller/dwc_otg.c ============================================================================== --- head/sys/dev/usb/controller/dwc_otg.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/controller/dwc_otg.c Sun Aug 12 17:53:06 2012 (r239214) @@ -1524,7 +1524,13 @@ dwc_otg_device_done(struct usb_xfer *xfe } static void -dwc_otg_set_stall(struct usb_device *udev, struct usb_xfer *xfer, +dwc_otg_xfer_stall(struct usb_xfer *xfer) +{ + dwc_otg_device_done(xfer, USB_ERR_STALLED); +} + +static void +dwc_otg_set_stall(struct usb_device *udev, struct usb_endpoint *ep, uint8_t *did_stall) { struct dwc_otg_softc *sc; @@ -1534,10 +1540,6 @@ dwc_otg_set_stall(struct usb_device *ude USB_BUS_LOCK_ASSERT(udev->bus, MA_OWNED); - if (xfer) { - /* cancel any ongoing transfers */ - dwc_otg_device_done(xfer, USB_ERR_STALLED); - } sc = DWC_OTG_BUS2SC(udev->bus); /* get endpoint address */ @@ -2625,6 +2627,7 @@ struct usb_bus_methods dwc_otg_bus_metho .xfer_setup = &dwc_otg_xfer_setup, .xfer_unsetup = &dwc_otg_xfer_unsetup, .get_hw_ep_profile = &dwc_otg_get_hw_ep_profile, + .xfer_stall = &dwc_otg_xfer_stall, .set_stall = &dwc_otg_set_stall, .clear_stall = &dwc_otg_clear_stall, .roothub_exec = &dwc_otg_roothub_exec, Modified: head/sys/dev/usb/controller/musb_otg.c ============================================================================== --- head/sys/dev/usb/controller/musb_otg.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/controller/musb_otg.c Sun Aug 12 17:53:06 2012 (r239214) @@ -1472,7 +1472,13 @@ musbotg_device_done(struct usb_xfer *xfe } static void -musbotg_set_stall(struct usb_device *udev, struct usb_xfer *xfer, +musbotg_xfer_stall(struct usb_xfer *xfer) +{ + musbotg_device_done(xfer, USB_ERR_STALLED); +} + +static void +musbotg_set_stall(struct usb_device *udev, struct usb_endpoint *ep, uint8_t *did_stall) { struct musbotg_softc *sc; @@ -1482,10 +1488,6 @@ musbotg_set_stall(struct usb_device *ude DPRINTFN(4, "endpoint=%p\n", ep); - if (xfer) { - /* cancel any ongoing transfers */ - musbotg_device_done(xfer, USB_ERR_STALLED); - } /* set FORCESTALL */ sc = MUSBOTG_BUS2SC(udev->bus); @@ -2801,6 +2803,7 @@ struct usb_bus_methods musbotg_bus_metho .xfer_setup = &musbotg_xfer_setup, .xfer_unsetup = &musbotg_xfer_unsetup, .get_hw_ep_profile = &musbotg_get_hw_ep_profile, + .xfer_stall = &musbotg_xfer_stall, .set_stall = &musbotg_set_stall, .clear_stall = &musbotg_clear_stall, .roothub_exec = &musbotg_roothub_exec, Modified: head/sys/dev/usb/controller/uss820dci.c ============================================================================== --- head/sys/dev/usb/controller/uss820dci.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/controller/uss820dci.c Sun Aug 12 17:53:06 2012 (r239214) @@ -1210,7 +1210,13 @@ uss820dci_device_done(struct usb_xfer *x } static void -uss820dci_set_stall(struct usb_device *udev, struct usb_xfer *xfer, +uss820dci_xfer_stall(struct usb_xfer *xfer) +{ + uss820dci_device_done(xfer, USB_ERR_STALLED); +} + +static void +uss820dci_set_stall(struct usb_device *udev, struct usb_endpoint *ep, uint8_t *did_stall) { struct uss820dci_softc *sc; @@ -1223,10 +1229,6 @@ uss820dci_set_stall(struct usb_device *u DPRINTFN(5, "endpoint=%p\n", ep); - if (xfer) { - /* cancel any ongoing transfers */ - uss820dci_device_done(xfer, USB_ERR_STALLED); - } /* set FORCESTALL */ sc = USS820_DCI_BUS2SC(udev->bus); ep_no = (ep->edesc->bEndpointAddress & UE_ADDR); @@ -2385,6 +2387,7 @@ struct usb_bus_methods uss820dci_bus_met .xfer_setup = &uss820dci_xfer_setup, .xfer_unsetup = &uss820dci_xfer_unsetup, .get_hw_ep_profile = &uss820dci_get_hw_ep_profile, + .xfer_stall = &uss820dci_xfer_stall, .set_stall = &uss820dci_set_stall, .clear_stall = &uss820dci_clear_stall, .roothub_exec = &uss820dci_roothub_exec, Modified: head/sys/dev/usb/controller/xhci.c ============================================================================== --- head/sys/dev/usb/controller/xhci.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/controller/xhci.c Sun Aug 12 17:53:06 2012 (r239214) @@ -128,7 +128,7 @@ static usb_proc_callback_t xhci_configur static usb_error_t xhci_configure_device(struct usb_device *); static usb_error_t xhci_configure_endpoint(struct usb_device *, struct usb_endpoint_descriptor *, uint64_t, uint16_t, - uint8_t, uint8_t, uint8_t, uint16_t, uint16_t); + uint8_t, uint8_t, uint8_t, uint16_t, uint16_t, uint8_t); static usb_error_t xhci_configure_mask(struct usb_device *, uint32_t, uint8_t); static usb_error_t xhci_cmd_evaluate_ctx(struct xhci_softc *, @@ -1245,7 +1245,7 @@ xhci_set_address(struct usb_device *udev &udev->ctrl_ep_desc); err = xhci_configure_endpoint(udev, &udev->ctrl_ep_desc, pepext->physaddr, - 0, 1, 1, 0, mps, mps); + 0, 1, 1, 0, mps, mps, USB_EP_MODE_DEFAULT); if (err != 0) { DPRINTF("Could not configure default endpoint\n"); @@ -1800,7 +1800,8 @@ xhci_setup_generic_chain(struct usb_xfer /* compute multiplier for ISOCHRONOUS transfers */ mult = xfer->endpoint->ecomp ? - (xfer->endpoint->ecomp->bmAttributes & 3) : 0; + UE_GET_SS_ISO_MULT(xfer->endpoint->ecomp->bmAttributes) + : 0; /* check for USB 2.0 multiplier */ if (mult == 0) { mult = (xfer->endpoint->edesc-> @@ -2055,7 +2056,8 @@ static usb_error_t xhci_configure_endpoint(struct usb_device *udev, struct usb_endpoint_descriptor *edesc, uint64_t ring_addr, uint16_t interval, uint8_t max_packet_count, uint8_t mult, - uint8_t fps_shift, uint16_t max_packet_size, uint16_t max_frame_size) + uint8_t fps_shift, uint16_t max_packet_size, + uint16_t max_frame_size, uint8_t ep_mode) { struct usb_page_search buf_inp; struct xhci_softc *sc = XHCI_BUS2SC(udev->bus); @@ -2090,9 +2092,20 @@ xhci_configure_endpoint(struct usb_devic if (mult == 0) return (USB_ERR_BAD_BUFSIZE); - temp = XHCI_EPCTX_0_EPSTATE_SET(0) | - XHCI_EPCTX_0_MAXP_STREAMS_SET(0) | - XHCI_EPCTX_0_LSA_SET(0); + if (ep_mode == USB_EP_MODE_STREAMS) { + temp = XHCI_EPCTX_0_EPSTATE_SET(0) | + XHCI_EPCTX_0_MAXP_STREAMS_SET(XHCI_MAX_STREAMS_LOG - 1) | + XHCI_EPCTX_0_LSA_SET(1); + + ring_addr += sizeof(struct xhci_trb) * + XHCI_MAX_TRANSFERS * XHCI_MAX_STREAMS; + } else { + temp = XHCI_EPCTX_0_EPSTATE_SET(0) | + XHCI_EPCTX_0_MAXP_STREAMS_SET(0) | + XHCI_EPCTX_0_LSA_SET(0); + + ring_addr |= XHCI_EPCTX_2_DCS_SET(1); + } switch (udev->speed) { case USB_SPEED_FULL: @@ -2160,9 +2173,6 @@ xhci_configure_endpoint(struct usb_devic temp |= XHCI_EPCTX_1_EPTYPE_SET(4); xhci_ctx_set_le32(sc, &pinp->ctx_ep[epno - 1].dwEpCtx1, temp); - - ring_addr |= XHCI_EPCTX_2_DCS_SET(1); - xhci_ctx_set_le64(sc, &pinp->ctx_ep[epno - 1].qwEpCtx2, ring_addr); switch (edesc->bmAttributes & UE_XFERTYPE) { @@ -2195,21 +2205,42 @@ xhci_configure_endpoint_by_xfer(struct u { struct xhci_endpoint_ext *pepext; struct usb_endpoint_ss_comp_descriptor *ecomp; + usb_stream_t x; pepext = xhci_get_endpoint_ext(xfer->xroot->udev, xfer->endpoint->edesc); ecomp = xfer->endpoint->ecomp; - pepext->trb[0].dwTrb3 = 0; /* halt any transfers */ + for (x = 0; x != XHCI_MAX_STREAMS; x++) { + uint64_t temp; + + /* halt any transfers */ + pepext->trb[x * XHCI_MAX_TRANSFERS].dwTrb3 = 0; + + /* compute start of TRB ring for stream "x" */ + temp = pepext->physaddr + + (x * XHCI_MAX_TRANSFERS * sizeof(struct xhci_trb)) + + XHCI_SCTX_0_SCT_SEC_TR_RING; + + /* make tree structure */ + pepext->trb[(XHCI_MAX_TRANSFERS * + XHCI_MAX_STREAMS) + x].qwTrb0 = htole64(temp); + + /* reserved fields */ + pepext->trb[(XHCI_MAX_TRANSFERS * + XHCI_MAX_STREAMS) + x].dwTrb2 = 0; + pepext->trb[(XHCI_MAX_TRANSFERS * + XHCI_MAX_STREAMS) + x].dwTrb3 = 0; + } usb_pc_cpu_flush(pepext->page_cache); return (xhci_configure_endpoint(xfer->xroot->udev, xfer->endpoint->edesc, pepext->physaddr, xfer->interval, xfer->max_packet_count, - (ecomp != NULL) ? (ecomp->bmAttributes & 3) + 1 : 1, + (ecomp != NULL) ? UE_GET_SS_ISO_MULT(ecomp->bmAttributes) + 1 : 1, usbd_xfer_get_fps_shift(xfer), xfer->max_packet_size, - xfer->max_frame_size)); + xfer->max_frame_size, xfer->endpoint->ep_mode)); } static usb_error_t @@ -2500,7 +2531,8 @@ xhci_get_endpoint_ext(struct usb_device pc = &sc->sc_hw.devs[index].endpoint_pc; - usbd_get_page(pc, (uintptr_t)&((struct xhci_dev_endpoint_trbs *)0)->trb[epno][0], &buf_ep); + usbd_get_page(pc, (uintptr_t)&((struct xhci_dev_endpoint_trbs *)0)-> + trb[epno][0], &buf_ep); pepext = &sc->sc_hw.devs[index].endp[epno]; pepext->page_cache = pc; @@ -2539,7 +2571,7 @@ xhci_transfer_remove(struct usb_xfer *xf pepext = xhci_get_endpoint_ext(xfer->xroot->udev, xfer->endpoint->edesc); - pepext->trb_used--; + pepext->trb_used[xfer->stream_id]--; pepext->xfer[xfer->qh_pos] = NULL; @@ -2557,12 +2589,15 @@ xhci_transfer_insert(struct usb_xfer *xf struct xhci_td *td_last; struct xhci_endpoint_ext *pepext; uint64_t addr; + usb_stream_t id; uint8_t i; uint8_t inext; uint8_t trb_limit; DPRINTFN(8, "\n"); + id = xfer->stream_id; + /* check if already inserted */ if (xfer->flags_int.bandwidth_reclaimed) { DPRINTFN(8, "Already in schedule\n"); @@ -2588,7 +2623,7 @@ xhci_transfer_insert(struct usb_xfer *xf break; } - if (pepext->trb_used >= trb_limit) { + if (pepext->trb_used[id] >= trb_limit) { DPRINTFN(8, "Too many TDs queued.\n"); return (USB_ERR_NOMEM); } @@ -2605,10 +2640,10 @@ xhci_transfer_insert(struct usb_xfer *xf return (0); } - pepext->trb_used++; + pepext->trb_used[id]++; /* get current TRB index */ - i = pepext->trb_index; + i = pepext->trb_index[id]; /* get next TRB index */ inext = (i + 1); @@ -2617,8 +2652,12 @@ xhci_transfer_insert(struct usb_xfer *xf if (inext >= (XHCI_MAX_TRANSFERS - 1)) inext = 0; + /* offset for stream */ + i += id * XHCI_MAX_TRANSFERS; + inext += id * XHCI_MAX_TRANSFERS; + /* compute terminating return address */ - addr += inext * sizeof(struct xhci_trb); + addr += (inext * sizeof(struct xhci_trb)); /* update next pointer of last link TRB */ td_last->td_trb[td_last->ntrb].qwTrb0 = htole64(addr); @@ -2662,7 +2701,7 @@ xhci_transfer_insert(struct usb_xfer *xf xfer->flags_int.bandwidth_reclaimed = 1; - pepext->trb_index = inext; + pepext->trb_index[id] = inext; xhci_endpoint_doorbell(xfer); @@ -2750,12 +2789,12 @@ xhci_device_generic_close(struct usb_xfe static void xhci_device_generic_multi_enter(struct usb_endpoint *ep, - struct usb_xfer *enter_xfer) + usb_stream_t stream_id, struct usb_xfer *enter_xfer) { struct usb_xfer *xfer; /* check if there is a current transfer */ - xfer = ep->endpoint_q.curr; + xfer = ep->endpoint_q[stream_id].curr; if (xfer == NULL) return; @@ -2767,7 +2806,7 @@ xhci_device_generic_multi_enter(struct u if (!xfer->flags_int.bandwidth_reclaimed) return; - xfer = TAILQ_FIRST(&ep->endpoint_q.head); + xfer = TAILQ_FIRST(&ep->endpoint_q[stream_id].head); if (xfer == NULL) { /* * In case of enter we have to consider that the @@ -2792,7 +2831,8 @@ xhci_device_generic_enter(struct usb_xfe /* setup TD's and QH */ xhci_setup_generic_chain(xfer); - xhci_device_generic_multi_enter(xfer->endpoint, xfer); + xhci_device_generic_multi_enter(xfer->endpoint, + xfer->stream_id, xfer); } static void @@ -2804,7 +2844,8 @@ xhci_device_generic_start(struct usb_xfe xhci_transfer_insert(xfer); /* try to multi buffer */ - xhci_device_generic_multi_enter(xfer->endpoint, NULL); + xhci_device_generic_multi_enter(xfer->endpoint, + xfer->stream_id, NULL); /* add transfer last on interrupt queue */ usbd_transfer_enqueue(&xfer->xroot->bus->intr_q, xfer); @@ -3465,6 +3506,7 @@ xhci_configure_reset_endpoint(struct usb struct usb_endpoint_descriptor *edesc; struct usb_page_cache *pcinp; usb_error_t err; + usb_stream_t stream_id; uint8_t index; uint8_t epno; @@ -3481,6 +3523,7 @@ xhci_configure_reset_endpoint(struct usb edesc = xfer->endpoint->edesc; epno = edesc->bEndpointAddress; + stream_id = xfer->stream_id; if ((edesc->bmAttributes & UE_XFERTYPE) == UE_CONTROL) epno |= UE_DIR_IN; @@ -3516,8 +3559,10 @@ xhci_configure_reset_endpoint(struct usb if (err != 0) DPRINTF("Could not reset endpoint %u\n", epno); - err = xhci_cmd_set_tr_dequeue_ptr(sc, pepext->physaddr | - XHCI_EPCTX_2_DCS_SET(1), 0, epno, index); + err = xhci_cmd_set_tr_dequeue_ptr(sc, + (pepext->physaddr + (stream_id * sizeof(struct xhci_trb) * + XHCI_MAX_TRANSFERS)) | XHCI_EPCTX_2_DCS_SET(1), + stream_id, epno, index); if (err != 0) DPRINTF("Could not set dequeue ptr for endpoint %u\n", epno); @@ -3615,7 +3660,8 @@ restart: /* check if halted is still cleared */ if (pepext->trb_halted == 0) { pepext->trb_running = 1; - pepext->trb_index = 0; + memset(pepext->trb_index, 0, + sizeof(pepext->trb_index)); } goto restart; } @@ -3639,7 +3685,8 @@ restart: xhci_transfer_insert(xfer); /* try to multi buffer */ - xhci_device_generic_multi_enter(xfer->endpoint, NULL); + xhci_device_generic_multi_enter(xfer->endpoint, + xfer->stream_id, NULL); } } @@ -3946,6 +3993,23 @@ xhci_device_state_change(struct usb_devi XHCI_CMD_UNLOCK(sc); } +static usb_error_t +xhci_set_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep, + uint8_t ep_mode) +{ + switch (ep_mode) { + case USB_EP_MODE_DEFAULT: + return (0); + case USB_EP_MODE_STREAMS: + if ((ep->edesc->bmAttributes & UE_XFERTYPE) != UE_BULK || + udev->speed != USB_SPEED_SUPER) + return (USB_ERR_INVAL); + return (0); + default: + return (USB_ERR_INVAL); + } +} + struct usb_bus_methods xhci_bus_methods = { .endpoint_init = xhci_ep_init, .endpoint_uninit = xhci_ep_uninit, @@ -3964,4 +4028,5 @@ struct usb_bus_methods xhci_bus_methods .clear_stall = xhci_ep_clear_stall, .device_state_change = xhci_device_state_change, .set_hw_power_sleep = xhci_set_hw_power_sleep, + .set_endpoint_mode = xhci_set_endpoint_mode, }; Modified: head/sys/dev/usb/controller/xhci.h ============================================================================== --- head/sys/dev/usb/controller/xhci.h Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/controller/xhci.h Sun Aug 12 17:53:06 2012 (r239214) @@ -35,7 +35,15 @@ #define XHCI_MAX_COMMANDS (16 * 1) #define XHCI_MAX_RSEG 1 #define XHCI_MAX_TRANSFERS 4 - +#if USB_MAX_EP_STREAMS == 8 +#define XHCI_MAX_STREAMS 8 +#define XHCI_MAX_STREAMS_LOG 3 +#elif USB_MAX_EP_STREAMS == 1 +#define XHCI_MAX_STREAMS 1 +#define XHCI_MAX_STREAMS_LOG 0 +#else +#error "The USB_MAX_EP_STREAMS value is not supported." +#endif #define XHCI_DEV_CTX_ADDR_ALIGN 64 /* bytes */ #define XHCI_DEV_CTX_ALIGN 64 /* bytes */ #define XHCI_INPUT_CTX_ALIGN 64 /* bytes */ @@ -307,7 +315,8 @@ struct xhci_trb { } __aligned(4); struct xhci_dev_endpoint_trbs { - struct xhci_trb trb[XHCI_MAX_ENDPOINTS][XHCI_MAX_TRANSFERS]; + struct xhci_trb trb[XHCI_MAX_ENDPOINTS] + [(XHCI_MAX_STREAMS * XHCI_MAX_TRANSFERS) + XHCI_MAX_STREAMS]; }; #define XHCI_TD_PAGE_NBUF 17 /* units, room enough for 64Kbytes */ @@ -353,11 +362,11 @@ struct xhci_hw_root { struct xhci_endpoint_ext { struct xhci_trb *trb; - struct usb_xfer *xfer[XHCI_MAX_TRANSFERS - 1]; + struct usb_xfer *xfer[XHCI_MAX_TRANSFERS * XHCI_MAX_STREAMS]; struct usb_page_cache *page_cache; uint64_t physaddr; - uint8_t trb_used; - uint8_t trb_index; + uint8_t trb_used[XHCI_MAX_STREAMS]; + uint8_t trb_index[XHCI_MAX_STREAMS]; uint8_t trb_halted; uint8_t trb_running; }; Modified: head/sys/dev/usb/usb.h ============================================================================== --- head/sys/dev/usb/usb.h Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb.h Sun Aug 12 17:53:06 2012 (r239214) @@ -546,6 +546,8 @@ struct usb_endpoint_ss_comp_descriptor { uByte bDescriptorType; uByte bMaxBurst; uByte bmAttributes; +#define UE_GET_BULK_STREAMS(x) ((x) & 0x0F) +#define UE_GET_SS_ISO_MULT(x) ((x) & 0x03) uWord wBytesPerInterval; } __packed; typedef struct usb_endpoint_ss_comp_descriptor @@ -744,7 +746,7 @@ enum usb_revision { #define USB_REV_MAX (USB_REV_3_0+1) /* - * Supported host contoller modes. + * Supported host controller modes. */ enum usb_hc_mode { USB_MODE_HOST, /* initiates transfers */ @@ -754,7 +756,7 @@ enum usb_hc_mode { #define USB_MODE_MAX (USB_MODE_DUAL+1) /* - * The "USB_MODE" macros defines all the supported device states. + * The "USB_STATE" enums define all the supported device states. */ enum usb_dev_state { USB_STATE_DETACHED, @@ -764,4 +766,18 @@ enum usb_dev_state { USB_STATE_CONFIGURED, }; #define USB_STATE_MAX (USB_STATE_CONFIGURED+1) + +/* + * The "USB_EP_MODE" macros define all the currently supported + * endpoint modes. + */ +enum usb_ep_mode { + USB_EP_MODE_DEFAULT, + USB_EP_MODE_STREAMS, /* USB3.0 specific */ + USB_EP_MODE_HW_MASS_STORAGE, + USB_EP_MODE_HW_SERIAL, + USB_EP_MODE_HW_ETHERNET_CDC, + USB_EP_MODE_HW_ETHERNET_NCM, + USB_EP_MODE_MAX +}; #endif /* _USB_STANDARD_H_ */ Modified: head/sys/dev/usb/usb_controller.h ============================================================================== --- head/sys/dev/usb/usb_controller.h Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_controller.h Sun Aug 12 17:53:06 2012 (r239214) @@ -108,7 +108,8 @@ struct usb_bus_methods { /* USB Device mode only - Mandatory */ void (*get_hw_ep_profile) (struct usb_device *udev, const struct usb_hw_ep_profile **ppf, uint8_t ep_addr); - void (*set_stall) (struct usb_device *udev, struct usb_xfer *xfer, struct usb_endpoint *ep, uint8_t *did_stall); + void (*xfer_stall) (struct usb_xfer *xfer); + void (*set_stall) (struct usb_device *udev, struct usb_endpoint *ep, uint8_t *did_stall); /* USB Device mode mandatory. USB Host mode optional. */ @@ -143,6 +144,10 @@ struct usb_bus_methods { /* Optional for host mode */ usb_error_t (*set_address) (struct usb_device *, struct mtx *, uint16_t); + + /* Optional for device and host mode */ + + usb_error_t (*set_endpoint_mode) (struct usb_device *, struct usb_endpoint *, uint8_t); }; /* Modified: head/sys/dev/usb/usb_core.h ============================================================================== --- head/sys/dev/usb/usb_core.h Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_core.h Sun Aug 12 17:53:06 2012 (r239214) @@ -151,6 +151,7 @@ struct usb_xfer { usb_frcount_t nframes; /* number of USB frames to transfer */ usb_frcount_t aframes; /* actual number of USB frames * transferred */ + usb_stream_t stream_id; /* USB3.0 specific field */ uint16_t max_packet_size; uint16_t max_frame_size; Modified: head/sys/dev/usb/usb_debug.c ============================================================================== --- head/sys/dev/usb/usb_debug.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_debug.c Sun Aug 12 17:53:06 2012 (r239214) @@ -113,10 +113,12 @@ void usb_dump_queue(struct usb_endpoint *ep) { struct usb_xfer *xfer; + usb_stream_t x; printf("usb_dump_queue: endpoint=%p xfer: ", ep); - TAILQ_FOREACH(xfer, &ep->endpoint_q.head, wait_entry) { - printf(" %p", xfer); + for (x = 0; x != USB_MAX_EP_STREAMS; x++) { + TAILQ_FOREACH(xfer, &ep->endpoint_q[x].head, wait_entry) + printf(" %p", xfer); } printf("\n"); } Modified: head/sys/dev/usb/usb_device.c ============================================================================== --- head/sys/dev/usb/usb_device.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_device.c Sun Aug 12 17:53:06 2012 (r239214) @@ -355,7 +355,6 @@ usbd_interface_count(struct usb_device * return (USB_ERR_NORMAL_COMPLETION); } - /*------------------------------------------------------------------------* * usb_init_endpoint * @@ -370,6 +369,7 @@ usb_init_endpoint(struct usb_device *ude struct usb_endpoint *ep) { struct usb_bus_methods *methods; + usb_stream_t x; methods = udev->bus->methods; @@ -379,13 +379,26 @@ usb_init_endpoint(struct usb_device *ude ep->edesc = edesc; ep->ecomp = ecomp; ep->iface_index = iface_index; - TAILQ_INIT(&ep->endpoint_q.head); - ep->endpoint_q.command = &usbd_pipe_start; + + /* setup USB stream queues */ + for (x = 0; x != USB_MAX_EP_STREAMS; x++) { + TAILQ_INIT(&ep->endpoint_q[x].head); + ep->endpoint_q[x].command = &usbd_pipe_start; + } /* the pipe is not supported by the hardware */ if (ep->methods == NULL) return; + /* check for SUPER-speed streams mode endpoint */ + if (udev->speed == USB_SPEED_SUPER && ecomp != NULL && + (edesc->bmAttributes & UE_XFERTYPE) == UE_BULK && + (UE_GET_BULK_STREAMS(ecomp->bmAttributes) != 0)) { + usbd_set_endpoint_mode(udev, ep, USB_EP_MODE_STREAMS); + } else { + usbd_set_endpoint_mode(udev, ep, USB_EP_MODE_DEFAULT); + } + /* clear stall, if any */ if (methods->clear_stall != NULL) { USB_BUS_LOCK(udev->bus); @@ -933,6 +946,7 @@ usbd_set_endpoint_stall(struct usb_devic uint8_t do_stall) { struct usb_xfer *xfer; + usb_stream_t x; uint8_t et; uint8_t was_stalled; @@ -975,18 +989,22 @@ usbd_set_endpoint_stall(struct usb_devic if (do_stall || (!was_stalled)) { if (!was_stalled) { - /* lookup the current USB transfer, if any */ - xfer = ep->endpoint_q.curr; - } else { - xfer = NULL; + for (x = 0; x != USB_MAX_EP_STREAMS; x++) { + /* lookup the current USB transfer, if any */ + xfer = ep->endpoint_q[x].curr; + if (xfer != NULL) { + /* + * The "xfer_stall" method + * will complete the USB + * transfer like in case of a + * timeout setting the error + * code "USB_ERR_STALLED". + */ + (udev->bus->methods->xfer_stall) (xfer); + } + } } - - /* - * If "xfer" is non-NULL the "set_stall" method will - * complete the USB transfer like in case of a timeout - * setting the error code "USB_ERR_STALLED". - */ - (udev->bus->methods->set_stall) (udev, xfer, ep, &do_stall); + (udev->bus->methods->set_stall) (udev, ep, &do_stall); } if (!do_stall) { ep->toggle_next = 0; /* reset data toggle */ @@ -994,8 +1012,11 @@ usbd_set_endpoint_stall(struct usb_devic (udev->bus->methods->clear_stall) (udev, ep); - /* start up the current or next transfer, if any */ - usb_command_wrapper(&ep->endpoint_q, ep->endpoint_q.curr); + /* start the current or next transfer, if any */ + for (x = 0; x != USB_MAX_EP_STREAMS; x++) { + usb_command_wrapper(&ep->endpoint_q[x], + ep->endpoint_q[x].curr); + } } USB_BUS_UNLOCK(udev->bus); return (0); @@ -2745,3 +2766,37 @@ usbd_add_dynamic_quirk(struct usb_device } return (USB_ERR_NOMEM); } + +/* + * The following function is used to select the endpoint mode. It + * should not be called outside enumeration context. + */ + +usb_error_t +usbd_set_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep, + uint8_t ep_mode) +{ + usb_error_t error; + + sx_assert(&udev->enum_sx, SA_LOCKED); + + if (udev->bus->methods->set_endpoint_mode != NULL) { + error = (udev->bus->methods->set_endpoint_mode) ( + udev, ep, ep_mode); + } else if (ep_mode != USB_EP_MODE_DEFAULT) { + error = USB_ERR_INVAL; + } else { + error = 0; + } + + /* only set new mode regardless of error */ + ep->ep_mode = ep_mode; + + return (error); +} + +uint8_t +usbd_get_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep) +{ + return (ep->ep_mode); +} Modified: head/sys/dev/usb/usb_freebsd.h ============================================================================== --- head/sys/dev/usb/usb_freebsd.h Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_freebsd.h Sun Aug 12 17:53:06 2012 (r239214) @@ -60,6 +60,7 @@ #define USB_MAX_DEVICES 128 /* units */ #define USB_IFACE_MAX 32 /* units */ #define USB_FIFO_MAX 128 /* units */ +#define USB_MAX_EP_STREAMS 8 /* units */ #define USB_MAX_FS_ISOC_FRAMES_PER_XFER (120) /* units */ #define USB_MAX_HS_ISOC_FRAMES_PER_XFER (8*120) /* units */ @@ -76,5 +77,6 @@ typedef uint32_t usb_frcount_t; /* unit typedef uint32_t usb_size_t; /* bytes */ typedef uint32_t usb_ticks_t; /* system defined */ typedef uint16_t usb_power_mask_t; /* see "USB_HW_POWER_XXX" */ +typedef uint16_t usb_stream_t; /* stream ID */ #endif /* _USB_FREEBSD_H_ */ Modified: head/sys/dev/usb/usb_generic.c ============================================================================== --- head/sys/dev/usb/usb_generic.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_generic.c Sun Aug 12 17:53:06 2012 (r239214) @@ -253,6 +253,7 @@ ugen_open_pipe_write(struct usb_fifo *f) usb_config[0].type = ed->bmAttributes & UE_XFERTYPE; usb_config[0].endpoint = ed->bEndpointAddress & UE_ADDR; + usb_config[0].stream_id = 0; /* XXX support more stream ID's */ usb_config[0].direction = UE_DIR_TX; usb_config[0].interval = USB_DEFAULT_INTERVAL; usb_config[0].flags.proxy_buffer = 1; @@ -321,6 +322,7 @@ ugen_open_pipe_read(struct usb_fifo *f) usb_config[0].type = ed->bmAttributes & UE_XFERTYPE; usb_config[0].endpoint = ed->bEndpointAddress & UE_ADDR; + usb_config[0].stream_id = 0; /* XXX support more stream ID's */ usb_config[0].direction = UE_DIR_RX; usb_config[0].interval = USB_DEFAULT_INTERVAL; usb_config[0].flags.proxy_buffer = 1; @@ -1391,6 +1393,7 @@ ugen_ioctl(struct usb_fifo *f, u_long cm struct usb_fs_start *pstart; struct usb_fs_stop *pstop; struct usb_fs_open *popen; + struct usb_fs_open_streams *popen_streams; struct usb_fs_close *pclose; struct usb_fs_clear_stall_sync *pstall; void *addr; @@ -1455,6 +1458,7 @@ ugen_ioctl(struct usb_fifo *f, u_long cm break; case USB_FS_OPEN: + case USB_FS_OPEN_STREAMS: if (u.popen->ep_index >= f->fs_ep_max) { error = EINVAL; break; @@ -1506,6 +1510,8 @@ ugen_ioctl(struct usb_fifo *f, u_long cm usb_config[0].frames = u.popen->max_frames; usb_config[0].bufsize = u.popen->max_bufsize; usb_config[0].usb_mode = USB_MODE_DUAL; /* both modes */ + if (cmd == USB_FS_OPEN_STREAMS) + usb_config[0].stream_id = u.popen_streams->stream_id; if (usb_config[0].type == UE_CONTROL) { if (f->udev->flags.usb_mode != USB_MODE_HOST) { Modified: head/sys/dev/usb/usb_hub.c ============================================================================== --- head/sys/dev/usb/usb_hub.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_hub.c Sun Aug 12 17:53:06 2012 (r239214) @@ -1757,9 +1757,11 @@ usbd_fs_isoc_schedule_alloc_slot(struct data_len += len; } - /* check double buffered transfers */ - - TAILQ_FOREACH(pipe_xfer, &xfer->endpoint->endpoint_q.head, + /* + * Check double buffered transfers. Only stream ID + * equal to zero is valid here! + */ + TAILQ_FOREACH(pipe_xfer, &xfer->endpoint->endpoint_q[0].head, wait_entry) { /* skip self, if any */ Modified: head/sys/dev/usb/usb_ioctl.h ============================================================================== --- head/sys/dev/usb/usb_ioctl.h Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_ioctl.h Sun Aug 12 17:53:06 2012 (r239214) @@ -206,6 +206,11 @@ struct usb_fs_open { uint8_t ep_no; /* bEndpointNumber */ }; +struct usb_fs_open_streams { + struct usb_fs_open fs_open; + uint16_t stream_id; +}; + struct usb_fs_close { uint8_t ep_index; }; @@ -302,6 +307,7 @@ struct usb_gen_quirk { #define USB_FS_OPEN _IOWR('U', 197, struct usb_fs_open) #define USB_FS_CLOSE _IOW ('U', 198, struct usb_fs_close) #define USB_FS_CLEAR_STALL_SYNC _IOW ('U', 199, struct usb_fs_clear_stall_sync) +#define USB_FS_OPEN_STREAMS _IOWR('U', 200, struct usb_fs_open_streams) /* USB quirk system interface */ #define USB_DEV_QUIRK_GET _IOWR('Q', 0, struct usb_gen_quirk) Modified: head/sys/dev/usb/usb_request.c ============================================================================== --- head/sys/dev/usb/usb_request.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_request.c Sun Aug 12 17:53:06 2012 (r239214) @@ -228,6 +228,7 @@ usb_do_clear_stall_callback(struct usb_x struct usb_endpoint *ep; struct usb_endpoint *ep_end; struct usb_endpoint *ep_first; + usb_stream_t x; uint8_t to; udev = xfer->xroot->udev; @@ -255,9 +256,11 @@ tr_transferred: ep->is_stalled = 0; /* some hardware needs a callback to clear the data toggle */ usbd_clear_stall_locked(udev, ep); - /* start up the current or next transfer, if any */ - usb_command_wrapper(&ep->endpoint_q, - ep->endpoint_q.curr); + for (x = 0; x != USB_MAX_EP_STREAMS; x++) { + /* start the current or next transfer, if any */ + usb_command_wrapper(&ep->endpoint_q[x], + ep->endpoint_q[x].curr); + } } ep++; Modified: head/sys/dev/usb/usb_transfer.c ============================================================================== --- head/sys/dev/usb/usb_transfer.c Sun Aug 12 17:01:07 2012 (r239213) +++ head/sys/dev/usb/usb_transfer.c Sun Aug 12 17:53:06 2012 (r239214) @@ -358,7 +358,8 @@ usbd_transfer_setup_sub(struct usb_setup switch (type) { case UE_ISOCHRONOUS: case UE_INTERRUPT: - xfer->max_packet_count += (xfer->max_packet_size >> 11) & 3; + xfer->max_packet_count += + (xfer->max_packet_size >> 11) & 3; /* check for invalid max packet count */ if (xfer->max_packet_count > 3) @@ -387,7 +388,8 @@ usbd_transfer_setup_sub(struct usb_setup if (ecomp != NULL) { uint8_t mult; - mult = (ecomp->bmAttributes & 3) + 1; + mult = UE_GET_SS_ISO_MULT( + ecomp->bmAttributes) + 1; if (mult > 3) mult = 3; @@ -946,7 +948,20 @@ usbd_transfer_setup(struct usb_device *u ep = usbd_get_endpoint(udev, ifaces[setup->if_index], setup); - if ((ep == NULL) || (ep->methods == NULL)) { + /* + * Check that the USB PIPE is valid and that + * the endpoint mode is proper. + * + * Make sure we don't allocate a streams + * transfer when such a combination is not + * valid. + */ + if ((ep == NULL) || (ep->methods == NULL) || + ((ep->ep_mode != USB_EP_MODE_STREAMS) && + (ep->ep_mode != USB_EP_MODE_DEFAULT)) || + (setup->stream_id != 0 && + (setup->stream_id >= USB_MAX_EP_STREAMS || + (ep->ep_mode != USB_EP_MODE_STREAMS)))) { if (setup->flags.no_pipe_ok) continue; if ((setup->usb_mode != USB_MODE_DUAL) && @@ -990,6 +1005,9 @@ usbd_transfer_setup(struct usb_device *u /* set transfer endpoint pointer */ xfer->endpoint = ep; + /* set transfer stream ID */ + xfer->stream_id = setup->stream_id; + parm.size[0] += sizeof(xfer[0]); parm.methods = xfer->endpoint->methods; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 19:58:57 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1FCA1106564A; Sun, 12 Aug 2012 19:58:57 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0A58C8FC12; Sun, 12 Aug 2012 19:58:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CJwuMC032682; Sun, 12 Aug 2012 19:58:56 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CJwu5a032680; Sun, 12 Aug 2012 19:58:56 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208121958.q7CJwu5a032680@svn.freebsd.org> From: Hans Petter Selasky Date: Sun, 12 Aug 2012 19:58:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239215 - head/sys/dev/usb/controller X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 19:58:57 -0000 Author: hselasky Date: Sun Aug 12 19:58:56 2012 New Revision: 239215 URL: http://svn.freebsd.org/changeset/base/239215 Log: Compile fix. MFC after: 2 weeks Modified: head/sys/dev/usb/controller/at91dci.c Modified: head/sys/dev/usb/controller/at91dci.c ============================================================================== --- head/sys/dev/usb/controller/at91dci.c Sun Aug 12 17:53:06 2012 (r239214) +++ head/sys/dev/usb/controller/at91dci.c Sun Aug 12 19:58:56 2012 (r239215) @@ -1228,7 +1228,6 @@ at91dci_device_done(struct usb_xfer *xfe static void at91dci_xfer_stall(struct usb_xfer *xfer) { - USB_BUS_LOCK_ASSERT(udev->bus, MA_OWNED); at91dci_device_done(xfer, USB_ERR_STALLED); } From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 20:24:00 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EF879106566B; Sun, 12 Aug 2012 20:23:59 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DA0398FC12; Sun, 12 Aug 2012 20:23:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CKNxVb035555; Sun, 12 Aug 2012 20:23:59 GMT (envelope-from gjb@svn.freebsd.org) Received: (from gjb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CKNxnl035553; Sun, 12 Aug 2012 20:23:59 GMT (envelope-from gjb@svn.freebsd.org) Message-Id: <201208122023.q7CKNxnl035553@svn.freebsd.org> From: Glen Barber Date: Sun, 12 Aug 2012 20:23:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239216 - head/cddl/contrib/opensolaris/cmd/zfs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 20:24:00 -0000 Author: gjb (doc,ports committer) Date: Sun Aug 12 20:23:59 2012 New Revision: 239216 URL: http://svn.freebsd.org/changeset/base/239216 Log: Remove a leading space that breaks rendering. MFC after: 3 days Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sun Aug 12 19:58:56 2012 (r239215) +++ head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sun Aug 12 20:23:59 2012 (r239216) @@ -2249,7 +2249,7 @@ properties, and current snapshot and fil is received. If the .Fl F flag is specified when this stream is received, snapshots and file systems that - do not exist on the sending side are destroyed. +do not exist on the sending side are destroyed. .It Fl D Generate a deduplicated stream. Blocks which would have been sent multiple times in the send stream will only be sent once. The receiving system must From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 20:30:16 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3989C10656B2; Sun, 12 Aug 2012 20:30:16 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 241BB8FC08; Sun, 12 Aug 2012 20:30:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CKUFfj036246; Sun, 12 Aug 2012 20:30:15 GMT (envelope-from gjb@svn.freebsd.org) Received: (from gjb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CKUFmY036244; Sun, 12 Aug 2012 20:30:15 GMT (envelope-from gjb@svn.freebsd.org) Message-Id: <201208122030.q7CKUFmY036244@svn.freebsd.org> From: Glen Barber Date: Sun, 12 Aug 2012 20:30:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239217 - head/cddl/contrib/opensolaris/cmd/zfs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 20:30:16 -0000 Author: gjb (doc,ports committer) Date: Sun Aug 12 20:30:15 2012 New Revision: 239217 URL: http://svn.freebsd.org/changeset/base/239217 Log: - Fix source dataset snapshot name in Example 15. - Bump date. MFC after: 3 days X-MFC-With: r239216 Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Modified: head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sun Aug 12 20:23:59 2012 (r239216) +++ head/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sun Aug 12 20:30:15 2012 (r239217) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 22, 2012 +.Dd August 12, 2012 .Dt ZFS 8 .Os .Sh NAME @@ -3028,9 +3028,9 @@ a new snapshot, as follows: .Li # Ic zfs destroy -r pool/users@7daysago .Li # Ic zfs rename -r pool/users@6daysago @7daysago .Li # Ic zfs rename -r pool/users@5daysago @6daysago -.Li # Ic zfs rename -r pool/users@yesterday @5daysago -.Li # Ic zfs rename -r pool/users@yesterday @4daysago -.Li # Ic zfs rename -r pool/users@yesterday @3daysago +.Li # Ic zfs rename -r pool/users@4daysago @5daysago +.Li # Ic zfs rename -r pool/users@3daysago @4daysago +.Li # Ic zfs rename -r pool/users@2daysago @3daysago .Li # Ic zfs rename -r pool/users@yesterday @2daysago .Li # Ic zfs rename -r pool/users@today @yesterday .Li # Ic zfs snapshot -r pool/users@today From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 20:45:48 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9EF82106567B; Sun, 12 Aug 2012 20:45:48 +0000 (UTC) (envelope-from mjacob@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7F0EB8FC16; Sun, 12 Aug 2012 20:45:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CKjmRM037977; Sun, 12 Aug 2012 20:45:48 GMT (envelope-from mjacob@svn.freebsd.org) Received: (from mjacob@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CKjm17037974; Sun, 12 Aug 2012 20:45:48 GMT (envelope-from mjacob@svn.freebsd.org) Message-Id: <201208122045.q7CKjm17037974@svn.freebsd.org> From: Matt Jacob Date: Sun, 12 Aug 2012 20:45:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239218 - head/sys/dev/isp X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 20:45:48 -0000 Author: mjacob Date: Sun Aug 12 20:45:47 2012 New Revision: 239218 URL: http://svn.freebsd.org/changeset/base/239218 Log: Fix an oops where we wiped out DMA maps. Don't allocate extended command space for anything less than a 2300. MFC after: 1 month X-MFC: 238869 Modified: head/sys/dev/isp/isp_freebsd.c head/sys/dev/isp/isp_pci.c Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Sun Aug 12 20:30:15 2012 (r239217) +++ head/sys/dev/isp/isp_freebsd.c Sun Aug 12 20:45:47 2012 (r239218) @@ -779,8 +779,13 @@ static ISP_INLINE void isp_free_pcmd(ispsoftc_t *isp, union ccb *ccb) { if (ISP_PCMD(ccb)) { - memset(ISP_PCMD(ccb), 0, sizeof (struct isp_pcmd)); - ((struct isp_pcmd *)ISP_PCMD(ccb))->next = isp->isp_osinfo.pcmd_free; +#ifdef ISP_TARGET_MODE + PISP_PCMD(ccb)->datalen = 0; + PISP_PCMD(ccb)->totslen = 0; + PISP_PCMD(ccb)->cumslen = 0; + PISP_PCMD(ccb)->crn = 0; +#endif + PISP_PCMD(ccb)->next = isp->isp_osinfo.pcmd_free; isp->isp_osinfo.pcmd_free = ISP_PCMD(ccb); ISP_PCMD(ccb) = NULL; } @@ -6326,12 +6331,20 @@ isp_common_dmateardown(ispsoftc_t *isp, int isp_fcp_next_crn(ispsoftc_t *isp, uint8_t *crnp, XS_T *cmd) { - uint32_t chan = XS_CHANNEL(cmd); - uint32_t tgt = XS_TGT(cmd); - uint32_t lun = XS_LUN(cmd); - struct isp_fc *fc = &isp->isp_osinfo.pc.fc[chan]; - int idx = NEXUS_HASH(tgt, lun); - struct isp_nexus *nxp = fc->nexus_hash[idx]; + uint32_t chan, tgt, lun; + struct isp_fc *fc; + struct isp_nexus *nxp; + int idx; + + if (isp->isp_type < ISP_HA_FC_2300) + return (0); + + chan = XS_CHANNEL(cmd); + tgt = XS_TGT(cmd); + lun = XS_LUN(cmd); + fc = &isp->isp_osinfo.pc.fc[chan]; + idx = NEXUS_HASH(tgt, lun); + nxp = fc->nexus_hash[idx]; while (nxp) { if (nxp->tgt == tgt && nxp->lun == lun) Modified: head/sys/dev/isp/isp_pci.c ============================================================================== --- head/sys/dev/isp/isp_pci.c Sun Aug 12 20:30:15 2012 (r239217) +++ head/sys/dev/isp/isp_pci.c Sun Aug 12 20:45:47 2012 (r239218) @@ -1690,18 +1690,20 @@ isp_pci_mbxdma(ispsoftc_t *isp) bus_dma_tag_destroy(fc->tdmat); goto bad; } - for (i = 0; i < INITIAL_NEXUS_COUNT; i++) { - struct isp_nexus *n = malloc(sizeof (struct isp_nexus), M_DEVBUF, M_NOWAIT | M_ZERO); - if (n == NULL) { - while (fc->nexus_free_list) { - n = fc->nexus_free_list; - fc->nexus_free_list = n->next; - free(n, M_DEVBUF); + if (isp->isp_type >= ISP_HA_FC_2300) { + for (i = 0; i < INITIAL_NEXUS_COUNT; i++) { + struct isp_nexus *n = malloc(sizeof (struct isp_nexus), M_DEVBUF, M_NOWAIT | M_ZERO); + if (n == NULL) { + while (fc->nexus_free_list) { + n = fc->nexus_free_list; + fc->nexus_free_list = n->next; + free(n, M_DEVBUF); + } + goto bad; } - goto bad; + n->next = fc->nexus_free_list; + fc->nexus_free_list = n; } - n->next = fc->nexus_free_list; - fc->nexus_free_list = n; } } } From owner-svn-src-all@FreeBSD.ORG Sun Aug 12 20:49:26 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3FB66106566C; Sun, 12 Aug 2012 20:49:26 +0000 (UTC) (envelope-from mjacob@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2A50B8FC0A; Sun, 12 Aug 2012 20:49:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7CKnQUB038390; Sun, 12 Aug 2012 20:49:26 GMT (envelope-from mjacob@svn.freebsd.org) Received: (from mjacob@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7CKnPMt038387; Sun, 12 Aug 2012 20:49:25 GMT (envelope-from mjacob@svn.freebsd.org) Message-Id: <201208122049.q7CKnPMt038387@svn.freebsd.org> From: Matt Jacob Date: Sun, 12 Aug 2012 20:49:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239219 - head/sys/dev/isp X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2012 20:49:26 -0000 Author: mjacob Date: Sun Aug 12 20:49:25 2012 New Revision: 239219 URL: http://svn.freebsd.org/changeset/base/239219 Log: Remove extraneous newline. MFC after: 1 month Modified: head/sys/dev/isp/isp.c Modified: head/sys/dev/isp/isp.c ============================================================================== --- head/sys/dev/isp/isp.c Sun Aug 12 20:45:47 2012 (r239218) +++ head/sys/dev/isp/isp.c Sun Aug 12 20:49:25 2012 (r239219) @@ -939,7 +939,7 @@ isp_reset(ispsoftc_t *isp, int do_load_d MBSINIT(&mbs, MBOX_WRITE_RAM_WORD, MBLOGNONE, 0); mbs.param[1] = code_org; mbs.param[2] = ucd.np[0]; - isp_prt(isp, ISP_LOGDEBUG1, "WRITE RAM %u words at load address 0x%x\n", ucd.np[3], code_org); + isp_prt(isp, ISP_LOGDEBUG1, "WRITE RAM %u words at load address 0x%x", ucd.np[3], code_org); isp_mboxcmd(isp, &mbs); if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { isp_prt(isp, ISP_LOGERR, "F/W download failed at word %d", isp->isp_mbxwrk1 - code_org); From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 07:36:58 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9F4FE106564A; Mon, 13 Aug 2012 07:36:58 +0000 (UTC) (envelope-from cperciva@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8A8128FC14; Mon, 13 Aug 2012 07:36:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7D7awlL006361; Mon, 13 Aug 2012 07:36:58 GMT (envelope-from cperciva@svn.freebsd.org) Received: (from cperciva@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7D7awPc006358; Mon, 13 Aug 2012 07:36:58 GMT (envelope-from cperciva@svn.freebsd.org) Message-Id: <201208130736.q7D7awPc006358@svn.freebsd.org> From: Colin Percival Date: Mon, 13 Aug 2012 07:36:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239228 - in head/sys: amd64/conf i386/conf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 07:36:58 -0000 Author: cperciva Date: Mon Aug 13 07:36:57 2012 New Revision: 239228 URL: http://svn.freebsd.org/changeset/base/239228 Log: Build modules along with the XENHVM kernels. No objections from: freebsd-xen mailing list MFC after: 1 week Modified: head/sys/amd64/conf/XENHVM head/sys/i386/conf/XENHVM Modified: head/sys/amd64/conf/XENHVM ============================================================================== --- head/sys/amd64/conf/XENHVM Mon Aug 13 02:16:37 2012 (r239227) +++ head/sys/amd64/conf/XENHVM Mon Aug 13 07:36:57 2012 (r239228) @@ -6,8 +6,6 @@ include GENERIC ident XENHVM -makeoptions MODULES_OVERRIDE="" - # # Adaptive locks rely on a lock-free pointer read to determine the run state # of the thread holding a lock when under contention; under a virtualisation Modified: head/sys/i386/conf/XENHVM ============================================================================== --- head/sys/i386/conf/XENHVM Mon Aug 13 02:16:37 2012 (r239227) +++ head/sys/i386/conf/XENHVM Mon Aug 13 07:36:57 2012 (r239228) @@ -6,8 +6,6 @@ include GENERIC ident XENHVM -makeoptions MODULES_OVERRIDE="" - # # Adaptive locks rely on a lock-free pointer read to determine the run state # of the thread holding a lock when under contention; under a virtualisation From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 13:08:31 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4552F1065676; Mon, 13 Aug 2012 13:08:31 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1619B8FC16; Mon, 13 Aug 2012 13:08:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DD8UND042089; Mon, 13 Aug 2012 13:08:30 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DD8UPu042086; Mon, 13 Aug 2012 13:08:30 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208131308.q7DD8UPu042086@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Mon, 13 Aug 2012 13:08:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239230 - head/sys/boot/common X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 13:08:31 -0000 Author: ae Date: Mon Aug 13 13:08:30 2012 New Revision: 239230 URL: http://svn.freebsd.org/changeset/base/239230 Log: Unbreak booting from the true dedicated disks. When we open the disk, check the type of partition table, that has been detected. If this is BSD label, then we assume this is DD mode. Reported by: dim@ Modified: head/sys/boot/common/disk.c head/sys/boot/common/disk.h Modified: head/sys/boot/common/disk.c ============================================================================== --- head/sys/boot/common/disk.c Mon Aug 13 08:16:30 2012 (r239229) +++ head/sys/boot/common/disk.c Mon Aug 13 13:08:30 2012 (r239230) @@ -173,7 +173,13 @@ disk_open(struct disk_devdesc *dev, off_ rc = ENXIO; goto out; } - if (dev->d_slice > 0) { + if (ptable_gettype(od->table) == PTABLE_BSD && + dev->d_partition >= 0) { + /* It doesn't matter what value has d_slice */ + rc = ptable_getpart(od->table, &part, dev->d_partition); + if (rc == 0) + dev->d_offset = part.start; + } else if (dev->d_slice > 0) { /* Try to get information about partition */ rc = ptable_getpart(od->table, &part, dev->d_slice); if (rc != 0) /* Partition doesn't exist */ @@ -247,9 +253,9 @@ disk_fmtdev(struct disk_devdesc *dev) #ifdef LOADER_MBR_SUPPORT cp += sprintf(cp, "s%d", dev->d_slice); #endif - if (dev->d_partition >= 0) - cp += sprintf(cp, "%c", dev->d_partition + 'a'); } + if (dev->d_partition >= 0) + cp += sprintf(cp, "%c", dev->d_partition + 'a'); strcat(cp, ":"); return (buf); } Modified: head/sys/boot/common/disk.h ============================================================================== --- head/sys/boot/common/disk.h Mon Aug 13 08:16:30 2012 (r239229) +++ head/sys/boot/common/disk.h Mon Aug 13 13:08:30 2012 (r239230) @@ -45,6 +45,11 @@ * d_slice = MBR slice number (typically 1..4) * d_partition = disklabel partition (typically 0..7) * + * BSD disklabel partition on the true dedicated disk: + * + * d_slice = -1 + * d_partition = disklabel partition (typically 0..7) + * * GPT partition: * * d_slice = GPT partition number (typically 1..N) From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 13:10:51 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4E9E8106564A; Mon, 13 Aug 2012 13:10:51 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 385708FC08; Mon, 13 Aug 2012 13:10:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DDApZS042358; Mon, 13 Aug 2012 13:10:51 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DDAoKq042356; Mon, 13 Aug 2012 13:10:50 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208131310.q7DDAoKq042356@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Mon, 13 Aug 2012 13:10:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239231 - head/sys/boot/common X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 13:10:51 -0000 Author: ae Date: Mon Aug 13 13:10:50 2012 New Revision: 239231 URL: http://svn.freebsd.org/changeset/base/239231 Log: Remove colons from the debug message, device name returned by the disk_fmtdev() already has the colons. Modified: head/sys/boot/common/disk.c Modified: head/sys/boot/common/disk.c ============================================================================== --- head/sys/boot/common/disk.c Mon Aug 13 13:08:30 2012 (r239230) +++ head/sys/boot/common/disk.c Mon Aug 13 13:10:50 2012 (r239231) @@ -162,7 +162,7 @@ disk_open(struct disk_devdesc *dev, off_ dev->d_opendata = od; od->mediasize = mediasize; od->sectorsize = sectorsize; - DEBUG("%s: unit %d, slice %d, partition %d", + DEBUG("%s unit %d, slice %d, partition %d", disk_fmtdev(dev), dev->d_unit, dev->d_slice, dev->d_partition); /* Determine disk layout. */ @@ -217,9 +217,9 @@ out: if (od->table != NULL) ptable_close(od->table); free(od); - DEBUG("%s: could not open", disk_fmtdev(dev)); + DEBUG("%s could not open", disk_fmtdev(dev)); } else { - DEBUG("%s: offset %lld", disk_fmtdev(dev), dev->d_offset); + DEBUG("%s offset %lld", disk_fmtdev(dev), dev->d_offset); } return (rc); } @@ -230,7 +230,7 @@ disk_close(struct disk_devdesc *dev) struct open_disk *od; od = (struct open_disk *)dev->d_opendata; - DEBUG("%s: closed", disk_fmtdev(dev)); + DEBUG("%s closed", disk_fmtdev(dev)); ptable_close(od->table); free(od); return (0); From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 13:33:22 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0E656106564A; Mon, 13 Aug 2012 13:33:22 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EDF5B8FC12; Mon, 13 Aug 2012 13:33:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DDXLD7044878; Mon, 13 Aug 2012 13:33:21 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DDXLWO044876; Mon, 13 Aug 2012 13:33:21 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208131333.q7DDXLWO044876@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Mon, 13 Aug 2012 13:33:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239232 - head/sys/boot/common X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 13:33:22 -0000 Author: ae Date: Mon Aug 13 13:33:21 2012 New Revision: 239232 URL: http://svn.freebsd.org/changeset/base/239232 Log: Restore the old behaviour. If requested partition is a BSD slice, but d_partition isn't explicitly set, then try to open BSD label and its first partition. Modified: head/sys/boot/common/disk.c Modified: head/sys/boot/common/disk.c ============================================================================== --- head/sys/boot/common/disk.c Mon Aug 13 13:10:50 2012 (r239231) +++ head/sys/boot/common/disk.c Mon Aug 13 13:33:21 2012 (r239232) @@ -185,10 +185,18 @@ disk_open(struct disk_devdesc *dev, off_ if (rc != 0) /* Partition doesn't exist */ goto out; dev->d_offset = part.start; - if (dev->d_partition == -1 || - dev->d_partition == 255) + if (dev->d_partition == 255) goto out; /* Nothing more to do */ - + if (dev->d_partition == -1) { + /* + * If we are looking at a BSD slice, and the + * partition is < 0, assume the 'a' partition. + */ + if (part.type == PART_FREEBSD) + dev->d_partition = 0; + else + goto out; + } /* Try to read BSD label */ table = ptable_open(dev, part.end - part.start + 1, od->sectorsize, ptblread); From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 15:16:26 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4F7C106566C; Mon, 13 Aug 2012 15:16:26 +0000 (UTC) (envelope-from wblock@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9FB158FC08; Mon, 13 Aug 2012 15:16:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DFGQ5G055989; Mon, 13 Aug 2012 15:16:26 GMT (envelope-from wblock@svn.freebsd.org) Received: (from wblock@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DFGQET055987; Mon, 13 Aug 2012 15:16:26 GMT (envelope-from wblock@svn.freebsd.org) Message-Id: <201208131516.q7DFGQET055987@svn.freebsd.org> From: Warren Block Date: Mon, 13 Aug 2012 15:16:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239233 - head/usr.sbin/lpr/lpd X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 15:16:26 -0000 Author: wblock (doc committer) Date: Mon Aug 13 15:16:25 2012 New Revision: 239233 URL: http://svn.freebsd.org/changeset/base/239233 Log: Correct description of minfree to kilobytes rather than blocks. PR: 125921 Submitted by: Andre Albsmeier MFC after: 3 days Modified: head/usr.sbin/lpr/lpd/lpd.8 Modified: head/usr.sbin/lpr/lpd/lpd.8 ============================================================================== --- head/usr.sbin/lpr/lpd/lpd.8 Mon Aug 13 13:33:21 2012 (r239232) +++ head/usr.sbin/lpr/lpd/lpd.8 Mon Aug 13 15:16:25 2012 (r239233) @@ -152,7 +152,7 @@ machine with the printer. .Pp The file .Em minfree -in each spool directory contains the number of disk blocks to leave free +in each spool directory contains the number of kilobytes to leave free so that the line printer queue will not completely fill the disk. The .Em minfree From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 16:03:31 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6D7B7106566B; Mon, 13 Aug 2012 16:03:31 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1CEB48FC0A; Mon, 13 Aug 2012 16:03:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DG3UlT060876; Mon, 13 Aug 2012 16:03:30 GMT (envelope-from emaste@svn.freebsd.org) Received: (from emaste@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DG3UcZ060874; Mon, 13 Aug 2012 16:03:30 GMT (envelope-from emaste@svn.freebsd.org) Message-Id: <201208131603.q7DG3UcZ060874@svn.freebsd.org> From: Ed Maste Date: Mon, 13 Aug 2012 16:03:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239234 - head/sys/dev/re X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 16:03:31 -0000 Author: emaste Date: Mon Aug 13 16:03:30 2012 New Revision: 239234 URL: http://svn.freebsd.org/changeset/base/239234 Log: Use array notation for consistency. Modified: head/sys/dev/re/if_re.c Modified: head/sys/dev/re/if_re.c ============================================================================== --- head/sys/dev/re/if_re.c Mon Aug 13 15:16:25 2012 (r239233) +++ head/sys/dev/re/if_re.c Mon Aug 13 16:03:30 2012 (r239234) @@ -2112,8 +2112,8 @@ re_rxeof(struct rl_softc *sc, int *rx_np ifp = sc->rl_ifp; #ifdef DEV_NETMAP if (ifp->if_capenable & IFCAP_NETMAP) { - NA(ifp)->rx_rings->nr_kflags |= NKR_PENDINTR; - selwakeuppri(&NA(ifp)->rx_rings->si, PI_NET); + NA(ifp)->rx_rings[0].nr_kflags |= NKR_PENDINTR; + selwakeuppri(&NA(ifp)->rx_rings[0].si, PI_NET); return 0; } #endif /* DEV_NETMAP */ From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 16:33:22 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B36161065672; Mon, 13 Aug 2012 16:33:22 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9D9A78FC0A; Mon, 13 Aug 2012 16:33:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DGXMKW064291; Mon, 13 Aug 2012 16:33:22 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DGXMj4064288; Mon, 13 Aug 2012 16:33:22 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208131633.q7DGXMj4064288@svn.freebsd.org> From: John Baldwin Date: Mon, 13 Aug 2012 16:33:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239235 - in head/sys: amd64/amd64 i386/i386 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 16:33:22 -0000 Author: jhb Date: Mon Aug 13 16:33:22 2012 New Revision: 239235 URL: http://svn.freebsd.org/changeset/base/239235 Log: Add a 10 millisecond delay after sending the initial INIT IPI. This matches the algorithm in the MP specification (1.4). Previously we were sending out the deassert INIT IPI immediately after the initial INIT IPI was sent. Modified: head/sys/amd64/amd64/mp_machdep.c head/sys/i386/i386/mp_machdep.c Modified: head/sys/amd64/amd64/mp_machdep.c ============================================================================== --- head/sys/amd64/amd64/mp_machdep.c Mon Aug 13 16:03:30 2012 (r239234) +++ head/sys/amd64/amd64/mp_machdep.c Mon Aug 13 16:33:22 2012 (r239235) @@ -1048,14 +1048,15 @@ ipi_startup(int apic_id, int vector) /* wait for pending status end */ lapic_ipi_wait(-1); + DELAY(10000); /* wait ~10mS */ /* do an INIT IPI: deassert RESET */ lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL | APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0); /* wait for pending status end */ - DELAY(10000); /* wait ~10mS */ lapic_ipi_wait(-1); + DELAY(10000); /* wait ~10mS */ /* * next we do a STARTUP IPI: the previous INIT IPI might still be Modified: head/sys/i386/i386/mp_machdep.c ============================================================================== --- head/sys/i386/i386/mp_machdep.c Mon Aug 13 16:03:30 2012 (r239234) +++ head/sys/i386/i386/mp_machdep.c Mon Aug 13 16:33:22 2012 (r239235) @@ -1148,14 +1148,15 @@ ipi_startup(int apic_id, int vector) /* wait for pending status end */ lapic_ipi_wait(-1); + DELAY(10000); /* wait ~10mS */ /* do an INIT IPI: deassert RESET */ lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL | APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0); /* wait for pending status end */ - DELAY(10000); /* wait ~10mS */ lapic_ipi_wait(-1); + DELAY(10000); /* wait ~10mS */ /* * next we do a STARTUP IPI: the previous INIT IPI might still be From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 17:15:57 2012 Return-Path: Delivered-To: svn-src-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 06937106564A; Mon, 13 Aug 2012 17:15:57 +0000 (UTC) (envelope-from gavin@FreeBSD.org) Received: from mail-gw11.york.ac.uk (mail-gw11.york.ac.uk [144.32.129.150]) by mx1.freebsd.org (Postfix) with ESMTP id B49498FC0A; Mon, 13 Aug 2012 17:15:56 +0000 (UTC) Received: from buffy-128.york.ac.uk ([144.32.128.160]:60644 helo=buffy.york.ac.uk) by mail-gw11.york.ac.uk with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1T0y98-0003jT-97; Mon, 13 Aug 2012 18:09:42 +0100 Received: from [127.0.0.1] (localhost [127.0.0.1]) by buffy.york.ac.uk (8.14.5/8.14.5) with ESMTP id q7DH9fo9045050; Mon, 13 Aug 2012 18:09:42 +0100 (BST) (envelope-from gavin@FreeBSD.org) From: Gavin Atkinson To: Hans Petter Selasky In-Reply-To: <201208121753.q7CHr7VU017178@svn.freebsd.org> References: <201208121753.q7CHr7VU017178@svn.freebsd.org> Content-Type: text/plain; charset="ASCII" Date: Mon, 13 Aug 2012 18:09:41 +0100 Message-ID: <1344877781.20407.59.camel@buffy.york.ac.uk> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Content-Transfer-Encoding: 7bit Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org Subject: Re: svn commit: r239214 - in head/sys: dev/usb dev/usb/controller sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 17:15:57 -0000 On Sun, 2012-08-12 at 17:53 +0000, Hans Petter Selasky wrote: > Author: hselasky > Date: Sun Aug 12 17:53:06 2012 > New Revision: 239214 > URL: http://svn.freebsd.org/changeset/base/239214 > > Log: > Add support for the so-called streams feature of BULK endpoints > in SUPER-speed mode, USB 3.0. [...] > All USB drivers should be re-compiled after this change. When this is merged, is there a way to do this without requiring all drivers to be recompiled? If not, it sounds like this (and indeed 239179) may not be merge candidates :( Gavin -- Gavin Atkinson FreeBSD committer and bugmeister GPG: A093262B (313A A79F 697D 3A5C 216A EDF5 935D EF44 A093 262B) From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 17:38:39 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 954BD106566B; Mon, 13 Aug 2012 17:38:39 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7E5158FC12; Mon, 13 Aug 2012 17:38:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DHcdXR071133; Mon, 13 Aug 2012 17:38:39 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DHcdbe071129; Mon, 13 Aug 2012 17:38:39 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201208131738.q7DHcdbe071129@svn.freebsd.org> From: Alan Cox Date: Mon, 13 Aug 2012 17:38:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239236 - in head/sys: conf mips/include mips/mips X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 17:38:39 -0000 Author: alc Date: Mon Aug 13 17:38:38 2012 New Revision: 239236 URL: http://svn.freebsd.org/changeset/base/239236 Log: Port the new PV entry allocator from amd64/i386. This allocator has two advantages. First, PV entries are roughly half the size. Second, this allocator doesn't access the paging queues, and thus it will allow for the removal of the page queues lock from this pmap. Fix a rather serious bug in pmap_remove_write(). After removing write access from the specified page's first mapping, pmap_remove_write() then used the wrong "next" pointer. Consequently, the page's second, third, etc. mappings were not write protected. Tested by: jchandra Modified: head/sys/conf/options.mips head/sys/mips/include/pmap.h head/sys/mips/mips/pmap.c Modified: head/sys/conf/options.mips ============================================================================== --- head/sys/conf/options.mips Mon Aug 13 16:33:22 2012 (r239235) +++ head/sys/conf/options.mips Mon Aug 13 17:38:38 2012 (r239236) @@ -75,3 +75,7 @@ IF_RT_DEBUG opt_if_rt.h IF_RT_PHY_SUPPORT opt_if_rt.h IF_RT_RING_DATA_COUNT opt_if_rt.h +# +# Options that affect the pmap. +# +PV_STATS opt_pmap.h Modified: head/sys/mips/include/pmap.h ============================================================================== --- head/sys/mips/include/pmap.h Mon Aug 13 16:33:22 2012 (r239235) +++ head/sys/mips/include/pmap.h Mon Aug 13 17:38:38 2012 (r239236) @@ -66,9 +66,9 @@ * Pmap stuff */ struct pv_entry; +struct pv_chunk; struct md_page { - int pv_list_count; int pv_flags; TAILQ_HEAD(, pv_entry) pv_list; }; @@ -82,8 +82,7 @@ struct md_page { struct pmap { pd_entry_t *pm_segtab; /* KVA of segment table */ - TAILQ_HEAD(, pv_entry) pm_pvlist; /* list of mappings in - * pmap */ + TAILQ_HEAD(, pv_chunk) pm_pvchunk; /* list of mappings in pmap */ cpuset_t pm_active; /* active on cpus */ struct { u_int32_t asid:ASID_BITS; /* TLB address space tag */ @@ -121,13 +120,30 @@ extern struct pmap kernel_pmap_store; * mappings of that page. An entry is a pv_entry_t, the list is pv_table. */ typedef struct pv_entry { - pmap_t pv_pmap; /* pmap where mapping lies */ vm_offset_t pv_va; /* virtual address for mapping */ TAILQ_ENTRY(pv_entry) pv_list; - TAILQ_ENTRY(pv_entry) pv_plist; } *pv_entry_t; /* + * pv_entries are allocated in chunks per-process. This avoids the + * need to track per-pmap assignments. + */ +#ifdef __mips_n64 +#define _NPCM 3 +#define _NPCPV 168 +#else +#define _NPCM 11 +#define _NPCPV 336 +#endif +struct pv_chunk { + pmap_t pc_pmap; + TAILQ_ENTRY(pv_chunk) pc_list; + u_long pc_map[_NPCM]; /* bitmap; 1 = free */ + TAILQ_ENTRY(pv_chunk) pc_lru; + struct pv_entry pc_pventry[_NPCPV]; +}; + +/* * physmem_desc[] is a superset of phys_avail[] and describes all the * memory present in the system. * Modified: head/sys/mips/mips/pmap.c ============================================================================== --- head/sys/mips/mips/pmap.c Mon Aug 13 16:33:22 2012 (r239235) +++ head/sys/mips/mips/pmap.c Mon Aug 13 17:38:38 2012 (r239236) @@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$"); #include "opt_ddb.h" +#include "opt_pmap.h" #include #include @@ -77,6 +78,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef DDB #include #endif @@ -116,6 +118,12 @@ __FBSDID("$FreeBSD$"); #define PMAP_INLINE #endif +#ifdef PV_STATS +#define PV_STAT(x) do { x ; } while (0) +#else +#define PV_STAT(x) do { } while (0) +#endif + /* * Get PDEs and PTEs for user/kernel address space */ @@ -152,12 +160,13 @@ static void pmap_asid_alloc(pmap_t pmap) /* * Data for the pv entry allocation mechanism */ -static uma_zone_t pvzone; -static struct vm_object pvzone_obj; -static int pv_entry_count = 0, pv_entry_max = 0, pv_entry_high_water = 0; +static TAILQ_HEAD(pch, pv_chunk) pv_chunks = TAILQ_HEAD_INITIALIZER(pv_chunks); +static int pv_entry_count; -static PMAP_INLINE void free_pv_entry(pv_entry_t pv); -static pv_entry_t get_pv_entry(pmap_t locked_pmap); +static void free_pv_chunk(struct pv_chunk *pc); +static void free_pv_entry(pmap_t pmap, pv_entry_t pv); +static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try); +static vm_page_t pmap_pv_reclaim(pmap_t locked_pmap); static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va); static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va); @@ -472,7 +481,7 @@ pmap_create_kernel_pagetable(void) PMAP_LOCK_INIT(kernel_pmap); kernel_pmap->pm_segtab = kernel_segmap; CPU_FILL(&kernel_pmap->pm_active); - TAILQ_INIT(&kernel_pmap->pm_pvlist); + TAILQ_INIT(&kernel_pmap->pm_pvchunk); kernel_pmap->pm_asid[0].asid = PMAP_ASID_RESERVED; kernel_pmap->pm_asid[0].gen = 0; kernel_vm_end += nkpt * NPTEPG * PAGE_SIZE; @@ -591,7 +600,6 @@ pmap_page_init(vm_page_t m) { TAILQ_INIT(&m->md.pv_list); - m->md.pv_list_count = 0; m->md.pv_flags = 0; } @@ -599,23 +607,10 @@ pmap_page_init(vm_page_t m) * Initialize the pmap module. * Called by vm_init, to initialize any structures that the pmap * system needs to map virtual memory. - * pmap_init has been enhanced to support in a fairly consistant - * way, discontiguous physical memory. */ void pmap_init(void) { - - /* - * Initialize the address space (zone) for the pv entries. Set a - * high water mark so that the system can recover from excessive - * numbers of pv entries. - */ - pvzone = uma_zcreate("PV ENTRY", sizeof(struct pv_entry), NULL, NULL, - NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM | UMA_ZONE_NOFREE); - pv_entry_max = PMAP_SHPGPERPROC * maxproc + cnt.v_page_count; - pv_entry_high_water = 9 * (pv_entry_max / 10); - uma_zone_set_obj(pvzone, &pvzone_obj, pv_entry_max); } /*************************************************** @@ -1012,7 +1007,7 @@ pmap_pinit0(pmap_t pmap) pmap->pm_asid[i].gen = 0; } PCPU_SET(curpmap, pmap); - TAILQ_INIT(&pmap->pm_pvlist); + TAILQ_INIT(&pmap->pm_pvchunk); bzero(&pmap->pm_stats, sizeof pmap->pm_stats); } @@ -1070,7 +1065,7 @@ pmap_pinit(pmap_t pmap) pmap->pm_asid[i].asid = PMAP_ASID_RESERVED; pmap->pm_asid[i].gen = 0; } - TAILQ_INIT(&pmap->pm_pvlist); + TAILQ_INIT(&pmap->pm_pvchunk); bzero(&pmap->pm_stats, sizeof pmap->pm_stats); return (1); @@ -1296,125 +1291,318 @@ pmap_growkernel(vm_offset_t addr) } /*************************************************** -* page management routines. + * page management routines. ***************************************************/ -/* - * free the pv_entry back to the free list - */ -static PMAP_INLINE void -free_pv_entry(pv_entry_t pv) +CTASSERT(sizeof(struct pv_chunk) == PAGE_SIZE); +#ifdef __mips_n64 +CTASSERT(_NPCM == 3); +CTASSERT(_NPCPV == 168); +#else +CTASSERT(_NPCM == 11); +CTASSERT(_NPCPV == 336); +#endif + +static __inline struct pv_chunk * +pv_to_chunk(pv_entry_t pv) { - pv_entry_count--; - uma_zfree(pvzone, pv); + return ((struct pv_chunk *)((uintptr_t)pv & ~(uintptr_t)PAGE_MASK)); } +#define PV_PMAP(pv) (pv_to_chunk(pv)->pc_pmap) + +#ifdef __mips_n64 +#define PC_FREE0_1 0xfffffffffffffffful +#define PC_FREE2 0x000000fffffffffful +#else +#define PC_FREE0_9 0xfffffffful /* Free values for index 0 through 9 */ +#define PC_FREE10 0x0000fffful /* Free values for index 10 */ +#endif + +static const u_long pc_freemask[_NPCM] = { +#ifdef __mips_n64 + PC_FREE0_1, PC_FREE0_1, PC_FREE2 +#else + PC_FREE0_9, PC_FREE0_9, PC_FREE0_9, + PC_FREE0_9, PC_FREE0_9, PC_FREE0_9, + PC_FREE0_9, PC_FREE0_9, PC_FREE0_9, + PC_FREE0_9, PC_FREE10 +#endif +}; + +static SYSCTL_NODE(_vm, OID_AUTO, pmap, CTLFLAG_RD, 0, "VM/pmap parameters"); + +SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_count, CTLFLAG_RD, &pv_entry_count, 0, + "Current number of pv entries"); + +#ifdef PV_STATS +static int pc_chunk_count, pc_chunk_allocs, pc_chunk_frees, pc_chunk_tryfail; + +SYSCTL_INT(_vm_pmap, OID_AUTO, pc_chunk_count, CTLFLAG_RD, &pc_chunk_count, 0, + "Current number of pv entry chunks"); +SYSCTL_INT(_vm_pmap, OID_AUTO, pc_chunk_allocs, CTLFLAG_RD, &pc_chunk_allocs, 0, + "Current number of pv entry chunks allocated"); +SYSCTL_INT(_vm_pmap, OID_AUTO, pc_chunk_frees, CTLFLAG_RD, &pc_chunk_frees, 0, + "Current number of pv entry chunks frees"); +SYSCTL_INT(_vm_pmap, OID_AUTO, pc_chunk_tryfail, CTLFLAG_RD, &pc_chunk_tryfail, 0, + "Number of times tried to get a chunk page but failed."); + +static long pv_entry_frees, pv_entry_allocs; +static int pv_entry_spare; + +SYSCTL_LONG(_vm_pmap, OID_AUTO, pv_entry_frees, CTLFLAG_RD, &pv_entry_frees, 0, + "Current number of pv entry frees"); +SYSCTL_LONG(_vm_pmap, OID_AUTO, pv_entry_allocs, CTLFLAG_RD, &pv_entry_allocs, 0, + "Current number of pv entry allocs"); +SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_spare, CTLFLAG_RD, &pv_entry_spare, 0, + "Current number of spare pv entries"); +#endif + /* - * get a new pv_entry, allocating a block from the system - * when needed. - * the memory allocation is performed bypassing the malloc code - * because of the possibility of allocations at interrupt time. + * We are in a serious low memory condition. Resort to + * drastic measures to free some pages so we can allocate + * another pv entry chunk. */ -static pv_entry_t -get_pv_entry(pmap_t locked_pmap) +static vm_page_t +pmap_pv_reclaim(pmap_t locked_pmap) { - static const struct timeval printinterval = { 60, 0 }; - static struct timeval lastprint; - struct vpgqueues *vpq; + struct pch newtail; + struct pv_chunk *pc; pd_entry_t *pde; - pt_entry_t *pte, oldpte; pmap_t pmap; - pv_entry_t allocated_pv, next_pv, pv; + pt_entry_t *pte, oldpte; + pv_entry_t pv; vm_offset_t va; - vm_page_t m; + vm_page_t m, m_pc; + u_long inuse; + int bit, field, freed, idx; PMAP_LOCK_ASSERT(locked_pmap, MA_OWNED); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); - allocated_pv = uma_zalloc(pvzone, M_NOWAIT); - if (allocated_pv != NULL) { - pv_entry_count++; - if (pv_entry_count > pv_entry_high_water) - pagedaemon_wakeup(); - else - return (allocated_pv); - } - /* - * Reclaim pv entries: At first, destroy mappings to inactive - * pages. After that, if a pv entry is still needed, destroy - * mappings to active pages. - */ - if (ratecheck(&lastprint, &printinterval)) - printf("Approaching the limit on PV entries, " - "increase the vm.pmap.shpgperproc tunable.\n"); - vpq = &vm_page_queues[PQ_INACTIVE]; -retry: - TAILQ_FOREACH(m, &vpq->pl, pageq) { - if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy) - continue; - TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) { - va = pv->pv_va; - pmap = pv->pv_pmap; + pmap = NULL; + m_pc = NULL; + TAILQ_INIT(&newtail); + while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL) { + TAILQ_REMOVE(&pv_chunks, pc, pc_lru); + if (pmap != pc->pc_pmap) { + if (pmap != NULL) { + pmap_invalidate_all(pmap); + if (pmap != locked_pmap) + PMAP_UNLOCK(pmap); + } + pmap = pc->pc_pmap; /* Avoid deadlock and lock recursion. */ if (pmap > locked_pmap) PMAP_LOCK(pmap); - else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) + else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) { + pmap = NULL; + TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); continue; - pmap->pm_stats.resident_count--; - pde = pmap_pde(pmap, va); - KASSERT(pde != NULL && *pde != 0, - ("get_pv_entry: pde")); - pte = pmap_pde_to_pte(pde, va); - oldpte = *pte; - if (is_kernel_pmap(pmap)) - *pte = PTE_G; - else - *pte = 0; - KASSERT(!pte_test(&oldpte, PTE_W), - ("wired pte for unwired page")); - if (m->md.pv_flags & PV_TABLE_REF) - vm_page_aflag_set(m, PGA_REFERENCED); - if (pte_test(&oldpte, PTE_D)) - vm_page_dirty(m); - pmap_invalidate_page(pmap, va); - TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist); - m->md.pv_list_count--; - TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); - pmap_unuse_pt(pmap, va, *pde); - if (pmap != locked_pmap) - PMAP_UNLOCK(pmap); - if (allocated_pv == NULL) - allocated_pv = pv; - else - free_pv_entry(pv); - } - if (TAILQ_EMPTY(&m->md.pv_list)) { - vm_page_aflag_clear(m, PGA_WRITEABLE); - m->md.pv_flags &= ~(PV_TABLE_REF | PV_TABLE_MOD); - } - } - if (allocated_pv == NULL) { - if (vpq == &vm_page_queues[PQ_INACTIVE]) { - vpq = &vm_page_queues[PQ_ACTIVE]; - goto retry; + } } - panic("get_pv_entry: increase the vm.pmap.shpgperproc tunable"); + + /* + * Destroy every non-wired, 4 KB page mapping in the chunk. + */ + freed = 0; + for (field = 0; field < _NPCM; field++) { + for (inuse = ~pc->pc_map[field] & pc_freemask[field]; + inuse != 0; inuse &= ~(1UL << bit)) { + bit = ffsl(inuse) - 1; + idx = field * sizeof(inuse) * NBBY + bit; + pv = &pc->pc_pventry[idx]; + va = pv->pv_va; + pde = pmap_pde(pmap, va); + KASSERT(pde != NULL && *pde != 0, + ("pmap_pv_reclaim: pde")); + pte = pmap_pde_to_pte(pde, va); + oldpte = *pte; + KASSERT(!pte_test(&oldpte, PTE_W), + ("wired pte for unwired page")); + if (is_kernel_pmap(pmap)) + *pte = PTE_G; + else + *pte = 0; + pmap_invalidate_page(pmap, va); + m = PHYS_TO_VM_PAGE(TLBLO_PTE_TO_PA(oldpte)); + if (pte_test(&oldpte, PTE_D)) + vm_page_dirty(m); + if (m->md.pv_flags & PV_TABLE_REF) + vm_page_aflag_set(m, PGA_REFERENCED); + TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); + if (TAILQ_EMPTY(&m->md.pv_list)) { + vm_page_aflag_clear(m, PGA_WRITEABLE); + m->md.pv_flags &= ~(PV_TABLE_REF | + PV_TABLE_MOD); + } + pc->pc_map[field] |= 1UL << bit; + pmap_unuse_pt(pmap, va, *pde); + freed++; + } + } + if (freed == 0) { + TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + continue; + } + /* Every freed mapping is for a 4 KB page. */ + pmap->pm_stats.resident_count -= freed; + PV_STAT(pv_entry_frees += freed); + PV_STAT(pv_entry_spare += freed); + pv_entry_count -= freed; + TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + for (field = 0; field < _NPCM; field++) + if (pc->pc_map[field] != pc_freemask[field]) { + TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, + pc_list); + TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + + /* + * One freed pv entry in locked_pmap is + * sufficient. + */ + if (pmap == locked_pmap) + goto out; + break; + } + if (field == _NPCM) { + PV_STAT(pv_entry_spare -= _NPCPV); + PV_STAT(pc_chunk_count--); + PV_STAT(pc_chunk_frees++); + /* Entire chunk is free; return it. */ + m_pc = PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS( + (vm_offset_t)pc)); + break; + } + } +out: + TAILQ_CONCAT(&pv_chunks, &newtail, pc_lru); + if (pmap != NULL) { + pmap_invalidate_all(pmap); + if (pmap != locked_pmap) + PMAP_UNLOCK(pmap); } - return (allocated_pv); + return (m_pc); } /* - * Revision 1.370 - * - * Move pmap_collect() out of the machine-dependent code, rename it - * to reflect its new location, and add page queue and flag locking. - * - * Notes: (1) alpha, i386, and ia64 had identical implementations - * of pmap_collect() in terms of machine-independent interfaces; - * (2) sparc64 doesn't require it; (3) powerpc had it as a TODO. - * - * MIPS implementation was identical to alpha [Junos 8.2] + * free the pv_entry back to the free list + */ +static void +free_pv_entry(pmap_t pmap, pv_entry_t pv) +{ + struct pv_chunk *pc; + int bit, field, idx; + + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + PMAP_LOCK_ASSERT(pmap, MA_OWNED); + PV_STAT(pv_entry_frees++); + PV_STAT(pv_entry_spare++); + pv_entry_count--; + pc = pv_to_chunk(pv); + idx = pv - &pc->pc_pventry[0]; + field = idx / (sizeof(u_long) * NBBY); + bit = idx % (sizeof(u_long) * NBBY); + pc->pc_map[field] |= 1ul << bit; + for (idx = 0; idx < _NPCM; idx++) + if (pc->pc_map[idx] != pc_freemask[idx]) { + /* + * 98% of the time, pc is already at the head of the + * list. If it isn't already, move it to the head. + */ + if (__predict_false(TAILQ_FIRST(&pmap->pm_pvchunk) != + pc)) { + TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, + pc_list); + } + return; + } + TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + free_pv_chunk(pc); +} + +static void +free_pv_chunk(struct pv_chunk *pc) +{ + vm_page_t m; + + TAILQ_REMOVE(&pv_chunks, pc, pc_lru); + PV_STAT(pv_entry_spare -= _NPCPV); + PV_STAT(pc_chunk_count--); + PV_STAT(pc_chunk_frees++); + /* entire chunk is free, return it */ + m = PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS((vm_offset_t)pc)); + vm_page_unwire(m, 0); + vm_page_free(m); +} + +/* + * get a new pv_entry, allocating a block from the system + * when needed. */ +static pv_entry_t +get_pv_entry(pmap_t pmap, boolean_t try) +{ + struct pv_chunk *pc; + pv_entry_t pv; + vm_page_t m; + int bit, field, idx; + + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + PMAP_LOCK_ASSERT(pmap, MA_OWNED); + PV_STAT(pv_entry_allocs++); + pv_entry_count++; +retry: + pc = TAILQ_FIRST(&pmap->pm_pvchunk); + if (pc != NULL) { + for (field = 0; field < _NPCM; field++) { + if (pc->pc_map[field]) { + bit = ffsl(pc->pc_map[field]) - 1; + break; + } + } + if (field < _NPCM) { + idx = field * sizeof(pc->pc_map[field]) * NBBY + bit; + pv = &pc->pc_pventry[idx]; + pc->pc_map[field] &= ~(1ul << bit); + /* If this was the last item, move it to tail */ + for (field = 0; field < _NPCM; field++) + if (pc->pc_map[field] != 0) { + PV_STAT(pv_entry_spare--); + return (pv); /* not full, return */ + } + TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + TAILQ_INSERT_TAIL(&pmap->pm_pvchunk, pc, pc_list); + PV_STAT(pv_entry_spare--); + return (pv); + } + } + /* No free items, allocate another chunk */ + m = vm_page_alloc_freelist(VM_FREELIST_DIRECT, VM_ALLOC_NORMAL | + VM_ALLOC_WIRED); + if (m == NULL) { + if (try) { + pv_entry_count--; + PV_STAT(pc_chunk_tryfail++); + return (NULL); + } + m = pmap_pv_reclaim(pmap); + if (m == NULL) + goto retry; + } + PV_STAT(pc_chunk_count++); + PV_STAT(pc_chunk_allocs++); + pc = (struct pv_chunk *)MIPS_PHYS_TO_DIRECT(VM_PAGE_TO_PHYS(m)); + pc->pc_pmap = pmap; + pc->pc_map[0] = pc_freemask[0] & ~1ul; /* preallocated bit 0 */ + for (field = 1; field < _NPCM; field++) + pc->pc_map[field] = pc_freemask[field]; + TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru); + pv = &pc->pc_pventry[0]; + TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); + PV_STAT(pv_entry_spare += _NPCPV - 1); + return (pv); +} /* * If it is the first entry on the list, it is actually @@ -1428,24 +1616,13 @@ pmap_pvh_remove(struct md_page *pvh, pma { pv_entry_t pv; - PMAP_LOCK_ASSERT(pmap, MA_OWNED); mtx_assert(&vm_page_queue_mtx, MA_OWNED); - if (pvh->pv_list_count < pmap->pm_stats.resident_count) { - TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) { - if (pmap == pv->pv_pmap && va == pv->pv_va) - break; - } - } else { - TAILQ_FOREACH(pv, &pmap->pm_pvlist, pv_plist) { - if (va == pv->pv_va) - break; + TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) { + if (pmap == PV_PMAP(pv) && va == pv->pv_va) { + TAILQ_REMOVE(&pvh->pv_list, pv, pv_list); + break; } } - if (pv != NULL) { - TAILQ_REMOVE(&pvh->pv_list, pv, pv_list); - pvh->pv_list_count--; - TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist); - } return (pv); } @@ -1458,7 +1635,7 @@ pmap_pvh_free(struct md_page *pvh, pmap_ KASSERT(pv != NULL, ("pmap_pvh_free: pv not found, pa %lx va %lx", (u_long)VM_PAGE_TO_PHYS(member2struct(vm_page, md, pvh)), (u_long)va)); - free_pv_entry(pv); + free_pv_entry(pmap, pv); } static void @@ -1482,14 +1659,9 @@ pmap_try_insert_pv_entry(pmap_t pmap, vm PMAP_LOCK_ASSERT(pmap, MA_OWNED); mtx_assert(&vm_page_queue_mtx, MA_OWNED); - if (pv_entry_count < pv_entry_high_water && - (pv = uma_zalloc(pvzone, M_NOWAIT)) != NULL) { - pv_entry_count++; + if ((pv = get_pv_entry(pmap, TRUE)) != NULL) { pv->pv_va = va; - pv->pv_pmap = pmap; - TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist); TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); - m->md.pv_list_count++; return (TRUE); } else return (FALSE); @@ -1648,6 +1820,7 @@ void pmap_remove_all(vm_page_t m) { pv_entry_t pv; + pmap_t pmap; pd_entry_t *pde; pt_entry_t *pte, tpte; @@ -1659,29 +1832,30 @@ pmap_remove_all(vm_page_t m) vm_page_aflag_set(m, PGA_REFERENCED); while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) { - PMAP_LOCK(pv->pv_pmap); + pmap = PV_PMAP(pv); + PMAP_LOCK(pmap); /* * If it's last mapping writeback all caches from * the page being destroyed */ - if (m->md.pv_list_count == 1) + if (TAILQ_NEXT(pv, pv_list) == NULL) mips_dcache_wbinv_range_index(pv->pv_va, PAGE_SIZE); - pv->pv_pmap->pm_stats.resident_count--; + pmap->pm_stats.resident_count--; - pde = pmap_pde(pv->pv_pmap, pv->pv_va); + pde = pmap_pde(pmap, pv->pv_va); KASSERT(pde != NULL && *pde != 0, ("pmap_remove_all: pde")); pte = pmap_pde_to_pte(pde, pv->pv_va); tpte = *pte; - if (is_kernel_pmap(pv->pv_pmap)) + if (is_kernel_pmap(pmap)) *pte = PTE_G; else *pte = 0; if (pte_test(&tpte, PTE_W)) - pv->pv_pmap->pm_stats.wired_count--; + pmap->pm_stats.wired_count--; /* * Update the vm_page_t clean and reference bits. @@ -1692,14 +1866,12 @@ pmap_remove_all(vm_page_t m) __func__, (void *)pv->pv_va, (uintmax_t)tpte)); vm_page_dirty(m); } - pmap_invalidate_page(pv->pv_pmap, pv->pv_va); + pmap_invalidate_page(pmap, pv->pv_va); - TAILQ_REMOVE(&pv->pv_pmap->pm_pvlist, pv, pv_plist); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); - m->md.pv_list_count--; - pmap_unuse_pt(pv->pv_pmap, pv->pv_va, *pde); - PMAP_UNLOCK(pv->pv_pmap); - free_pv_entry(pv); + pmap_unuse_pt(pmap, pv->pv_va, *pde); + free_pv_entry(pmap, pv); + PMAP_UNLOCK(pmap); } vm_page_aflag_clear(m, PGA_WRITEABLE); @@ -1894,14 +2066,11 @@ pmap_enter(pmap_t pmap, vm_offset_t va, KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva, ("pmap_enter: managed mapping within the clean submap")); if (pv == NULL) - pv = get_pv_entry(pmap); + pv = get_pv_entry(pmap, FALSE); pv->pv_va = va; - pv->pv_pmap = pmap; - TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist); TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); - m->md.pv_list_count++; } else if (pv != NULL) - free_pv_entry(pv); + free_pv_entry(pmap, pv); /* * Increment counters @@ -2397,7 +2566,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_p rv = FALSE; vm_page_lock_queues(); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { - if (pv->pv_pmap == pmap) { + if (PV_PMAP(pv) == pmap) { rv = TRUE; break; } @@ -2422,8 +2591,11 @@ pmap_remove_pages(pmap_t pmap) { pd_entry_t *pde; pt_entry_t *pte, tpte; - pv_entry_t pv, npv; + pv_entry_t pv; vm_page_t m; + struct pv_chunk *pc, *npc; + u_long inuse, bitmask; + int allfree, bit, field, idx; if (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)) { printf("warning: pmap_remove_pages called with non-current pmap\n"); @@ -2431,46 +2603,61 @@ pmap_remove_pages(pmap_t pmap) } vm_page_lock_queues(); PMAP_LOCK(pmap); - for (pv = TAILQ_FIRST(&pmap->pm_pvlist); pv != NULL; pv = npv) { - - pde = pmap_pde(pmap, pv->pv_va); - KASSERT(pde != NULL && *pde != 0, ("pmap_remove_pages: pde")); - pte = pmap_pde_to_pte(pde, pv->pv_va); - if (!pte_test(pte, PTE_V)) - panic("pmap_remove_pages: page on pm_pvlist has no pte"); - tpte = *pte; + TAILQ_FOREACH_SAFE(pc, &pmap->pm_pvchunk, pc_list, npc) { + allfree = 1; + for (field = 0; field < _NPCM; field++) { + inuse = ~pc->pc_map[field] & pc_freemask[field]; + while (inuse != 0) { + bit = ffsl(inuse) - 1; + bitmask = 1UL << bit; + idx = field * sizeof(inuse) * NBBY + bit; + pv = &pc->pc_pventry[idx]; + inuse &= ~bitmask; + + pde = pmap_pde(pmap, pv->pv_va); + KASSERT(pde != NULL && *pde != 0, + ("pmap_remove_pages: pde")); + pte = pmap_pde_to_pte(pde, pv->pv_va); + if (!pte_test(pte, PTE_V)) + panic("pmap_remove_pages: bad pte"); + tpte = *pte; /* * We cannot remove wired pages from a process' mapping at this time */ - if (pte_test(&tpte, PTE_W)) { - npv = TAILQ_NEXT(pv, pv_plist); - continue; - } - *pte = is_kernel_pmap(pmap) ? PTE_G : 0; - - m = PHYS_TO_VM_PAGE(TLBLO_PTE_TO_PA(tpte)); - KASSERT(m != NULL, - ("pmap_remove_pages: bad tpte %#jx", (uintmax_t)tpte)); - - pmap->pm_stats.resident_count--; + if (pte_test(&tpte, PTE_W)) { + allfree = 0; + continue; + } + *pte = is_kernel_pmap(pmap) ? PTE_G : 0; - /* - * Update the vm_page_t clean and reference bits. - */ - if (pte_test(&tpte, PTE_D)) { - vm_page_dirty(m); + m = PHYS_TO_VM_PAGE(TLBLO_PTE_TO_PA(tpte)); + KASSERT(m != NULL, + ("pmap_remove_pages: bad tpte %#jx", + (uintmax_t)tpte)); + + /* + * Update the vm_page_t clean and reference bits. + */ + if (pte_test(&tpte, PTE_D)) + vm_page_dirty(m); + + /* Mark free */ + PV_STAT(pv_entry_frees++); + PV_STAT(pv_entry_spare++); + pv_entry_count--; + pc->pc_map[field] |= bitmask; + pmap->pm_stats.resident_count--; + TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); + if (TAILQ_EMPTY(&m->md.pv_list)) + vm_page_aflag_clear(m, PGA_WRITEABLE); + pmap_unuse_pt(pmap, pv->pv_va, *pde); + } } - npv = TAILQ_NEXT(pv, pv_plist); - TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist); - - m->md.pv_list_count--; - TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); - if (TAILQ_FIRST(&m->md.pv_list) == NULL) { - vm_page_aflag_clear(m, PGA_WRITEABLE); + if (allfree) { + TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + free_pv_chunk(pc); } - pmap_unuse_pt(pmap, pv->pv_va, *pde); - free_pv_entry(pv); } pmap_invalidate_all(pmap); PMAP_UNLOCK(pmap); @@ -2486,21 +2673,20 @@ static boolean_t pmap_testbit(vm_page_t m, int bit) { pv_entry_t pv; + pmap_t pmap; pt_entry_t *pte; boolean_t rv = FALSE; if (m->oflags & VPO_UNMANAGED) return (rv); - if (TAILQ_FIRST(&m->md.pv_list) == NULL) - return (rv); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { - PMAP_LOCK(pv->pv_pmap); - pte = pmap_pte(pv->pv_pmap, pv->pv_va); + pmap = PV_PMAP(pv); + PMAP_LOCK(pmap); + pte = pmap_pte(pmap, pv->pv_va); rv = pte_test(pte, bit); - PMAP_UNLOCK(pv->pv_pmap); + PMAP_UNLOCK(pmap); if (rv) break; } @@ -2514,6 +2700,7 @@ static __inline void pmap_changebit(vm_page_t m, int bit, boolean_t setem) { pv_entry_t pv; + pmap_t pmap; pt_entry_t *pte; if (m->oflags & VPO_UNMANAGED) @@ -2525,11 +2712,12 @@ pmap_changebit(vm_page_t m, int bit, boo * setting RO do we need to clear the VAC? */ TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { - PMAP_LOCK(pv->pv_pmap); - pte = pmap_pte(pv->pv_pmap, pv->pv_va); + pmap = PV_PMAP(pv); + PMAP_LOCK(pmap); + pte = pmap_pte(pmap, pv->pv_va); if (setem) { *pte |= bit; - pmap_update_page(pv->pv_pmap, pv->pv_va, *pte); + pmap_update_page(pmap, pv->pv_va, *pte); } else { pt_entry_t pbits = *pte; @@ -2541,10 +2729,10 @@ pmap_changebit(vm_page_t m, int bit, boo } else { *pte = pbits & ~bit; } - pmap_update_page(pv->pv_pmap, pv->pv_va, *pte); + pmap_update_page(pmap, pv->pv_va, *pte); } } - PMAP_UNLOCK(pv->pv_pmap); + PMAP_UNLOCK(pmap); } if (!setem && bit == PTE_D) vm_page_aflag_clear(m, PGA_WRITEABLE); @@ -2569,7 +2757,7 @@ pmap_page_wired_mappings(vm_page_t m) return (count); vm_page_lock_queues(); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { - pmap = pv->pv_pmap; + pmap = PV_PMAP(pv); PMAP_LOCK(pmap); pte = pmap_pte(pmap, pv->pv_va); if (pte_test(pte, PTE_W)) @@ -2586,9 +2774,9 @@ pmap_page_wired_mappings(vm_page_t m) void pmap_remove_write(vm_page_t m) { - pv_entry_t pv, npv; - vm_offset_t va; - pt_entry_t *pte; + pmap_t pmap; + pt_entry_t pbits, *pte; + pv_entry_t pv; KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_remove_write: page %p is not managed", m)); @@ -2602,20 +2790,25 @@ pmap_remove_write(vm_page_t m) if ((m->oflags & VPO_BUSY) == 0 && (m->aflags & PGA_WRITEABLE) == 0) return; - - /* - * Loop over all current mappings setting/clearing as appropos. - */ vm_page_lock_queues(); - for (pv = TAILQ_FIRST(&m->md.pv_list); pv; pv = npv) { - npv = TAILQ_NEXT(pv, pv_plist); - pte = pmap_pte(pv->pv_pmap, pv->pv_va); - if (pte == NULL || !pte_test(pte, PTE_V)) - panic("page on pm_pvlist has no pte"); - - va = pv->pv_va; - pmap_protect(pv->pv_pmap, va, va + PAGE_SIZE, - VM_PROT_READ | VM_PROT_EXECUTE); + TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { + pmap = PV_PMAP(pv); + PMAP_LOCK(pmap); + pte = pmap_pte(pmap, pv->pv_va); + KASSERT(pte != NULL && pte_test(pte, PTE_V), + ("page on pv_list has no pte")); + pbits = *pte; + if (pte_test(&pbits, PTE_D)) { + pte_clear(&pbits, PTE_D); + vm_page_dirty(m); + m->md.pv_flags &= ~PV_TABLE_MOD; + } + pte_set(&pbits, PTE_RO); + if (pbits != *pte) { + *pte = pbits; + pmap_update_page(pmap, pv->pv_va, pbits); + } + PMAP_UNLOCK(pmap); } vm_page_aflag_clear(m, PGA_WRITEABLE); vm_page_unlock_queues(); From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 17:47:13 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 76B841065676; Mon, 13 Aug 2012 17:47:13 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id 455D18FC17; Mon, 13 Aug 2012 17:47:13 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 9A09AB987; Mon, 13 Aug 2012 13:47:12 -0400 (EDT) From: John Baldwin To: Hans Petter Selasky Date: Mon, 13 Aug 2012 09:49:07 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p17; KDE/4.5.5; amd64; ; ) References: <201208101502.q7AF2ofC046316@svn.freebsd.org> In-Reply-To: <201208101502.q7AF2ofC046316@svn.freebsd.org> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <201208130949.07399.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Mon, 13 Aug 2012 13:47:12 -0400 (EDT) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239178 - in head/sys: kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 17:47:13 -0000 On Friday, August 10, 2012 11:02:50 am Hans Petter Selasky wrote: > Author: hselasky > Date: Fri Aug 10 15:02:49 2012 > New Revision: 239178 > URL: http://svn.freebsd.org/changeset/base/239178 > > Log: > Add new device method to free the automatically > allocated softc structure which is returned by > device_get_softc(). This method can be used to > easily implement softc refcounting. This can be > desirable when the softc has memory references > which are controlled by userspace handles for > example. Why do you need a new method? If you want to manage your own softc, you are free to do so by using a size of 0 in your driver_t. You can then use device_set_softc() to set the softc during your attach routine. New-bus won't free it during detach leaving you to free it instead. That is what you should have done here instead of polluting device_if.m. Note that DF_EXTERNALSOFTC is an internal flag to explicitly handle this case, but you've now made it possible for a device to try to do special free logic but haven't made DF_EXTERNALSOFTC visible to that driver. This is why I think new-bus already let you do what you wanted (via device_set_softc()) and think you should just do that and back this out. -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 17:52:27 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8914D1065672; Mon, 13 Aug 2012 17:52:27 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe04.c2i.net [212.247.154.98]) by mx1.freebsd.org (Postfix) with ESMTP id 6B8EB8FC08; Mon, 13 Aug 2012 17:52:26 +0000 (UTC) X-T2-Spam-Status: No, hits=-1.0 required=5.0 tests=ALL_TRUSTED Received: from [176.74.212.201] (account mc467741@c2i.net HELO laptop015.hselasky.homeunix.org) by mailfe04.swip.net (CommuniGate Pro SMTP 5.4.4) with ESMTPA id 306501857; Mon, 13 Aug 2012 19:52:19 +0200 From: Hans Petter Selasky To: Gavin Atkinson Date: Mon, 13 Aug 2012 19:52:54 +0200 User-Agent: KMail/1.13.7 (FreeBSD/9.1-PRERELEASE; KDE/4.8.4; amd64; ; ) References: <201208121753.q7CHr7VU017178@svn.freebsd.org> <1344877781.20407.59.camel@buffy.york.ac.uk> In-Reply-To: <1344877781.20407.59.camel@buffy.york.ac.uk> X-Face: 'mmZ:T{)),Oru^0c+/}w'`gU1$ubmG?lp!=R4Wy\ELYo2)@'UZ24N@d2+AyewRX}mAm; Yp |U[@, _z/([?1bCfM{_"B<.J>mICJCHAzzGHI{y7{%JVz%R~yJHIji`y>Y}k1C4TfysrsUI -%GU9V5]iUZF&nRn9mJ'?&>O MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Message-Id: <201208131952.54817.hselasky@c2i.net> Cc: "svn-src-head@FreeBSD.org" , "svn-src-all@FreeBSD.org" , "src-committers@FreeBSD.org" Subject: Re: svn commit: r239214 - in head/sys: dev/usb dev/usb/controller sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 17:52:27 -0000 On Monday 13 August 2012 19:09:41 Gavin Atkinson wrote: > On Sun, 2012-08-12 at 17:53 +0000, Hans Petter Selasky wrote: > > Author: hselasky > > Date: Sun Aug 12 17:53:06 2012 > > New Revision: 239214 > > URL: http://svn.freebsd.org/changeset/base/239214 > > > > Log: > > Add support for the so-called streams feature of BULK endpoints > > in SUPER-speed mode, USB 3.0. > > [...] > > > All USB drivers should be re-compiled after this change. > > When this is merged, is there a way to do this without requiring all > drivers to be recompiled? If not, it sounds like this (and indeed > 239179) may not be merge candidates :( > > Gavin Hi, If the USB drivers do not do anything special, like accessing the changed structures, then they should be fine. Please let me know what you think. I don't need to merge this 9-stable, if you think it will break something. --HPS From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 18:00:35 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7B285106564A; Mon, 13 Aug 2012 18:00:35 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4C9F48FC08; Mon, 13 Aug 2012 18:00:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DI0Z7O073425; Mon, 13 Aug 2012 18:00:35 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DI0ZVc073423; Mon, 13 Aug 2012 18:00:35 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208131800.q7DI0ZVc073423@svn.freebsd.org> From: Hans Petter Selasky Date: Mon, 13 Aug 2012 18:00:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239237 - head/sys/dev/usb X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 18:00:35 -0000 Author: hselasky Date: Mon Aug 13 18:00:34 2012 New Revision: 239237 URL: http://svn.freebsd.org/changeset/base/239237 Log: Improve auto-quirks detection for certain Kingston memory sticks. MFC after: 2 weeks Modified: head/sys/dev/usb/usb_msctest.c Modified: head/sys/dev/usb/usb_msctest.c ============================================================================== --- head/sys/dev/usb/usb_msctest.c Mon Aug 13 17:38:38 2012 (r239236) +++ head/sys/dev/usb/usb_msctest.c Mon Aug 13 18:00:34 2012 (r239237) @@ -103,6 +103,8 @@ static uint8_t scsi_sync_cache[] = { 0x3 0x00, 0x00, 0x00, 0x00 }; static uint8_t scsi_request_sense[] = { 0x03, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static uint8_t scsi_read_capacity[] = { 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 }; #define BULK_SIZE 64 /* dummy */ #define ERR_CSW_FAILED -1 @@ -652,7 +654,7 @@ usb_msc_auto_quirk(struct usb_device *ud } is_no_direct = 1; - for (timeout = 4; timeout; timeout--) { + for (timeout = 4; timeout != 0; timeout--) { err = bbb_command_start(sc, DIR_IN, 0, sc->buffer, SCSI_INQ_LEN, &scsi_inquiry, sizeof(scsi_inquiry), USB_MS_HZ); @@ -681,7 +683,9 @@ usb_msc_auto_quirk(struct usb_device *ud if (err != ERR_CSW_FAILED) goto error; } + timeout = 1; +retry_sync_cache: err = bbb_command_start(sc, DIR_IN, 0, NULL, 0, &scsi_sync_cache, sizeof(scsi_sync_cache), USB_MS_HZ); @@ -694,6 +698,42 @@ usb_msc_auto_quirk(struct usb_device *ud DPRINTF("Device doesn't handle synchronize cache\n"); usbd_add_dynamic_quirk(udev, UQ_MSC_NO_SYNC_CACHE); + + } else { + + /* + * Certain Kingston memory sticks fail the first + * read capacity after a synchronize cache command + * has been issued. Disable the synchronize cache + * command for such devices. + */ + + err = bbb_command_start(sc, DIR_IN, 0, sc->buffer, 8, + &scsi_read_capacity, sizeof(scsi_read_capacity), + USB_MS_HZ); + + if (err != 0) { + if (err != ERR_CSW_FAILED) + goto error; + + err = bbb_command_start(sc, DIR_IN, 0, sc->buffer, 8, + &scsi_read_capacity, sizeof(scsi_read_capacity), + USB_MS_HZ); + + if (err == 0) { + if (timeout--) + goto retry_sync_cache; + + DPRINTF("Device most likely doesn't " + "handle synchronize cache\n"); + + usbd_add_dynamic_quirk(udev, + UQ_MSC_NO_SYNC_CACHE); + } else { + if (err != ERR_CSW_FAILED) + goto error; + } + } } /* clear sense status of any failed commands on the device */ From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 18:09:20 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5BCFA1065673; Mon, 13 Aug 2012 18:09:20 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2C39D8FC18; Mon, 13 Aug 2012 18:09:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DI9Kvj074375; Mon, 13 Aug 2012 18:09:20 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DI9JNo074372; Mon, 13 Aug 2012 18:09:19 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208131809.q7DI9JNo074372@svn.freebsd.org> From: Hans Petter Selasky Date: Mon, 13 Aug 2012 18:09:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239238 - head/sys/dev/usb X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 18:09:20 -0000 Author: hselasky Date: Mon Aug 13 18:09:19 2012 New Revision: 239238 URL: http://svn.freebsd.org/changeset/base/239238 Log: Rename new IOCTL to singular form of the noun "streams". MFC after: 2 weeks Modified: head/sys/dev/usb/usb_generic.c head/sys/dev/usb/usb_ioctl.h Modified: head/sys/dev/usb/usb_generic.c ============================================================================== --- head/sys/dev/usb/usb_generic.c Mon Aug 13 18:00:34 2012 (r239237) +++ head/sys/dev/usb/usb_generic.c Mon Aug 13 18:09:19 2012 (r239238) @@ -1393,7 +1393,7 @@ ugen_ioctl(struct usb_fifo *f, u_long cm struct usb_fs_start *pstart; struct usb_fs_stop *pstop; struct usb_fs_open *popen; - struct usb_fs_open_streams *popen_streams; + struct usb_fs_open_stream *popen_stream; struct usb_fs_close *pclose; struct usb_fs_clear_stall_sync *pstall; void *addr; @@ -1458,7 +1458,7 @@ ugen_ioctl(struct usb_fifo *f, u_long cm break; case USB_FS_OPEN: - case USB_FS_OPEN_STREAMS: + case USB_FS_OPEN_STREAM: if (u.popen->ep_index >= f->fs_ep_max) { error = EINVAL; break; @@ -1510,8 +1510,8 @@ ugen_ioctl(struct usb_fifo *f, u_long cm usb_config[0].frames = u.popen->max_frames; usb_config[0].bufsize = u.popen->max_bufsize; usb_config[0].usb_mode = USB_MODE_DUAL; /* both modes */ - if (cmd == USB_FS_OPEN_STREAMS) - usb_config[0].stream_id = u.popen_streams->stream_id; + if (cmd == USB_FS_OPEN_STREAM) + usb_config[0].stream_id = u.popen_stream->stream_id; if (usb_config[0].type == UE_CONTROL) { if (f->udev->flags.usb_mode != USB_MODE_HOST) { Modified: head/sys/dev/usb/usb_ioctl.h ============================================================================== --- head/sys/dev/usb/usb_ioctl.h Mon Aug 13 18:00:34 2012 (r239237) +++ head/sys/dev/usb/usb_ioctl.h Mon Aug 13 18:09:19 2012 (r239238) @@ -206,7 +206,7 @@ struct usb_fs_open { uint8_t ep_no; /* bEndpointNumber */ }; -struct usb_fs_open_streams { +struct usb_fs_open_stream { struct usb_fs_open fs_open; uint16_t stream_id; }; @@ -307,7 +307,7 @@ struct usb_gen_quirk { #define USB_FS_OPEN _IOWR('U', 197, struct usb_fs_open) #define USB_FS_CLOSE _IOW ('U', 198, struct usb_fs_close) #define USB_FS_CLEAR_STALL_SYNC _IOW ('U', 199, struct usb_fs_clear_stall_sync) -#define USB_FS_OPEN_STREAMS _IOWR('U', 200, struct usb_fs_open_streams) +#define USB_FS_OPEN_STREAM _IOWR('U', 200, struct usb_fs_open_stream) /* USB quirk system interface */ #define USB_DEV_QUIRK_GET _IOWR('Q', 0, struct usb_gen_quirk) From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 18:10:53 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AEF05106566C; Mon, 13 Aug 2012 18:10:53 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9957E8FC12; Mon, 13 Aug 2012 18:10:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DIAr8e074563; Mon, 13 Aug 2012 18:10:53 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DIArL3074556; Mon, 13 Aug 2012 18:10:53 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208131810.q7DIArL3074556@svn.freebsd.org> From: Hans Petter Selasky Date: Mon, 13 Aug 2012 18:10:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239239 - head/lib/libusb X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 18:10:53 -0000 Author: hselasky Date: Mon Aug 13 18:10:52 2012 New Revision: 239239 URL: http://svn.freebsd.org/changeset/base/239239 Log: Add support for streams to LibUSB v2.0. MFC after: 2 weeks Modified: head/lib/libusb/libusb20.3 head/lib/libusb/libusb20.c head/lib/libusb/libusb20.h head/lib/libusb/libusb20_int.h head/lib/libusb/libusb20_ugen20.c Modified: head/lib/libusb/libusb20.3 ============================================================================== --- head/lib/libusb/libusb20.3 Mon Aug 13 18:09:19 2012 (r239238) +++ head/lib/libusb/libusb20.3 Mon Aug 13 18:10:52 2012 (r239239) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 14, 2010 +.Dd August 13, 2012 .Dt LIBUSB20 3 .Os .Sh NAME @@ -48,6 +48,7 @@ USB access library (libusb -lusb) .Fn libusb20_tr_close "struct libusb20_transfer *xfer" .Ft int .Fn libusb20_tr_open "struct libusb20_transfer *xfer" "uint32_t max_buf_size" "uint32_t max_frame_count" "uint8_t ep_no" +.Fn libusb20_tr_open_stream "struct libusb20_transfer *xfer" "uint32_t max_buf_size" "uint32_t max_frame_count" "uint8_t ep_no" "uint16_t stream_id" .Ft struct libusb20_transfer* .Fn libusb20_tr_get_pointer "struct libusb20_device *pdev" "uint16_t tr_index" .Ft uint16_t @@ -284,6 +285,16 @@ Non-zero return values indicate a LIBUSB . .Pp . +.Fn libusb20_tr_open_stream +is identical to +.Fn libusb20_tr_open +except that a stream ID can be specified for BULK endpoints having +such a feature. +.Fn libusb20_tr_open +can be used to open stream ID zero. +. +.Pp +. .Fn libusb20_tr_get_pointer will return a pointer to the allocated USB transfer according to the .Fa pdev Modified: head/lib/libusb/libusb20.c ============================================================================== --- head/lib/libusb/libusb20.c Mon Aug 13 18:09:19 2012 (r239238) +++ head/lib/libusb/libusb20.c Mon Aug 13 18:10:52 2012 (r239239) @@ -155,6 +155,13 @@ int libusb20_tr_open(struct libusb20_transfer *xfer, uint32_t MaxBufSize, uint32_t MaxFrameCount, uint8_t ep_no) { + return (libusb20_tr_open_stream(xfer, MaxBufSize, MaxFrameCount, ep_no, 0)); +} + +int +libusb20_tr_open_stream(struct libusb20_transfer *xfer, uint32_t MaxBufSize, + uint32_t MaxFrameCount, uint8_t ep_no, uint16_t stream_id) +{ uint32_t size; uint8_t pre_scale; int error; @@ -188,7 +195,7 @@ libusb20_tr_open(struct libusb20_transfe memset(xfer->ppBuffer, 0, size); error = xfer->pdev->methods->tr_open(xfer, MaxBufSize, - MaxFrameCount, ep_no, pre_scale); + MaxFrameCount, ep_no, stream_id, pre_scale); if (error) { free(xfer->ppBuffer); Modified: head/lib/libusb/libusb20.h ============================================================================== --- head/lib/libusb/libusb20.h Mon Aug 13 18:09:19 2012 (r239238) +++ head/lib/libusb/libusb20.h Mon Aug 13 18:10:52 2012 (r239239) @@ -202,6 +202,7 @@ struct libusb20_quirk { /* USB transfer operations */ int libusb20_tr_close(struct libusb20_transfer *xfer); int libusb20_tr_open(struct libusb20_transfer *xfer, uint32_t max_buf_size, uint32_t max_frame_count, uint8_t ep_no); +int libusb20_tr_open_stream(struct libusb20_transfer *xfer, uint32_t max_buf_size, uint32_t max_frame_count, uint8_t ep_no, uint16_t stream_id); struct libusb20_transfer *libusb20_tr_get_pointer(struct libusb20_device *pdev, uint16_t tr_index); uint16_t libusb20_tr_get_time_complete(struct libusb20_transfer *xfer); uint32_t libusb20_tr_get_actual_frames(struct libusb20_transfer *xfer); Modified: head/lib/libusb/libusb20_int.h ============================================================================== --- head/lib/libusb/libusb20_int.h Mon Aug 13 18:09:19 2012 (r239238) +++ head/lib/libusb/libusb20_int.h Mon Aug 13 18:10:52 2012 (r239239) @@ -110,7 +110,7 @@ typedef int (libusb20_set_config_index_t typedef int (libusb20_check_connected_t)(struct libusb20_device *pdev); /* USB transfer specific */ -typedef int (libusb20_tr_open_t)(struct libusb20_transfer *xfer, uint32_t MaxBufSize, uint32_t MaxFrameCount, uint8_t ep_no, uint8_t pre_scale); +typedef int (libusb20_tr_open_t)(struct libusb20_transfer *xfer, uint32_t MaxBufSize, uint32_t MaxFrameCount, uint8_t ep_no, uint16_t stream_id, uint8_t pre_scale); typedef int (libusb20_tr_close_t)(struct libusb20_transfer *xfer); typedef int (libusb20_tr_clear_stall_sync_t)(struct libusb20_transfer *xfer); typedef void (libusb20_tr_submit_t)(struct libusb20_transfer *xfer); Modified: head/lib/libusb/libusb20_ugen20.c ============================================================================== --- head/lib/libusb/libusb20_ugen20.c Mon Aug 13 18:09:19 2012 (r239238) +++ head/lib/libusb/libusb20_ugen20.c Mon Aug 13 18:10:52 2012 (r239239) @@ -741,9 +741,13 @@ ugen20_process(struct libusb20_device *p static int ugen20_tr_open(struct libusb20_transfer *xfer, uint32_t MaxBufSize, - uint32_t MaxFrameCount, uint8_t ep_no, uint8_t pre_scale) + uint32_t MaxFrameCount, uint8_t ep_no, uint16_t stream_id, + uint8_t pre_scale) { - struct usb_fs_open temp; + union { + struct usb_fs_open fs_open; + struct usb_fs_open_stream fs_open_stream; + } temp; struct usb_fs_endpoint *fsep; if (pre_scale) @@ -754,20 +758,26 @@ ugen20_tr_open(struct libusb20_transfer fsep = xfer->pdev->privBeData; fsep += xfer->trIndex; - temp.max_bufsize = MaxBufSize; - temp.max_frames = MaxFrameCount; - temp.ep_index = xfer->trIndex; - temp.ep_no = ep_no; + temp.fs_open.max_bufsize = MaxBufSize; + temp.fs_open.max_frames = MaxFrameCount; + temp.fs_open.ep_index = xfer->trIndex; + temp.fs_open.ep_no = ep_no; - if (ioctl(xfer->pdev->file, USB_FS_OPEN, &temp)) { - return (LIBUSB20_ERROR_INVALID_PARAM); + if (stream_id != 0) { + temp.fs_open_stream.stream_id = stream_id; + + if (ioctl(xfer->pdev->file, USB_FS_OPEN_STREAM, &temp.fs_open_stream)) + return (LIBUSB20_ERROR_INVALID_PARAM); + } else { + if (ioctl(xfer->pdev->file, USB_FS_OPEN, &temp.fs_open)) + return (LIBUSB20_ERROR_INVALID_PARAM); } /* maximums might have changed - update */ - xfer->maxFrames = temp.max_frames; + xfer->maxFrames = temp.fs_open.max_frames; /* "max_bufsize" should be multiple of "max_packet_length" */ - xfer->maxTotalLength = temp.max_bufsize; - xfer->maxPacketLen = temp.max_packet_length; + xfer->maxTotalLength = temp.fs_open.max_bufsize; + xfer->maxPacketLen = temp.fs_open.max_packet_length; /* setup buffer and length lists using zero copy */ fsep->ppBuffer = libusb20_pass_ptr(xfer->ppBuffer); From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 18:34:04 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D1EF8106564A; Mon, 13 Aug 2012 18:34:04 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BD0D38FC08; Mon, 13 Aug 2012 18:34:04 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DIY4gO077063; Mon, 13 Aug 2012 18:34:04 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DIY4MX077061; Mon, 13 Aug 2012 18:34:04 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208131834.q7DIY4MX077061@svn.freebsd.org> From: Hans Petter Selasky Date: Mon, 13 Aug 2012 18:34:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239240 - head/sys/dev/usb X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 18:34:04 -0000 Author: hselasky Date: Mon Aug 13 18:34:04 2012 New Revision: 239240 URL: http://svn.freebsd.org/changeset/base/239240 Log: Fix for missing locks due to recent change. PR: usb/170606 MFC after: 2 weeks Modified: head/sys/dev/usb/usb_device.c Modified: head/sys/dev/usb/usb_device.c ============================================================================== --- head/sys/dev/usb/usb_device.c Mon Aug 13 18:10:52 2012 (r239239) +++ head/sys/dev/usb/usb_device.c Mon Aug 13 18:34:04 2012 (r239240) @@ -2777,8 +2777,15 @@ usbd_set_endpoint_mode(struct usb_device uint8_t ep_mode) { usb_error_t error; + uint8_t do_unlock; - sx_assert(&udev->enum_sx, SA_LOCKED); + /* automatic locking */ + if (usbd_enum_is_locked(udev)) { + do_unlock = 0; + } else { + do_unlock = 1; + usbd_enum_lock(udev); + } if (udev->bus->methods->set_endpoint_mode != NULL) { error = (udev->bus->methods->set_endpoint_mode) ( @@ -2792,6 +2799,9 @@ usbd_set_endpoint_mode(struct usb_device /* only set new mode regardless of error */ ep->ep_mode = ep_mode; + if (do_unlock) + usbd_enum_unlock(udev); + return (error); } From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 18:52:52 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5E8F0106564A; Mon, 13 Aug 2012 18:52:52 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 48A558FC0C; Mon, 13 Aug 2012 18:52:52 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DIqqGP079040; Mon, 13 Aug 2012 18:52:52 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DIqqZW079037; Mon, 13 Aug 2012 18:52:52 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208131852.q7DIqqZW079037@svn.freebsd.org> From: John Baldwin Date: Mon, 13 Aug 2012 18:52:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239241 - in head/sys: amd64/amd64 i386/i386 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 18:52:52 -0000 Author: jhb Date: Mon Aug 13 18:52:51 2012 New Revision: 239241 URL: http://svn.freebsd.org/changeset/base/239241 Log: Remove the deassert INIT IPI from the IPI startup sequence for APs. It is not listed in the boot sequence in the MP specification (1.4), and it is explicitly ignored on modern CPUs. It was only ever required when bootstrapping systems with external APICs (that is, SMP machines with 486s), which FreeBSD has never supported (and never will). While here, tidy some comments and remove some banal ones. Modified: head/sys/amd64/amd64/mp_machdep.c head/sys/i386/i386/mp_machdep.c Modified: head/sys/amd64/amd64/mp_machdep.c ============================================================================== --- head/sys/amd64/amd64/mp_machdep.c Mon Aug 13 18:34:04 2012 (r239240) +++ head/sys/amd64/amd64/mp_machdep.c Mon Aug 13 18:52:51 2012 (r239241) @@ -1036,25 +1036,13 @@ ipi_startup(int apic_id, int vector) { /* - * first we do an INIT/RESET IPI this INIT IPI might be run, reseting + * first we do an INIT IPI: this INIT IPI might be run, resetting * and running the target CPU. OR this INIT IPI might be latched (P5 * bug), CPU waiting for STARTUP IPI. OR this INIT IPI might be * ignored. */ - - /* do an INIT IPI: assert RESET */ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | APIC_LEVEL_ASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, apic_id); - - /* wait for pending status end */ - lapic_ipi_wait(-1); - DELAY(10000); /* wait ~10mS */ - - /* do an INIT IPI: deassert RESET */ - lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL | - APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0); - - /* wait for pending status end */ lapic_ipi_wait(-1); DELAY(10000); /* wait ~10mS */ @@ -1066,8 +1054,6 @@ ipi_startup(int apic_id, int vector) * run. OR the previous INIT IPI was ignored. and this STARTUP IPI * will run. */ - - /* do a STARTUP IPI */ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP | vector, apic_id); @@ -1080,7 +1066,6 @@ ipi_startup(int apic_id, int vector) * this STARTUP IPI will be ignored, as only ONE STARTUP IPI is * recognized after hardware RESET or INIT IPI. */ - lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP | vector, apic_id); Modified: head/sys/i386/i386/mp_machdep.c ============================================================================== --- head/sys/i386/i386/mp_machdep.c Mon Aug 13 18:34:04 2012 (r239240) +++ head/sys/i386/i386/mp_machdep.c Mon Aug 13 18:52:51 2012 (r239241) @@ -1136,25 +1136,13 @@ ipi_startup(int apic_id, int vector) { /* - * first we do an INIT/RESET IPI this INIT IPI might be run, reseting + * first we do an INIT IPI: this INIT IPI might be run, resetting * and running the target CPU. OR this INIT IPI might be latched (P5 * bug), CPU waiting for STARTUP IPI. OR this INIT IPI might be * ignored. */ - - /* do an INIT IPI: assert RESET */ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | APIC_LEVEL_ASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, apic_id); - - /* wait for pending status end */ - lapic_ipi_wait(-1); - DELAY(10000); /* wait ~10mS */ - - /* do an INIT IPI: deassert RESET */ - lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL | - APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0); - - /* wait for pending status end */ lapic_ipi_wait(-1); DELAY(10000); /* wait ~10mS */ @@ -1166,8 +1154,6 @@ ipi_startup(int apic_id, int vector) * run. OR the previous INIT IPI was ignored. and this STARTUP IPI * will run. */ - - /* do a STARTUP IPI */ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP | vector, apic_id); @@ -1180,7 +1166,6 @@ ipi_startup(int apic_id, int vector) * this STARTUP IPI will be ignored, as only ONE STARTUP IPI is * recognized after hardware RESET or INIT IPI. */ - lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE | APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP | vector, apic_id); From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 19:14:46 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3E6DF106564A; Mon, 13 Aug 2012 19:14:46 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 293BA8FC08; Mon, 13 Aug 2012 19:14:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DJEkjf081505; Mon, 13 Aug 2012 19:14:46 GMT (envelope-from emaste@svn.freebsd.org) Received: (from emaste@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DJEjIT081503; Mon, 13 Aug 2012 19:14:45 GMT (envelope-from emaste@svn.freebsd.org) Message-Id: <201208131914.q7DJEjIT081503@svn.freebsd.org> From: Ed Maste Date: Mon, 13 Aug 2012 19:14:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239242 - head/sys/dev/netmap X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 19:14:46 -0000 Author: emaste Date: Mon Aug 13 19:14:45 2012 New Revision: 239242 URL: http://svn.freebsd.org/changeset/base/239242 Log: Reword comment to try to improve clarity, and fix a typo. Modified: head/sys/dev/netmap/ixgbe_netmap.h Modified: head/sys/dev/netmap/ixgbe_netmap.h ============================================================================== --- head/sys/dev/netmap/ixgbe_netmap.h Mon Aug 13 18:52:51 2012 (r239241) +++ head/sys/dev/netmap/ixgbe_netmap.h Mon Aug 13 19:14:45 2012 (r239242) @@ -198,14 +198,17 @@ fail: * Reconcile kernel and user view of the transmit ring. * This routine might be called frequently so it must be efficient. * - * Userspace has filled tx slots up to ring->cur (excluded). - * The last unused slot previously known to the kernel was kring->nkr_hwcur, - * and the last interrupt reported kring->nr_hwavail slots available. + * ring->cur holds the userspace view of the current ring index. Userspace + * has filled the tx slots from the previous call's ring->cur up to but not + * including ring->cur for this call. In this function the kernel updates + * kring->nr_hwcur to ring->cur, thus slots [kring->nr_hwcur, ring->cur) are + * now ready to transmit. At the last interrupt kring->nr_hwavail slots were + * available. * * This function runs under lock (acquired from the caller or internally). * It must first update ring->avail to what the kernel knows, - * subtract the newly used slots (ring->cur - kring->nkr_hwcur) - * from both avail and nr_hwavail, and set ring->nkr_hwcur = ring->cur + * subtract the newly used slots (ring->cur - kring->nr_hwcur) + * from both avail and nr_hwavail, and set ring->nr_hwcur = ring->cur * issuing a dmamap_sync on all slots. * * Since ring comes from userspace, its content must be read only once, From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 19:43:09 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D8FB01065673; Mon, 13 Aug 2012 19:43:09 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe04.c2i.net [212.247.154.98]) by mx1.freebsd.org (Postfix) with ESMTP id C697A8FC14; Mon, 13 Aug 2012 19:43:08 +0000 (UTC) X-T2-Spam-Status: No, hits=-1.0 required=5.0 tests=ALL_TRUSTED Received: from [176.74.212.201] (account mc467741@c2i.net HELO laptop015.hselasky.homeunix.org) by mailfe04.swip.net (CommuniGate Pro SMTP 5.4.4) with ESMTPA id 306525598; Mon, 13 Aug 2012 21:43:07 +0200 From: Hans Petter Selasky To: John Baldwin Date: Mon, 13 Aug 2012 21:43:42 +0200 User-Agent: KMail/1.13.7 (FreeBSD/9.1-PRERELEASE; KDE/4.8.4; amd64; ; ) References: <201208101502.q7AF2ofC046316@svn.freebsd.org> <201208130949.07399.jhb@freebsd.org> In-Reply-To: <201208130949.07399.jhb@freebsd.org> X-Face: 'mmZ:T{)),Oru^0c+/}w'`gU1$ubmG?lp!=R4Wy\ELYo2)@'UZ24N@ =?windows-1252?q?d2+AyewRX=7DmAm=3BYp=0A=09=7CU=5B?=@, _z/([?1bCfM{_"B<.J>mICJCHAzzGHI{y7{%JVz%R~yJHIji`y> =?windows-1252?q?Y=7Dk1C4TfysrsUI=0A=09-=25GU9V5=5DiUZF=26nRn9mJ=27=3F=26?=>O MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Message-Id: <201208132143.42298.hselasky@c2i.net> Cc: "svn-src-head@freebsd.org" , "svn-src-all@freebsd.org" , "src-committers@freebsd.org" Subject: Re: svn commit: r239178 - in head/sys: kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 19:43:10 -0000 On Monday 13 August 2012 15:49:07 John Baldwin wrote: > On Friday, August 10, 2012 11:02:50 am Hans Petter Selasky wrote: > > Author: hselasky > > Date: Fri Aug 10 15:02:49 2012 > > New Revision: 239178 > > URL: http://svn.freebsd.org/changeset/base/239178 > > > > Log: > > Add new device method to free the automatically > > allocated softc structure which is returned by > > device_get_softc(). This method can be used to > > easily implement softc refcounting. This can be > > desirable when the softc has memory references > > which are controlled by userspace handles for > > example. > > Why do you need a new method? If you want to manage your own softc, you > are free to do so by using a size of 0 in your driver_t. You can then use > device_set_softc() to set the softc during your attach routine. New-bus > won't free it during detach leaving you to free it instead. That is what > you should have done here instead of polluting device_if.m. Note that > DF_EXTERNALSOFTC is an internal flag to explicitly handle this case, but > you've now made it possible for a device to try to do special free logic > but haven't made DF_EXTERNALSOFTC visible to that driver. This is why I > think new-bus already let you do what you wanted (via device_set_softc()) > and think you should just do that and back this out. Hi, I know that drivers can manage their own softc's, only that it will add 5-10 more lines of code and error handling to each UCOM client driver, instead of using the .size field which factors all of this out of the driver. If you think this is really a bad idea, then I can revert. It will take some time to revert, because I need to patch a solution into all the USB UCOM clients. --HPS From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 19:46:54 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 15DE4106564A; Mon, 13 Aug 2012 19:46:54 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe02.c2i.net [212.247.154.34]) by mx1.freebsd.org (Postfix) with ESMTP id E4C618FC08; Mon, 13 Aug 2012 19:46:51 +0000 (UTC) X-T2-Spam-Status: No, hits=-0.2 required=5.0 tests=ALL_TRUSTED, BAYES_50 Received: from [176.74.212.201] (account mc467741@c2i.net HELO laptop015.hselasky.homeunix.org) by mailfe02.swip.net (CommuniGate Pro SMTP 5.4.4) with ESMTPA id 308238900; Mon, 13 Aug 2012 21:46:49 +0200 From: Hans Petter Selasky To: John Baldwin Date: Mon, 13 Aug 2012 21:47:24 +0200 User-Agent: KMail/1.13.7 (FreeBSD/9.1-PRERELEASE; KDE/4.8.4; amd64; ; ) References: <201208101502.q7AF2ofC046316@svn.freebsd.org> <201208130949.07399.jhb@freebsd.org> In-Reply-To: <201208130949.07399.jhb@freebsd.org> X-Face: 'mmZ:T{)),Oru^0c+/}w'`gU1$ubmG?lp!=R4Wy\ELYo2)@'UZ24N@d2+AyewRX}mAm; Yp |U[@, _z/([?1bCfM{_"B<.J>mICJCHAzzGHI{y7{%JVz%R~yJHIji`y>Y}k1C4TfysrsUI -%GU9V5]iUZF&nRn9mJ'?&>O MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Message-Id: <201208132147.24769.hselasky@c2i.net> Cc: "svn-src-head@freebsd.org" , "svn-src-all@freebsd.org" , "src-committers@freebsd.org" Subject: Re: svn commit: r239178 - in head/sys: kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 19:46:54 -0000 On Monday 13 August 2012 15:49:07 John Baldwin wrote: > On Friday, August 10, 2012 11:02:50 am Hans Petter Selasky wrote: > > Author: hselasky > > Date: Fri Aug 10 15:02:49 2012 > > New Revision: 239178 > > URL: http://svn.freebsd.org/changeset/base/239178 > > > > Log: > > Add new device method to free the automatically > > allocated softc structure which is returned by > > device_get_softc(). This method can be used to > > easily implement softc refcounting. This can be > > desirable when the softc has memory references > > which are controlled by userspace handles for > > example. > > Why do you need a new method? If you want to manage your own softc, you > are free to do so by using a size of 0 in your driver_t. You can then use > device_set_softc() to set the softc during your attach routine. New-bus > won't free it during detach leaving you to free it instead. That is what > you should have done here instead of polluting device_if.m. Note that > DF_EXTERNALSOFTC is an internal flag to explicitly handle this case, but > you've now made it possible for a device to try to do special free logic > but haven't made DF_EXTERNALSOFTC visible to that driver. This is why I > think new-bus already let you do what you wanted (via device_set_softc()) > and think you should just do that and back this out. Hi, I don't need to pollute device_if.m. Would device_steal_softc() be OK, to say that we want newbus to allocate the softc, but not free it? Thanks for your comments. --HPS From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 21:01:07 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6FD9A1065678; Mon, 13 Aug 2012 21:01:07 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id 3FC5C8FC15; Mon, 13 Aug 2012 21:01:07 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id C7579B94B; Mon, 13 Aug 2012 17:01:05 -0400 (EDT) From: John Baldwin To: Hans Petter Selasky Date: Mon, 13 Aug 2012 17:00:25 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p17; KDE/4.5.5; amd64; ; ) References: <201208101502.q7AF2ofC046316@svn.freebsd.org> <201208130949.07399.jhb@freebsd.org> <201208132143.42298.hselasky@c2i.net> In-Reply-To: <201208132143.42298.hselasky@c2i.net> MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Message-Id: <201208131700.25822.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Mon, 13 Aug 2012 17:01:05 -0400 (EDT) Cc: "svn-src-head@freebsd.org" , "svn-src-all@freebsd.org" , "src-committers@freebsd.org" Subject: Re: svn commit: r239178 - in head/sys: kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 21:01:07 -0000 On Monday, August 13, 2012 3:43:42 pm Hans Petter Selasky wrote: > On Monday 13 August 2012 15:49:07 John Baldwin wrote: > > On Friday, August 10, 2012 11:02:50 am Hans Petter Selasky wrote: > > > Author: hselasky > > > Date: Fri Aug 10 15:02:49 2012 > > > New Revision: 239178 > > > URL: http://svn.freebsd.org/changeset/base/239178 > > > > > > Log: > > > Add new device method to free the automatically > > > allocated softc structure which is returned by > > > device_get_softc(). This method can be used to > > > easily implement softc refcounting. This can be > > > desirable when the softc has memory references > > > which are controlled by userspace handles for > > > example. > > > > Why do you need a new method? If you want to manage your own softc, you > > are free to do so by using a size of 0 in your driver_t. You can then use > > device_set_softc() to set the softc during your attach routine. New-bus > > won't free it during detach leaving you to free it instead. That is what > > you should have done here instead of polluting device_if.m. Note that > > DF_EXTERNALSOFTC is an internal flag to explicitly handle this case, but > > you've now made it possible for a device to try to do special free logic > > but haven't made DF_EXTERNALSOFTC visible to that driver. This is why I > > think new-bus already let you do what you wanted (via device_set_softc()) > > and think you should just do that and back this out. > > Hi, > > I know that drivers can manage their own softc's, only that it will add 5-10 > more lines of code and error handling to each UCOM client driver, instead of > using the .size field which factors all of this out of the driver. I don't think you need 5-10 lines, more like 1 or 2. This: struct driver_t { ... sizeof(struct foo_softc) }; int foo_attach(device_t dev) { struct foo_softc *sc; sc = device_get_softc(dev); ... } becomes: struct driver_t { ... 0 }; int foo_attach(device_t dev) { struct foo_softc *sc; sc = malloc(sizeof(struct foo_softc), M_BUS, M_WAITOK | M_ZERO); device_set_softc(dev, sc); ... } -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 21:04:02 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6727B106566B; Mon, 13 Aug 2012 21:04:02 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5210D8FC0C; Mon, 13 Aug 2012 21:04:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DL42X8093685; Mon, 13 Aug 2012 21:04:02 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DL42dl093683; Mon, 13 Aug 2012 21:04:02 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201208132104.q7DL42dl093683@svn.freebsd.org> From: Dimitry Andric Date: Mon, 13 Aug 2012 21:04:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239243 - head/sys/boot/i386/libi386 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 21:04:02 -0000 Author: dim Date: Mon Aug 13 21:04:01 2012 New Revision: 239243 URL: http://svn.freebsd.org/changeset/base/239243 Log: After r239066, reinitialize v86.ctl and v86.addr for int 13 EDD probing in sys/boot/i386/libi386/biosdisk.c. Otherwise, when DISK_DEBUG is enabled, the DEBUG() macros will clobber those fields, and cause the probing to always fail mysteriously when debugging is enabled. Modified: head/sys/boot/i386/libi386/biosdisk.c Modified: head/sys/boot/i386/libi386/biosdisk.c ============================================================================== --- head/sys/boot/i386/libi386/biosdisk.c Mon Aug 13 19:14:45 2012 (r239242) +++ head/sys/boot/i386/libi386/biosdisk.c Mon Aug 13 21:04:01 2012 (r239243) @@ -215,6 +215,8 @@ bd_int13probe(struct bdinfo *bd) bd->bd_hds, bd->bd_sec); /* Determine if we can use EDD with this device. */ + v86.ctl = V86_FLAGS; + v86.addr = 0x13; v86.eax = 0x4100; v86.edx = bd->bd_unit; v86.ebx = 0x55aa; From owner-svn-src-all@FreeBSD.ORG Mon Aug 13 21:29:35 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3AC3A1065674; Mon, 13 Aug 2012 21:29:35 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 24EA18FC14; Mon, 13 Aug 2012 21:29:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7DLTZbL096459; Mon, 13 Aug 2012 21:29:35 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7DLTYw8096454; Mon, 13 Aug 2012 21:29:34 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208132129.q7DLTYw8096454@svn.freebsd.org> From: John Baldwin Date: Mon, 13 Aug 2012 21:29:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239244 - head/sys/dev/twe X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2012 21:29:35 -0000 Author: jhb Date: Mon Aug 13 21:29:34 2012 New Revision: 239244 URL: http://svn.freebsd.org/changeset/base/239244 Log: Add locking to the twe(4) driver and make it MPSAFE: - Add per-controller configuration (sx) and I/O (mutex) locks. The configuration lock protects the relationship of volumes and drives while the I/O lock protects access to the controller's registers and the main I/O path. - Remove some checks for M_WAITOK malloc()'s failing. - Remove the explicit bus space tag/handle from the softc and use bus_*() rather than bus_space_*(). - Reuse the existing new-bus sysctl context instead of creating a new one. - Remove compat shims for FreeBSD 4.x. - Use pci_enable_busmaster() rather than doing it by hand, and rely on bus_alloc_resource() to enable PCI I/O decoding. Tested by: Mike Tancsa mike sentex net Reviewed by: scottl (partially) MFC after: 1 month Modified: head/sys/dev/twe/twe.c head/sys/dev/twe/twe_compat.h head/sys/dev/twe/twe_freebsd.c head/sys/dev/twe/twevar.h Modified: head/sys/dev/twe/twe.c ============================================================================== --- head/sys/dev/twe/twe.c Mon Aug 13 21:04:01 2012 (r239243) +++ head/sys/dev/twe/twe.c Mon Aug 13 21:29:34 2012 (r239244) @@ -151,8 +151,11 @@ twe_setup(struct twe_softc *sc) /* * Put command onto the freelist. */ + TWE_IO_LOCK(sc); twe_release_request(tr); + TWE_IO_UNLOCK(sc); } + TWE_IO_LOCK(sc); /* * Check status register for errors, clear them. @@ -164,6 +167,7 @@ twe_setup(struct twe_softc *sc) * Wait for the controller to come ready. */ if (twe_wait_status(sc, TWE_STATUS_MICROCONTROLLER_READY, 60)) { + TWE_IO_UNLOCK(sc); twe_printf(sc, "microcontroller not ready\n"); return(ENXIO); } @@ -185,6 +189,7 @@ twe_setup(struct twe_softc *sc) if (!twe_soft_reset(sc)) break; /* reset process complete */ } + TWE_IO_UNLOCK(sc); /* did we give up? */ if (i >= TWE_MAX_RESET_TRIES) { twe_printf(sc, "can't initialise controller, giving up\n"); @@ -203,14 +208,17 @@ twe_add_unit(struct twe_softc *sc, int u TWE_Param *drives = NULL, *param = NULL; TWE_Array_Descriptor *ud; + TWE_CONFIG_ASSERT_LOCKED(sc); if (unit < 0 || unit > TWE_MAX_UNITS) return (EINVAL); /* * The controller is in a safe state, so try to find drives attached to it. */ + TWE_IO_LOCK(sc); if ((drives = twe_get_param(sc, TWE_PARAM_UNITSUMMARY, TWE_PARAM_UNITSUMMARY_Status, TWE_MAX_UNITS, NULL)) == NULL) { + TWE_IO_UNLOCK(sc); twe_printf(sc, "can't detect attached units\n"); return (EIO); } @@ -218,6 +226,7 @@ twe_add_unit(struct twe_softc *sc, int u dr = &sc->twe_drive[unit]; /* check that the drive is online */ if (!(drives->data[unit] & TWE_PARAM_UNITSTATUS_Online)) { + TWE_IO_UNLOCK(sc); error = ENXIO; goto out; } @@ -225,21 +234,25 @@ twe_add_unit(struct twe_softc *sc, int u table = TWE_PARAM_UNITINFO + unit; if (twe_get_param_4(sc, table, TWE_PARAM_UNITINFO_Capacity, &dr->td_size)) { + TWE_IO_UNLOCK(sc); twe_printf(sc, "error fetching capacity for unit %d\n", unit); error = EIO; goto out; } if (twe_get_param_1(sc, table, TWE_PARAM_UNITINFO_Status, &dr->td_state)) { + TWE_IO_UNLOCK(sc); twe_printf(sc, "error fetching state for unit %d\n", unit); error = EIO; goto out; } if (twe_get_param_2(sc, table, TWE_PARAM_UNITINFO_DescriptorSize, &dsize)) { + TWE_IO_UNLOCK(sc); twe_printf(sc, "error fetching descriptor size for unit %d\n", unit); error = EIO; goto out; } if ((param = twe_get_param(sc, table, TWE_PARAM_UNITINFO_Descriptor, dsize - 3, NULL)) == NULL) { + TWE_IO_UNLOCK(sc); twe_printf(sc, "error fetching descriptor for unit %d\n", unit); error = EIO; goto out; @@ -258,6 +271,7 @@ twe_add_unit(struct twe_softc *sc, int u } dr->td_cylinders = dr->td_size / (dr->td_heads * dr->td_sectors); dr->td_twe_unit = unit; + TWE_IO_UNLOCK(sc); error = twe_attach_drive(sc, dr); @@ -274,6 +288,7 @@ twe_del_unit(struct twe_softc *sc, int u { int error; + TWE_CONFIG_ASSERT_LOCKED(sc); if (unit < 0 || unit >= TWE_MAX_UNITS) return (ENXIO); @@ -295,12 +310,15 @@ twe_init(struct twe_softc *sc) /* * Scan for drives */ + TWE_CONFIG_LOCK(sc); for (i = 0; i < TWE_MAX_UNITS; i++) twe_add_unit(sc, i); + TWE_CONFIG_UNLOCK(sc); /* * Initialise connection with controller. */ + TWE_IO_LOCK(sc); twe_init_connection(sc, TWE_INIT_MESSAGE_CREDITS); #ifdef TWE_SHUTDOWN_NOTIFICATION @@ -319,6 +337,7 @@ twe_init(struct twe_softc *sc) * Finally enable interrupts. */ twe_enable_interrupts(sc); + TWE_IO_UNLOCK(sc); } /******************************************************************************** @@ -330,6 +349,7 @@ twe_deinit(struct twe_softc *sc) /* * Mark the controller as shutting down, and disable any further interrupts. */ + TWE_IO_ASSERT_LOCKED(sc); sc->twe_state |= TWE_STATE_SHUTDOWN; twe_disable_interrupts(sc); @@ -385,6 +405,7 @@ twe_startio(struct twe_softc *sc) debug_called(4); + TWE_IO_ASSERT_LOCKED(sc); if (sc->twe_state & (TWE_STATE_CTLR_BUSY | TWE_STATE_FRZN)) return; @@ -500,15 +521,32 @@ twe_ioctl(struct twe_softc *sc, u_long i u_int16_t *aen_code = (u_int16_t *)addr; struct twe_request *tr; u_int8_t srid; - int s, error; + int error; + size_t tr_length; error = 0; switch(ioctlcmd) { /* handle a command from userspace */ case TWEIO_COMMAND: + /* + * if there's a data buffer, allocate and copy it in. + * Must be in multipled of 512 bytes. + */ + tr_length = roundup2(tu->tu_size, 512); + if (tr_length > 0) { + data = malloc(tr_length, M_DEVBUF, M_WAITOK); + error = copyin(tu->tu_data, data, tu->tu_size); + if (error) { + free(data, M_DEVBUF); + break; + } + } else + data = NULL; + /* get a request */ + TWE_IO_LOCK(sc); while (twe_get_request(sc, &tr)) - tsleep(sc, PPAUSE, "twioctl", hz); + mtx_sleep(sc, &sc->twe_io_lock, PPAUSE, "twioctl", hz); /* * Save the command's request ID, copy the user-supplied command in, @@ -519,23 +557,15 @@ twe_ioctl(struct twe_softc *sc, u_long i bcopy(&tu->tu_command, cmd, sizeof(TWE_Command)); cmd->generic.request_id = srid; - /* - * if there's a data buffer, allocate and copy it in. - * Must be in multipled of 512 bytes. - */ - tr->tr_length = (tu->tu_size + 511) & ~511; + tr->tr_length = tr_length; + tr->tr_data = data; if (tr->tr_length > 0) { - if ((tr->tr_data = malloc(tr->tr_length, M_DEVBUF, M_WAITOK)) == NULL) { - error = ENOMEM; - goto cmd_done; - } - if ((error = copyin(tu->tu_data, tr->tr_data, tu->tu_size)) != 0) - goto cmd_done; tr->tr_flags |= TWE_CMD_DATAIN | TWE_CMD_DATAOUT; } /* run the command */ error = twe_wait_request(tr); + TWE_IO_UNLOCK(sc); if (error) goto cmd_done; @@ -550,8 +580,9 @@ twe_ioctl(struct twe_softc *sc, u_long i /* free resources */ if (tr->tr_data != NULL) free(tr->tr_data, M_DEVBUF); - if (tr != NULL) - twe_release_request(tr); + TWE_IO_LOCK(sc); + twe_release_request(tr); + TWE_IO_UNLOCK(sc); break; @@ -564,7 +595,9 @@ twe_ioctl(struct twe_softc *sc, u_long i case TWEQ_READY: case TWEQ_BUSY: case TWEQ_COMPLETE: + TWE_IO_LOCK(sc); bcopy(&sc->twe_qstat[ts->ts_item], &ts->ts_qstat, sizeof(struct twe_qstat)); + TWE_IO_UNLOCK(sc); break; #endif default: @@ -575,22 +608,28 @@ twe_ioctl(struct twe_softc *sc, u_long i /* poll for an AEN */ case TWEIO_AEN_POLL: + TWE_IO_LOCK(sc); *aen_code = twe_dequeue_aen(sc); + TWE_IO_UNLOCK(sc); break; /* wait for another AEN to show up */ case TWEIO_AEN_WAIT: - s = splbio(); + TWE_IO_LOCK(sc); while ((*aen_code = twe_dequeue_aen(sc)) == TWE_AEN_QUEUE_EMPTY) { - error = tsleep(&sc->twe_aen_queue, PRIBIO | PCATCH, "tweaen", 0); + error = mtx_sleep(&sc->twe_aen_queue, &sc->twe_io_lock, PRIBIO | PCATCH, + "tweaen", 0); if (error == EINTR) break; } - splx(s); + TWE_IO_UNLOCK(sc); break; case TWEIO_GET_PARAM: - if ((param = twe_get_param(sc, tp->tp_table_id, tp->tp_param_id, tp->tp_size, NULL)) == NULL) { + TWE_IO_LOCK(sc); + param = twe_get_param(sc, tp->tp_table_id, tp->tp_param_id, tp->tp_size, NULL); + TWE_IO_UNLOCK(sc); + if (param == NULL) { twe_printf(sc, "TWEIO_GET_PARAM failed for 0x%x/0x%x/%d\n", tp->tp_table_id, tp->tp_param_id, tp->tp_size); error = EINVAL; @@ -607,26 +646,32 @@ twe_ioctl(struct twe_softc *sc, u_long i break; case TWEIO_SET_PARAM: - if ((data = malloc(tp->tp_size, M_DEVBUF, M_WAITOK)) == NULL) { - error = ENOMEM; - } else { - error = copyin(tp->tp_data, data, tp->tp_size); - if (error == 0) - error = twe_set_param(sc, tp->tp_table_id, tp->tp_param_id, tp->tp_size, data); - free(data, M_DEVBUF); + data = malloc(tp->tp_size, M_DEVBUF, M_WAITOK); + error = copyin(tp->tp_data, data, tp->tp_size); + if (error == 0) { + TWE_IO_LOCK(sc); + error = twe_set_param(sc, tp->tp_table_id, tp->tp_param_id, tp->tp_size, data); + TWE_IO_UNLOCK(sc); } + free(data, M_DEVBUF); break; case TWEIO_RESET: + TWE_IO_LOCK(sc); twe_reset(sc); + TWE_IO_UNLOCK(sc); break; case TWEIO_ADD_UNIT: + TWE_CONFIG_LOCK(sc); error = twe_add_unit(sc, td->td_unit); + TWE_CONFIG_UNLOCK(sc); break; case TWEIO_DEL_UNIT: + TWE_CONFIG_LOCK(sc); error = twe_del_unit(sc, td->td_unit); + TWE_CONFIG_UNLOCK(sc); break; /* XXX implement ATA PASSTHROUGH */ @@ -724,6 +769,7 @@ twe_get_param(struct twe_softc *sc, int debug_called(4); + TWE_IO_ASSERT_LOCKED(sc); tr = NULL; param = NULL; @@ -817,6 +863,7 @@ twe_set_param(struct twe_softc *sc, int debug_called(4); + TWE_IO_ASSERT_LOCKED(sc); tr = NULL; param = NULL; error = ENOMEM; @@ -874,6 +921,8 @@ twe_init_connection(struct twe_softc *sc debug_called(4); + TWE_IO_ASSERT_LOCKED(sc); + /* get a command */ if (twe_get_request(sc, &tr)) return(0); @@ -903,18 +952,16 @@ twe_init_connection(struct twe_softc *sc static int twe_wait_request(struct twe_request *tr) { - int s; debug_called(4); + TWE_IO_ASSERT_LOCKED(tr->tr_sc); tr->tr_flags |= TWE_CMD_SLEEPER; tr->tr_status = TWE_CMD_BUSY; twe_enqueue_ready(tr); twe_startio(tr->tr_sc); - s = splbio(); while (tr->tr_status == TWE_CMD_BUSY) - tsleep(tr, PRIBIO, "twewait", 0); - splx(s); + mtx_sleep(tr, &tr->tr_sc->twe_io_lock, PRIBIO, "twewait", 0); return(tr->tr_status != TWE_CMD_COMPLETE); } @@ -991,12 +1038,12 @@ static void twe_reset(struct twe_softc *sc) { struct twe_request *tr; - int i, s; + int i; /* * Sleep for a short period to allow AENs to be signalled. */ - tsleep(sc, PRIBIO, "twereset", hz); + mtx_sleep(sc, &sc->twe_io_lock, PRIBIO, "twereset", hz); /* * Disable interrupts from the controller, and mask any accidental entry @@ -1004,7 +1051,6 @@ twe_reset(struct twe_softc *sc) */ twe_printf(sc, "controller reset in progress...\n"); twe_disable_interrupts(sc); - s = splbio(); /* * Try to soft-reset the controller. @@ -1036,11 +1082,9 @@ twe_reset(struct twe_softc *sc) * Kick the controller to start things going again, then re-enable interrupts. */ twe_startio(sc); - twe_enable_interrupts(sc); twe_printf(sc, "controller reset done, %d commands restarted\n", i); out: - splx(s); twe_enable_interrupts(sc); } @@ -1060,11 +1104,14 @@ twe_start(struct twe_request *tr) { struct twe_softc *sc = tr->tr_sc; TWE_Command *cmd; - int i, s, done; + int i; u_int32_t status_reg; debug_called(4); + if (!dumping) + TWE_IO_ASSERT_LOCKED(sc); + /* mark the command as currently being processed */ tr->tr_status = TWE_CMD_BUSY; cmd = TWE_FIND_COMMAND(tr); @@ -1075,8 +1122,7 @@ twe_start(struct twe_request *tr) * XXX it might be more efficient to return EBUSY immediately * and let the command be rescheduled. */ - for (i = 100000, done = 0; (i > 0) && !done; i--) { - s = splbio(); + for (i = 100000; (i > 0); i--) { /* check to see if we can post a command */ status_reg = TWE_STATUS(sc); @@ -1086,7 +1132,7 @@ twe_start(struct twe_request *tr) twe_enqueue_busy(tr); TWE_COMMAND_QUEUE(sc, TWE_FIND_COMMANDPHYS(tr)); - done = 1; + /* move command to work queue */ #ifdef TWE_DEBUG if (tr->tr_complete != NULL) { @@ -1097,14 +1143,10 @@ twe_start(struct twe_request *tr) debug(3, "queued request %d for polling caller", cmd->generic.request_id); } #endif + return(0); } - splx(s); /* drop spl to allow completion interrupts */ } - /* command is enqueued */ - if (done) - return(0); - /* * We couldn't get the controller to take the command; try submitting it again later. * This should only happen if something is wrong with the controller, or if we have @@ -1125,14 +1167,13 @@ twe_done(struct twe_softc *sc) TWE_Response_Queue rq; TWE_Command *cmd; struct twe_request *tr; - int s, found; + int found; u_int32_t status_reg; debug_called(5); /* loop collecting completed commands */ found = 0; - s = splbio(); for (;;) { status_reg = TWE_STATUS(sc); twe_check_bits(sc, status_reg); /* XXX should this fail? */ @@ -1155,7 +1196,6 @@ twe_done(struct twe_softc *sc) break; /* no response ready */ } } - splx(s); /* if we've completed any commands, try posting some more */ if (found) @@ -1259,6 +1299,7 @@ twe_soft_reset(struct twe_softc *sc) debug_called(2); + TWE_IO_ASSERT_LOCKED(sc); TWE_SOFT_RESET(sc); if (twe_wait_status(sc, TWE_STATUS_ATTENTION_INTERRUPT, 30)) { @@ -1396,6 +1437,7 @@ twe_drain_aen_queue(struct twe_softc *sc { u_int16_t aen; + TWE_IO_ASSERT_LOCKED(sc); for (;;) { if (twe_get_param_2(sc, TWE_PARAM_AEN, TWE_PARAM_AEN_UnitCode, &aen)) return(1); @@ -1417,14 +1459,14 @@ static void twe_enqueue_aen(struct twe_softc *sc, u_int16_t aen) { char *msg; - int s, next, nextnext; + int next, nextnext; debug_called(4); + TWE_IO_ASSERT_LOCKED(sc); if ((msg = twe_format_aen(sc, aen)) != NULL) twe_printf(sc, "AEN: <%s>\n", msg); - s = splbio(); /* enqueue the AEN */ next = ((sc->twe_aen_head + 1) % TWE_Q_LENGTH); nextnext = ((sc->twe_aen_head + 2) % TWE_Q_LENGTH); @@ -1447,7 +1489,6 @@ twe_enqueue_aen(struct twe_softc *sc, u_ sc->twe_wait_aen = -1; wakeup(&sc->twe_wait_aen); } - splx(s); } /******************************************************************************** @@ -1462,6 +1503,7 @@ twe_dequeue_aen(struct twe_softc *sc) debug_called(4); + TWE_IO_ASSERT_LOCKED(sc); if (sc->twe_aen_tail == sc->twe_aen_head) { result = TWE_AEN_QUEUE_EMPTY; } else { @@ -1479,15 +1521,13 @@ twe_dequeue_aen(struct twe_softc *sc) static int twe_find_aen(struct twe_softc *sc, u_int16_t aen) { - int i, s, missing; + int i, missing; missing = 1; - s = splbio(); for (i = sc->twe_aen_tail; (i != sc->twe_aen_head) && missing; i = (i + 1) % TWE_Q_LENGTH) { if (sc->twe_aen_queue[i] == aen) missing = 0; } - splx(s); return(missing); } @@ -1504,22 +1544,20 @@ static int twe_wait_aen(struct twe_softc *sc, int aen, int timeout) { time_t expiry; - int found, s; + int found; debug_called(4); expiry = time_second + timeout; found = 0; - s = splbio(); sc->twe_wait_aen = aen; do { twe_fetch_aen(sc); - tsleep(&sc->twe_wait_aen, PZERO, "twewaen", hz); + mtx_sleep(&sc->twe_wait_aen, &sc->twe_io_lock, PZERO, "twewaen", hz); if (sc->twe_wait_aen == -1) found = 1; } while ((time_second <= expiry) && !found); - splx(s); return(!found); } #endif @@ -1541,6 +1579,9 @@ twe_get_request(struct twe_softc *sc, st TWE_Command *cmd; debug_called(4); + if (!dumping) + TWE_IO_ASSERT_LOCKED(sc); + /* try to reuse an old buffer */ *tr = twe_dequeue_free(sc); @@ -1567,6 +1608,8 @@ twe_release_request(struct twe_request * { debug_called(4); + if (!dumping) + TWE_IO_ASSERT_LOCKED(tr->tr_sc); if (tr->tr_private != NULL) twe_panic(tr->tr_sc, "tr_private != NULL"); twe_enqueue_free(tr); @@ -1591,6 +1634,8 @@ twe_describe_controller(struct twe_softc debug_called(2); + TWE_IO_LOCK(sc); + /* get the port count */ twe_get_param_1(sc, TWE_PARAM_CONTROLLER, TWE_PARAM_CONTROLLER_PortCount, &ports); @@ -1641,6 +1686,7 @@ twe_describe_controller(struct twe_softc if (p[0]) free(p[0], M_DEVBUF); } + TWE_IO_UNLOCK(sc); } /******************************************************************************** Modified: head/sys/dev/twe/twe_compat.h ============================================================================== --- head/sys/dev/twe/twe_compat.h Mon Aug 13 21:04:01 2012 (r239243) +++ head/sys/dev/twe/twe_compat.h Mon Aug 13 21:29:34 2012 (r239244) @@ -43,8 +43,11 @@ #include #include #include +#include #include +#include #include +#include #include #include @@ -65,10 +68,10 @@ /* * Wrappers for bus-space actions */ -#define TWE_CONTROL(sc, val) bus_space_write_4((sc)->twe_btag, (sc)->twe_bhandle, 0x0, (u_int32_t)val) -#define TWE_STATUS(sc) (u_int32_t)bus_space_read_4((sc)->twe_btag, (sc)->twe_bhandle, 0x4) -#define TWE_COMMAND_QUEUE(sc, val) bus_space_write_4((sc)->twe_btag, (sc)->twe_bhandle, 0x8, (u_int32_t)val) -#define TWE_RESPONSE_QUEUE(sc) (TWE_Response_Queue)bus_space_read_4((sc)->twe_btag, (sc)->twe_bhandle, 0xc) +#define TWE_CONTROL(sc, val) bus_write_4((sc)->twe_io, 0x0, (u_int32_t)val) +#define TWE_STATUS(sc) (u_int32_t)bus_read_4((sc)->twe_io, 0x4) +#define TWE_COMMAND_QUEUE(sc, val) bus_write_4((sc)->twe_io, 0x8, (u_int32_t)val) +#define TWE_RESPONSE_QUEUE(sc) (TWE_Response_Queue)bus_read_4((sc)->twe_io, 0xc) /* * FreeBSD-specific softc elements @@ -79,8 +82,6 @@ device_t twe_dev; /* bus device */ \ struct cdev *twe_dev_t; /* control device */ \ struct resource *twe_io; /* register interface window */ \ - bus_space_handle_t twe_bhandle; /* bus space handle */ \ - bus_space_tag_t twe_btag; /* bus space tag */ \ bus_dma_tag_t twe_parent_dmat; /* parent DMA tag */ \ bus_dma_tag_t twe_buffer_dmat; /* data buffer DMA tag */ \ bus_dma_tag_t twe_cmd_dmat; /* command buffer DMA tag */ \ @@ -91,8 +92,8 @@ void *twe_cmd; /* command structures */ \ void *twe_immediate; /* immediate commands */ \ bus_dmamap_t twe_immediate_map; \ - struct sysctl_ctx_list sysctl_ctx; \ - struct sysctl_oid *sysctl_tree; + struct mtx twe_io_lock; \ + struct sx twe_config_lock; /* * FreeBSD-specific request elements @@ -107,31 +108,6 @@ #define twe_printf(sc, fmt, args...) device_printf(sc->twe_dev, fmt , ##args) #define twed_printf(twed, fmt, args...) device_printf(twed->twed_dev, fmt , ##args) -#if __FreeBSD_version < 500003 -# include -# define INTR_ENTROPY 0 -# define FREEBSD_4 - -# include /* old buf style */ -typedef struct buf twe_bio; -typedef struct buf_queue_head twe_bioq; -# define TWE_BIO_QINIT(bq) bufq_init(&bq); -# define TWE_BIO_QINSERT(bq, bp) bufq_insert_tail(&bq, bp) -# define TWE_BIO_QFIRST(bq) bufq_first(&bq) -# define TWE_BIO_QREMOVE(bq, bp) bufq_remove(&bq, bp) -# define TWE_BIO_IS_READ(bp) ((bp)->b_flags & B_READ) -# define TWE_BIO_DATA(bp) (bp)->b_data -# define TWE_BIO_LENGTH(bp) (bp)->b_bcount -# define TWE_BIO_LBA(bp) (bp)->b_pblkno -# define TWE_BIO_SOFTC(bp) (bp)->b_dev->si_drv1 -# define TWE_BIO_UNIT(bp) *(int *)((bp)->b_dev->si_drv2) -# define TWE_BIO_SET_ERROR(bp, err) do { (bp)->b_error = err; (bp)->b_flags |= B_ERROR;} while(0) -# define TWE_BIO_HAS_ERROR(bp) ((bp)->b_flags & B_ERROR) -# define TWE_BIO_RESID(bp) (bp)->b_resid -# define TWE_BIO_DONE(bp) biodone(bp) -# define TWE_BIO_STATS_START(bp) devstat_start_transaction(&((struct twed_softc *)TWE_BIO_SOFTC(bp))->twed_stats) -# define TWE_BIO_STATS_END(bp) devstat_end_transaction_buf(&((struct twed_softc *)TWE_BIO_SOFTC(bp))->twed_stats, bp) -#else # include # include typedef struct bio twe_bio; @@ -152,7 +128,13 @@ typedef struct bio_queue_head twe_bioq; # define TWE_BIO_DONE(bp) biodone(bp) # define TWE_BIO_STATS_START(bp) # define TWE_BIO_STATS_END(bp) -#endif + +#define TWE_IO_LOCK(sc) mtx_lock(&(sc)->twe_io_lock) +#define TWE_IO_UNLOCK(sc) mtx_unlock(&(sc)->twe_io_lock) +#define TWE_IO_ASSERT_LOCKED(sc) mtx_assert(&(sc)->twe_io_lock, MA_OWNED) +#define TWE_CONFIG_LOCK(sc) sx_xlock(&(sc)->twe_config_lock) +#define TWE_CONFIG_UNLOCK(sc) sx_xunlock(&(sc)->twe_config_lock) +#define TWE_CONFIG_ASSERT_LOCKED(sc) sx_assert(&(sc)->twe_config_lock, SA_XLOCKED) #endif /* FreeBSD */ Modified: head/sys/dev/twe/twe_freebsd.c ============================================================================== --- head/sys/dev/twe/twe_freebsd.c Mon Aug 13 21:04:01 2012 (r239243) +++ head/sys/dev/twe/twe_freebsd.c Mon Aug 13 21:29:34 2012 (r239244) @@ -69,7 +69,6 @@ static d_ioctl_t twe_ioctl_wrapper; static struct cdevsw twe_cdevsw = { .d_version = D_VERSION, - .d_flags = D_NEEDGIANT, .d_open = twe_open, .d_close = twe_close, .d_ioctl = twe_ioctl_wrapper, @@ -84,7 +83,13 @@ twe_open(struct cdev *dev, int flags, in { struct twe_softc *sc = (struct twe_softc *)dev->si_drv1; + TWE_IO_LOCK(sc); + if (sc->twe_state & TWE_STATE_DETACHING) { + TWE_IO_UNLOCK(sc); + return (ENXIO); + } sc->twe_state |= TWE_STATE_OPEN; + TWE_IO_UNLOCK(sc); return(0); } @@ -96,7 +101,9 @@ twe_close(struct cdev *dev, int flags, i { struct twe_softc *sc = (struct twe_softc *)dev->si_drv1; + TWE_IO_LOCK(sc); sc->twe_state &= ~TWE_STATE_OPEN; + TWE_IO_UNLOCK(sc); return (0); } @@ -172,8 +179,8 @@ static int twe_attach(device_t dev) { struct twe_softc *sc; + struct sysctl_oid *sysctl_tree; int rid, error; - u_int32_t command; debug_called(4); @@ -182,32 +189,30 @@ twe_attach(device_t dev) */ sc = device_get_softc(dev); sc->twe_dev = dev; + mtx_init(&sc->twe_io_lock, "twe I/O", NULL, MTX_DEF); + sx_init(&sc->twe_config_lock, "twe config"); - sysctl_ctx_init(&sc->sysctl_ctx); - sc->sysctl_tree = SYSCTL_ADD_NODE(&sc->sysctl_ctx, + /* + * XXX: This sysctl tree must stay at hw.tweX rather than using + * the device_get_sysctl_tree() created by new-bus because + * existing 3rd party binary tools such as tw_cli and 3dm2 use the + * existence of this sysctl node to discover controllers. + */ + sysctl_tree = SYSCTL_ADD_NODE(device_get_sysctl_ctx(dev), SYSCTL_STATIC_CHILDREN(_hw), OID_AUTO, device_get_nameunit(dev), CTLFLAG_RD, 0, ""); - if (sc->sysctl_tree == NULL) { + if (sysctl_tree == NULL) { twe_printf(sc, "cannot add sysctl tree node\n"); return (ENXIO); } - SYSCTL_ADD_STRING(&sc->sysctl_ctx, SYSCTL_CHILDREN(sc->sysctl_tree), + SYSCTL_ADD_STRING(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(sysctl_tree), OID_AUTO, "driver_version", CTLFLAG_RD, TWE_DRIVER_VERSION_STRING, 0, "TWE driver version"); /* - * Make sure we are going to be able to talk to this board. - */ - command = pci_read_config(dev, PCIR_COMMAND, 2); - if ((command & PCIM_CMD_PORTEN) == 0) { - twe_printf(sc, "register window not available\n"); - return(ENXIO); - } - /* * Force the busmaster enable bit on, in case the BIOS forgot. */ - command |= PCIM_CMD_BUSMASTEREN; - pci_write_config(dev, PCIR_COMMAND, command, 2); + pci_enable_busmaster(dev); /* * Allocate the PCI register window. @@ -219,8 +224,6 @@ twe_attach(device_t dev) twe_free(sc); return(ENXIO); } - sc->twe_btag = rman_get_bustag(sc->twe_io); - sc->twe_bhandle = rman_get_bushandle(sc->twe_io); /* * Allocate the parent bus DMA tag appropriate for PCI. @@ -251,7 +254,7 @@ twe_attach(device_t dev) twe_free(sc); return(ENXIO); } - if (bus_setup_intr(sc->twe_dev, sc->twe_irq, INTR_TYPE_BIO | INTR_ENTROPY, + if (bus_setup_intr(sc->twe_dev, sc->twe_irq, INTR_TYPE_BIO | INTR_ENTROPY | INTR_MPSAFE, NULL, twe_pci_intr, sc, &sc->twe_intr)) { twe_printf(sc, "can't set up interrupt\n"); twe_free(sc); @@ -302,7 +305,7 @@ twe_attach(device_t dev) BUS_SPACE_MAXSIZE_32BIT, /* maxsegsize */ BUS_DMA_ALLOCNOW, /* flags */ busdma_lock_mutex, /* lockfunc */ - &Giant, /* lockarg */ + &sc->twe_io_lock, /* lockarg */ &sc->twe_buffer_dmat)) { twe_printf(sc, "can't allocate data buffer DMA tag\n"); twe_free(sc); @@ -424,7 +427,8 @@ twe_free(struct twe_softc *sc) if (sc->twe_dev_t != (struct cdev *)NULL) destroy_dev(sc->twe_dev_t); - sysctl_ctx_free(&sc->sysctl_ctx); + sx_destroy(&sc->twe_config_lock); + mtx_destroy(&sc->twe_io_lock); } /******************************************************************************** @@ -434,27 +438,30 @@ static int twe_detach(device_t dev) { struct twe_softc *sc = device_get_softc(dev); - int s, error; debug_called(4); - error = EBUSY; - s = splbio(); - if (sc->twe_state & TWE_STATE_OPEN) - goto out; + TWE_IO_LOCK(sc); + if (sc->twe_state & TWE_STATE_OPEN) { + TWE_IO_UNLOCK(sc); + return (EBUSY); + } + sc->twe_state |= TWE_STATE_DETACHING; + TWE_IO_UNLOCK(sc); /* * Shut the controller down. */ - if (twe_shutdown(dev)) - goto out; + if (twe_shutdown(dev)) { + TWE_IO_LOCK(sc); + sc->twe_state &= ~TWE_STATE_DETACHING; + TWE_IO_UNLOCK(sc); + return (EBUSY); + } twe_free(sc); - error = 0; - out: - splx(s); - return(error); + return(0); } /******************************************************************************** @@ -467,30 +474,32 @@ static int twe_shutdown(device_t dev) { struct twe_softc *sc = device_get_softc(dev); - int i, s, error = 0; + int i, error = 0; debug_called(4); - s = splbio(); - /* * Delete all our child devices. */ + TWE_CONFIG_LOCK(sc); for (i = 0; i < TWE_MAX_UNITS; i++) { if (sc->twe_drive[i].td_disk != 0) { - if ((error = twe_detach_drive(sc, i)) != 0) - goto out; + if ((error = twe_detach_drive(sc, i)) != 0) { + TWE_CONFIG_UNLOCK(sc); + return (error); + } } } + TWE_CONFIG_UNLOCK(sc); /* * Bring the controller down. */ + TWE_IO_LOCK(sc); twe_deinit(sc); + TWE_IO_UNLOCK(sc); -out: - splx(s); - return(error); + return(0); } /******************************************************************************** @@ -500,15 +509,14 @@ static int twe_suspend(device_t dev) { struct twe_softc *sc = device_get_softc(dev); - int s; debug_called(4); - s = splbio(); + TWE_IO_LOCK(sc); sc->twe_state |= TWE_STATE_SUSPEND; twe_disable_interrupts(sc); - splx(s); + TWE_IO_UNLOCK(sc); return(0); } @@ -523,8 +531,10 @@ twe_resume(device_t dev) debug_called(4); + TWE_IO_LOCK(sc); sc->twe_state &= ~TWE_STATE_SUSPEND; twe_enable_interrupts(sc); + TWE_IO_UNLOCK(sc); return(0); } @@ -536,7 +546,11 @@ twe_resume(device_t dev) static void twe_pci_intr(void *arg) { - twe_intr((struct twe_softc *)arg); + struct twe_softc *sc = arg; + + TWE_IO_LOCK(sc); + twe_intr(sc); + TWE_IO_UNLOCK(sc); } /******************************************************************************** @@ -565,8 +579,10 @@ twe_attach_drive(struct twe_softc *sc, s char buf[80]; int error; + mtx_lock(&Giant); dr->td_disk = device_add_child(sc->twe_dev, NULL, -1); if (dr->td_disk == NULL) { + mtx_unlock(&Giant); twe_printf(sc, "Cannot add unit\n"); return (EIO); } @@ -582,7 +598,9 @@ twe_attach_drive(struct twe_softc *sc, s twe_describe_code(twe_table_unitstate, dr->td_state & TWE_PARAM_UNITSTATUS_MASK)); device_set_desc_copy(dr->td_disk, buf); - if ((error = bus_generic_attach(sc->twe_dev)) != 0) { + error = device_probe_and_attach(dr->td_disk); + mtx_unlock(&Giant); + if (error != 0) { twe_printf(sc, "Cannot attach unit to controller. error = %d\n", error); return (EIO); } @@ -599,7 +617,11 @@ twe_detach_drive(struct twe_softc *sc, i { int error = 0; - if ((error = device_delete_child(sc->twe_dev, sc->twe_drive[unit].td_disk)) != 0) { + TWE_CONFIG_ASSERT_LOCKED(sc); + mtx_lock(&Giant); + error = device_delete_child(sc->twe_dev, sc->twe_drive[unit].td_disk); + mtx_unlock(&Giant); + if (error != 0) { twe_printf(sc, "failed to delete unit %d\n", unit); return(error); } @@ -671,10 +693,6 @@ DRIVER_MODULE(twed, twe, twed_driver, tw * Disk device control interface. */ -#ifdef FREEBSD_4 -static int disks_registered = 0; -#endif - /******************************************************************************** * Handle open from generic layer. * @@ -724,10 +742,12 @@ twed_strategy(twe_bio *bp) TWE_BIO_STATS_START(bp); /* queue the bio on the controller */ + TWE_IO_LOCK(sc->twed_controller); twe_enqueue_bio(sc->twed_controller, bp); /* poke the controller to start I/O */ twe_startio(sc->twed_controller); + TWE_IO_UNLOCK(sc->twed_controller); return; } @@ -827,14 +847,9 @@ twed_attach(device_t dev) sc->twed_disk->d_fwsectors = sc->twed_drive->td_sectors; sc->twed_disk->d_fwheads = sc->twed_drive->td_heads; sc->twed_disk->d_unit = sc->twed_drive->td_sys_unit; - sc->twed_disk->d_flags = DISKFLAG_NEEDSGIANT; disk_create(sc->twed_disk, DISK_VERSION); -#ifdef FREEBSD_4 - disks_registered++; -#endif - /* set the maximum I/O size to the theoretical maximum allowed by the S/G list size */ return (0); @@ -855,10 +870,6 @@ twed_detach(device_t dev) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 05:16:36 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 249F5106566C; Tue, 14 Aug 2012 05:16:36 +0000 (UTC) (envelope-from andreast@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0F4218FC0A; Tue, 14 Aug 2012 05:16:36 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7E5GZwR045992; Tue, 14 Aug 2012 05:16:35 GMT (envelope-from andreast@svn.freebsd.org) Received: (from andreast@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7E5GZdJ045990; Tue, 14 Aug 2012 05:16:35 GMT (envelope-from andreast@svn.freebsd.org) Message-Id: <201208140516.q7E5GZdJ045990@svn.freebsd.org> From: Andreas Tobler Date: Tue, 14 Aug 2012 05:16:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239245 - head/sys/dev/sound/macio X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 05:16:36 -0000 Author: andreast Date: Tue Aug 14 05:16:35 2012 New Revision: 239245 URL: http://svn.freebsd.org/changeset/base/239245 Log: Fix typo in comment. Modified: head/sys/dev/sound/macio/snapper.c Modified: head/sys/dev/sound/macio/snapper.c ============================================================================== --- head/sys/dev/sound/macio/snapper.c Mon Aug 13 21:29:34 2012 (r239244) +++ head/sys/dev/sound/macio/snapper.c Tue Aug 14 05:16:35 2012 (r239245) @@ -174,7 +174,7 @@ MIXER_DECLARE(snapper_mixer); #define SNAPPER_MCR1_W_16 0x00 /* 16 bit */ #define SNAPPER_MCR1_W_18 0x01 /* 18 bit */ #define SNAPPER_MCR1_W_20 0x02 /* 20 bit */ -#define SNAPPER_MCR1_W_24 0x03 /* 20 bit */ +#define SNAPPER_MCR1_W_24 0x03 /* 24 bit */ #define SNAPPER_MCR2_DL 0x80 /* Download */ #define SNAPPER_MCR2_AP 0x02 /* All pass mode */ #define SNAPPER_ACR_ADM 0x80 /* ADC output mode */ From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 05:31:31 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 92D971065672; Tue, 14 Aug 2012 05:31:31 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe08.c2i.net [212.247.154.226]) by mx1.freebsd.org (Postfix) with ESMTP id 82F178FC14; Tue, 14 Aug 2012 05:31:29 +0000 (UTC) X-T2-Spam-Status: No, hits=-1.0 required=5.0 tests=ALL_TRUSTED Received: from [176.74.212.201] (account mc467741@c2i.net HELO laptop015.hselasky.homeunix.org) by mailfe08.swip.net (CommuniGate Pro SMTP 5.4.4) with ESMTPA id 308528831; Tue, 14 Aug 2012 07:31:22 +0200 From: Hans Petter Selasky To: John Baldwin Date: Tue, 14 Aug 2012 07:31:58 +0200 User-Agent: KMail/1.13.7 (FreeBSD/9.1-PRERELEASE; KDE/4.8.4; amd64; ; ) References: <201208101502.q7AF2ofC046316@svn.freebsd.org> <201208132143.42298.hselasky@c2i.net> <201208131700.25822.jhb@freebsd.org> In-Reply-To: <201208131700.25822.jhb@freebsd.org> X-Face: 'mmZ:T{)),Oru^0c+/}w'`gU1$ubmG?lp!=R4Wy\ELYo2)@'UZ24N@ =?iso-8859-1?q?d2+AyewRX=7DmAm=3BYp=0A=09=7CU=5B?=@, _z/([?1bCfM{_"B<.J>mICJCHAzzGHI{y7{%JVz%R~yJHIji`y> =?iso-8859-1?q?Y=7Dk1C4TfysrsUI=0A=09-=25GU9V5=5DiUZF=26nRn9mJ=27=3F=26?=>O MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Message-Id: <201208140731.58979.hselasky@c2i.net> Cc: "svn-src-head@freebsd.org" , "svn-src-all@freebsd.org" , "src-committers@freebsd.org" Subject: Re: svn commit: r239178 - in head/sys: kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 05:31:31 -0000 On Monday 13 August 2012 23:00:25 John Baldwin wrote: > int > foo_attach(device_t dev) > { > struct foo_softc *sc; > > sc = malloc(sizeof(struct foo_softc), M_BUS, M_WAITOK | M_ZERO); > device_set_softc(dev, sc); > ... Hi, Here you forget that there are alot of else/if's that need free(sc, M_BUS) for various failing cases! That's why I say +5 lines. BTW: If we do add device_free_softc, would it be an idea to add device_alloc_softc aswell, to make stuff more clear for the drivers? --HPS From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 09:41:54 2012 Return-Path: Delivered-To: svn-src-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1B332106578B; Tue, 14 Aug 2012 09:41:54 +0000 (UTC) (envelope-from gavin@FreeBSD.org) Received: from mail-gw11.york.ac.uk (mail-gw11.york.ac.uk [144.32.129.150]) by mx1.freebsd.org (Postfix) with ESMTP id CBA2A8FC1A; Tue, 14 Aug 2012 09:41:53 +0000 (UTC) Received: from buffy-128.york.ac.uk ([144.32.128.160]:55444 helo=buffy.york.ac.uk) by mail-gw11.york.ac.uk with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1T1DdI-000681-EL; Tue, 14 Aug 2012 10:41:52 +0100 Received: from [127.0.0.1] (localhost [127.0.0.1]) by buffy.york.ac.uk (8.14.5/8.14.5) with ESMTP id q7E9fqdM047466; Tue, 14 Aug 2012 10:41:52 +0100 (BST) (envelope-from gavin@FreeBSD.org) From: Gavin Atkinson To: Hans Petter Selasky In-Reply-To: <201208121753.q7CHr7VU017178@svn.freebsd.org> References: <201208121753.q7CHr7VU017178@svn.freebsd.org> Content-Type: text/plain; charset="ASCII" Date: Mon, 13 Aug 2012 18:09:41 +0100 Message-ID: <1344877781.20407.59.camel@buffy.york.ac.uk> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Content-Transfer-Encoding: 7bit Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org Subject: Re: svn commit: r239214 - in head/sys: dev/usb dev/usb/controller sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 09:41:54 -0000 On Sun, 2012-08-12 at 17:53 +0000, Hans Petter Selasky wrote: > Author: hselasky > Date: Sun Aug 12 17:53:06 2012 > New Revision: 239214 > URL: http://svn.freebsd.org/changeset/base/239214 > > Log: > Add support for the so-called streams feature of BULK endpoints > in SUPER-speed mode, USB 3.0. [...] > All USB drivers should be re-compiled after this change. When this is merged, is there a way to do this without requiring all drivers to be recompiled? If not, it sounds like this (and indeed 239179) may not be merge candidates :( Gavin -- Gavin Atkinson FreeBSD committer and bugmeister GPG: A093262B (313A A79F 697D 3A5C 216A EDF5 935D EF44 A093 262B) From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 11:45:48 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 63F57106564A; Tue, 14 Aug 2012 11:45:48 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 448ED8FC16; Tue, 14 Aug 2012 11:45:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EBjmUW089946; Tue, 14 Aug 2012 11:45:48 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EBjlhk089938; Tue, 14 Aug 2012 11:45:47 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208141145.q7EBjlhk089938@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 14 Aug 2012 11:45:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239246 - in head/sys: fs/nfsclient fs/nwfs fs/smbfs nfsclient vm X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 11:45:48 -0000 Author: kib Date: Tue Aug 14 11:45:47 2012 New Revision: 239246 URL: http://svn.freebsd.org/changeset/base/239246 Log: Do not leave invalid pages in the object after the short read for a network file systems (not only NFS proper). Short reads cause pages other then the requested one, which were not filled by read response, to stay invalid. Change the vm_page_readahead_finish() interface to not take the error code, but instead to make a decision to free or to (de)activate the page only by its validity. As result, not requested invalid pages are freed even if the read RPC indicated success. Noted and reviewed by: alc MFC after: 1 week Modified: head/sys/fs/nfsclient/nfs_clbio.c head/sys/fs/nwfs/nwfs_io.c head/sys/fs/smbfs/smbfs_io.c head/sys/nfsclient/nfs_bio.c head/sys/vm/vm_page.c head/sys/vm/vm_page.h head/sys/vm/vnode_pager.c Modified: head/sys/fs/nfsclient/nfs_clbio.c ============================================================================== --- head/sys/fs/nfsclient/nfs_clbio.c Tue Aug 14 05:16:35 2012 (r239245) +++ head/sys/fs/nfsclient/nfs_clbio.c Tue Aug 14 11:45:47 2012 (r239246) @@ -218,14 +218,18 @@ ncl_getpages(struct vop_getpages_args *a ("nfs_getpages: page %p is dirty", m)); } else { /* - * Read operation was short. If no error occured - * we may have hit a zero-fill section. We simply - * leave valid set to 0. + * Read operation was short. If no error + * occured we may have hit a zero-fill + * section. We leave valid set to 0, and page + * is freed by vm_page_readahead_finish() if + * its index is not equal to requested, or + * page is zeroed and set valid by + * vm_pager_get_pages() for requested page. */ ; } if (i != ap->a_reqpage) - vm_page_readahead_finish(m, error); + vm_page_readahead_finish(m); } VM_OBJECT_UNLOCK(object); return (0); Modified: head/sys/fs/nwfs/nwfs_io.c ============================================================================== --- head/sys/fs/nwfs/nwfs_io.c Tue Aug 14 05:16:35 2012 (r239245) +++ head/sys/fs/nwfs/nwfs_io.c Tue Aug 14 11:45:47 2012 (r239246) @@ -459,7 +459,7 @@ nwfs_getpages(ap) } if (i != ap->a_reqpage) - vm_page_readahead_finish(m, error); + vm_page_readahead_finish(m); } VM_OBJECT_UNLOCK(object); return 0; Modified: head/sys/fs/smbfs/smbfs_io.c ============================================================================== --- head/sys/fs/smbfs/smbfs_io.c Tue Aug 14 05:16:35 2012 (r239245) +++ head/sys/fs/smbfs/smbfs_io.c Tue Aug 14 11:45:47 2012 (r239246) @@ -523,7 +523,7 @@ smbfs_getpages(ap) } if (i != reqpage) - vm_page_readahead_finish(m, error); + vm_page_readahead_finish(m); } VM_OBJECT_UNLOCK(object); return 0; Modified: head/sys/nfsclient/nfs_bio.c ============================================================================== --- head/sys/nfsclient/nfs_bio.c Tue Aug 14 05:16:35 2012 (r239245) +++ head/sys/nfsclient/nfs_bio.c Tue Aug 14 11:45:47 2012 (r239246) @@ -212,14 +212,18 @@ nfs_getpages(struct vop_getpages_args *a ("nfs_getpages: page %p is dirty", m)); } else { /* - * Read operation was short. If no error occured - * we may have hit a zero-fill section. We simply - * leave valid set to 0. + * Read operation was short. If no error + * occured we may have hit a zero-fill + * section. We leave valid set to 0, and page + * is freed by vm_page_readahead_finish() if + * its index is not equal to requested, or + * page is zeroed and set valid by + * vm_pager_get_pages() for requested page. */ ; } if (i != ap->a_reqpage) - vm_page_readahead_finish(m, error); + vm_page_readahead_finish(m); } VM_OBJECT_UNLOCK(object); return (0); Modified: head/sys/vm/vm_page.c ============================================================================== --- head/sys/vm/vm_page.c Tue Aug 14 05:16:35 2012 (r239245) +++ head/sys/vm/vm_page.c Tue Aug 14 11:45:47 2012 (r239246) @@ -699,10 +699,10 @@ vm_page_free_zero(vm_page_t m) * array which is not the request page. */ void -vm_page_readahead_finish(vm_page_t m, int error) +vm_page_readahead_finish(vm_page_t m) { - if (error == 0) { + if (m->valid != 0) { /* * Since the page is not the requested page, whether * it should be activated or deactivated is not @@ -721,6 +721,12 @@ vm_page_readahead_finish(vm_page_t m, in } vm_page_wakeup(m); } else { + /* + * Free the completely invalid page. Such page state + * occurs due to the short read operation which did + * not covered our page at all, or in case when a read + * error happens. + */ vm_page_lock(m); vm_page_free(m); vm_page_unlock(m); Modified: head/sys/vm/vm_page.h ============================================================================== --- head/sys/vm/vm_page.h Tue Aug 14 05:16:35 2012 (r239245) +++ head/sys/vm/vm_page.h Tue Aug 14 11:45:47 2012 (r239246) @@ -388,7 +388,7 @@ vm_page_t vm_page_next(vm_page_t m); int vm_page_pa_tryrelock(pmap_t, vm_paddr_t, vm_paddr_t *); vm_page_t vm_page_prev(vm_page_t m); void vm_page_putfake(vm_page_t m); -void vm_page_readahead_finish(vm_page_t m, int error); +void vm_page_readahead_finish(vm_page_t m); void vm_page_reference(vm_page_t m); void vm_page_remove (vm_page_t); void vm_page_rename (vm_page_t, vm_object_t, vm_pindex_t); Modified: head/sys/vm/vnode_pager.c ============================================================================== --- head/sys/vm/vnode_pager.c Tue Aug 14 05:16:35 2012 (r239245) +++ head/sys/vm/vnode_pager.c Tue Aug 14 11:45:47 2012 (r239246) @@ -987,7 +987,7 @@ vnode_pager_generic_getpages(vp, m, byte } if (i != reqpage) - vm_page_readahead_finish(mt, error); + vm_page_readahead_finish(mt); } VM_OBJECT_UNLOCK(object); if (error) { From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 11:47:07 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D81841065740; Tue, 14 Aug 2012 11:47:07 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BFF448FC20; Tue, 14 Aug 2012 11:47:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EBl7DQ090121; Tue, 14 Aug 2012 11:47:07 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EBl7C1090119; Tue, 14 Aug 2012 11:47:07 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208141147.q7EBl7C1090119@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 14 Aug 2012 11:47:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239247 - head/sys/vm X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 11:47:08 -0000 Author: kib Date: Tue Aug 14 11:47:07 2012 New Revision: 239247 URL: http://svn.freebsd.org/changeset/base/239247 Log: Adjust the r205536, by allowing a non-zero offset for anonymous mappings for a.out binaries. Apparently, a.out ld.so from FreeBSD 1.1.5.1 can issue such requests. Reported and tested by: Dan Plassche MFC after: 1 week Modified: head/sys/vm/vm_mmap.c Modified: head/sys/vm/vm_mmap.c ============================================================================== --- head/sys/vm/vm_mmap.c Tue Aug 14 11:45:47 2012 (r239246) +++ head/sys/vm/vm_mmap.c Tue Aug 14 11:47:07 2012 (r239247) @@ -207,11 +207,23 @@ sys_mmap(td, uap) fp = NULL; - /* Make sure mapping fits into numeric range, etc. */ - if ((uap->len == 0 && !SV_CURPROC_FLAG(SV_AOUT) && - curproc->p_osrel >= P_OSREL_MAP_ANON) || - ((flags & MAP_ANON) && (uap->fd != -1 || pos != 0))) - return (EINVAL); + /* + * Enforce the constraints. + * Mapping of length 0 is only allowed for old binaries. + * Anonymous mapping shall specify -1 as filedescriptor and + * zero position for new code. Be nice to ancient a.out + * binaries and correct pos for anonymous mapping, since old + * ld.so sometimes issues anonymous map requests with non-zero + * pos. + */ + if (!SV_CURPROC_FLAG(SV_AOUT)) { + if ((uap->len == 0 && curproc->p_osrel >= P_OSREL_MAP_ANON) || + ((flags & MAP_ANON) != 0 && (uap->fd != -1 || pos != 0))) + return (EINVAL); + } else { + if ((flags & MAP_ANON) != 0) + pos = 0; + } if (flags & MAP_STACK) { if ((uap->fd != -1) || From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 12:09:10 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7C9091065673; Tue, 14 Aug 2012 12:09:10 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 67BA18FC19; Tue, 14 Aug 2012 12:09:10 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EC9ARH092669; Tue, 14 Aug 2012 12:09:10 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EC9AG9092665; Tue, 14 Aug 2012 12:09:10 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208141209.q7EC9AG9092665@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 14 Aug 2012 12:09:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239248 - head/sys/compat/freebsd32 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 12:09:10 -0000 Author: kib Date: Tue Aug 14 12:09:09 2012 New Revision: 239248 URL: http://svn.freebsd.org/changeset/base/239248 Log: Implement the old mmap syscall for compat32, when COMPAT_43 option is enabled. The syscall is used by FreeBSD 1.1.5.1 dynamic linker. MFC after: 1 week Modified: head/sys/compat/freebsd32/syscalls.master Modified: head/sys/compat/freebsd32/syscalls.master ============================================================================== --- head/sys/compat/freebsd32/syscalls.master Tue Aug 14 11:47:07 2012 (r239247) +++ head/sys/compat/freebsd32/syscalls.master Tue Aug 14 12:09:09 2012 (r239248) @@ -168,7 +168,8 @@ 68 AUE_NULL OBSOL vwrite 69 AUE_SBRK NOPROTO { int sbrk(int incr); } 70 AUE_SSTK NOPROTO { int sstk(int incr); } -71 AUE_MMAP OBSOL ommap +71 AUE_MMAP COMPAT|NOPROTO { int mmap(void *addr, int len, \ + int prot, int flags, int fd, int pos); } 72 AUE_O_VADVISE NOPROTO { int ovadvise(int anom); } vadvise \ ovadvise_args int 73 AUE_MUNMAP NOPROTO { int munmap(void *addr, size_t len); } From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 12:09:37 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 995841065781; Tue, 14 Aug 2012 12:09:37 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 838EC8FC16; Tue, 14 Aug 2012 12:09:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EC9btJ092753; Tue, 14 Aug 2012 12:09:37 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EC9b5w092746; Tue, 14 Aug 2012 12:09:37 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208141209.q7EC9b5w092746@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 14 Aug 2012 12:09:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239249 - head/sys/compat/freebsd32 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 12:09:37 -0000 Author: kib Date: Tue Aug 14 12:09:36 2012 New Revision: 239249 URL: http://svn.freebsd.org/changeset/base/239249 Log: Regenerate. Modified: head/sys/compat/freebsd32/freebsd32_proto.h head/sys/compat/freebsd32/freebsd32_syscall.h head/sys/compat/freebsd32/freebsd32_syscalls.c head/sys/compat/freebsd32/freebsd32_sysent.c Modified: head/sys/compat/freebsd32/freebsd32_proto.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_proto.h Tue Aug 14 12:09:09 2012 (r239248) +++ head/sys/compat/freebsd32/freebsd32_proto.h Tue Aug 14 12:09:36 2012 (r239249) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 236026 2012-05-25 21:50:48Z ed + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239248 2012-08-14 12:09:09Z kib */ #ifndef _FREEBSD32_SYSPROTO_H_ Modified: head/sys/compat/freebsd32/freebsd32_syscall.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscall.h Tue Aug 14 12:09:09 2012 (r239248) +++ head/sys/compat/freebsd32/freebsd32_syscall.h Tue Aug 14 12:09:36 2012 (r239249) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 236026 2012-05-25 21:50:48Z ed + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239248 2012-08-14 12:09:09Z kib */ #define FREEBSD32_SYS_syscall 0 @@ -77,7 +77,7 @@ /* 68 is obsolete vwrite */ #define FREEBSD32_SYS_sbrk 69 #define FREEBSD32_SYS_sstk 70 - /* 71 is obsolete ommap */ + /* 71 is old mmap */ #define FREEBSD32_SYS_vadvise 72 #define FREEBSD32_SYS_munmap 73 #define FREEBSD32_SYS_freebsd32_mprotect 74 Modified: head/sys/compat/freebsd32/freebsd32_syscalls.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscalls.c Tue Aug 14 12:09:09 2012 (r239248) +++ head/sys/compat/freebsd32/freebsd32_syscalls.c Tue Aug 14 12:09:36 2012 (r239249) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 236026 2012-05-25 21:50:48Z ed + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239248 2012-08-14 12:09:09Z kib */ const char *freebsd32_syscallnames[] = { @@ -81,7 +81,7 @@ const char *freebsd32_syscallnames[] = { "obs_vwrite", /* 68 = obsolete vwrite */ "sbrk", /* 69 = sbrk */ "sstk", /* 70 = sstk */ - "obs_ommap", /* 71 = obsolete ommap */ + "compat.mmap", /* 71 = old mmap */ "vadvise", /* 72 = vadvise */ "munmap", /* 73 = munmap */ "freebsd32_mprotect", /* 74 = freebsd32_mprotect */ Modified: head/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_sysent.c Tue Aug 14 12:09:09 2012 (r239248) +++ head/sys/compat/freebsd32/freebsd32_sysent.c Tue Aug 14 12:09:36 2012 (r239249) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 236026 2012-05-25 21:50:48Z ed + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239248 2012-08-14 12:09:09Z kib */ #include "opt_compat.h" @@ -118,7 +118,7 @@ struct sysent freebsd32_sysent[] = { { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 68 = obsolete vwrite */ { AS(sbrk_args), (sy_call_t *)sys_sbrk, AUE_SBRK, NULL, 0, 0, 0, SY_THR_STATIC }, /* 69 = sbrk */ { AS(sstk_args), (sy_call_t *)sys_sstk, AUE_SSTK, NULL, 0, 0, 0, SY_THR_STATIC }, /* 70 = sstk */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 71 = obsolete ommap */ + { compat(AS(ommap_args),mmap), AUE_MMAP, NULL, 0, 0, 0, SY_THR_STATIC }, /* 71 = old mmap */ { AS(ovadvise_args), (sy_call_t *)sys_ovadvise, AUE_O_VADVISE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 72 = vadvise */ { AS(munmap_args), (sy_call_t *)sys_munmap, AUE_MUNMAP, NULL, 0, 0, 0, SY_THR_STATIC }, /* 73 = munmap */ { AS(freebsd32_mprotect_args), (sy_call_t *)freebsd32_mprotect, AUE_MPROTECT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 74 = freebsd32_mprotect */ From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 12:11:49 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5FB841065673; Tue, 14 Aug 2012 12:11:49 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4ACD58FC1A; Tue, 14 Aug 2012 12:11:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7ECBn2o093028; Tue, 14 Aug 2012 12:11:49 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7ECBnYL093026; Tue, 14 Aug 2012 12:11:49 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208141211.q7ECBnYL093026@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 14 Aug 2012 12:11:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239250 - head/sys/vm X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 12:11:49 -0000 Author: kib Date: Tue Aug 14 12:11:48 2012 New Revision: 239250 URL: http://svn.freebsd.org/changeset/base/239250 Log: For old mmap syscall, when executing on amd64 or ia64, enforce the PROT_EXEC if prot is non-zero, process is 32bit and kern.elf32.i386_read_exec syscal is enabled. This workaround is needed for old i386 a.out binaries, where dynamic linker did not specified PROT_EXEC for mapping of the text. The kern.elf32.i386_read_exec MIB name looks weird for a.out binaries, but I reused the existing knob which already has the needed semantic. MFC after: 1 week Modified: head/sys/vm/vm_mmap.c Modified: head/sys/vm/vm_mmap.c ============================================================================== --- head/sys/vm/vm_mmap.c Tue Aug 14 12:09:36 2012 (r239249) +++ head/sys/vm/vm_mmap.c Tue Aug 14 12:11:48 2012 (r239250) @@ -453,6 +453,13 @@ ommap(td, uap) nargs.addr = uap->addr; nargs.len = uap->len; nargs.prot = cvtbsdprot[uap->prot & 0x7]; +#ifdef COMPAT_FREEBSD32 +#if defined(__amd64__) || defined(__ia64__) + if (i386_read_exec && SV_PROC_FLAG(td->td_proc, SV_ILP32) && + nargs.prot != 0) + nargs.prot |= PROT_EXEC; +#endif +#endif nargs.flags = 0; if (uap->flags & OMAP_ANON) nargs.flags |= MAP_ANON; From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 12:13:27 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CA384106566B; Tue, 14 Aug 2012 12:13:27 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9BE3B8FC1B; Tue, 14 Aug 2012 12:13:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7ECDRhP093236; Tue, 14 Aug 2012 12:13:27 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7ECDRrZ093233; Tue, 14 Aug 2012 12:13:27 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208141213.q7ECDRrZ093233@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 14 Aug 2012 12:13:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239251 - head/sys/amd64/ia32 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 12:13:27 -0000 Author: kib Date: Tue Aug 14 12:13:27 2012 New Revision: 239251 URL: http://svn.freebsd.org/changeset/base/239251 Log: Real hardware, as opposed to QEMU, does not allow to have a call gate in long mode which transfers control to 32bit code segment. Unbreak the lcall $7,$0 implementation on amd64 by putting the 64bit user code segment' selector into call gate, and execute the 64bit trampoline which converts the return frame into 32bit format and switches back to 32bit mode for executing int $0x80 trampoline. Note that all jumps over the hoops are performed in the user mode. MFC after: 1 week Modified: head/sys/amd64/ia32/ia32_sigtramp.S head/sys/amd64/ia32/ia32_syscall.c Modified: head/sys/amd64/ia32/ia32_sigtramp.S ============================================================================== --- head/sys/amd64/ia32/ia32_sigtramp.S Tue Aug 14 12:11:48 2012 (r239250) +++ head/sys/amd64/ia32/ia32_sigtramp.S Tue Aug 14 12:13:27 2012 (r239251) @@ -91,8 +91,29 @@ ia32_osigcode: */ ALIGN_TEXT lcall_tramp: + .code64 + /* + * There, we are in 64bit mode and need to return to 32bit. + * First, convert call frame from 64 to 32 bit format. + */ + pushq %rax + movl 16(%rsp),%eax + movl %eax,20(%rsp) /* ret %cs */ + movl 8(%rsp),%eax + movl %eax,16(%rsp) /* ret %rip -> %eip */ + popq %rax + addq $8,%rsp + /* Now return to 32bit */ + pushq $0x33 /* _ucode32sel UPL */ + callq 1f +1: + addq $2f-1b,(%rsp) + lretq +2: + /* Back in 32bit mode */ + .code32 cmpl $SYS_vfork,%eax - je 2f + je 4f pushl %ebp movl %esp,%ebp pushl 0x24(%ebp) /* arg 6 */ @@ -101,19 +122,19 @@ lcall_tramp: pushl 0x18(%ebp) pushl 0x14(%ebp) pushl 0x10(%ebp) /* arg 1 */ - pushl 0xc(%ebp) /* gap */ + pushl 0xc(%ebp) /* gap */ int $0x80 leavel -1: +3: lretl -2: +4: /* * vfork handling is special and relies on the libc stub saving * the return ip in %ecx. If vfork failed, then there is no * child which can corrupt the frame created by call gate. */ int $0x80 - jb 1b + jb 3b addl $8,%esp jmpl *%ecx #endif Modified: head/sys/amd64/ia32/ia32_syscall.c ============================================================================== --- head/sys/amd64/ia32/ia32_syscall.c Tue Aug 14 12:11:48 2012 (r239250) +++ head/sys/amd64/ia32/ia32_syscall.c Tue Aug 14 12:13:27 2012 (r239251) @@ -244,7 +244,7 @@ setup_lcall_gate(void) bzero(ssd, sizeof(*ssd)); ssd->gd_looffset = lcall_addr; ssd->gd_hioffset = lcall_addr >> 16; - ssd->gd_selector = _ucode32sel; + ssd->gd_selector = _ucodesel; ssd->gd_type = SDT_SYSCGT; ssd->gd_dpl = SEL_UPL; ssd->gd_p = 1; From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 12:15:02 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 266F5106566B; Tue, 14 Aug 2012 12:15:02 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E87868FC0A; Tue, 14 Aug 2012 12:15:01 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7ECF1Dg093454; Tue, 14 Aug 2012 12:15:01 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7ECF1fM093453; Tue, 14 Aug 2012 12:15:01 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208141215.q7ECF1fM093453@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 14 Aug 2012 12:15:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239252 - head/sys/amd64/amd64 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 12:15:02 -0000 Author: kib Date: Tue Aug 14 12:15:01 2012 New Revision: 239252 URL: http://svn.freebsd.org/changeset/base/239252 Log: Add a hackish debugging facility to provide a bit of information about reason for generated trap. The dump of basic signal information and 8 bytes of the faulting instruction are printed on the controlling terminal of the process, if the machdep.uprintf_signal syscal is enabled. The print is the only practical way to debug traps from a.out processes I am aware of. Because I have to reimplement it each time I debug an issue with a.out support on amd64, commit the hack to main tree. MFC after: 1 week Modified: head/sys/amd64/amd64/trap.c Modified: head/sys/amd64/amd64/trap.c ============================================================================== --- head/sys/amd64/amd64/trap.c Tue Aug 14 12:13:27 2012 (r239251) +++ head/sys/amd64/amd64/trap.c Tue Aug 14 12:15:01 2012 (r239252) @@ -176,9 +176,14 @@ static int panic_on_nmi = 1; SYSCTL_INT(_machdep, OID_AUTO, panic_on_nmi, CTLFLAG_RW, &panic_on_nmi, 0, "Panic on NMI"); TUNABLE_INT("machdep.panic_on_nmi", &panic_on_nmi); -static int prot_fault_translation = 0; +static int prot_fault_translation; SYSCTL_INT(_machdep, OID_AUTO, prot_fault_translation, CTLFLAG_RW, - &prot_fault_translation, 0, "Select signal to deliver on protection fault"); + &prot_fault_translation, 0, + "Select signal to deliver on protection fault"); +static int uprintf_signal; +SYSCTL_INT(_machdep, OID_AUTO, uprintf_signal, CTLFLAG_RW, + &uprintf_signal, 0, + "Print debugging information on trap signal to ctty"); /* * Exception, fault, and trap interface to the FreeBSD kernel. @@ -610,6 +615,19 @@ trap(struct trapframe *frame) ksi.ksi_code = ucode; ksi.ksi_trapno = type; ksi.ksi_addr = (void *)addr; + if (uprintf_signal) { + uprintf("pid %d comm %s: signal %d err %lx code %d type %d " + "addr 0x%lx <%02x %02x %02x %02x %02x %02x %02x %02x>\n", + p->p_pid, p->p_comm, i, frame->tf_err, ucode, type, addr, + fubyte((void *)(frame->tf_rip + 0)), + fubyte((void *)(frame->tf_rip + 1)), + fubyte((void *)(frame->tf_rip + 2)), + fubyte((void *)(frame->tf_rip + 3)), + fubyte((void *)(frame->tf_rip + 4)), + fubyte((void *)(frame->tf_rip + 5)), + fubyte((void *)(frame->tf_rip + 6)), + fubyte((void *)(frame->tf_rip + 7))); + } trapsignal(td, &ksi); user: From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 12:59:23 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E225A106566B; Tue, 14 Aug 2012 12:59:23 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id B4AD58FC0A; Tue, 14 Aug 2012 12:59:23 +0000 (UTC) Received: from ralph.baldwin.cx (c-68-39-198-164.hsd1.de.comcast.net [68.39.198.164]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 1732BB94B; Tue, 14 Aug 2012 08:59:23 -0400 (EDT) From: John Baldwin To: Hans Petter Selasky Date: Tue, 14 Aug 2012 08:32:03 -0400 User-Agent: KMail/1.13.7 (FreeBSD/9.0-STABLE; KDE/4.7.4; amd64; ; ) References: <201208101502.q7AF2ofC046316@svn.freebsd.org> <201208131700.25822.jhb@freebsd.org> <201208140731.58979.hselasky@c2i.net> In-Reply-To: <201208140731.58979.hselasky@c2i.net> MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Message-Id: <201208140832.03702.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Tue, 14 Aug 2012 08:59:23 -0400 (EDT) Cc: "svn-src-head@freebsd.org" , "svn-src-all@freebsd.org" , "src-committers@freebsd.org" Subject: Re: svn commit: r239178 - in head/sys: kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 12:59:24 -0000 On Tuesday, August 14, 2012 01:31:58 AM Hans Petter Selasky wrote: > On Monday 13 August 2012 23:00:25 John Baldwin wrote: > > int > > foo_attach(device_t dev) > > { > > > > struct foo_softc *sc; > > > > sc = malloc(sizeof(struct foo_softc), M_BUS, M_WAITOK | M_ZERO); > > device_set_softc(dev, sc); > > ... > > Hi, > > Here you forget that there are alot of else/if's that need free(sc, M_BUS) > for various failing cases! That's why I say +5 lines. > > BTW: If we do add device_free_softc, would it be an idea to add > device_alloc_softc aswell, to make stuff more clear for the drivers? No. I can't think of any reasonable use case for a driver to do that (i.e. not let new-bus auto-allocate a softc) where they shouldn't just manage the entire life cycle themselves. Also, I still think an extra 5 lines is not too tall of a price to pay to explicitly note that a given driver uses an abnormal softc life cycle. However, I think having a device_claim/steal_softc() / device_free_softc() is clearer than the current approach. -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 13:28:31 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2D2D3106566B; Tue, 14 Aug 2012 13:28:31 +0000 (UTC) (envelope-from kan@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F2EEF8FC12; Tue, 14 Aug 2012 13:28:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EDSUF8001367; Tue, 14 Aug 2012 13:28:30 GMT (envelope-from kan@svn.freebsd.org) Received: (from kan@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EDSU0Y001365; Tue, 14 Aug 2012 13:28:30 GMT (envelope-from kan@svn.freebsd.org) Message-Id: <201208141328.q7EDSU0Y001365@svn.freebsd.org> From: Alexander Kabaev Date: Tue, 14 Aug 2012 13:28:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239253 - head/libexec/rtld-elf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 13:28:31 -0000 Author: kan Date: Tue Aug 14 13:28:30 2012 New Revision: 239253 URL: http://svn.freebsd.org/changeset/base/239253 Log: Pospone the DF_1_NODELETE processing until object DAG is fully loaded. Trying to up the reference from the load loop risks missing dependencies that have not been loaded yet. MFC afer: 1 week Reported by: nox Reviewd by: kib Modified: head/libexec/rtld-elf/rtld.c Modified: head/libexec/rtld-elf/rtld.c ============================================================================== --- head/libexec/rtld-elf/rtld.c Tue Aug 14 12:15:01 2012 (r239252) +++ head/libexec/rtld-elf/rtld.c Tue Aug 14 13:28:30 2012 (r239253) @@ -1743,6 +1743,26 @@ init_dag(Obj_Entry *root) root->dag_inited = true; } +static void +process_nodelete(Obj_Entry *root) +{ + const Objlist_Entry *elm; + + /* + * Walk over object DAG and process every dependent object that + * is marked as DF_1_NODELETE. They need to grow their own DAG, + * which then should have its reference upped separately. + */ + STAILQ_FOREACH(elm, &root->dagmembers, link) { + if (elm->obj != NULL && elm->obj->z_nodelete && + !elm->obj->ref_nodel) { + dbg("obj %s nodelete", elm->obj->path); + init_dag(elm->obj); + ref_dag(elm->obj); + elm->obj->ref_nodel = true; + } + } +} /* * Initialize the dynamic linker. The argument is the address at which * the dynamic linker has been mapped into memory. The primary task of @@ -1932,12 +1952,6 @@ process_needed(Obj_Entry *obj, Needed_En flags & ~RTLD_LO_NOLOAD); if (obj1 == NULL && !ld_tracing && (flags & RTLD_LO_FILTEES) == 0) return (-1); - if (obj1 != NULL && obj1->z_nodelete && !obj1->ref_nodel) { - dbg("obj %s nodelete", obj1->path); - init_dag(obj1); - ref_dag(obj1); - obj1->ref_nodel = true; - } } return (0); } @@ -2833,8 +2847,14 @@ dlopen_object(const char *name, int fd, /* Make list of init functions to call. */ initlist_add_objects(obj, &obj->next, &initlist); } + /* + * Process all no_delete objects here, given them own + * DAGs to prevent their dependencies from being unloaded. + * This has to be done after we have loaded all of the + * dependencies, so that we do not miss any. + */ + process_nodelete(obj); } else { - /* * Bump the reference counts for objects on this DAG. If * this is the first dlopen() call for the object that was From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 14:07:34 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BCF56106564A; Tue, 14 Aug 2012 14:07:34 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A837D8FC0A; Tue, 14 Aug 2012 14:07:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EE7Ykn005511; Tue, 14 Aug 2012 14:07:34 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EE7Yus005509; Tue, 14 Aug 2012 14:07:34 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201208141407.q7EE7Yus005509@svn.freebsd.org> From: Alexander Motin Date: Tue, 14 Aug 2012 14:07:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239254 - head/sys/dev/sound/pci/hda X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 14:07:34 -0000 Author: mav Date: Tue Aug 14 14:07:34 2012 New Revision: 239254 URL: http://svn.freebsd.org/changeset/base/239254 Log: Fix multichannel input signals tracing on some CODECs like ALC260. Reported and tested by: Slawa Olhovchenkov MFC after: 1 month Modified: head/sys/dev/sound/pci/hda/hdaa.c Modified: head/sys/dev/sound/pci/hda/hdaa.c ============================================================================== --- head/sys/dev/sound/pci/hda/hdaa.c Tue Aug 14 13:28:30 2012 (r239253) +++ head/sys/dev/sound/pci/hda/hdaa.c Tue Aug 14 14:07:34 2012 (r239254) @@ -3068,8 +3068,7 @@ hdaa_audio_trace_adc(struct hdaa_devinfo if ((only == 0 || only == w->nid) && (w->nid >= min) && (onlylength == 0 || onlylength == depth)) { m = w->nid; - if (length != NULL) - *length = depth; + *length = depth; } break; case HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_PIN_COMPLEX: @@ -3092,12 +3091,12 @@ hdaa_audio_trace_adc(struct hdaa_devinfo j, mixed, min, only, depth + 1, length, onlylength)) != 0) { if (m == 0 || ret < m || - (ret == m && length != NULL && - *length < lm)) { + (ret == m && *length < lm)) { m = ret; im = i; lm = *length; - } + } else + *length = lm; if (only) break; } From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 17:01:22 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1B4871065672; Tue, 14 Aug 2012 17:01:22 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 048318FC12; Tue, 14 Aug 2012 17:01:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EH1L2x023608; Tue, 14 Aug 2012 17:01:21 GMT (envelope-from des@svn.freebsd.org) Received: (from des@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EH1LVD023603; Tue, 14 Aug 2012 17:01:21 GMT (envelope-from des@svn.freebsd.org) Message-Id: <201208141701.q7EH1LVD023603@svn.freebsd.org> From: Dag-Erling Smørgrav Date: Tue, 14 Aug 2012 17:01:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239255 - in head/sys: amd64/include boot/common i386/include X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 17:01:22 -0000 Author: des Date: Tue Aug 14 17:01:21 2012 New Revision: 239255 URL: http://svn.freebsd.org/changeset/base/239255 Log: As discussed on -current, remove the hardcoded default maxswzone. MFC after: 3 weeks Modified: head/sys/amd64/include/param.h head/sys/boot/common/loader.8 head/sys/i386/include/param.h Modified: head/sys/amd64/include/param.h ============================================================================== --- head/sys/amd64/include/param.h Tue Aug 14 14:07:34 2012 (r239254) +++ head/sys/amd64/include/param.h Tue Aug 14 17:01:21 2012 (r239255) @@ -123,14 +123,6 @@ #define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */ /* - * Ceiling on amount of swblock kva space, can be changed via - * the kern.maxswzone /boot/loader.conf variable. - */ -#ifndef VM_SWZONE_SIZE_MAX -#define VM_SWZONE_SIZE_MAX (32 * 1024 * 1024) -#endif - -/* * Mach derived conversion macros */ #define round_page(x) ((((unsigned long)(x)) + PAGE_MASK) & ~(PAGE_MASK)) Modified: head/sys/boot/common/loader.8 ============================================================================== --- head/sys/boot/common/loader.8 Tue Aug 14 14:07:34 2012 (r239254) +++ head/sys/boot/common/loader.8 Tue Aug 14 17:01:21 2012 (r239255) @@ -613,17 +613,26 @@ Not all architectures use such buffers; for details. .It Va kern.maxswzone Limits the amount of KVM to be used to hold swap -meta information, which directly governs the -maximum amount of swap the system can support. -This value is specified in bytes of KVA space -and defaults to 32MBytes on i386 and amd64. -Care should be taken -to not reduce this value such that the actual -amount of configured swap exceeds 1/2 the -kernel-supported swap. -The default of 32MB allows -the kernel to support a maximum of ~7GB of swap. -Only change +metadata, which directly governs the +maximum amount of swap the system can support, +at the rate of approximately 200 MB of swap space +per 1 MB of metadata. +This value is specified in bytes of KVA space. +If no value is provided, the system allocates +enough memory to handle an amount of swap +that corresponds to eight times the amount of +physical memory present in the system. +.Pp +Note that swap metadata can be fragmented, +which means that the system can run out of +space before it reaches the theoretical limit. +Therefore, care should be taken to not configure +more swap than approximately half of the +theoretical maximum. +.Pp +Running out of space for swap metadata can leave +the system in an unrecoverable state. +Therefore, you should only change this parameter if you need to greatly extend the KVM reservation for other resources such as the buffer cache or Modified: head/sys/i386/include/param.h ============================================================================== --- head/sys/i386/include/param.h Tue Aug 14 14:07:34 2012 (r239254) +++ head/sys/i386/include/param.h Tue Aug 14 17:01:21 2012 (r239255) @@ -123,14 +123,6 @@ #define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */ /* - * Ceiling on amount of swblock kva space, can be changed via - * the kern.maxswzone /boot/loader.conf variable. - */ -#ifndef VM_SWZONE_SIZE_MAX -#define VM_SWZONE_SIZE_MAX (32 * 1024 * 1024) -#endif - -/* * Ceiling on size of buffer cache (really only effects write queueing, * the VM page cache is not effected), can be changed via * the kern.maxbcache /boot/loader.conf variable. From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 19:16:30 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BE842106566C; Tue, 14 Aug 2012 19:16:30 +0000 (UTC) (envelope-from jh@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A9AF08FC0C; Tue, 14 Aug 2012 19:16:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EJGUDB039315; Tue, 14 Aug 2012 19:16:30 GMT (envelope-from jh@svn.freebsd.org) Received: (from jh@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EJGUHd039313; Tue, 14 Aug 2012 19:16:30 GMT (envelope-from jh@svn.freebsd.org) Message-Id: <201208141916.q7EJGUHd039313@svn.freebsd.org> From: Jaakko Heinonen Date: Tue, 14 Aug 2012 19:16:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239257 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 19:16:30 -0000 Author: jh Date: Tue Aug 14 19:16:30 2012 New Revision: 239257 URL: http://svn.freebsd.org/changeset/base/239257 Log: Reserve room for the terminating NUL when setting or getting kernel environment variables. KENV_MNAMELEN and KENV_MVALLEN doesn't include space for the terminating NUL. Modified: head/sys/kern/kern_environment.c Modified: head/sys/kern/kern_environment.c ============================================================================== --- head/sys/kern/kern_environment.c Tue Aug 14 17:53:52 2012 (r239256) +++ head/sys/kern/kern_environment.c Tue Aug 14 19:16:30 2012 (r239257) @@ -143,9 +143,9 @@ sys_kenv(td, uap) break; } - name = malloc(KENV_MNAMELEN, M_TEMP, M_WAITOK); + name = malloc(KENV_MNAMELEN + 1, M_TEMP, M_WAITOK); - error = copyinstr(uap->name, name, KENV_MNAMELEN, NULL); + error = copyinstr(uap->name, name, KENV_MNAMELEN + 1, NULL); if (error) goto done; @@ -176,8 +176,8 @@ sys_kenv(td, uap) error = EINVAL; goto done; } - if (len > KENV_MVALLEN) - len = KENV_MVALLEN; + if (len > KENV_MVALLEN + 1) + len = KENV_MVALLEN + 1; value = malloc(len, M_TEMP, M_WAITOK); error = copyinstr(uap->value, value, len, NULL); if (error) { @@ -389,10 +389,10 @@ setenv(const char *name, const char *val KENV_CHECK; namelen = strlen(name) + 1; - if (namelen > KENV_MNAMELEN) + if (namelen > KENV_MNAMELEN + 1) return (-1); vallen = strlen(value) + 1; - if (vallen > KENV_MVALLEN) + if (vallen > KENV_MVALLEN + 1) return (-1); buf = malloc(namelen + vallen, M_KENV, M_WAITOK); sprintf(buf, "%s=%s", name, value); From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 21:47:42 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7AFF11065673; Tue, 14 Aug 2012 21:47:42 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5AE4F8FC1A; Tue, 14 Aug 2012 21:47:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7ELlgts055096; Tue, 14 Aug 2012 21:47:42 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7ELlgI9055093; Tue, 14 Aug 2012 21:47:42 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208142147.q7ELlgI9055093@svn.freebsd.org> From: Navdeep Parhar Date: Tue, 14 Aug 2012 21:47:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239258 - head/sys/dev/cxgbe X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 21:47:42 -0000 Author: np Date: Tue Aug 14 21:47:41 2012 New Revision: 239258 URL: http://svn.freebsd.org/changeset/base/239258 Log: Convert some fixed parameters to tunables (with reasonable default values). - cong_drop specifies what to do on congestion: nothing, backpressure, or drop. - fl_pktshift specifies the padding before Ethernet payload. - fl_pad specifies the boundary upto which to pad Ethernet payload. - spg_len controls the length of the status page. MFC after: 2 weeks Modified: head/sys/dev/cxgbe/t4_main.c head/sys/dev/cxgbe/t4_sge.c Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Tue Aug 14 19:16:30 2012 (r239257) +++ head/sys/dev/cxgbe/t4_main.c Tue Aug 14 21:47:41 2012 (r239258) @@ -517,7 +517,9 @@ t4_attach(device_t dev) sc->params.b_wnd); t4_write_reg(sc, A_ULP_RX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12)); t4_set_reg_field(sc, A_TP_PARA_REG3, F_TUNNELCNGDROP0 | - F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | F_TUNNELCNGDROP3, 0); + F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | F_TUNNELCNGDROP3, + F_TUNNELCNGDROP0 | F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | + F_TUNNELCNGDROP3); t4_set_reg_field(sc, A_TP_PARA_REG5, V_INDICATESIZE(M_INDICATESIZE) | F_REARMDDPOFFSET | F_RESETDDPOFFSET, Modified: head/sys/dev/cxgbe/t4_sge.c ============================================================================== --- head/sys/dev/cxgbe/t4_sge.c Tue Aug 14 19:16:30 2012 (r239257) +++ head/sys/dev/cxgbe/t4_sge.c Tue Aug 14 21:47:41 2012 (r239258) @@ -68,12 +68,37 @@ static struct fl_buf_info fl_buf_info[FL #define FL_BUF_TYPE(x) (fl_buf_info[x].type) #define FL_BUF_ZONE(x) (fl_buf_info[x].zone) -enum { - FL_PKTSHIFT = 2 -}; +/* + * Ethernet frames are DMA'd at this byte offset into the freelist buffer. + * 0-7 are valid values. + */ +static int fl_pktshift = 2; +TUNABLE_INT("hw.cxgbe.fl_pktshift", &fl_pktshift); -static int fl_pad = CACHE_LINE_SIZE; -static int spg_len = 64; +/* + * Pad ethernet payload up to this boundary. + * -1: driver should figure out a good value. + * Any power of 2, from 32 to 4096 (both inclusive) is a valid value. + */ +static int fl_pad = -1; +TUNABLE_INT("hw.cxgbe.fl_pad", &fl_pad); + +/* + * Status page length. + * -1: driver should figure out a good value. + * 64 or 128 are the only other valid values. + */ +static int spg_len = -1; +TUNABLE_INT("hw.cxgbe.spg_len", &spg_len); + +/* + * Congestion drops. + * -1: no congestion feedback (not recommended). + * 0: backpressure the channel instead of dropping packets right away. + * 1: no backpressure, drop packets for the congested queue immediately. + */ +static int cong_drop = 0; +TUNABLE_INT("hw.cxgbe.cong_drop", &cong_drop); /* Used to track coalesced tx work request */ struct txpkts { @@ -170,7 +195,8 @@ extern u_int cpu_clflush_line_size; #endif /* - * Called on MOD_LOAD and fills up fl_buf_info[]. + * Called on MOD_LOAD. Fills up fl_buf_info[] and validates/calculates the SGE + * tunables. */ void t4_sge_modload(void) @@ -191,10 +217,49 @@ t4_sge_modload(void) FL_BUF_ZONE(i) = m_getzone(bufsize[i]); } + if (fl_pktshift < 0 || fl_pktshift > 7) { + printf("Invalid hw.cxgbe.fl_pktshift value (%d)," + " using 2 instead.\n", fl_pktshift); + fl_pktshift = 2; + } + + if (fl_pad < 32 || fl_pad > 4096 || !powerof2(fl_pad)) { + int pad; + +#if defined(__i386__) || defined(__amd64__) + pad = max(cpu_clflush_line_size, 32); +#else + pad = max(CACHE_LINE_SIZE, 32); +#endif + pad = min(pad, 4096); + + if (fl_pad != -1) { + printf("Invalid hw.cxgbe.fl_pad value (%d)," + " using %d instead.\n", fl_pad, pad); + } + fl_pad = pad; + } + + if (spg_len != 64 && spg_len != 128) { + int len; + #if defined(__i386__) || defined(__amd64__) - fl_pad = max(cpu_clflush_line_size, 32); - spg_len = cpu_clflush_line_size > 64 ? 128 : 64; + len = cpu_clflush_line_size > 64 ? 128 : 64; +#else + len = 64; #endif + if (spg_len != -1) { + printf("Invalid hw.cxgbe.spg_len value (%d)," + " using %d instead.\n", spg_len, len); + } + spg_len = len; + } + + if (cong_drop < -1 || cong_drop > 1) { + printf("Invalid hw.cxgbe.cong_drop value (%d)," + " using 0 instead.\n", cong_drop); + cong_drop = 0; + } } /** @@ -215,7 +280,7 @@ t4_sge_init(struct adapter *sc) ctrl_mask = V_PKTSHIFT(M_PKTSHIFT) | F_RXPKTCPLMODE | V_INGPADBOUNDARY(M_INGPADBOUNDARY) | F_EGRSTATUSPAGESIZE; - ctrl_val = V_PKTSHIFT(FL_PKTSHIFT) | F_RXPKTCPLMODE | + ctrl_val = V_PKTSHIFT(fl_pktshift) | F_RXPKTCPLMODE | V_INGPADBOUNDARY(ilog2(fl_pad) - 5) | V_EGRSTATUSPAGESIZE(spg_len == 128); @@ -1050,9 +1115,9 @@ t4_eth_rx(struct sge_iq *iq, const struc KASSERT(m0 != NULL, ("%s: no payload with opcode %02x", __func__, rss->opcode)); - m0->m_pkthdr.len -= FL_PKTSHIFT; - m0->m_len -= FL_PKTSHIFT; - m0->m_data += FL_PKTSHIFT; + m0->m_pkthdr.len -= fl_pktshift; + m0->m_len -= fl_pktshift; + m0->m_data += fl_pktshift; m0->m_pkthdr.rcvif = ifp; m0->m_flags |= M_FLOWID; @@ -1390,7 +1455,7 @@ t4_update_fl_bufsize(struct ifnet *ifp) /* large enough for a frame even when VLAN extraction is disabled */ bufsize = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + ifp->if_mtu; - bufsize = roundup(bufsize + FL_PKTSHIFT, fl_pad); + bufsize = roundup(bufsize + fl_pktshift, fl_pad); for_each_rxq(pi, i, rxq) { fl = &rxq->fl; @@ -1793,6 +1858,18 @@ free_mgmtq(struct adapter *sc) return free_wrq(sc, &sc->sge.mgmtq); } +static inline int +tnl_cong(struct port_info *pi) +{ + + if (cong_drop == -1) + return (-1); + else if (cong_drop == 1) + return (0); + else + return (1 << pi->tx_chan); +} + static int alloc_rxq(struct port_info *pi, struct sge_rxq *rxq, int intr_idx, int idx, struct sysctl_oid *oid) @@ -1801,7 +1878,7 @@ alloc_rxq(struct port_info *pi, struct s struct sysctl_oid_list *children; char name[16]; - rc = alloc_iq_fl(pi, &rxq->iq, &rxq->fl, intr_idx, 1 << pi->tx_chan); + rc = alloc_iq_fl(pi, &rxq->iq, &rxq->fl, intr_idx, tnl_cong(pi)); if (rc != 0) return (rc); From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 22:15:13 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 61DFC106566B; Tue, 14 Aug 2012 22:15:13 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4E05C8FC12; Tue, 14 Aug 2012 22:15:13 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EMFDpI058057; Tue, 14 Aug 2012 22:15:13 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EMFDBI058055; Tue, 14 Aug 2012 22:15:13 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208142215.q7EMFDBI058055@svn.freebsd.org> From: Navdeep Parhar Date: Tue, 14 Aug 2012 22:15:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239259 - head/sys/dev/cxgbe X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 22:15:13 -0000 Author: np Date: Tue Aug 14 22:15:12 2012 New Revision: 239259 URL: http://svn.freebsd.org/changeset/base/239259 Log: if_iqdrops should include frames truncated within the chip. MFC after: 2 weeks Modified: head/sys/dev/cxgbe/t4_main.c Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Tue Aug 14 21:47:41 2012 (r239258) +++ head/sys/dev/cxgbe/t4_main.c Tue Aug 14 22:15:12 2012 (r239259) @@ -2944,7 +2944,8 @@ cxgbe_tick(void *arg) ifp->if_omcasts = s->tx_mcast_frames - s->tx_pause; ifp->if_imcasts = s->rx_mcast_frames - s->rx_pause; ifp->if_iqdrops = s->rx_ovflow0 + s->rx_ovflow1 + s->rx_ovflow2 + - s->rx_ovflow3; + s->rx_ovflow3 + s->rx_trunc0 + s->rx_trunc1 + s->rx_trunc2 + + s->rx_trunc3; drops = s->tx_drop; for_each_txq(pi, i, txq) From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 22:21:47 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9BF681065675; Tue, 14 Aug 2012 22:21:47 +0000 (UTC) (envelope-from gavin@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8687D8FC1A; Tue, 14 Aug 2012 22:21:47 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EMLlAM058778; Tue, 14 Aug 2012 22:21:47 GMT (envelope-from gavin@svn.freebsd.org) Received: (from gavin@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EMLlQc058776; Tue, 14 Aug 2012 22:21:47 GMT (envelope-from gavin@svn.freebsd.org) Message-Id: <201208142221.q7EMLlQc058776@svn.freebsd.org> From: Gavin Atkinson Date: Tue, 14 Aug 2012 22:21:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239260 - head/sys/dev/usb/serial X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 22:21:47 -0000 Author: gavin Date: Tue Aug 14 22:21:46 2012 New Revision: 239260 URL: http://svn.freebsd.org/changeset/base/239260 Log: Rename command defines to match names used in the datasheet, in order to make maintaining this driver from the documentation easier in the future. This is a mostly mechanical change. In uslcom_param(), move the zeroing of the final two fields of the flowctrl structure outside of the "if CRTSCTS" section - not only were they being zeroed in both the clauses, but these two fields have nothing to do with hardware flow control anyway. Modified: head/sys/dev/usb/serial/uslcom.c Modified: head/sys/dev/usb/serial/uslcom.c ============================================================================== --- head/sys/dev/usb/serial/uslcom.c Tue Aug 14 22:15:12 2012 (r239259) +++ head/sys/dev/usb/serial/uslcom.c Tue Aug 14 22:21:46 2012 (r239260) @@ -19,6 +19,12 @@ __FBSDID("$FreeBSD$"); * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +/* + * Driver for Silicon Laboratories CP2101/CP2102/CP2103/CP2104/CP2105 + * USB-Serial adapters. Based on datasheet AN571, publicly available from + * http://www.silabs.com/Support%20Documents/TechnicalDocs/AN571.pdf + */ + #include #include #include @@ -61,55 +67,54 @@ SYSCTL_INT(_hw_usb_uslcom, OID_AUTO, deb #define USLCOM_BULK_BUF_SIZE 1024 #define USLCOM_CONFIG_INDEX 0 -#define USLCOM_SET_DATA_BITS(x) ((x) << 8) - /* Request types */ #define USLCOM_WRITE 0x41 #define USLCOM_READ 0xc1 /* Request codes */ -#define USLCOM_UART 0x00 -#define USLCOM_SET_BAUD_DIV 0x01 -#define USLCOM_DATA 0x03 -#define USLCOM_BREAK 0x05 -#define USLCOM_CTRL 0x07 -#define USLCOM_RCTRL 0x08 -#define USLCOM_SET_FLOWCTRL 0x13 -#define USLCOM_SET_BAUD_RATE 0x1e +#define USLCOM_IFC_ENABLE 0x00 +#define USLCOM_SET_BAUDDIV 0x01 +#define USLCOM_SET_LINE_CTL 0x03 +#define USLCOM_SET_BREAK 0x05 +#define USLCOM_SET_MHS 0x07 +#define USLCOM_GET_MDMSTS 0x08 +#define USLCOM_SET_FLOW 0x13 +#define USLCOM_SET_BAUDRATE 0x1e #define USLCOM_VENDOR_SPECIFIC 0xff -/* USLCOM_UART values */ -#define USLCOM_UART_DISABLE 0x00 -#define USLCOM_UART_ENABLE 0x01 - -/* USLCOM_CTRL/USLCOM_RCTRL values */ -#define USLCOM_CTRL_DTR_ON 0x0001 -#define USLCOM_CTRL_DTR_SET 0x0100 -#define USLCOM_CTRL_RTS_ON 0x0002 -#define USLCOM_CTRL_RTS_SET 0x0200 -#define USLCOM_CTRL_CTS 0x0010 -#define USLCOM_CTRL_DSR 0x0020 -#define USLCOM_CTRL_RI 0x0040 -#define USLCOM_CTRL_DCD 0x0080 +/* USLCOM_IFC_ENABLE values */ +#define USLCOM_IFC_ENABLE_DIS 0x00 +#define USLCOM_IFC_ENABLE_EN 0x01 + +/* USLCOM_SET_MHS/USLCOM_GET_MDMSTS values */ +#define USLCOM_MHS_DTR_ON 0x0001 +#define USLCOM_MHS_DTR_SET 0x0100 +#define USLCOM_MHS_RTS_ON 0x0002 +#define USLCOM_MHS_RTS_SET 0x0200 +#define USLCOM_MHS_CTS 0x0010 +#define USLCOM_MHS_DSR 0x0020 +#define USLCOM_MHS_RI 0x0040 +#define USLCOM_MHS_DCD 0x0080 -/* USLCOM_SET_BAUD_DIV values */ -#define USLCOM_BAUD_REF 3686400 /* 3.6864 MHz */ +/* USLCOM_SET_BAUDDIV values */ +#define USLCOM_BAUDDIV_REF 3686400 /* 3.6864 MHz */ -/* USLCOM_DATA values */ +/* USLCOM_SET_LINE_CTL values */ #define USLCOM_STOP_BITS_1 0x00 #define USLCOM_STOP_BITS_2 0x02 #define USLCOM_PARITY_NONE 0x00 #define USLCOM_PARITY_ODD 0x10 #define USLCOM_PARITY_EVEN 0x20 +#define USLCOM_SET_DATA_BITS(x) ((x) << 8) -/* USLCOM_BREAK values */ -#define USLCOM_BREAK_OFF 0x00 -#define USLCOM_BREAK_ON 0x01 +/* USLCOM_SET_BREAK values */ +#define USLCOM_SET_BREAK_OFF 0x00 +#define USLCOM_SET_BREAK_ON 0x01 -/* USLCOM_SET_FLOWCTRL values - 1st word */ +/* USLCOM_SET_FLOW values - 1st word */ #define USLCOM_FLOW_DTR_ON 0x00000001 /* DTR static active */ #define USLCOM_FLOW_CTS_HS 0x00000008 /* CTS handshake */ -/* USLCOM_SET_FLOWCTRL values - 2nd word */ +/* USLCOM_SET_FLOW values - 2nd word */ #define USLCOM_FLOW_RTS_ON 0x00000040 /* RTS static active */ #define USLCOM_FLOW_RTS_HS 0x00000080 /* RTS handshake */ @@ -460,8 +465,8 @@ uslcom_open(struct ucom_softc *ucom) struct usb_device_request req; req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_UART; - USETW(req.wValue, USLCOM_UART_ENABLE); + req.bRequest = USLCOM_IFC_ENABLE; + USETW(req.wValue, USLCOM_IFC_ENABLE_EN); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, 0); @@ -484,8 +489,8 @@ uslcom_close(struct ucom_softc *ucom) usb_callout_stop(&sc->sc_watchdog); req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_UART; - USETW(req.wValue, USLCOM_UART_DISABLE); + req.bRequest = USLCOM_IFC_ENABLE; + USETW(req.wValue, USLCOM_IFC_ENABLE_DIS); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, 0); @@ -504,11 +509,11 @@ uslcom_set_dtr(struct ucom_softc *ucom, DPRINTF("onoff = %d\n", onoff); - ctl = onoff ? USLCOM_CTRL_DTR_ON : 0; - ctl |= USLCOM_CTRL_DTR_SET; + ctl = onoff ? USLCOM_MHS_DTR_ON : 0; + ctl |= USLCOM_MHS_DTR_SET; req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_CTRL; + req.bRequest = USLCOM_SET_MHS; USETW(req.wValue, ctl); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, 0); @@ -528,11 +533,11 @@ uslcom_set_rts(struct ucom_softc *ucom, DPRINTF("onoff = %d\n", onoff); - ctl = onoff ? USLCOM_CTRL_RTS_ON : 0; - ctl |= USLCOM_CTRL_RTS_SET; + ctl = onoff ? USLCOM_MHS_RTS_ON : 0; + ctl |= USLCOM_MHS_RTS_SET; req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_CTRL; + req.bRequest = USLCOM_SET_MHS; USETW(req.wValue, ctl); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, 0); @@ -563,7 +568,7 @@ uslcom_param(struct ucom_softc *ucom, st baudrate = t->c_ospeed; req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_SET_BAUD_RATE; + req.bRequest = USLCOM_SET_BAUDRATE; USETW(req.wValue, 0); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, sizeof(baudrate)); @@ -600,7 +605,7 @@ uslcom_param(struct ucom_softc *ucom, st } req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_DATA; + req.bRequest = USLCOM_SET_LINE_CTL; USETW(req.wValue, data); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, 0); @@ -613,16 +618,14 @@ uslcom_param(struct ucom_softc *ucom, st if (t->c_cflag & CRTSCTS) { flowctrl[0] = htole32(USLCOM_FLOW_DTR_ON | USLCOM_FLOW_CTS_HS); flowctrl[1] = htole32(USLCOM_FLOW_RTS_HS); - flowctrl[2] = 0; - flowctrl[3] = 0; } else { flowctrl[0] = htole32(USLCOM_FLOW_DTR_ON); flowctrl[1] = htole32(USLCOM_FLOW_RTS_ON); - flowctrl[2] = 0; - flowctrl[3] = 0; } + flowctrl[2] = 0; + flowctrl[3] = 0; req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_SET_FLOWCTRL; + req.bRequest = USLCOM_SET_FLOW; USETW(req.wValue, 0); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, sizeof(flowctrl)); @@ -649,10 +652,10 @@ uslcom_set_break(struct ucom_softc *ucom { struct uslcom_softc *sc = ucom->sc_parent; struct usb_device_request req; - uint16_t brk = onoff ? USLCOM_BREAK_ON : USLCOM_BREAK_OFF; + uint16_t brk = onoff ? USLCOM_SET_BREAK_ON : USLCOM_SET_BREAK_OFF; req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_BREAK; + req.bRequest = USLCOM_SET_BREAK; USETW(req.wValue, brk); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, 0); @@ -787,13 +790,13 @@ uslcom_control_callback(struct usb_xfer case USB_ST_TRANSFERRED: pc = usbd_xfer_get_frame(xfer, 1); usbd_copy_out(pc, 0, &buf, sizeof(buf)); - if (buf & USLCOM_CTRL_CTS) + if (buf & USLCOM_MHS_CTS) msr |= SER_CTS; - if (buf & USLCOM_CTRL_DSR) + if (buf & USLCOM_MHS_DSR) msr |= SER_DSR; - if (buf & USLCOM_CTRL_RI) + if (buf & USLCOM_MHS_RI) msr |= SER_RI; - if (buf & USLCOM_CTRL_DCD) + if (buf & USLCOM_MHS_DCD) msr |= SER_DCD; if (msr != sc->sc_msr) { @@ -806,7 +809,7 @@ uslcom_control_callback(struct usb_xfer case USB_ST_SETUP: req.bmRequestType = USLCOM_READ; - req.bRequest = USLCOM_RCTRL; + req.bRequest = USLCOM_GET_MDMSTS; USETW(req.wValue, 0); USETW(req.wIndex, sc->sc_iface_no); USETW(req.wLength, sizeof(buf)); From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 22:30:17 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D1536106566B; Tue, 14 Aug 2012 22:30:17 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BBC458FC0A; Tue, 14 Aug 2012 22:30:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EMUHZm059705; Tue, 14 Aug 2012 22:30:17 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EMUHPI059703; Tue, 14 Aug 2012 22:30:17 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208142230.q7EMUHPI059703@svn.freebsd.org> From: Adrian Chadd Date: Tue, 14 Aug 2012 22:30:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239261 - head/sys/dev/ath X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 22:30:17 -0000 Author: adrian Date: Tue Aug 14 22:30:17 2012 New Revision: 239261 URL: http://svn.freebsd.org/changeset/base/239261 Log: Add an assertion to check that the given TXQ is _not_ locked. Modified: head/sys/dev/ath/if_athvar.h Modified: head/sys/dev/ath/if_athvar.h ============================================================================== --- head/sys/dev/ath/if_athvar.h Tue Aug 14 22:21:46 2012 (r239260) +++ head/sys/dev/ath/if_athvar.h Tue Aug 14 22:30:17 2012 (r239261) @@ -327,7 +327,10 @@ struct ath_txq { #define ATH_TXQ_LOCK_DESTROY(_tq) mtx_destroy(&(_tq)->axq_lock) #define ATH_TXQ_LOCK(_tq) mtx_lock(&(_tq)->axq_lock) #define ATH_TXQ_UNLOCK(_tq) mtx_unlock(&(_tq)->axq_lock) -#define ATH_TXQ_LOCK_ASSERT(_tq) mtx_assert(&(_tq)->axq_lock, MA_OWNED) +#define ATH_TXQ_LOCK_ASSERT(_tq) \ + mtx_assert(&(_tq)->axq_lock, MA_OWNED) +#define ATH_TXQ_UNLOCK_ASSERT(_tq) \ + mtx_assert(&(_tq)->axq_lock, MA_NOTOWNED) #define ATH_TXQ_IS_LOCKED(_tq) mtx_owned(&(_tq)->axq_lock) #define ATH_TID_LOCK_ASSERT(_sc, _tid) \ From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 22:32:21 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7700E106564A; Tue, 14 Aug 2012 22:32:21 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 56A7A8FC0A; Tue, 14 Aug 2012 22:32:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EMWL2d059951; Tue, 14 Aug 2012 22:32:21 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EMWLaq059948; Tue, 14 Aug 2012 22:32:21 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208142232.q7EMWLaq059948@svn.freebsd.org> From: Adrian Chadd Date: Tue, 14 Aug 2012 22:32:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239262 - head/sys/dev/ath X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 22:32:21 -0000 Author: adrian Date: Tue Aug 14 22:32:20 2012 New Revision: 239262 URL: http://svn.freebsd.org/changeset/base/239262 Log: Break out the TX completion code into a separate function, so it can be re-used by the upcoming EDMA TX completion code. Make ath_stoptxdma() public, again so the EDMA TX code can use it. Don't check for the TXQ bitmap in the ISR when doing EDMA work as it doesn't apply for EDMA. Modified: head/sys/dev/ath/if_ath.c head/sys/dev/ath/if_ath_misc.h Modified: head/sys/dev/ath/if_ath.c ============================================================================== --- head/sys/dev/ath/if_ath.c Tue Aug 14 22:30:17 2012 (r239261) +++ head/sys/dev/ath/if_ath.c Tue Aug 14 22:32:20 2012 (r239262) @@ -1675,12 +1675,14 @@ ath_intr(void *arg) * and blank them. This is the only place we should be * doing this. */ - ATH_PCU_LOCK(sc); - txqs = 0xffffffff; - ath_hal_gettxintrtxqs(sc->sc_ah, &txqs); - sc->sc_txq_active |= txqs; + if (! sc->sc_isedma) { + ATH_PCU_LOCK(sc); + txqs = 0xffffffff; + ath_hal_gettxintrtxqs(sc->sc_ah, &txqs); + sc->sc_txq_active |= txqs; + ATH_PCU_UNLOCK(sc); + } taskqueue_enqueue(sc->sc_tq, &sc->sc_txtask); - ATH_PCU_UNLOCK(sc); } if (status & HAL_INT_BMISS) { sc->sc_stats.ast_bmiss++; @@ -3582,6 +3584,56 @@ ath_tx_update_busy(struct ath_softc *sc) } /* + * Process the completion of the given buffer. + * + * This calls the rate control update and then the buffer completion. + * This will either free the buffer or requeue it. In any case, the + * bf pointer should be treated as invalid after this function is called. + */ +void +ath_tx_process_buf_completion(struct ath_softc *sc, struct ath_txq *txq, + struct ath_tx_status *ts, struct ath_buf *bf) +{ + struct ieee80211_node *ni = bf->bf_node; + struct ath_node *an = NULL; + + ATH_TXQ_UNLOCK_ASSERT(txq); + + /* If unicast frame, update general statistics */ + if (ni != NULL) { + an = ATH_NODE(ni); + /* update statistics */ + ath_tx_update_stats(sc, ts, bf); + } + + /* + * Call the completion handler. + * The completion handler is responsible for + * calling the rate control code. + * + * Frames with no completion handler get the + * rate control code called here. + */ + if (bf->bf_comp == NULL) { + if ((ts->ts_status & HAL_TXERR_FILT) == 0 && + (bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0) { + /* + * XXX assume this isn't an aggregate + * frame. + */ + ath_tx_update_ratectrl(sc, ni, + bf->bf_state.bfs_rc, ts, + bf->bf_state.bfs_pktlen, 1, + (ts->ts_status == 0 ? 0 : 1)); + } + ath_tx_default_comp(sc, bf, 0); + } else + bf->bf_comp(sc, bf, 0); +} + + + +/* * Process completed xmit descriptors from the specified queue. * Kick the packet scheduler if needed. This can occur from this * particular task. @@ -3594,7 +3646,6 @@ ath_tx_processq(struct ath_softc *sc, st struct ath_desc *ds; struct ath_tx_status *ts; struct ieee80211_node *ni; - struct ath_node *an; #ifdef IEEE80211_SUPPORT_SUPERG struct ieee80211com *ic = sc->sc_ifp->if_l2com; #endif /* IEEE80211_SUPPORT_SUPERG */ @@ -3666,36 +3717,12 @@ ath_tx_processq(struct ath_softc *sc, st } ATH_TXQ_UNLOCK(txq); - /* If unicast frame, update general statistics */ - if (ni != NULL) { - an = ATH_NODE(ni); - /* update statistics */ - ath_tx_update_stats(sc, ts, bf); - } - /* - * Call the completion handler. - * The completion handler is responsible for - * calling the rate control code. - * - * Frames with no completion handler get the - * rate control code called here. + * Update statistics and call completion */ - if (bf->bf_comp == NULL) { - if ((ts->ts_status & HAL_TXERR_FILT) == 0 && - (bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0) { - /* - * XXX assume this isn't an aggregate - * frame. - */ - ath_tx_update_ratectrl(sc, ni, - bf->bf_state.bfs_rc, ts, - bf->bf_state.bfs_pktlen, 1, - (ts->ts_status == 0 ? 0 : 1)); - } - ath_tx_default_comp(sc, bf, 0); - } else - bf->bf_comp(sc, bf, 0); + ath_tx_process_buf_completion(sc, txq, ts, bf); + + } #ifdef IEEE80211_SUPPORT_SUPERG /* @@ -4087,7 +4114,7 @@ ath_tx_stopdma(struct ath_softc *sc, str (void) ath_hal_stoptxdma(ah, txq->axq_qnum); } -static int +int ath_stoptxdma(struct ath_softc *sc) { struct ath_hal *ah = sc->sc_ah; Modified: head/sys/dev/ath/if_ath_misc.h ============================================================================== --- head/sys/dev/ath/if_ath_misc.h Tue Aug 14 22:30:17 2012 (r239261) +++ head/sys/dev/ath/if_ath_misc.h Tue Aug 14 22:32:20 2012 (r239262) @@ -102,6 +102,11 @@ extern void ath_tx_draintxq(struct ath_s extern void ath_legacy_tx_drain(struct ath_softc *sc, ATH_RESET_TYPE reset_type); +extern void ath_tx_process_buf_completion(struct ath_softc *sc, + struct ath_txq *txq, struct ath_tx_status *ts, struct ath_buf *bf); + +extern int ath_stoptxdma(struct ath_softc *sc); + /* * This is only here so that the RX proc function can call it. * It's very likely that the "start TX after RX" call should be From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 22:34:23 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 52A8F106564A; Tue, 14 Aug 2012 22:34:23 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3D9A28FC0C; Tue, 14 Aug 2012 22:34:23 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EMYNNV060205; Tue, 14 Aug 2012 22:34:23 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EMYNtq060203; Tue, 14 Aug 2012 22:34:23 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208142234.q7EMYNtq060203@svn.freebsd.org> From: Adrian Chadd Date: Tue, 14 Aug 2012 22:34:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239263 - head/sys/dev/ath X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 22:34:23 -0000 Author: adrian Date: Tue Aug 14 22:34:22 2012 New Revision: 239263 URL: http://svn.freebsd.org/changeset/base/239263 Log: Dump out the TX FIFO depth. Modified: head/sys/dev/ath/if_ath_sysctl.c Modified: head/sys/dev/ath/if_ath_sysctl.c ============================================================================== --- head/sys/dev/ath/if_ath_sysctl.c Tue Aug 14 22:32:20 2012 (r239262) +++ head/sys/dev/ath/if_ath_sysctl.c Tue Aug 14 22:34:22 2012 (r239263) @@ -357,10 +357,11 @@ ath_sysctl_txagg(SYSCTL_HANDLER_ARGS) for (i = 0; i < HAL_NUM_TX_QUEUES; i++) { if (ATH_TXQ_SETUP(sc, i)) { - printf("HW TXQ %d: axq_depth=%d, axq_aggr_depth=%d\n", + printf("HW TXQ %d: axq_depth=%d, axq_aggr_depth=%d, axq_fifo_depth=%d\n", i, sc->sc_txq[i].axq_depth, - sc->sc_txq[i].axq_aggr_depth); + sc->sc_txq[i].axq_aggr_depth, + sc->sc_txq[i].axq_fifo_depth); } } From owner-svn-src-all@FreeBSD.ORG Tue Aug 14 23:08:50 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 958BF106566C; Tue, 14 Aug 2012 23:08:50 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 802298FC08; Tue, 14 Aug 2012 23:08:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7EN8o6u064038; Tue, 14 Aug 2012 23:08:50 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7EN8o6Q064035; Tue, 14 Aug 2012 23:08:50 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208142308.q7EN8o6Q064035@svn.freebsd.org> From: Navdeep Parhar Date: Tue, 14 Aug 2012 23:08:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239264 - in head/sys/modules/cxgbe: if_cxgbe tom X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 23:08:50 -0000 Author: np Date: Tue Aug 14 23:08:49 2012 New Revision: 239264 URL: http://svn.freebsd.org/changeset/base/239264 Log: Assume INET, INET6, and TCP_OFFLOAD when the driver is built out of tree and KERNBUILDDIR is not set. MFC after: 2 weeks Modified: head/sys/modules/cxgbe/if_cxgbe/Makefile head/sys/modules/cxgbe/tom/Makefile Modified: head/sys/modules/cxgbe/if_cxgbe/Makefile ============================================================================== --- head/sys/modules/cxgbe/if_cxgbe/Makefile Tue Aug 14 22:34:22 2012 (r239263) +++ head/sys/modules/cxgbe/if_cxgbe/Makefile Tue Aug 14 23:08:49 2012 (r239264) @@ -2,6 +2,8 @@ # $FreeBSD$ # +.include + CXGBE = ${.CURDIR}/../../../dev/cxgbe .PATH: ${CXGBE} ${CXGBE}/common @@ -17,4 +19,17 @@ CFLAGS+= -I${CXGBE} # Provide the timestamp of a packet in its header mbuf. #CFLAGS+= -DT4_PKT_TIMESTAMP +.if !defined(KERNBUILDDIR) +.if ${MK_INET_SUPPORT} != "no" +opt_inet.h: + @echo "#define INET 1" > ${.TARGET} + @echo "#define TCP_OFFLOAD 1" >> ${.TARGET} +.endif + +.if ${MK_INET6_SUPPORT} != "no" +opt_inet6.h: + @echo "#define INET6 1" > ${.TARGET} +.endif +.endif + .include Modified: head/sys/modules/cxgbe/tom/Makefile ============================================================================== --- head/sys/modules/cxgbe/tom/Makefile Tue Aug 14 22:34:22 2012 (r239263) +++ head/sys/modules/cxgbe/tom/Makefile Tue Aug 14 23:08:49 2012 (r239264) @@ -2,6 +2,8 @@ # $FreeBSD$ # +.include + CXGBE = ${.CURDIR}/../../../dev/cxgbe .PATH: ${CXGBE}/tom @@ -12,4 +14,12 @@ SRCS+= opt_inet.h CFLAGS+= -I${CXGBE} +.if !defined(KERNBUILDDIR) +.if ${MK_INET_SUPPORT} != "no" +opt_inet.h: + echo "#define INET 1" > ${.TARGET} + echo "#define TCP_OFFLOAD 1" >> ${.TARGET} +.endif +.endif + .include From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 01:03:13 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DD0E4106564A; Wed, 15 Aug 2012 01:03:13 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AD7EB8FC08; Wed, 15 Aug 2012 01:03:13 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F13DQc077693; Wed, 15 Aug 2012 01:03:13 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F13DbD077691; Wed, 15 Aug 2012 01:03:13 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208150103.q7F13DbD077691@svn.freebsd.org> From: Navdeep Parhar Date: Wed, 15 Aug 2012 01:03:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239266 - head/sys/dev/cxgbe X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 01:03:14 -0000 Author: np Date: Wed Aug 15 01:03:13 2012 New Revision: 239266 URL: http://svn.freebsd.org/changeset/base/239266 Log: The size of the buffers in an Ethernet freelist has to be higher than the interface's MTU. Initialize such freelists with correct values. This wasn't a problem for common MTUs (1500 and 9000) as the buffers (2048 and 9216 in size) happened to have enough spare room. I ran into it when playing around with unusual MTUs. MFC after: 2 weeks Modified: head/sys/dev/cxgbe/t4_sge.c Modified: head/sys/dev/cxgbe/t4_sge.c ============================================================================== --- head/sys/dev/cxgbe/t4_sge.c Wed Aug 15 00:45:15 2012 (r239265) +++ head/sys/dev/cxgbe/t4_sge.c Wed Aug 15 01:03:13 2012 (r239266) @@ -542,6 +542,18 @@ port_intr_iq(struct port_info *pi, int i return (iq); } +static inline int +mtu_to_bufsize(int mtu) +{ + int bufsize; + + /* large enough for a frame even when VLAN extraction is disabled */ + bufsize = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + mtu; + bufsize = roundup(bufsize + fl_pktshift, fl_pad); + + return (bufsize); +} + int t4_setup_port_queues(struct port_info *pi) { @@ -558,6 +570,7 @@ t4_setup_port_queues(struct port_info *p struct adapter *sc = pi->adapter; struct sysctl_oid *oid = device_get_sysctl_tree(pi->dev); struct sysctl_oid_list *children = SYSCTL_CHILDREN(oid); + int bufsize = mtu_to_bufsize(pi->ifp->if_mtu); oid = SYSCTL_ADD_NODE(&pi->ctx, children, OID_AUTO, "rxq", CTLFLAG_RD, NULL, "rx queues"); @@ -587,7 +600,7 @@ t4_setup_port_queues(struct port_info *p snprintf(name, sizeof(name), "%s rxq%d-fl", device_get_nameunit(pi->dev), i); - init_fl(&rxq->fl, pi->qsize_rxq / 8, pi->ifp->if_mtu, name); + init_fl(&rxq->fl, pi->qsize_rxq / 8, bufsize, name); if (sc->flags & INTR_DIRECT #ifdef TCP_OFFLOAD @@ -1451,11 +1464,8 @@ t4_update_fl_bufsize(struct ifnet *ifp) struct port_info *pi = ifp->if_softc; struct sge_rxq *rxq; struct sge_fl *fl; - int i, bufsize; + int i, bufsize = mtu_to_bufsize(ifp->if_mtu); - /* large enough for a frame even when VLAN extraction is disabled */ - bufsize = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + ifp->if_mtu; - bufsize = roundup(bufsize + fl_pktshift, fl_pad); for_each_rxq(pi, i, rxq) { fl = &rxq->fl; From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 03:03:04 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2B709106564A; Wed, 15 Aug 2012 03:03:04 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B9A728FC14; Wed, 15 Aug 2012 03:03:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F3331B090696; Wed, 15 Aug 2012 03:03:03 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F3336I090690; Wed, 15 Aug 2012 03:03:03 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150303.q7F3336I090690@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 03:03:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239268 - in head/sys: arm/arm arm/at91 arm/econa arm/include arm/s3c2xx0 arm/sa11x0 arm/xscale arm/xscale/i80321 arm/xscale/i8134x arm/xscale/ixp425 arm/xscale/pxa conf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 03:03:04 -0000 Author: gonzo Date: Wed Aug 15 03:03:03 2012 New Revision: 239268 URL: http://svn.freebsd.org/changeset/base/239268 Log: Merging projects/armv6, part 1 Cummulative patch of changes that are not vendor-specific: - ARMv6 and ARMv7 architecture support - ARM SMP support - VFP/Neon support - ARM Generic Interrupt Controller driver - Simplification of startup code for all platforms Added: head/sys/arm/arm/busdma_machdep-v6.c (contents, props changed) head/sys/arm/arm/cpufunc_asm_armv7.S (contents, props changed) head/sys/arm/arm/cpufunc_asm_pj4b.S (contents, props changed) head/sys/arm/arm/gic.c (contents, props changed) head/sys/arm/arm/mp_machdep.c (contents, props changed) head/sys/arm/arm/mpcore_timer.c (contents, props changed) head/sys/arm/arm/pl310.c (contents, props changed) head/sys/arm/arm/pmap-v6.c (contents, props changed) head/sys/arm/arm/vfp.c (contents, props changed) head/sys/arm/include/pl310.h (contents, props changed) head/sys/arm/include/vfp.h (contents, props changed) Modified: head/sys/arm/arm/bcopyinout.S head/sys/arm/arm/bcopyinout_xscale.S head/sys/arm/arm/bus_space_asm_generic.S head/sys/arm/arm/copystr.S head/sys/arm/arm/cpufunc.c head/sys/arm/arm/cpufunc_asm.S head/sys/arm/arm/cpufunc_asm_arm11.S head/sys/arm/arm/elf_trampoline.c head/sys/arm/arm/fusu.S head/sys/arm/arm/genassym.c head/sys/arm/arm/identcpu.c head/sys/arm/arm/locore.S head/sys/arm/arm/machdep.c head/sys/arm/arm/pmap.c head/sys/arm/arm/swtch.S head/sys/arm/arm/sys_machdep.c head/sys/arm/arm/undefined.c head/sys/arm/arm/vm_machdep.c head/sys/arm/at91/at91_machdep.c head/sys/arm/at91/std.at91 head/sys/arm/econa/econa_machdep.c head/sys/arm/econa/std.econa head/sys/arm/include/armreg.h head/sys/arm/include/asm.h head/sys/arm/include/asmacros.h head/sys/arm/include/atomic.h head/sys/arm/include/cpuconf.h head/sys/arm/include/cpufunc.h head/sys/arm/include/fp.h head/sys/arm/include/intr.h head/sys/arm/include/md_var.h head/sys/arm/include/param.h head/sys/arm/include/pcb.h head/sys/arm/include/pcpu.h head/sys/arm/include/pmap.h head/sys/arm/include/pte.h head/sys/arm/include/smp.h head/sys/arm/include/sysarch.h head/sys/arm/include/vmparam.h head/sys/arm/s3c2xx0/s3c24x0_machdep.c head/sys/arm/s3c2xx0/std.ln2410sbc head/sys/arm/s3c2xx0/std.s3c2410 head/sys/arm/sa11x0/assabet_machdep.c head/sys/arm/sa11x0/std.sa11x0 head/sys/arm/xscale/i80321/ep80219_machdep.c head/sys/arm/xscale/i80321/iq31244_machdep.c head/sys/arm/xscale/i8134x/crb_machdep.c head/sys/arm/xscale/ixp425/avila_machdep.c head/sys/arm/xscale/pxa/pxa_machdep.c head/sys/arm/xscale/std.xscale head/sys/conf/Makefile.arm head/sys/conf/files.arm head/sys/conf/options.arm Modified: head/sys/arm/arm/bcopyinout.S ============================================================================== --- head/sys/arm/arm/bcopyinout.S Wed Aug 15 02:42:09 2012 (r239267) +++ head/sys/arm/arm/bcopyinout.S Wed Aug 15 03:03:03 2012 (r239268) @@ -54,14 +54,19 @@ __FBSDID("$FreeBSD$"); .text .align 0 -#ifdef MULTIPROCESSOR -.Lcpu_info: - .word _C_LABEL(cpu_info) +#ifdef _ARM_ARCH_6 +#define GET_PCB(tmp) \ + mrc p15, 0, tmp, c13, c0, 4; \ + add tmp, tmp, #(PC_CURPCB) #else .Lcurpcb: - .word _C_LABEL(__pcpu) + PC_CURPCB + .word _C_LABEL(__pcpu) + PC_CURPCB + +#define GET_PCB(tmp) \ + ldr tmp, .Lcurpcb #endif + #define SAVE_REGS stmfd sp!, {r4-r11} #define RESTORE_REGS ldmfd sp!, {r4-r11} @@ -111,18 +116,9 @@ ENTRY(copyin) .Lnormal: SAVE_REGS -#ifdef MULTIPROCESSOR - /* XXX Probably not appropriate for non-Hydra SMPs */ - stmfd sp!, {r0-r2, r14} - bl _C_LABEL(cpu_number) - ldr r4, .Lcpu_info - ldr r4, [r4, r0, lsl #2] - ldr r4, [r4, #CI_CURPCB] - ldmfd sp!, {r0-r2, r14} -#else - ldr r4, .Lcurpcb + GET_PCB(r4) ldr r4, [r4] -#endif + ldr r5, [r4, #PCB_ONFAULT] adr r3, .Lcopyfault @@ -357,18 +353,8 @@ ENTRY(copyout) .Lnormale: SAVE_REGS -#ifdef MULTIPROCESSOR - /* XXX Probably not appropriate for non-Hydra SMPs */ - stmfd sp!, {r0-r2, r14} - bl _C_LABEL(cpu_number) - ldr r4, .Lcpu_info - ldr r4, [r4, r0, lsl #2] - ldr r4, [r4, #CI_CURPCB] - ldmfd sp!, {r0-r2, r14} -#else - ldr r4, .Lcurpcb + GET_PCB(r4) ldr r4, [r4] -#endif ldr r5, [r4, #PCB_ONFAULT] adr r3, .Lcopyfault @@ -561,18 +547,9 @@ ENTRY(copyout) * else EFAULT if a page fault occurred. */ ENTRY(badaddr_read_1) -#ifdef MULTIPROCESSOR - /* XXX Probably not appropriate for non-Hydra SMPs */ - stmfd sp!, {r0-r1, r14} - bl _C_LABEL(cpu_number) - ldr r2, .Lcpu_info - ldr r2, [r2, r0, lsl #2] - ldr r2, [r2, #CI_CURPCB] - ldmfd sp!, {r0-r1, r14} -#else - ldr r2, .Lcurpcb + GET_PCB(r2) ldr r2, [r2] -#endif + ldr ip, [r2, #PCB_ONFAULT] adr r3, 1f str r3, [r2, #PCB_ONFAULT] @@ -595,18 +572,9 @@ ENTRY(badaddr_read_1) * else EFAULT if a page fault occurred. */ ENTRY(badaddr_read_2) -#ifdef MULTIPROCESSOR - /* XXX Probably not appropriate for non-Hydra SMPs */ - stmfd sp!, {r0-r1, r14} - bl _C_LABEL(cpu_number) - ldr r2, .Lcpu_info - ldr r2, [r2, r0, lsl #2] - ldr r2, [r2, #CI_CURPCB] - ldmfd sp!, {r0-r1, r14} -#else - ldr r2, .Lcurpcb + GET_PCB(r2) ldr r2, [r2] -#endif + ldr ip, [r2, #PCB_ONFAULT] adr r3, 1f str r3, [r2, #PCB_ONFAULT] @@ -629,18 +597,9 @@ ENTRY(badaddr_read_2) * else EFAULT if a page fault occurred. */ ENTRY(badaddr_read_4) -#ifdef MULTIPROCESSOR - /* XXX Probably not appropriate for non-Hydra SMPs */ - stmfd sp!, {r0-r1, r14} - bl _C_LABEL(cpu_number) - ldr r2, .Lcpu_info - ldr r2, [r2, r0, lsl #2] - ldr r2, [r2, #CI_CURPCB] - ldmfd sp!, {r0-r1, r14} -#else - ldr r2, .Lcurpcb + GET_PCB(r2) ldr r2, [r2] -#endif + ldr ip, [r2, #PCB_ONFAULT] adr r3, 1f str r3, [r2, #PCB_ONFAULT] Modified: head/sys/arm/arm/bcopyinout_xscale.S ============================================================================== --- head/sys/arm/arm/bcopyinout_xscale.S Wed Aug 15 02:42:09 2012 (r239267) +++ head/sys/arm/arm/bcopyinout_xscale.S Wed Aug 15 03:03:03 2012 (r239268) @@ -41,12 +41,15 @@ __FBSDID("$FreeBSD$"); .text .align 0 -#ifdef MULTIPROCESSOR -.Lcpu_info: - .word _C_LABEL(cpu_info) +#ifdef _ARM_ARCH_6 +#define GET_PCB(tmp) \ + mrc p15, 0, tmp, c13, c0, 4; \ + add tmp, tmp, #(PC_CURPCB) #else .Lcurpcb: .word _C_LABEL(__pcpu) + PC_CURPCB +#define GET_PCB(tmp) \ + ldr tmp, .Lcurpcb #endif /* @@ -85,18 +88,8 @@ ENTRY(copyin) .Lnormal: stmfd sp!, {r10-r11, lr} -#ifdef MULTIPROCESSOR - /* XXX Probably not appropriate for non-Hydra SMPs */ - stmfd sp!, {r0-r2} - bl _C_LABEL(cpu_number) - ldr r10, .Lcpu_info - ldmfd sp!, {r0-r2} - ldr r10, [r10, r0, lsl #2] - ldr r10, [r10, #CI_CURPCB] -#else - ldr r10, .Lcurpcb + GET_PCB(r10) ldr r10, [r10] -#endif mov r3, #0x00 adr ip, .Lcopyin_fault @@ -537,18 +530,8 @@ ENTRY(copyout) .Lnormale: stmfd sp!, {r10-r11, lr} -#ifdef MULTIPROCESSOR - /* XXX Probably not appropriate for non-Hydra SMPs */ - stmfd sp!, {r0-r2} - bl _C_LABEL(cpu_number) - ldr r10, .Lcpu_info - ldmfd sp!, {r0-r2} - ldr r10, [r10, r0, lsl #2] - ldr r10, [r10, #CI_CURPCB] -#else - ldr r10, .Lcurpcb + GET_PCB(r10) ldr r10, [r10] -#endif mov r3, #0x00 adr ip, .Lcopyout_fault Modified: head/sys/arm/arm/bus_space_asm_generic.S ============================================================================== --- head/sys/arm/arm/bus_space_asm_generic.S Wed Aug 15 02:42:09 2012 (r239267) +++ head/sys/arm/arm/bus_space_asm_generic.S Wed Aug 15 03:03:03 2012 (r239268) @@ -51,11 +51,9 @@ ENTRY(generic_bs_r_1) ldrb r0, [r1, r2] RET -#if (ARM_ARCH_4 + ARM_ARCH_5) > 0 ENTRY(generic_armv4_bs_r_2) ldrh r0, [r1, r2] RET -#endif ENTRY(generic_bs_r_4) ldr r0, [r1, r2] @@ -69,11 +67,9 @@ ENTRY(generic_bs_w_1) strb r3, [r1, r2] RET -#if (ARM_ARCH_4 + ARM_ARCH_5) > 0 ENTRY(generic_armv4_bs_w_2) strh r3, [r1, r2] RET -#endif ENTRY(generic_bs_w_4) str r3, [r1, r2] @@ -97,7 +93,6 @@ ENTRY(generic_bs_rm_1) RET -#if (ARM_ARCH_4 + ARM_ARCH_5) > 0 ENTRY(generic_armv4_bs_rm_2) add r0, r1, r2 mov r1, r3 @@ -111,7 +106,6 @@ ENTRY(generic_armv4_bs_rm_2) bne 1b RET -#endif ENTRY(generic_bs_rm_4) add r0, r1, r2 @@ -145,7 +139,6 @@ ENTRY(generic_bs_wm_1) RET -#if (ARM_ARCH_4 + ARM_ARCH_5) > 0 ENTRY(generic_armv4_bs_wm_2) add r0, r1, r2 mov r1, r3 @@ -159,7 +152,6 @@ ENTRY(generic_armv4_bs_wm_2) bne 1b RET -#endif ENTRY(generic_bs_wm_4) add r0, r1, r2 @@ -193,7 +185,6 @@ ENTRY(generic_bs_rr_1) RET -#if (ARM_ARCH_4 + ARM_ARCH_5) > 0 ENTRY(generic_armv4_bs_rr_2) add r0, r1, r2 mov r1, r3 @@ -207,7 +198,6 @@ ENTRY(generic_armv4_bs_rr_2) bne 1b RET -#endif ENTRY(generic_bs_rr_4) add r0, r1, r2 @@ -241,7 +231,6 @@ ENTRY(generic_bs_wr_1) RET -#if (ARM_ARCH_4 + ARM_ARCH_5) > 0 ENTRY(generic_armv4_bs_wr_2) add r0, r1, r2 mov r1, r3 @@ -255,7 +244,6 @@ ENTRY(generic_armv4_bs_wr_2) bne 1b RET -#endif ENTRY(generic_bs_wr_4) add r0, r1, r2 @@ -288,7 +276,6 @@ ENTRY(generic_bs_sr_1) RET -#if (ARM_ARCH_4 + ARM_ARCH_5) > 0 ENTRY(generic_armv4_bs_sr_2) add r0, r1, r2 mov r1, r3 @@ -301,7 +288,6 @@ ENTRY(generic_armv4_bs_sr_2) bne 1b RET -#endif ENTRY(generic_bs_sr_4) add r0, r1, r2 @@ -320,7 +306,6 @@ ENTRY(generic_bs_sr_4) * copy region */ -#if (ARM_ARCH_4 + ARM_ARCH_5) > 0 ENTRY(generic_armv4_bs_c_2) add r0, r1, r2 ldr r2, [sp, #0] @@ -350,4 +335,3 @@ ENTRY(generic_armv4_bs_c_2) bne 3b RET -#endif Added: head/sys/arm/arm/busdma_machdep-v6.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/arm/busdma_machdep-v6.c Wed Aug 15 03:03:03 2012 (r239268) @@ -0,0 +1,1559 @@ +/*- + * Copyright (c) 2010 Mark Tinguely + * Copyright (c) 2004 Olivier Houchard + * Copyright (c) 2002 Peter Grehan + * Copyright (c) 1997, 1998 Justin T. Gibbs. + * All rights reserved. + * + * 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, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * From i386/busdma_machdep.c 191438 2009-04-23 20:24:19Z jhb + */ + +#include +__FBSDID("$FreeBSD$"); + +#define _ARM32_BUS_DMA_PRIVATE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#define MAX_BPAGES 64 +#define BUS_DMA_COULD_BOUNCE BUS_DMA_BUS3 +#define BUS_DMA_MIN_ALLOC_COMP BUS_DMA_BUS4 + +#define FIX_DMAP_BUS_DMASYNC_POSTREAD + +struct bounce_zone; + +struct bus_dma_tag { + bus_dma_tag_t parent; + bus_size_t alignment; + bus_size_t boundary; + bus_addr_t lowaddr; + bus_addr_t highaddr; + bus_dma_filter_t *filter; + void *filterarg; + bus_size_t maxsize; + u_int nsegments; + bus_size_t maxsegsz; + int flags; + int ref_count; + int map_count; + bus_dma_lock_t *lockfunc; + void *lockfuncarg; + bus_dma_segment_t *segments; + struct bounce_zone *bounce_zone; + /* + * DMA range for this tag. If the page doesn't fall within + * one of these ranges, an error is returned. The caller + * may then decide what to do with the transfer. If the + * range pointer is NULL, it is ignored. + */ + struct arm32_dma_range *ranges; + int _nranges; + +}; + +struct bounce_page { + vm_offset_t vaddr; /* kva of bounce buffer */ + bus_addr_t busaddr; /* Physical address */ + vm_offset_t datavaddr; /* kva of client data */ + bus_size_t datacount; /* client data count */ + STAILQ_ENTRY(bounce_page) links; +}; + +struct sync_list { + vm_offset_t vaddr; /* kva of bounce buffer */ + bus_addr_t busaddr; /* Physical address */ + bus_size_t datacount; /* client data count */ + STAILQ_ENTRY(sync_list) slinks; +}; + +int busdma_swi_pending; + +struct bounce_zone { + STAILQ_ENTRY(bounce_zone) links; + STAILQ_HEAD(bp_list, bounce_page) bounce_page_list; + int total_bpages; + int free_bpages; + int reserved_bpages; + int active_bpages; + int total_bounced; + int total_deferred; + int map_count; + bus_size_t alignment; + bus_addr_t lowaddr; + char zoneid[8]; + char lowaddrid[20]; + struct sysctl_ctx_list sysctl_tree; + struct sysctl_oid *sysctl_tree_top; +}; + +static struct mtx bounce_lock; +static int total_bpages; +static int busdma_zonecount; +static STAILQ_HEAD(, bounce_zone) bounce_zone_list; + +SYSCTL_NODE(_hw, OID_AUTO, busdma, CTLFLAG_RD, 0, "Busdma parameters"); +SYSCTL_INT(_hw_busdma, OID_AUTO, total_bpages, CTLFLAG_RD, &total_bpages, 0, + "Total bounce pages"); + +struct bus_dmamap { + struct bp_list bpages; + int pagesneeded; + int pagesreserved; + bus_dma_tag_t dmat; + void *buf; /* unmapped buffer pointer */ + bus_size_t buflen; /* unmapped buffer length */ + pmap_t pmap; + bus_dmamap_callback_t *callback; + void *callback_arg; + STAILQ_ENTRY(bus_dmamap) links; + STAILQ_HEAD(,sync_list) slist; +}; + +static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist; +static STAILQ_HEAD(, bus_dmamap) bounce_map_callbacklist; + +static void init_bounce_pages(void *dummy); +static int alloc_bounce_zone(bus_dma_tag_t dmat); +static int alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages); +static int reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, + int commit); +static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, + vm_offset_t vaddr, bus_size_t size); +static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage); +int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr); +static int _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, + void *buf, bus_size_t buflen, int flags); + +static __inline int +_bus_dma_can_bounce(vm_offset_t lowaddr, vm_offset_t highaddr) +{ + int i; + for (i = 0; phys_avail[i] && phys_avail[i + 1]; i += 2) { + if ((lowaddr >= phys_avail[i] && lowaddr <= phys_avail[i + 1]) + || (lowaddr < phys_avail[i] && + highaddr > phys_avail[i])) + return (1); + } + return (0); +} + +static __inline struct arm32_dma_range * +_bus_dma_inrange(struct arm32_dma_range *ranges, int nranges, + bus_addr_t curaddr) +{ + struct arm32_dma_range *dr; + int i; + + for (i = 0, dr = ranges; i < nranges; i++, dr++) { + if (curaddr >= dr->dr_sysbase && + round_page(curaddr) <= (dr->dr_sysbase + dr->dr_len)) + return (dr); + } + + return (NULL); +} + +/* + * Return true if a match is made. + * + * To find a match walk the chain of bus_dma_tag_t's looking for 'paddr'. + * + * If paddr is within the bounds of the dma tag then call the filter callback + * to check for a match, if there is no filter callback then assume a match. + */ +int +run_filter(bus_dma_tag_t dmat, bus_addr_t paddr) +{ + int retval; + + retval = 0; + + do { + if (((paddr > dmat->lowaddr && paddr <= dmat->highaddr) + || ((paddr & (dmat->alignment - 1)) != 0)) + && (dmat->filter == NULL + || (*dmat->filter)(dmat->filterarg, paddr) != 0)) + retval = 1; + + dmat = dmat->parent; + } while (retval == 0 && dmat != NULL); + return (retval); +} + +/* + * Convenience function for manipulating driver locks from busdma (during + * busdma_swi, for example). Drivers that don't provide their own locks + * should specify &Giant to dmat->lockfuncarg. Drivers that use their own + * non-mutex locking scheme don't have to use this at all. + */ +void +busdma_lock_mutex(void *arg, bus_dma_lock_op_t op) +{ + struct mtx *dmtx; + + dmtx = (struct mtx *)arg; + switch (op) { + case BUS_DMA_LOCK: + mtx_lock(dmtx); + break; + case BUS_DMA_UNLOCK: + mtx_unlock(dmtx); + break; + default: + panic("Unknown operation 0x%x for busdma_lock_mutex!", op); + } +} + +/* + * dflt_lock should never get called. It gets put into the dma tag when + * lockfunc == NULL, which is only valid if the maps that are associated + * with the tag are meant to never be defered. + * XXX Should have a way to identify which driver is responsible here. + */ +static void +dflt_lock(void *arg, bus_dma_lock_op_t op) +{ + panic("driver error: busdma dflt_lock called"); +} + +/* + * Allocate a device specific dma_tag. + */ +int +bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment, + bus_size_t boundary, bus_addr_t lowaddr, + bus_addr_t highaddr, bus_dma_filter_t *filter, + void *filterarg, bus_size_t maxsize, int nsegments, + bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc, + void *lockfuncarg, bus_dma_tag_t *dmat) +{ + bus_dma_tag_t newtag; + int error = 0; + +#if 0 + if (!parent) + parent = arm_root_dma_tag; +#endif + + /* Basic sanity checking */ + if (boundary != 0 && boundary < maxsegsz) + maxsegsz = boundary; + + /* Return a NULL tag on failure */ + *dmat = NULL; + + if (maxsegsz == 0) { + return (EINVAL); + } + + newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_DEVBUF, + M_ZERO | M_NOWAIT); + if (newtag == NULL) { + CTR4(KTR_BUSDMA, "%s returned tag %p tag flags 0x%x error %d", + __func__, newtag, 0, error); + return (ENOMEM); + } + + newtag->parent = parent; + newtag->alignment = alignment; + newtag->boundary = boundary; + newtag->lowaddr = trunc_page((vm_paddr_t)lowaddr) + (PAGE_SIZE - 1); + newtag->highaddr = trunc_page((vm_paddr_t)highaddr) + + (PAGE_SIZE - 1); + newtag->filter = filter; + newtag->filterarg = filterarg; + newtag->maxsize = maxsize; + newtag->nsegments = nsegments; + newtag->maxsegsz = maxsegsz; + newtag->flags = flags; + newtag->ref_count = 1; /* Count ourself */ + newtag->map_count = 0; + newtag->ranges = bus_dma_get_range(); + newtag->_nranges = bus_dma_get_range_nb(); + if (lockfunc != NULL) { + newtag->lockfunc = lockfunc; + newtag->lockfuncarg = lockfuncarg; + } else { + newtag->lockfunc = dflt_lock; + newtag->lockfuncarg = NULL; + } + newtag->segments = NULL; + + /* Take into account any restrictions imposed by our parent tag */ + if (parent != NULL) { + newtag->lowaddr = MIN(parent->lowaddr, newtag->lowaddr); + newtag->highaddr = MAX(parent->highaddr, newtag->highaddr); + if (newtag->boundary == 0) + newtag->boundary = parent->boundary; + else if (parent->boundary != 0) + newtag->boundary = MIN(parent->boundary, + newtag->boundary); + if ((newtag->filter != NULL) || + ((parent->flags & BUS_DMA_COULD_BOUNCE) != 0)) + newtag->flags |= BUS_DMA_COULD_BOUNCE; + if (newtag->filter == NULL) { + /* + * Short circuit looking at our parent directly + * since we have encapsulated all of its information + */ + newtag->filter = parent->filter; + newtag->filterarg = parent->filterarg; + newtag->parent = parent->parent; + } + if (newtag->parent != NULL) + atomic_add_int(&parent->ref_count, 1); + } + + if (_bus_dma_can_bounce(newtag->lowaddr, newtag->highaddr) + || newtag->alignment > 1) + newtag->flags |= BUS_DMA_COULD_BOUNCE; + + if (((newtag->flags & BUS_DMA_COULD_BOUNCE) != 0) && + (flags & BUS_DMA_ALLOCNOW) != 0) { + struct bounce_zone *bz; + + /* Must bounce */ + + if ((error = alloc_bounce_zone(newtag)) != 0) { + free(newtag, M_DEVBUF); + return (error); + } + bz = newtag->bounce_zone; + + if (ptoa(bz->total_bpages) < maxsize) { + int pages; + + pages = atop(maxsize) - bz->total_bpages; + + /* Add pages to our bounce pool */ + if (alloc_bounce_pages(newtag, pages) < pages) + error = ENOMEM; + } + /* Performed initial allocation */ + newtag->flags |= BUS_DMA_MIN_ALLOC_COMP; + } else + newtag->bounce_zone = NULL; + + if (error != 0) { + free(newtag, M_DEVBUF); + } else { + *dmat = newtag; + } + CTR4(KTR_BUSDMA, "%s returned tag %p tag flags 0x%x error %d", + __func__, newtag, (newtag != NULL ? newtag->flags : 0), error); + return (error); +} + +int +bus_dma_tag_destroy(bus_dma_tag_t dmat) +{ + bus_dma_tag_t dmat_copy; + int error; + + error = 0; + dmat_copy = dmat; + + if (dmat != NULL) { + + if (dmat->map_count != 0) { + error = EBUSY; + goto out; + } + + while (dmat != NULL) { + bus_dma_tag_t parent; + + parent = dmat->parent; + atomic_subtract_int(&dmat->ref_count, 1); + if (dmat->ref_count == 0) { + if (dmat->segments != NULL) + free(dmat->segments, M_DEVBUF); + free(dmat, M_DEVBUF); + /* + * Last reference count, so + * release our reference + * count on our parent. + */ + dmat = parent; + } else + dmat = NULL; + } + } +out: + CTR3(KTR_BUSDMA, "%s tag %p error %d", __func__, dmat_copy, error); + return (error); +} + +/* + * Allocate a handle for mapping from kva/uva/physical + * address space into bus device space. + */ +int +bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp) +{ + int error; + + error = 0; + + *mapp = (bus_dmamap_t)malloc(sizeof(**mapp), M_DEVBUF, + M_NOWAIT | M_ZERO); + if (*mapp == NULL) { + CTR3(KTR_BUSDMA, "%s: tag %p error %d", __func__, dmat, ENOMEM); + return (ENOMEM); + } + STAILQ_INIT(&((*mapp)->slist)); + + if (dmat->segments == NULL) { + dmat->segments = (bus_dma_segment_t *)malloc( + sizeof(bus_dma_segment_t) * dmat->nsegments, M_DEVBUF, + M_NOWAIT); + if (dmat->segments == NULL) { + CTR3(KTR_BUSDMA, "%s: tag %p error %d", + __func__, dmat, ENOMEM); + free(*mapp, M_DEVBUF); + *mapp = NULL; + return (ENOMEM); + } + } + /* + * Bouncing might be required if the driver asks for an active + * exclusion region, a data alignment that is stricter than 1, and/or + * an active address boundary. + */ + if (dmat->flags & BUS_DMA_COULD_BOUNCE) { + + /* Must bounce */ + struct bounce_zone *bz; + int maxpages; + + if (dmat->bounce_zone == NULL) { + if ((error = alloc_bounce_zone(dmat)) != 0) { + free(*mapp, M_DEVBUF); + *mapp = NULL; + return (error); + } + } + bz = dmat->bounce_zone; + + /* Initialize the new map */ + STAILQ_INIT(&((*mapp)->bpages)); + + /* + * Attempt to add pages to our pool on a per-instance + * basis up to a sane limit. + */ + maxpages = MAX_BPAGES; + if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0 + || (bz->map_count > 0 && bz->total_bpages < maxpages)) { + int pages; + + pages = MAX(atop(dmat->maxsize), 1); + pages = MIN(maxpages - bz->total_bpages, pages); + pages = MAX(pages, 1); + if (alloc_bounce_pages(dmat, pages) < pages) + error = ENOMEM; + + if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0) { + if (error == 0) + dmat->flags |= BUS_DMA_MIN_ALLOC_COMP; + } else { + error = 0; + } + } + bz->map_count++; + } + if (error == 0) + dmat->map_count++; + CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", + __func__, dmat, dmat->flags, error); + return (error); +} + +/* + * Destroy a handle for mapping from kva/uva/physical + * address space into bus device space. + */ +int +bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map) +{ + if (STAILQ_FIRST(&map->bpages) != NULL || + STAILQ_FIRST(&map->slist) != NULL) { + CTR3(KTR_BUSDMA, "%s: tag %p error %d", + __func__, dmat, EBUSY); + return (EBUSY); + } + if (dmat->bounce_zone) + dmat->bounce_zone->map_count--; + free(map, M_DEVBUF); + dmat->map_count--; + CTR2(KTR_BUSDMA, "%s: tag %p error 0", __func__, dmat); + return (0); +} + + +/* + * Allocate a piece of memory that can be efficiently mapped into + * bus device space based on the constraints lited in the dma tag. + * A dmamap to for use with dmamap_load is also allocated. + */ +int +bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, + bus_dmamap_t *mapp) +{ + int mflags, len; + + if (flags & BUS_DMA_NOWAIT) + mflags = M_NOWAIT; + else + mflags = M_WAITOK; + + /* ARM non-snooping caches need a map for the VA cache sync structure */ + + *mapp = (bus_dmamap_t)malloc(sizeof(**mapp), M_DEVBUF, + M_NOWAIT | M_ZERO); + if (*mapp == NULL) { + CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", + __func__, dmat, dmat->flags, ENOMEM); + return (ENOMEM); + } + + STAILQ_INIT(&((*mapp)->slist)); + + if (dmat->segments == NULL) { + dmat->segments = (bus_dma_segment_t *)malloc( + sizeof(bus_dma_segment_t) * dmat->nsegments, M_DEVBUF, + mflags); + if (dmat->segments == NULL) { + CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", + __func__, dmat, dmat->flags, ENOMEM); + free(*mapp, M_DEVBUF); + *mapp = NULL; + return (ENOMEM); + } + } + + if (flags & BUS_DMA_ZERO) + mflags |= M_ZERO; + + /* + * XXX: + * (dmat->alignment < dmat->maxsize) is just a quick hack; the exact + * alignment guarantees of malloc need to be nailed down, and the + * code below should be rewritten to take that into account. + * + * In the meantime, we'll warn the user if malloc gets it wrong. + * + * allocate at least a cache line. This should help avoid cache + * corruption. + */ + len = max(dmat->maxsize, arm_dcache_align); + if (len <= PAGE_SIZE && + (dmat->alignment < len) && + !_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr)) { + *vaddr = malloc(len, M_DEVBUF, mflags); + } else { + /* + * XXX Use Contigmalloc until it is merged into this facility + * and handles multi-seg allocations. Nobody is doing + * multi-seg allocations yet though. + * XXX Certain AGP hardware does. + */ + *vaddr = contigmalloc(len, M_DEVBUF, mflags, + 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul, + dmat->boundary); + } + if (*vaddr == NULL) { + CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", + __func__, dmat, dmat->flags, ENOMEM); + free(*mapp, M_DEVBUF); + *mapp = NULL; + return (ENOMEM); + } else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) { + printf("bus_dmamem_alloc failed to align memory properly.\n"); + } + dmat->map_count++; + + if (flags & BUS_DMA_COHERENT) + pmap_change_attr((vm_offset_t)*vaddr, len, + BUS_DMA_NOCACHE); + + CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", + __func__, dmat, dmat->flags, 0); + return (0); +} + +/* + * Free a piece of memory and it's allociated dmamap, that was allocated + * via bus_dmamem_alloc. Make the same choice for free/contigfree. + */ +void +bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map) +{ + int len; + +#ifdef mftnotyet + pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, ARM_WRITE_BACK); +#endif + len = max(dmat->maxsize, arm_dcache_align); + if (len <= PAGE_SIZE && + (dmat->alignment < len) && + !_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr)) + free(vaddr, M_DEVBUF); + else { + contigfree(vaddr, len, M_DEVBUF); + } + dmat->map_count--; + free(map, M_DEVBUF); + CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags); +} + +static int +_bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, + void *buf, bus_size_t buflen, int flags) +{ + vm_offset_t vaddr; + vm_offset_t vendaddr; + bus_addr_t paddr; + + if (map->pagesneeded == 0) { + CTR5(KTR_BUSDMA, "lowaddr= %d, boundary= %d, alignment= %d" + " map= %p, pagesneeded= %d", + dmat->lowaddr, dmat->boundary, dmat->alignment, + map, map->pagesneeded); + /* + * Count the number of bounce pages + * needed in order to complete this transfer + */ + vaddr = (vm_offset_t)buf; + vendaddr = (vm_offset_t)buf + buflen; + + while (vaddr < vendaddr) { + if (__predict_true(map->pmap == pmap_kernel())) + paddr = pmap_kextract(vaddr); + else + paddr = pmap_extract(map->pmap, vaddr); + if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) && + run_filter(dmat, paddr) != 0) { + map->pagesneeded++; + } + vaddr += (PAGE_SIZE - ((vm_offset_t)vaddr & PAGE_MASK)); + + } + CTR1(KTR_BUSDMA, "pagesneeded= %d", map->pagesneeded); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 03:07:41 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E5668106564A; Wed, 15 Aug 2012 03:07:41 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D0BED8FC08; Wed, 15 Aug 2012 03:07:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F37f6W091203; Wed, 15 Aug 2012 03:07:41 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F37fBk091201; Wed, 15 Aug 2012 03:07:41 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150307.q7F37fBk091201@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 03:07:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239269 - head/libexec/rtld-elf/arm X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 03:07:42 -0000 Author: gonzo Date: Wed Aug 15 03:07:41 2012 New Revision: 239269 URL: http://svn.freebsd.org/changeset/base/239269 Log: Merging of projects/armv6, part 2 Handle TLS for ARMv6 and ARMv7 Modified: head/libexec/rtld-elf/arm/reloc.c Modified: head/libexec/rtld-elf/arm/reloc.c ============================================================================== --- head/libexec/rtld-elf/arm/reloc.c Wed Aug 15 03:03:03 2012 (r239268) +++ head/libexec/rtld-elf/arm/reloc.c Wed Aug 15 03:07:41 2012 (r239269) @@ -433,7 +433,9 @@ reloc_jmpslot(Elf_Addr *where, Elf_Addr void allocate_initial_tls(Obj_Entry *objs) { +#ifdef ARM_TP_ADDRESS void **_tp = (void **)ARM_TP_ADDRESS; +#endif /* * Fix the size of the static TLS block by using the maximum @@ -443,16 +445,27 @@ allocate_initial_tls(Obj_Entry *objs) tls_static_space = tls_last_offset + tls_last_size + RTLD_STATIC_TLS_EXTRA; +#ifdef ARM_TP_ADDRESS (*_tp) = (void *) allocate_tls(objs, NULL, TLS_TCB_SIZE, 8); +#else + sysarch(ARM_SET_TP, allocate_tls(objs, NULL, TLS_TCB_SIZE, 8)); +#endif } void * __tls_get_addr(tls_index* ti) { - void **_tp = (void **)ARM_TP_ADDRESS; char *p; +#ifdef ARM_TP_ADDRESS + void **_tp = (void **)ARM_TP_ADDRESS; p = tls_get_addr_common((Elf_Addr **)(*_tp), ti->ti_module, ti->ti_offset); +#else + void *_tp; + __asm __volatile("mrc p15, 0, %0, c13, c0, 3" \ + : "=r" (_tp)); + p = tls_get_addr_common((Elf_Addr **)(_tp), ti->ti_module, ti->ti_offset); +#endif return (p); } From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 03:08:30 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 22833106566C; Wed, 15 Aug 2012 03:08:30 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0D9738FC1A; Wed, 15 Aug 2012 03:08:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F38TqZ091323; Wed, 15 Aug 2012 03:08:29 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F38TAr091321; Wed, 15 Aug 2012 03:08:29 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150308.q7F38TAr091321@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 03:08:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239270 - head/lib/libthr/arch/arm/include X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 03:08:30 -0000 Author: gonzo Date: Wed Aug 15 03:08:29 2012 New Revision: 239270 URL: http://svn.freebsd.org/changeset/base/239270 Log: Merging of projects/armv6, part 2 Handle TLS for ARMv6 and ARMv7 Modified: head/lib/libthr/arch/arm/include/pthread_md.h Modified: head/lib/libthr/arch/arm/include/pthread_md.h ============================================================================== --- head/lib/libthr/arch/arm/include/pthread_md.h Wed Aug 15 03:07:41 2012 (r239269) +++ head/lib/libthr/arch/arm/include/pthread_md.h Wed Aug 15 03:08:29 2012 (r239270) @@ -57,7 +57,11 @@ void _tcb_dtor(struct tcb *); static __inline void _tcb_set(struct tcb *tcb) { - *((struct tcb **)ARM_TP_ADDRESS) = tcb; +#ifdef ARM_TP_ADDRESS + *((struct tcb **)ARM_TP_ADDRESS) = tcb; /* avoids a system call */ +#else + sysarch(ARM_SET_TP, tcb); +#endif } /* @@ -66,7 +70,15 @@ _tcb_set(struct tcb *tcb) static __inline struct tcb * _tcb_get(void) { +#ifdef ARM_TP_ADDRESS return (*((struct tcb **)ARM_TP_ADDRESS)); +#else + struct tcb *tcb; + + __asm __volatile("mrc p15, 0, %0, c13, c0, 3" \ + : "=r" (tcb)); + return (tcb); +#endif } extern struct pthread *_thr_initial; From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 03:09:00 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E3DB6106566C; Wed, 15 Aug 2012 03:09:00 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CF2138FC18; Wed, 15 Aug 2012 03:09:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F390Hj091416; Wed, 15 Aug 2012 03:09:00 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F390SM091412; Wed, 15 Aug 2012 03:09:00 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150309.q7F390SM091412@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 03:09:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239271 - head/lib/libc/arm/gen X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 03:09:01 -0000 Author: gonzo Date: Wed Aug 15 03:09:00 2012 New Revision: 239271 URL: http://svn.freebsd.org/changeset/base/239271 Log: Merging of projects/armv6, part 2 Handle TLS for ARMv6 and ARMv7 Modified: head/lib/libc/arm/gen/__aeabi_read_tp.S head/lib/libc/arm/gen/_set_tp.c Modified: head/lib/libc/arm/gen/__aeabi_read_tp.S ============================================================================== --- head/lib/libc/arm/gen/__aeabi_read_tp.S Wed Aug 15 03:08:29 2012 (r239270) +++ head/lib/libc/arm/gen/__aeabi_read_tp.S Wed Aug 15 03:09:00 2012 (r239271) @@ -31,10 +31,16 @@ __FBSDID("$FreeBSD$"); #include ENTRY(__aeabi_read_tp) +#ifdef ARM_TP_ADDRESS ldr r0, .Larm_tp_address ldr r0, [r0] +#else + mrc p15, 0, r0, c13, c0, 3 +#endif RET +#ifdef ARM_TP_ADDRESS .Larm_tp_address: .word ARM_TP_ADDRESS +#endif Modified: head/lib/libc/arm/gen/_set_tp.c ============================================================================== --- head/lib/libc/arm/gen/_set_tp.c Wed Aug 15 03:08:29 2012 (r239270) +++ head/lib/libc/arm/gen/_set_tp.c Wed Aug 15 03:09:00 2012 (r239271) @@ -35,5 +35,9 @@ void _set_tp(void *tp) { +#ifdef ARM_TP_ADDRESS *((struct tcb **)ARM_TP_ADDRESS) = tp; +#else + sysarch(ARM_SET_TP, tp); +#endif } From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 03:21:57 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DFF1A1065672; Wed, 15 Aug 2012 03:21:57 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C63F28FC0A; Wed, 15 Aug 2012 03:21:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F3LvnQ092963; Wed, 15 Aug 2012 03:21:57 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F3LvYN092942; Wed, 15 Aug 2012 03:21:57 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150321.q7F3LvYN092942@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 03:21:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239272 - in head: . contrib/binutils contrib/binutils/bfd contrib/binutils/gas/config contrib/gcc/config/arm gnu/usr.bin/binutils gnu/usr.bin/binutils/as gnu/usr.bin/binutils/ld gnu/us... X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 03:21:58 -0000 Author: gonzo Date: Wed Aug 15 03:21:56 2012 New Revision: 239272 URL: http://svn.freebsd.org/changeset/base/239272 Log: Merging of projects/armv6, part 3 r238211: Support TARGET_ARCH=armv6 and TARGET_ARCH=armv6eb This adds a new TARGET_ARCH for building on ARM processors that support the ARMv6K multiprocessor extensions. In particular, these processors have better support for TLS and mutex operations. This mostly touches a lot of Makefiles to extend existing patterns for inferring CPUARCH from ARCH. It also configures: * GCC to default to arm1176jz-s * GCC to predefine __FreeBSD_ARCH_armv6__ * gas to default to ARM_ARCH_V6K * uname -p to return 'armv6' * make so that MACHINE_ARCH defaults to 'armv6' It also changes a number of headers to use the compiler __ARM_ARCH_XXX__ macros to configure processor-specific support routines. Submitted by: Tim Kientzle Modified: head/Makefile head/Makefile.inc1 head/contrib/binutils/bfd/config.bfd head/contrib/binutils/config.sub head/contrib/binutils/gas/config/tc-arm.c head/contrib/gcc/config/arm/freebsd.h head/gnu/usr.bin/binutils/Makefile.inc0 head/gnu/usr.bin/binutils/as/Makefile head/gnu/usr.bin/binutils/ld/Makefile.arm head/gnu/usr.bin/binutils/libbfd/Makefile.arm head/gnu/usr.bin/cc/Makefile.inc head/gnu/usr.bin/cc/Makefile.tgt head/gnu/usr.bin/gdb/Makefile.inc head/gnu/usr.bin/gdb/libgdb/Makefile head/share/mk/bsd.cpu.mk head/share/mk/bsd.endian.mk head/share/mk/sys.mk head/sys/conf/kern.pre.mk head/sys/conf/kmod.mk head/usr.bin/xlint/Makefile.inc Modified: head/Makefile ============================================================================== --- head/Makefile Wed Aug 15 03:09:00 2012 (r239271) +++ head/Makefile Wed Aug 15 03:21:56 2012 (r239272) @@ -135,7 +135,7 @@ _MAKE= PATH=${PATH} ${BINMAKE} -f Makefi _TARGET_ARCH= ${TARGET:S/pc98/i386/} .elif !defined(TARGET) && defined(TARGET_ARCH) && \ ${TARGET_ARCH} != ${MACHINE_ARCH} -_TARGET= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/} +_TARGET= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/} .endif # Legacy names, for another transition period mips:mips(n32|64)?eb -> mips:mips\1 .if defined(TARGET) && defined(TARGET_ARCH) && \ @@ -329,7 +329,7 @@ kernel-toolchains: # .if make(universe) || make(universe_kernels) || make(tinderbox) || make(targets) TARGETS?=amd64 arm i386 ia64 mips pc98 powerpc sparc64 -TARGET_ARCHES_arm?= arm armeb +TARGET_ARCHES_arm?= arm armeb armv6 armv6eb TARGET_ARCHES_mips?= mipsel mips mips64el mips64 mipsn32 TARGET_ARCHES_powerpc?= powerpc powerpc64 TARGET_ARCHES_pc98?= i386 Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Wed Aug 15 03:09:00 2012 (r239271) +++ head/Makefile.inc1 Wed Aug 15 03:21:56 2012 (r239272) @@ -137,7 +137,7 @@ VERSION!= uname -srp VERSION+= ${OSRELDATE} .endif -KNOWN_ARCHES?= amd64 arm armeb/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64 +KNOWN_ARCHES?= amd64 arm armeb/arm armv6/arm armv6eb/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64 .if ${TARGET} == ${TARGET_ARCH} _t= ${TARGET} .else Modified: head/contrib/binutils/bfd/config.bfd ============================================================================== --- head/contrib/binutils/bfd/config.bfd Wed Aug 15 03:09:00 2012 (r239271) +++ head/contrib/binutils/bfd/config.bfd Wed Aug 15 03:21:56 2012 (r239272) @@ -277,6 +277,14 @@ case "${targ}" in targ_defvec=bfd_elf32_bigarm_vec targ_selvecs=bfd_elf32_littlearm_vec ;; + armv6eb-*-freebsd*) + targ_defvec=bfd_elf32_bigarm_vec + targ_selvecs=bfd_elf32_littlearm_vec + ;; + armv6-*-freebsd*) + targ_defvec=bfd_elf32_littlearm_vec + targ_selvecs=bfd_elf32_bigarm_vec + ;; arm-*-elf | arm-*-freebsd* | arm*-*-linux-* | arm*-*-conix* | \ arm*-*-uclinux* | arm-*-kfreebsd*-gnu | \ arm*-*-eabi* ) Modified: head/contrib/binutils/config.sub ============================================================================== --- head/contrib/binutils/config.sub Wed Aug 15 03:09:00 2012 (r239271) +++ head/contrib/binutils/config.sub Wed Aug 15 03:21:56 2012 (r239272) @@ -241,7 +241,7 @@ case $basic_machine in | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | arc | arm | arm[bl]e | arme[lb] | armv[23456] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ Modified: head/contrib/binutils/gas/config/tc-arm.c ============================================================================== --- head/contrib/binutils/gas/config/tc-arm.c Wed Aug 15 03:09:00 2012 (r239271) +++ head/contrib/binutils/gas/config/tc-arm.c Wed Aug 15 03:21:56 2012 (r239272) @@ -20008,6 +20008,9 @@ static const struct arm_cpu_option_table {"cortex-a8", ARM_ARCH_V7A, ARM_FEATURE(0, FPU_VFP_V3 | FPU_NEON_EXT_V1), NULL}, + {"cortex-a9", ARM_ARCH_V7A, ARM_FEATURE(0, FPU_VFP_V3 + | FPU_NEON_EXT_V1), + NULL}, {"cortex-r4", ARM_ARCH_V7R, FPU_NONE, NULL}, {"cortex-m3", ARM_ARCH_V7M, FPU_NONE, NULL}, /* ??? XSCALE is really an architecture. */ @@ -20106,6 +20109,7 @@ static const struct arm_option_cpu_value {"vfp", FPU_ARCH_VFP_V2}, {"vfp9", FPU_ARCH_VFP_V2}, {"vfp3", FPU_ARCH_VFP_V3}, + {"vfpv3", FPU_ARCH_VFP_V3}, {"vfp10", FPU_ARCH_VFP_V2}, {"vfp10-r0", FPU_ARCH_VFP_V1}, {"vfpxd", FPU_ARCH_VFP_V1xD}, Modified: head/contrib/gcc/config/arm/freebsd.h ============================================================================== --- head/contrib/gcc/config/arm/freebsd.h Wed Aug 15 03:09:00 2012 (r239271) +++ head/contrib/gcc/config/arm/freebsd.h Wed Aug 15 03:21:56 2012 (r239272) @@ -56,8 +56,6 @@ /************************[ Target stuff ]***********************************/ -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (FreeBSD/StrongARM ELF)"); #ifndef TARGET_ENDIAN_DEFAULT #define TARGET_ENDIAN_DEFAULT 0 @@ -87,8 +85,22 @@ /* We use the GCC defaults here. */ #undef WCHAR_TYPE +#if defined(FREEBSD_ARCH_armv6) +#undef SUBTARGET_CPU_DEFAULT +#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm1176jzs +#undef FBSD_TARGET_CPU_CPP_BUILTINS +#define FBSD_TARGET_CPU_CPP_BUILTINS() \ + do { \ + builtin_define ("__FreeBSD_ARCH_armv6__"); \ + } while (0) +#undef TARGET_VERSION +#define TARGET_VERSION fprintf (stderr, " (FreeBSD/armv6 ELF)"); +#else #undef SUBTARGET_CPU_DEFAULT #define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm +#undef TARGET_VERSION +#define TARGET_VERSION fprintf (stderr, " (FreeBSD/StrongARM ELF)"); +#endif /* FreeBSD does its profiling differently to the Acorn compiler. We don't need a word following the mcount call; and to skip it Modified: head/gnu/usr.bin/binutils/Makefile.inc0 ============================================================================== --- head/gnu/usr.bin/binutils/Makefile.inc0 Wed Aug 15 03:09:00 2012 (r239271) +++ head/gnu/usr.bin/binutils/Makefile.inc0 Wed Aug 15 03:21:56 2012 (r239272) @@ -7,7 +7,7 @@ VERSION= "2.17.50 [FreeBSD] 2007-07-03" .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif @@ -16,7 +16,7 @@ TARGET_VENDOR?= unknown TARGET_OS?= freebsd BINUTILS_ARCH=${TARGET_ARCH:C/amd64/x86_64/} TARGET_TUPLE?= ${BINUTILS_ARCH}-${TARGET_VENDOR}-${TARGET_OS} -.if ${TARGET_ARCH} == "armeb" || \ +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" || \ (${TARGET_CPUARCH} == "mips" && ${TARGET_ARCH:Mmips*el} == "") TARGET_BIG_ENDIAN=t .endif Modified: head/gnu/usr.bin/binutils/as/Makefile ============================================================================== --- head/gnu/usr.bin/binutils/as/Makefile Wed Aug 15 03:09:00 2012 (r239271) +++ head/gnu/usr.bin/binutils/as/Makefile Wed Aug 15 03:21:56 2012 (r239272) @@ -42,6 +42,10 @@ SRCS+= app.c \ # DEO: why not used? #SRCS+= itbl-ops.c +.if ${TARGET_ARCH} == "armv6" || ${TARGET_ARCH} == "armv6eb" +CFLAGS+= -DCPU_DEFAULT=ARM_ARCH_V6K +.endif + .if ${TARGET_CPUARCH} == "mips" SRCS+= itbl-ops.c itbl-parse.y itbl-lex.l .if ${TARGET_ARCH:Mmips64*} != "" Modified: head/gnu/usr.bin/binutils/ld/Makefile.arm ============================================================================== --- head/gnu/usr.bin/binutils/ld/Makefile.arm Wed Aug 15 03:09:00 2012 (r239271) +++ head/gnu/usr.bin/binutils/ld/Makefile.arm Wed Aug 15 03:21:56 2012 (r239272) @@ -1,6 +1,6 @@ # $FreeBSD$ -.if ${TARGET_ARCH} == "armeb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" NATIVE_EMULATION= armelfb_fbsd .else NATIVE_EMULATION= armelf_fbsd Modified: head/gnu/usr.bin/binutils/libbfd/Makefile.arm ============================================================================== --- head/gnu/usr.bin/binutils/libbfd/Makefile.arm Wed Aug 15 03:09:00 2012 (r239271) +++ head/gnu/usr.bin/binutils/libbfd/Makefile.arm Wed Aug 15 03:21:56 2012 (r239272) @@ -1,6 +1,6 @@ # $FreeBSD$ -.if ${TARGET_ARCH} == "armeb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" DEFAULT_VECTOR= bfd_elf32_bigarm_vec .else DEFAULT_VECTOR= bfd_elf32_littlearm_vec @@ -14,7 +14,7 @@ SRCS+= cpu-arm.c \ elflink.c VECS+= ${DEFAULT_VECTOR} -.if ${TARGET_ARCH} == "armeb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" VECS+= bfd_elf32_littlearm_vec .else VECS+= bfd_elf32_bigarm_vec Modified: head/gnu/usr.bin/cc/Makefile.inc ============================================================================== --- head/gnu/usr.bin/cc/Makefile.inc Wed Aug 15 03:09:00 2012 (r239271) +++ head/gnu/usr.bin/cc/Makefile.inc Wed Aug 15 03:21:56 2012 (r239272) @@ -26,9 +26,12 @@ CSTD?= gnu89 CFLAGS+= -DCROSS_COMPILE .endif -.if ${TARGET_ARCH} == "armeb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" CFLAGS += -DTARGET_ENDIAN_DEFAULT=MASK_BIG_END .endif +.if ${TARGET_ARCH} == "armv6" || ${TARGET_ARCH} == "armv6eb" +CFLAGS += -DFREEBSD_ARCH_armv6 +.endif .if ${TARGET_CPUARCH} == "mips" .if ${TARGET_ARCH:Mmips*el} != "" Modified: head/gnu/usr.bin/cc/Makefile.tgt ============================================================================== --- head/gnu/usr.bin/cc/Makefile.tgt Wed Aug 15 03:09:00 2012 (r239271) +++ head/gnu/usr.bin/cc/Makefile.tgt Wed Aug 15 03:21:56 2012 (r239272) @@ -4,7 +4,7 @@ # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif @@ -17,7 +17,7 @@ TARGET_CPU_DEFAULT= MASK_GNU_AS|MASK_GNU .if ${TARGET_ARCH} == "sparc64" TARGET_CPU_DEFAULT= TARGET_CPU_ultrasparc .endif -.if ${TARGET_ARCH} == "armeb" || \ +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "armv6eb" || \ (${TARGET_CPUARCH} == "mips" && ${TARGET_ARCH:Mmips*el} == "") TARGET_BIG_ENDIAN=t .endif Modified: head/gnu/usr.bin/gdb/Makefile.inc ============================================================================== --- head/gnu/usr.bin/gdb/Makefile.inc Wed Aug 15 03:09:00 2012 (r239271) +++ head/gnu/usr.bin/gdb/Makefile.inc Wed Aug 15 03:21:56 2012 (r239272) @@ -20,7 +20,7 @@ OBJ_GDB= ${OBJ_ROOT}/gdb # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif Modified: head/gnu/usr.bin/gdb/libgdb/Makefile ============================================================================== --- head/gnu/usr.bin/gdb/libgdb/Makefile Wed Aug 15 03:09:00 2012 (r239271) +++ head/gnu/usr.bin/gdb/libgdb/Makefile Wed Aug 15 03:21:56 2012 (r239272) @@ -4,7 +4,7 @@ # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif Modified: head/share/mk/bsd.cpu.mk ============================================================================== --- head/share/mk/bsd.cpu.mk Wed Aug 15 03:09:00 2012 (r239271) +++ head/share/mk/bsd.cpu.mk Wed Aug 15 03:21:56 2012 (r239272) @@ -97,9 +97,13 @@ _CPUCFLAGS = -march=${CPUTYPE} . if ${CPUTYPE} == "xscale" #XXX: gcc doesn't seem to like -mcpu=xscale, and dies while rebuilding itself #_CPUCFLAGS = -mcpu=xscale -_CPUCFLAGS = -march=armv5te -D__XSCALE__ +_CPUCFLAGS = -march=armv5te -D__XSCALE__ -DARM_WANT_TP_ADDRESS +. elif ${CPUTYPE} == "armv6" +_CPUCFLAGS = -march=${CPUTYPE} -DARM_ARCH_6=1 +. elif ${CPUTYPE} == "cortexa" +_CPUCFLAGS = -march=armv6 -DARM_ARCH_6=1 -mfpu=vfp . else -_CPUCFLAGS = -mcpu=${CPUTYPE} +_CPUCFLAGS = -mcpu=${CPUTYPE} -DARM_WANT_TP_ADDRESS . endif . elif ${MACHINE_ARCH} == "powerpc" . if ${CPUTYPE} == "e500" Modified: head/share/mk/bsd.endian.mk ============================================================================== --- head/share/mk/bsd.endian.mk Wed Aug 15 03:09:00 2012 (r239271) +++ head/share/mk/bsd.endian.mk Wed Aug 15 03:21:56 2012 (r239272) @@ -4,12 +4,14 @@ ${MACHINE_ARCH} == "i386" || \ ${MACHINE_ARCH} == "ia64" || \ ${MACHINE_ARCH} == "arm" || \ + ${MACHINE_ARCH} == "armv6" || \ ${MACHINE_ARCH:Mmips*el} != "" TARGET_ENDIANNESS= 1234 .elif ${MACHINE_ARCH} == "powerpc" || \ ${MACHINE_ARCH} == "powerpc64" || \ ${MACHINE_ARCH} == "sparc64" || \ ${MACHINE_ARCH} == "armeb" || \ + ${MACHINE_ARCH} == "armv6eb" || \ ${MACHINE_ARCH:Mmips*} != "" TARGET_ENDIANNESS= 4321 .endif Modified: head/share/mk/sys.mk ============================================================================== --- head/share/mk/sys.mk Wed Aug 15 03:09:00 2012 (r239271) +++ head/share/mk/sys.mk Wed Aug 15 03:21:56 2012 (r239272) @@ -13,7 +13,7 @@ unix ?= We run FreeBSD, not UNIX. # and/or endian. This is called MACHINE_CPU in NetBSD, but that's used # for something different in FreeBSD. # -MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} .endif # If the special target .POSIX appears (without prerequisites or Modified: head/sys/conf/kern.pre.mk ============================================================================== --- head/sys/conf/kern.pre.mk Wed Aug 15 03:09:00 2012 (r239271) +++ head/sys/conf/kern.pre.mk Wed Aug 15 03:21:56 2012 (r239272) @@ -6,7 +6,7 @@ .include # backwards compat option for older systems. -MACHINE_CPUARCH?=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +MACHINE_CPUARCH?=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} # Can be overridden by makeoptions or /etc/make.conf KERNEL_KO?= kernel Modified: head/sys/conf/kmod.mk ============================================================================== --- head/sys/conf/kmod.mk Wed Aug 15 03:09:00 2012 (r239271) +++ head/sys/conf/kmod.mk Wed Aug 15 03:21:56 2012 (r239272) @@ -61,7 +61,7 @@ # # backwards compat option for older systems. -MACHINE_CPUARCH?=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +MACHINE_CPUARCH?=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/} AWK?= awk KMODLOAD?= /sbin/kldload Modified: head/usr.bin/xlint/Makefile.inc ============================================================================== --- head/usr.bin/xlint/Makefile.inc Wed Aug 15 03:09:00 2012 (r239271) +++ head/usr.bin/xlint/Makefile.inc Wed Aug 15 03:21:56 2012 (r239272) @@ -8,7 +8,7 @@ WARNS?= 0 # These assignments duplicate much of the functionality of # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/armeb/arm/} +TARGET_CPUARCH= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/} .else TARGET_CPUARCH= ${MACHINE_CPUARCH} TARGET_ARCH= ${MACHINE_ARCH} From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 03:33:57 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B1194106564A; Wed, 15 Aug 2012 03:33:57 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9C38E8FC0A; Wed, 15 Aug 2012 03:33:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F3XvKO094232; Wed, 15 Aug 2012 03:33:57 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F3XvSW094230; Wed, 15 Aug 2012 03:33:57 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150333.q7F3XvSW094230@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 03:33:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239273 - head/sys/dev/ofw X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 03:33:57 -0000 Author: gonzo Date: Wed Aug 15 03:33:57 2012 New Revision: 239273 URL: http://svn.freebsd.org/changeset/base/239273 Log: Merging of projects/armv6, part 4 r232281: Fix byte order. Modified: head/sys/dev/ofw/ofw_iicbus.c Modified: head/sys/dev/ofw/ofw_iicbus.c ============================================================================== --- head/sys/dev/ofw/ofw_iicbus.c Wed Aug 15 03:21:56 2012 (r239272) +++ head/sys/dev/ofw/ofw_iicbus.c Wed Aug 15 03:33:57 2012 (r239273) @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -101,6 +102,7 @@ ofw_iicbus_attach(device_t dev) struct iicbus_softc *sc = IICBUS_SOFTC(dev); struct ofw_iicbus_devinfo *dinfo; phandle_t child; + pcell_t paddr; device_t childdev; uint32_t addr; @@ -121,10 +123,11 @@ ofw_iicbus_attach(device_t dev) * property, then try the reg property. It moves around * on different systems. */ - if (OF_getprop(child, "i2c-address", &addr, sizeof(addr)) == -1) - if (OF_getprop(child, "reg", &addr, sizeof(addr)) == -1) + if (OF_getprop(child, "i2c-address", &paddr, sizeof(paddr)) == -1) + if (OF_getprop(child, "reg", &paddr, sizeof(paddr)) == -1) continue; + addr = fdt32_to_cpu(paddr); /* * Now set up the I2C and OFW bus layer devinfo and add it * to the bus. From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 03:49:11 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id ABF37106566B; Wed, 15 Aug 2012 03:49:11 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 94E518FC0C; Wed, 15 Aug 2012 03:49:11 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F3nBxr095927; Wed, 15 Aug 2012 03:49:11 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F3nBGi095921; Wed, 15 Aug 2012 03:49:11 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150349.q7F3nBGi095921@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 03:49:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239274 - in head/sys/dev: fdt uart X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 03:49:11 -0000 Author: gonzo Date: Wed Aug 15 03:49:10 2012 New Revision: 239274 URL: http://svn.freebsd.org/changeset/base/239274 Log: Merging of projects/armv6, part 4 r233822: Remove useless and wrong piece of code in fdt_get_range() which i overwrites passed phandle_t node. Modify debug printf in fdt_reg_to_rl() to be consistent (that is, print start and end *virtual* addresses). r230560: Handle "ranges;" Make fdt_reg_to_rl() responsible for mapping the device memory, instead on just hoping that there's only one simplebus, and using fdt_immr_va as the base VA. r230315 Add a function to get the PA from range, instead of (ab)using fdt_immr_pa, and use it for the UART driver Modified: head/sys/dev/fdt/fdt_common.c head/sys/dev/fdt/fdt_common.h head/sys/dev/fdt/fdtbus.c head/sys/dev/fdt/simplebus.c head/sys/dev/uart/uart_bus_fdt.c Modified: head/sys/dev/fdt/fdt_common.c ============================================================================== --- head/sys/dev/fdt/fdt_common.c Wed Aug 15 03:33:57 2012 (r239273) +++ head/sys/dev/fdt/fdt_common.c Wed Aug 15 03:49:10 2012 (r239274) @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -63,30 +64,12 @@ vm_offset_t fdt_immr_va; vm_offset_t fdt_immr_size; int -fdt_immr_addr(vm_offset_t immr_va) +fdt_get_range(phandle_t node, int range_id, u_long *base, u_long *size) { pcell_t ranges[6], *rangesptr; - phandle_t node; - u_long base, size; pcell_t addr_cells, size_cells, par_addr_cells; int len, tuple_size, tuples; - /* - * Try to access the SOC node directly i.e. through /aliases/. - */ - if ((node = OF_finddevice("soc")) != -1) - if (fdt_is_compatible_strict(node, "simple-bus")) - goto moveon; - /* - * Find the node the long way. - */ - if ((node = OF_finddevice("/")) == -1) - return (ENXIO); - - if ((node = fdt_find_compatible(node, "simple-bus", 1)) == 0) - return (ENXIO); - -moveon: if ((fdt_addrsize_cells(node, &addr_cells, &size_cells)) != 0) return (ENXIO); /* @@ -99,6 +82,14 @@ moveon: len = OF_getproplen(node, "ranges"); if (len > sizeof(ranges)) return (ENOMEM); + if (len == 0) { + *base = 0; + *size = ULONG_MAX; + return (0); + } + + if (!(range_id < len)) + return (ERANGE); if (OF_getprop(node, "ranges", ranges, sizeof(ranges)) <= 0) return (EINVAL); @@ -111,21 +102,48 @@ moveon: addr_cells, size_cells)) { return (ERANGE); } - base = 0; - size = 0; - rangesptr = &ranges[0]; + *base = 0; + *size = 0; + rangesptr = &ranges[range_id]; - base = fdt_data_get((void *)rangesptr, addr_cells); + *base = fdt_data_get((void *)rangesptr, addr_cells); rangesptr += addr_cells; - base += fdt_data_get((void *)rangesptr, par_addr_cells); + *base += fdt_data_get((void *)rangesptr, par_addr_cells); rangesptr += par_addr_cells; - size = fdt_data_get((void *)rangesptr, size_cells); + *size = fdt_data_get((void *)rangesptr, size_cells); + return (0); +} - fdt_immr_pa = base; - fdt_immr_va = immr_va; - fdt_immr_size = size; +int +fdt_immr_addr(vm_offset_t immr_va) +{ + phandle_t node; + u_long base, size; + int r; - return (0); + /* + * Try to access the SOC node directly i.e. through /aliases/. + */ + if ((node = OF_finddevice("soc")) != 0) + if (fdt_is_compatible_strict(node, "simple-bus")) + goto moveon; + /* + * Find the node the long way. + */ + if ((node = OF_finddevice("/")) == 0) + return (ENXIO); + + if ((node = fdt_find_compatible(node, "simple-bus", 1)) == 0) + return (ENXIO); + +moveon: + if ((r = fdt_get_range(node, 0, &base, &size)) == 0) { + fdt_immr_pa = base; + fdt_immr_va = immr_va; + fdt_immr_size = size; + } + + return (r); } /* @@ -401,16 +419,19 @@ fdt_regsize(phandle_t node, u_long *base } int -fdt_reg_to_rl(phandle_t node, struct resource_list *rl, u_long base) +fdt_reg_to_rl(phandle_t node, struct resource_list *rl) { u_long start, end, count; pcell_t *reg, *regptr; pcell_t addr_cells, size_cells; int tuple_size, tuples; int i, rv; + long vaddr; + long busaddr, bussize; if (fdt_addrsize_cells(OF_parent(node), &addr_cells, &size_cells) != 0) return (ENXIO); + fdt_get_range(OF_parent(node), 0, &busaddr, &bussize); tuple_size = sizeof(pcell_t) * (addr_cells + size_cells); tuples = OF_getprop_alloc(node, "reg", tuple_size, (void **)®); @@ -432,14 +453,15 @@ fdt_reg_to_rl(phandle_t node, struct res reg += addr_cells + size_cells; /* Calculate address range relative to base. */ - start &= 0x000ffffful; - start = base + start; - end = start + count - 1; + start += busaddr; + if (bus_space_map(fdtbus_bs_tag, start, count, 0, &vaddr) != 0) + panic("Couldn't map the device memory"); + end = vaddr + count - 1; - debugf("reg addr start = %lx, end = %lx, count = %lx\n", start, + debugf("reg addr start = %lx, end = %lx, count = %lx\n", vaddr, end, count); - resource_list_add(rl, SYS_RES_MEMORY, i, start, end, + resource_list_add(rl, SYS_RES_MEMORY, i, vaddr, end, count); } rv = 0; Modified: head/sys/dev/fdt/fdt_common.h ============================================================================== --- head/sys/dev/fdt/fdt_common.h Wed Aug 15 03:33:57 2012 (r239273) +++ head/sys/dev/fdt/fdt_common.h Wed Aug 15 03:49:10 2012 (r239274) @@ -91,6 +91,7 @@ int fdt_data_verify(void *, int); phandle_t fdt_find_compatible(phandle_t, const char *, int); int fdt_get_mem_regions(struct mem_region *, int *, uint32_t *); int fdt_get_phyaddr(phandle_t, device_t, int *, void **); +int fdt_get_range(phandle_t, int, u_long *, u_long *); int fdt_immr_addr(vm_offset_t); int fdt_regsize(phandle_t, u_long *, u_long *); int fdt_intr_decode(phandle_t, pcell_t *, int *, int *, int *); @@ -107,7 +108,7 @@ int fdt_pci_ranges_decode(phandle_t, str struct fdt_pci_range *); int fdt_pci_route_intr(int, int, int, int, struct fdt_pci_intr *, int *); int fdt_ranges_verify(pcell_t *, int, int, int, int); -int fdt_reg_to_rl(phandle_t, struct resource_list *, u_long); +int fdt_reg_to_rl(phandle_t, struct resource_list *); int fdt_pm(phandle_t); #endif /* _FDT_COMMON_H_ */ Modified: head/sys/dev/fdt/fdtbus.c ============================================================================== --- head/sys/dev/fdt/fdtbus.c Wed Aug 15 03:33:57 2012 (r239273) +++ head/sys/dev/fdt/fdtbus.c Wed Aug 15 03:49:10 2012 (r239274) @@ -289,7 +289,7 @@ newbus_device_create(device_t dev_par, p resource_list_init(&di->di_res); - if (fdt_reg_to_rl(node, &di->di_res, fdt_immr_va)) { + if (fdt_reg_to_rl(node, &di->di_res)) { device_printf(child, "could not process 'reg' property\n"); newbus_device_destroy(child); child = NULL; Modified: head/sys/dev/fdt/simplebus.c ============================================================================== --- head/sys/dev/fdt/simplebus.c Wed Aug 15 03:33:57 2012 (r239273) +++ head/sys/dev/fdt/simplebus.c Wed Aug 15 03:49:10 2012 (r239274) @@ -61,9 +61,6 @@ static MALLOC_DEFINE(M_SIMPLEBUS, "simpl struct simplebus_softc { int sc_addr_cells; int sc_size_cells; - u_long sc_start_pa; - u_long sc_start_va; - u_long sc_size; }; struct simplebus_devinfo { @@ -155,10 +152,6 @@ simplebus_attach(device_t dev) sc = device_get_softc(dev); - sc->sc_start_pa = fdt_immr_pa; - sc->sc_start_va = fdt_immr_va; - sc->sc_size = fdt_immr_size; - /* * Walk simple-bus and add direct subordinates as our children. */ @@ -182,10 +175,11 @@ simplebus_attach(device_t dev) } resource_list_init(&di->di_res); - - if (fdt_reg_to_rl(dt_child, &di->di_res, sc->sc_start_va)) { - device_printf(dev, "%s: could not process 'reg' " + if (fdt_reg_to_rl(dt_child, &di->di_res)) { + device_printf(dev, + "%s: could not process 'reg' " "property\n", di->di_ofw.obd_name); + /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; @@ -195,6 +189,7 @@ simplebus_attach(device_t dev) device_printf(dev, "%s: could not process " "'interrupts' property\n", di->di_ofw.obd_name); resource_list_free(&di->di_res); + /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; @@ -206,6 +201,7 @@ simplebus_attach(device_t dev) device_printf(dev, "could not add child: %s\n", di->di_ofw.obd_name); resource_list_free(&di->di_res); + /* XXX should unmap */ ofw_bus_gen_destroy_devinfo(&di->di_ofw); free(di, M_SIMPLEBUS); continue; Modified: head/sys/dev/uart/uart_bus_fdt.c ============================================================================== --- head/sys/dev/uart/uart_bus_fdt.c Wed Aug 15 03:33:57 2012 (r239273) +++ head/sys/dev/uart/uart_bus_fdt.c Wed Aug 15 03:49:10 2012 (r239274) @@ -137,7 +137,7 @@ uart_cpu_getdev(int devtype, struct uart struct uart_class *class; phandle_t node, chosen; pcell_t shift, br, rclk; - u_long start, size; + u_long start, size, pbase, psize; int err; uart_bus_space_mem = fdtbus_bs_tag; @@ -197,7 +197,9 @@ uart_cpu_getdev(int devtype, struct uart err = fdt_regsize(node, &start, &size); if (err) return (ENXIO); - start += fdt_immr_va; + + fdt_get_range(OF_parent(node), 0, &pbase, &psize); + start += pbase; return (bus_space_map(di->bas.bst, start, size, 0, &di->bas.bsh)); } From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 04:03:56 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 39F93106564A; Wed, 15 Aug 2012 04:03:55 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DBB7A8FC16; Wed, 15 Aug 2012 04:03:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F43tAi097613; Wed, 15 Aug 2012 04:03:55 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F43t56097606; Wed, 15 Aug 2012 04:03:55 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150403.q7F43t56097606@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 04:03:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239275 - in head/sys: conf dev/mii dev/usb dev/usb/net modules/mii modules/usb/smsc X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 04:03:56 -0000 Author: gonzo Date: Wed Aug 15 04:03:55 2012 New Revision: 239275 URL: http://svn.freebsd.org/changeset/base/239275 Log: Merging of projects/armv6, part 5 - Driver for SMSC LAN95XX and LAN8710A ethernet controllers - Driver for LAN8710A PHY Submitted by: Ben Gray, Damjan Marion, Tim Kientzle Added: head/sys/dev/mii/smscphy.c (contents, props changed) head/sys/dev/usb/net/if_smsc.c (contents, props changed) head/sys/dev/usb/net/if_smscreg.h (contents, props changed) head/sys/modules/usb/smsc/ head/sys/modules/usb/smsc/Makefile (contents, props changed) Modified: head/sys/conf/files head/sys/dev/mii/miidevs head/sys/dev/mii/smcphy.c head/sys/dev/usb/usbdevs head/sys/modules/mii/Makefile Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Wed Aug 15 03:49:10 2012 (r239274) +++ head/sys/conf/files Wed Aug 15 04:03:55 2012 (r239275) @@ -1612,6 +1612,7 @@ dev/mii/rgephy.c optional miibus | rgep dev/mii/rlphy.c optional miibus | rlphy dev/mii/rlswitch.c optional rlswitch dev/mii/smcphy.c optional miibus | smcphy +dev/mii/smscphy.c optional miibus | smscphy dev/mii/tdkphy.c optional miibus | tdkphy dev/mii/tlphy.c optional miibus | tlphy dev/mii/truephy.c optional miibus | truephy @@ -2118,11 +2119,12 @@ dev/usb/net/if_ipheth.c optional ipheth dev/usb/net/if_kue.c optional kue dev/usb/net/if_mos.c optional mos dev/usb/net/if_rue.c optional rue +dev/usb/net/if_smsc.c optional smsc dev/usb/net/if_udav.c optional udav dev/usb/net/if_usie.c optional usie dev/usb/net/ruephy.c optional rue dev/usb/net/usb_ethernet.c optional aue | axe | cdce | cue | kue | mos | \ - rue | udav + rue | smsc | udav dev/usb/net/uhso.c optional uhso # # USB WLAN drivers Modified: head/sys/dev/mii/miidevs ============================================================================== --- head/sys/dev/mii/miidevs Wed Aug 15 03:49:10 2012 (r239274) +++ head/sys/dev/mii/miidevs Wed Aug 15 04:03:55 2012 (r239275) @@ -69,6 +69,7 @@ oui RDC 0x00d02d RDC Semiconductor oui REALTEK 0x00e04c RealTek Semicondctor oui SEEQ 0x00a07d Seeq Technology oui SIS 0x00e006 Silicon Integrated Systems +oui SMC 0x00800f SMC oui TI 0x080028 Texas Instruments oui TSC 0x00c039 TDK Semiconductor oui VITESSE 0x0001c1 Vitesse Semiconductor @@ -325,3 +326,6 @@ model xxVITESSE VSC8641 0x0003 Vitesse /* XaQti Corp. PHYs */ model xxXAQTI XMACII 0x0000 XaQti Corp. XMAC II gigabit interface + +/* SMC */ +model SMC LAN8710A 0x000F SMC LAN8710A 10/100 interface Modified: head/sys/dev/mii/smcphy.c ============================================================================== --- head/sys/dev/mii/smcphy.c Wed Aug 15 03:49:10 2012 (r239274) +++ head/sys/dev/mii/smcphy.c Wed Aug 15 04:03:55 2012 (r239275) @@ -26,7 +26,8 @@ __FBSDID("$FreeBSD$"); /* - * Driver for the internal PHY on the SMSC LAN91C111. + * Driver for the SEEQ 80220 and 84220. + * (Originally developed for the internal PHY on the SMSC LAN91C111.) */ #include Added: head/sys/dev/mii/smscphy.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/dev/mii/smscphy.c Wed Aug 15 04:03:55 2012 (r239275) @@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2006 Benno Rice. All rights reserved. + * + * 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 ``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 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; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * Driver for the SMSC LAN8710A + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include "miidevs.h" + +#include "miibus_if.h" + +static int smscphy_probe(device_t); +static int smscphy_attach(device_t); + +static int smscphy_service(struct mii_softc *, struct mii_data *, int); +static void smscphy_auto(struct mii_softc *, int); +static void smscphy_status(struct mii_softc *); + +static device_method_t smscphy_methods[] = { + /* device interface */ + DEVMETHOD(device_probe, smscphy_probe), + DEVMETHOD(device_attach, smscphy_attach), + DEVMETHOD(device_detach, mii_phy_detach), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + DEVMETHOD_END +}; + +static devclass_t smscphy_devclass; + +static driver_t smscphy_driver = { + "smscphy", + smscphy_methods, + sizeof(struct mii_softc) +}; + +DRIVER_MODULE(smscphy, miibus, smscphy_driver, smscphy_devclass, 0, 0); + +static const struct mii_phydesc smscphys[] = { + MII_PHY_DESC(SMC, LAN8710A), + MII_PHY_END +}; + +static const struct mii_phy_funcs smscphy_funcs = { + smscphy_service, + smscphy_status, + mii_phy_reset +}; + +static int +smscphy_probe(device_t dev) +{ + + return (mii_phy_dev_probe(dev, smscphys, BUS_PROBE_DEFAULT)); +} + +static int +smscphy_attach(device_t dev) +{ + struct mii_softc *sc; + struct mii_attach_args *ma; + const struct mii_phy_funcs *mpf; + + sc = device_get_softc(dev); + ma = device_get_ivars(dev); + mpf = &smscphy_funcs; + mii_phy_dev_attach(dev, MIIF_NOISOLATE | MIIF_NOMANPAUSE, mpf, 1); + mii_phy_setmedia(sc); + + return (0); +} + +static int +smscphy_service(struct mii_softc *sc, struct mii_data *mii, int cmd) +{ + struct ifmedia_entry *ife; + int reg; + + ife = mii->mii_media.ifm_cur; + + switch (cmd) { + case MII_POLLSTAT: + break; + + case MII_MEDIACHG: + /* + * If the interface is not up, don't do anything. + */ + if ((mii->mii_ifp->if_flags & IFF_UP) == 0) + break; + + switch (IFM_SUBTYPE(ife->ifm_media)) { + case IFM_AUTO: + smscphy_auto(sc, ife->ifm_media); + break; + + default: + mii_phy_setmedia(sc); + break; + } + + break; + + case MII_TICK: + if ((mii->mii_ifp->if_flags & IFF_UP) == 0) { + return (0); + } + + if (IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO) { + break; + } + + /* I have no idea why BMCR_ISO gets set. */ + reg = PHY_READ(sc, MII_BMCR); + if (reg & BMCR_ISO) { + PHY_WRITE(sc, MII_BMCR, reg & ~BMCR_ISO); + } + + reg = PHY_READ(sc, MII_BMSR) | PHY_READ(sc, MII_BMSR); + if (reg & BMSR_LINK) { + sc->mii_ticks = 0; + break; + } + + if (++sc->mii_ticks <= MII_ANEGTICKS) { + break; + } + + sc->mii_ticks = 0; + PHY_RESET(sc); + smscphy_auto(sc, ife->ifm_media); + break; + } + + /* Update the media status. */ + PHY_STATUS(sc); + + /* Callback if something changed. */ + mii_phy_update(sc, cmd); + return (0); +} + +static void +smscphy_auto(struct mii_softc *sc, int media) +{ + uint16_t anar; + + anar = BMSR_MEDIA_TO_ANAR(sc->mii_capabilities) | ANAR_CSMA; + if ((media & IFM_FLOW) != 0 || (sc->mii_flags & MIIF_FORCEPAUSE) != 0) + anar |= ANAR_FC; + PHY_WRITE(sc, MII_ANAR, anar); + /* Apparently this helps. */ + anar = PHY_READ(sc, MII_ANAR); + PHY_WRITE(sc, MII_BMCR, BMCR_AUTOEN | BMCR_STARTNEG); +} + +static void +smscphy_status(struct mii_softc *sc) +{ + struct mii_data *mii; + uint32_t bmcr, bmsr, status; + + mii = sc->mii_pdata; + mii->mii_media_status = IFM_AVALID; + mii->mii_media_active = IFM_ETHER; + + bmsr = PHY_READ(sc, MII_BMSR) | PHY_READ(sc, MII_BMSR); + if ((bmsr & BMSR_LINK) != 0) + mii->mii_media_status |= IFM_ACTIVE; + + bmcr = PHY_READ(sc, MII_BMCR); + if ((bmcr & BMCR_ISO) != 0) { + mii->mii_media_active |= IFM_NONE; + mii->mii_media_status = 0; + return; + } + + if ((bmcr & BMCR_LOOP) != 0) + mii->mii_media_active |= IFM_LOOP; + + if ((bmcr & BMCR_AUTOEN) != 0) { + if ((bmsr & BMSR_ACOMP) == 0) { + /* Erg, still trying, I guess... */ + mii->mii_media_active |= IFM_NONE; + return; + } + } + + status = PHY_READ(sc, 0x1F); + if (status & 0x0008) + mii->mii_media_active |= IFM_100_TX; + else + mii->mii_media_active |= IFM_10_T; + if (status & 0x0010) + mii->mii_media_active |= IFM_FDX | mii_phy_flowstatus(sc); + else + mii->mii_media_active |= IFM_HDX; +} Added: head/sys/dev/usb/net/if_smsc.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/dev/usb/net/if_smsc.c Wed Aug 15 04:03:55 2012 (r239275) @@ -0,0 +1,1756 @@ +/*- + * Copyright (c) 2012 + * Ben Gray . + * All rights reserved. + * + * 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 ``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 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; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * SMSC LAN9xxx devices (http://www.smsc.com/) + * + * The LAN9500 & LAN9500A devices are stand-alone USB to Ethernet chips that + * support USB 2.0 and 10/100 Mbps Ethernet. + * + * The LAN951x devices are an integrated USB hub and USB to Ethernet adapter. + * The driver only covers the Ethernet part, the standard USB hub driver + * supports the hub part. + * + * This driver is closely modelled on the Linux driver written and copyrighted + * by SMSC. + * + * + * + * + * H/W TCP & UDP Checksum Offloading + * --------------------------------- + * The chip supports both tx and rx offloading of UDP & TCP checksums, this + * feature can be dynamically enabled/disabled. + * + * RX checksuming is performed across bytes after the IPv4 header to the end of + * the Ethernet frame, this means if the frame is padded with non-zero values + * the H/W checksum will be incorrect, however the rx code compensates for this. + * + * TX checksuming is more complicated, the device requires a special header to + * be prefixed onto the start of the frame which indicates the start and end + * positions of the UDP or TCP frame. This requires the driver to manually + * go through the packet data and decode the headers prior to sending. + * On Linux they generally provide cues to the location of the csum and the + * area to calculate it over, on FreeBSD we seem to have to do it all ourselves, + * hence this is not as optimal and therefore h/w tX checksum is currently not + * implemented. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "usbdevs.h" + +#define USB_DEBUG_VAR smsc_debug +#include +#include + +#include +#include +#include "if_smscreg.h" + +#ifdef USB_DEBUG +static int smsc_debug = 0; + +SYSCTL_NODE(_hw_usb, OID_AUTO, smsc, CTLFLAG_RW, 0, "USB smsc"); +SYSCTL_INT(_hw_usb_smsc, OID_AUTO, debug, CTLFLAG_RW, &smsc_debug, 0, + "Debug level"); +#endif + +/* + * Various supported device vendors/products. + */ +static const struct usb_device_id smsc_devs[] = { +#define SMSC_DEV(p,i) { USB_VPI(USB_VENDOR_SMC2, USB_PRODUCT_SMC2_##p, i) } + SMSC_DEV(LAN9514_ETH, 0), +#undef SMSC_DEV +}; + + +#ifdef USB_DEBUG +#define smsc_dbg_printf(sc, fmt, args...) \ + do { \ + if (smsc_debug > 0) \ + device_printf((sc)->sc_ue.ue_dev, "debug: " fmt, ##args); \ + } while(0) +#else +#define smsc_dbg_printf(sc, fmt, args...) +#endif + +#define smsc_warn_printf(sc, fmt, args...) \ + device_printf((sc)->sc_ue.ue_dev, "warning: " fmt, ##args) + +#define smsc_err_printf(sc, fmt, args...) \ + device_printf((sc)->sc_ue.ue_dev, "error: " fmt, ##args) + + +#define ETHER_IS_ZERO(addr) \ + (!(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5])) + +#define ETHER_IS_VALID(addr) \ + (!ETHER_IS_MULTICAST(addr) && !ETHER_IS_ZERO(addr)) + +static device_probe_t smsc_probe; +static device_attach_t smsc_attach; +static device_detach_t smsc_detach; + +static usb_callback_t smsc_bulk_read_callback; +static usb_callback_t smsc_bulk_write_callback; + +static miibus_readreg_t smsc_miibus_readreg; +static miibus_writereg_t smsc_miibus_writereg; +static miibus_statchg_t smsc_miibus_statchg; + +#if __FreeBSD_version > 1000000 +static int smsc_attach_post_sub(struct usb_ether *ue); +#endif +static uether_fn_t smsc_attach_post; +static uether_fn_t smsc_init; +static uether_fn_t smsc_stop; +static uether_fn_t smsc_start; +static uether_fn_t smsc_tick; +static uether_fn_t smsc_setmulti; +static uether_fn_t smsc_setpromisc; + +static int smsc_ifmedia_upd(struct ifnet *); +static void smsc_ifmedia_sts(struct ifnet *, struct ifmediareq *); + +static int smsc_chip_init(struct smsc_softc *sc); +static int smsc_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data); + +static const struct usb_config smsc_config[SMSC_N_TRANSFER] = { + + [SMSC_BULK_DT_WR] = { + .type = UE_BULK, + .endpoint = UE_ADDR_ANY, + .direction = UE_DIR_OUT, + .frames = 16, + .bufsize = 16 * (MCLBYTES + 16), + .flags = {.pipe_bof = 1,.force_short_xfer = 1,}, + .callback = smsc_bulk_write_callback, + .timeout = 10000, /* 10 seconds */ + }, + + [SMSC_BULK_DT_RD] = { + .type = UE_BULK, + .endpoint = UE_ADDR_ANY, + .direction = UE_DIR_IN, + .bufsize = 20480, /* bytes */ + .flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, + .callback = smsc_bulk_read_callback, + .timeout = 0, /* no timeout */ + }, + + /* The SMSC chip supports an interrupt endpoints, however they aren't + * needed as we poll on the MII status. + */ +}; + +static const struct usb_ether_methods smsc_ue_methods = { + .ue_attach_post = smsc_attach_post, +#if __FreeBSD_version > 1000000 + .ue_attach_post_sub = smsc_attach_post_sub, +#endif + .ue_start = smsc_start, + .ue_ioctl = smsc_ioctl, + .ue_init = smsc_init, + .ue_stop = smsc_stop, + .ue_tick = smsc_tick, + .ue_setmulti = smsc_setmulti, + .ue_setpromisc = smsc_setpromisc, + .ue_mii_upd = smsc_ifmedia_upd, + .ue_mii_sts = smsc_ifmedia_sts, +}; + +/** + * smsc_read_reg - Reads a 32-bit register on the device + * @sc: driver soft context + * @off: offset of the register + * @data: pointer a value that will be populated with the register value + * + * LOCKING: + * The device lock must be held before calling this function. + * + * RETURNS: + * 0 on success, a USB_ERR_?? error code on failure. + */ +static int +smsc_read_reg(struct smsc_softc *sc, uint32_t off, uint32_t *data) +{ + struct usb_device_request req; + uint32_t buf; + usb_error_t err; + + SMSC_LOCK_ASSERT(sc, MA_OWNED); + + req.bmRequestType = UT_READ_VENDOR_DEVICE; + req.bRequest = SMSC_UR_READ_REG; + USETW(req.wValue, 0); + USETW(req.wIndex, off); + USETW(req.wLength, 4); + + err = uether_do_request(&sc->sc_ue, &req, &buf, 1000); + if (err != 0) + smsc_warn_printf(sc, "Failed to read register 0x%0x\n", off); + + *data = le32toh(buf); + + return (err); +} + +/** + * smsc_write_reg - Writes a 32-bit register on the device + * @sc: driver soft context + * @off: offset of the register + * @data: the 32-bit value to write into the register + * + * LOCKING: + * The device lock must be held before calling this function. + * + * RETURNS: + * 0 on success, a USB_ERR_?? error code on failure. + */ +static int +smsc_write_reg(struct smsc_softc *sc, uint32_t off, uint32_t data) +{ + struct usb_device_request req; + uint32_t buf; + usb_error_t err; + + SMSC_LOCK_ASSERT(sc, MA_OWNED); + + buf = htole32(data); + + req.bmRequestType = UT_WRITE_VENDOR_DEVICE; + req.bRequest = SMSC_UR_WRITE_REG; + USETW(req.wValue, 0); + USETW(req.wIndex, off); + USETW(req.wLength, 4); + + err = uether_do_request(&sc->sc_ue, &req, &buf, 1000); + if (err != 0) + smsc_warn_printf(sc, "Failed to write register 0x%0x\n", off); + + return (err); +} + +/** + * smsc_wait_for_bits - Polls on a register value until bits are cleared + * @sc: soft context + * @reg: offset of the register + * @bits: if the bits are clear the function returns + * + * LOCKING: + * The device lock must be held before calling this function. + * + * RETURNS: + * 0 on success, or a USB_ERR_?? error code on failure. + */ +static int +smsc_wait_for_bits(struct smsc_softc *sc, uint32_t reg, uint32_t bits) +{ + usb_ticks_t start_ticks; + usb_ticks_t max_ticks = USB_MS_TO_TICKS(1000); + uint32_t val; + int err; + + SMSC_LOCK_ASSERT(sc, MA_OWNED); + + start_ticks = (usb_ticks_t)ticks; + do { + if ((err = smsc_read_reg(sc, reg, &val)) != 0) + return (err); + if (!(val & bits)) + return (0); + + uether_pause(&sc->sc_ue, hz / 100); + } while ((ticks - start_ticks) < max_ticks); + + return (USB_ERR_TIMEOUT); +} + +/** + * smsc_eeprom_read - Reads the attached EEPROM + * @sc: soft context + * @off: the eeprom address offset + * @buf: stores the bytes + * @buflen: the number of bytes to read + * + * Simply reads bytes from an attached eeprom. + * + * LOCKING: + * The function takes and releases the device lock if it is not already held. + * + * RETURNS: + * 0 on success, or a USB_ERR_?? error code on failure. + */ +static int +smsc_eeprom_read(struct smsc_softc *sc, uint16_t off, uint8_t *buf, uint16_t buflen) +{ + usb_ticks_t start_ticks; + usb_ticks_t max_ticks = USB_MS_TO_TICKS(1000); + int err; + int locked; + uint32_t val; + uint16_t i; + + locked = mtx_owned(&sc->sc_mtx); + if (!locked) + SMSC_LOCK(sc); + + err = smsc_wait_for_bits(sc, SMSC_EEPROM_CMD, SMSC_EEPROM_CMD_BUSY); + if (err != 0) { + smsc_warn_printf(sc, "eeprom busy, failed to read data\n"); + goto done; + } + + /* start reading the bytes, one at a time */ + for (i = 0; i < buflen; i++) { + + val = SMSC_EEPROM_CMD_BUSY | (SMSC_EEPROM_CMD_ADDR_MASK & (off + i)); + if ((err = smsc_write_reg(sc, SMSC_EEPROM_CMD, val)) != 0) + goto done; + + start_ticks = (usb_ticks_t)ticks; + do { + if ((err = smsc_read_reg(sc, SMSC_EEPROM_CMD, &val)) != 0) + goto done; + if (!(val & SMSC_EEPROM_CMD_BUSY) || (val & SMSC_EEPROM_CMD_TIMEOUT)) + break; + + uether_pause(&sc->sc_ue, hz / 100); + } while ((ticks - start_ticks) < max_ticks); + + if (val & (SMSC_EEPROM_CMD_BUSY | SMSC_EEPROM_CMD_TIMEOUT)) { + smsc_warn_printf(sc, "eeprom command failed\n"); + err = USB_ERR_IOERROR; + break; + } + + if ((err = smsc_read_reg(sc, SMSC_EEPROM_DATA, &val)) != 0) + goto done; + + buf[i] = (val & 0xff); + } + +done: + if (!locked) + SMSC_UNLOCK(sc); + + return (err); +} + +/** + * smsc_miibus_readreg - Reads a MII/MDIO register + * @dev: usb ether device + * @phy: the number of phy reading from + * @reg: the register address + * + * Attempts to read a phy register over the MII bus. + * + * LOCKING: + * Takes and releases the device mutex lock if not already held. + * + * RETURNS: + * Returns the 16-bits read from the MII register, if this function fails 0 + * is returned. + */ +static int +smsc_miibus_readreg(device_t dev, int phy, int reg) +{ + struct smsc_softc *sc = device_get_softc(dev); + int locked; + uint32_t addr; + uint32_t val = 0; + + locked = mtx_owned(&sc->sc_mtx); + if (!locked) + SMSC_LOCK(sc); + + if (smsc_wait_for_bits(sc, SMSC_MII_ADDR, SMSC_MII_BUSY) != 0) { + smsc_warn_printf(sc, "MII is busy\n"); + goto done; + } + + addr = (phy << 11) | (reg << 6) | SMSC_MII_READ; + smsc_write_reg(sc, SMSC_MII_ADDR, addr); + + if (smsc_wait_for_bits(sc, SMSC_MII_ADDR, SMSC_MII_BUSY) != 0) + smsc_warn_printf(sc, "MII read timeout\n"); + + smsc_read_reg(sc, SMSC_MII_DATA, &val); + val = le32toh(val); + +done: + if (!locked) + SMSC_UNLOCK(sc); + + return (val & 0xFFFF); +} + +/** + * smsc_miibus_writereg - Writes a MII/MDIO register + * @dev: usb ether device + * @phy: the number of phy writing to + * @reg: the register address + * @val: the value to write + * + * Attempts to write a phy register over the MII bus. + * + * LOCKING: + * Takes and releases the device mutex lock if not already held. + * + * RETURNS: + * Always returns 0 regardless of success or failure. + */ +static int +smsc_miibus_writereg(device_t dev, int phy, int reg, int val) +{ + struct smsc_softc *sc = device_get_softc(dev); + int locked; + uint32_t addr; + + if (sc->sc_phyno != phy) + return (0); + + locked = mtx_owned(&sc->sc_mtx); + if (!locked) + SMSC_LOCK(sc); + + if (smsc_wait_for_bits(sc, SMSC_MII_ADDR, SMSC_MII_BUSY) != 0) { + smsc_warn_printf(sc, "MII is busy\n"); + goto done; + } + + val = htole32(val); + smsc_write_reg(sc, SMSC_MII_DATA, val); + + addr = (phy << 11) | (reg << 6) | SMSC_MII_WRITE; + smsc_write_reg(sc, SMSC_MII_ADDR, addr); + + if (smsc_wait_for_bits(sc, SMSC_MII_ADDR, SMSC_MII_BUSY) != 0) + smsc_warn_printf(sc, "MII write timeout\n"); + +done: + if (!locked) + SMSC_UNLOCK(sc); + return (0); +} + + + +/** + * smsc_miibus_statchg - Called to detect phy status change + * @dev: usb ether device + * + * This function is called periodically by the system to poll for status + * changes of the link. + * + * LOCKING: + * Takes and releases the device mutex lock if not already held. + */ +static void +smsc_miibus_statchg(device_t dev) +{ + struct smsc_softc *sc = device_get_softc(dev); + struct mii_data *mii = uether_getmii(&sc->sc_ue); + struct ifnet *ifp; + int locked; + int err; + uint32_t flow; + uint32_t afc_cfg; + + locked = mtx_owned(&sc->sc_mtx); + if (!locked) + SMSC_LOCK(sc); + + ifp = uether_getifp(&sc->sc_ue); + if (mii == NULL || ifp == NULL || + (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + goto done; + + /* Use the MII status to determine link status */ + sc->sc_flags &= ~SMSC_FLAG_LINK; + if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) == + (IFM_ACTIVE | IFM_AVALID)) { + switch (IFM_SUBTYPE(mii->mii_media_active)) { + case IFM_10_T: + case IFM_100_TX: + sc->sc_flags |= SMSC_FLAG_LINK; + break; + case IFM_1000_T: + /* Gigabit ethernet not supported by chipset */ + break; + default: + break; + } + } + + /* Lost link, do nothing. */ + if ((sc->sc_flags & SMSC_FLAG_LINK) == 0) { + smsc_dbg_printf(sc, "link flag not set\n"); + goto done; + } + + err = smsc_read_reg(sc, SMSC_AFC_CFG, &afc_cfg); + if (err) { + smsc_warn_printf(sc, "failed to read initial AFC_CFG, error %d\n", err); + goto done; + } + + /* Enable/disable full duplex operation and TX/RX pause */ + if ((IFM_OPTIONS(mii->mii_media_active) & IFM_FDX) != 0) { + smsc_dbg_printf(sc, "full duplex operation\n"); + sc->sc_mac_csr &= ~SMSC_MAC_CSR_RCVOWN; + sc->sc_mac_csr |= SMSC_MAC_CSR_FDPX; + + if ((IFM_OPTIONS(mii->mii_media_active) & IFM_ETH_RXPAUSE) != 0) + flow = 0xffff0002; + else + flow = 0; + + if ((IFM_OPTIONS(mii->mii_media_active) & IFM_ETH_TXPAUSE) != 0) + afc_cfg |= 0xf; + else + afc_cfg &= ~0xf; + + } else { + smsc_dbg_printf(sc, "half duplex operation\n"); + sc->sc_mac_csr &= ~SMSC_MAC_CSR_FDPX; + sc->sc_mac_csr |= SMSC_MAC_CSR_RCVOWN; + + flow = 0; + afc_cfg |= 0xf; + } + + err = smsc_write_reg(sc, SMSC_MAC_CSR, sc->sc_mac_csr); + err += smsc_write_reg(sc, SMSC_FLOW, flow); + err += smsc_write_reg(sc, SMSC_AFC_CFG, afc_cfg); + if (err) + smsc_warn_printf(sc, "media change failed, error %d\n", err); + +done: + if (!locked) + SMSC_UNLOCK(sc); +} + +/** + * smsc_ifmedia_upd - Set media options + * @ifp: interface pointer + * + * Basically boilerplate code that simply calls the mii functions to set the + * media options. + * + * LOCKING: + * The device lock must be held before this function is called. + * + * RETURNS: + * Returns 0 on success or a negative error code. + */ +static int +smsc_ifmedia_upd(struct ifnet *ifp) +{ + struct smsc_softc *sc = ifp->if_softc; + struct mii_data *mii = uether_getmii(&sc->sc_ue); + int err; + + SMSC_LOCK_ASSERT(sc, MA_OWNED); + + if (mii->mii_instance) { + struct mii_softc *miisc; + + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); + } + err = mii_mediachg(mii); + return (err); +} + +/** + * smsc_ifmedia_sts - Report current media status + * @ifp: inet interface pointer + * @ifmr: interface media request + * + * Basically boilerplate code that simply calls the mii functions to get the + * media status. + * + * LOCKING: + * Internally takes and releases the device lock. + */ +static void +smsc_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr) +{ + struct smsc_softc *sc = ifp->if_softc; + struct mii_data *mii = uether_getmii(&sc->sc_ue); + + SMSC_LOCK(sc); + + mii_pollstat(mii); + + SMSC_UNLOCK(sc); + + ifmr->ifm_active = mii->mii_media_active; + ifmr->ifm_status = mii->mii_media_status; +} + +/** + * smsc_hash - Calculate the hash of a mac address + * @addr: The mac address to calculate the hash on + * + * This function is used when configuring a range of m'cast mac addresses to + * filter on. The hash of the mac address is put in the device's mac hash + * table. + * + * RETURNS: + * Returns a value from 0-63 value which is the hash of the mac address. + */ +static inline uint32_t +smsc_hash(uint8_t addr[ETHER_ADDR_LEN]) +{ + return (ether_crc32_be(addr, ETHER_ADDR_LEN) >> 26) & 0x3f; +} + +/** + * smsc_setmulti - Setup multicast + * @ue: usb ethernet device context + * + * Tells the device to either accept frames with a multicast mac address, a + * select group of m'cast mac addresses or just the devices mac address. + * + * LOCKING: + * Should be called with the SMSC lock held. + */ +static void +smsc_setmulti(struct usb_ether *ue) +{ + struct smsc_softc *sc = uether_getsc(ue); + struct ifnet *ifp = uether_getifp(ue); + struct ifmultiaddr *ifma; + uint32_t hashtbl[2] = { 0, 0 }; + uint32_t hash; + + SMSC_LOCK_ASSERT(sc, MA_OWNED); + + if (ifp->if_flags & (IFF_ALLMULTI | IFF_PROMISC)) { + smsc_dbg_printf(sc, "receive all multicast enabled\n"); + sc->sc_mac_csr |= SMSC_MAC_CSR_MCPAS; + sc->sc_mac_csr &= ~SMSC_MAC_CSR_HPFILT; + + } else { + /* Take the lock of the mac address list before hashing each of them */ + if_maddr_rlock(ifp); + + if (!TAILQ_EMPTY(&ifp->if_multiaddrs)) { + /* We are filtering on a set of address so calculate hashes of each + * of the address and set the corresponding bits in the register. + */ + sc->sc_mac_csr |= SMSC_MAC_CSR_HPFILT; + sc->sc_mac_csr &= ~(SMSC_MAC_CSR_PRMS | SMSC_MAC_CSR_MCPAS); + + TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { + if (ifma->ifma_addr->sa_family != AF_LINK) + continue; + + hash = smsc_hash(LLADDR((struct sockaddr_dl *)ifma->ifma_addr)); + hashtbl[hash >> 5] |= 1 << (hash & 0x1F); + } + } else { + /* Only receive packets with destination set to our mac address */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 04:07:19 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 53F11106564A; Wed, 15 Aug 2012 04:07:19 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3E40C8FC08; Wed, 15 Aug 2012 04:07:19 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F47JTr098017; Wed, 15 Aug 2012 04:07:19 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F47JTo098014; Wed, 15 Aug 2012 04:07:19 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150407.q7F47JTo098014@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 04:07:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239276 - head/sys/dev/mge X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 04:07:19 -0000 Author: gonzo Date: Wed Aug 15 04:07:18 2012 New Revision: 239276 URL: http://svn.freebsd.org/changeset/base/239276 Log: Merging of projects/armv6, part 6 r229271: Import files needed to build ARMADA XP kernel. Submitted by: Grzegorz Bernacki Modified: head/sys/dev/mge/if_mge.c head/sys/dev/mge/if_mgevar.h Modified: head/sys/dev/mge/if_mge.c ============================================================================== --- head/sys/dev/mge/if_mge.c Wed Aug 15 04:03:55 2012 (r239275) +++ head/sys/dev/mge/if_mge.c Wed Aug 15 04:07:18 2012 (r239276) @@ -104,7 +104,10 @@ static uint32_t mge_rx_ipg(uint32_t val, static void mge_ver_params(struct mge_softc *sc); static void mge_intrs_ctrl(struct mge_softc *sc, int enable); +static void mge_intr_rxtx(void *arg); static void mge_intr_rx(void *arg); +static void mge_intr_rx_check(struct mge_softc *sc, uint32_t int_cause, + uint32_t int_cause_ext); static int mge_intr_rx_locked(struct mge_softc *sc, int count); static void mge_intr_tx(void *arg); static void mge_intr_tx_locked(struct mge_softc *sc); @@ -171,15 +174,14 @@ static struct resource_spec res_spec[] = { SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE }, { SYS_RES_IRQ, 1, RF_ACTIVE | RF_SHAREABLE }, { SYS_RES_IRQ, 2, RF_ACTIVE | RF_SHAREABLE }, - { SYS_RES_IRQ, 3, RF_ACTIVE | RF_SHAREABLE }, - { SYS_RES_IRQ, 4, RF_ACTIVE | RF_SHAREABLE }, { -1, 0 } }; static struct { driver_intr_t *handler; char * description; -} mge_intrs[MGE_INTR_COUNT] = { +} mge_intrs[MGE_INTR_COUNT + 1] = { + { mge_intr_rxtx,"GbE aggregated interrupt" }, { mge_intr_rx, "GbE receive interrupt" }, { mge_intr_tx, "GbE transmit interrupt" }, { mge_intr_misc,"GbE misc interrupt" }, @@ -258,10 +260,11 @@ mge_ver_params(struct mge_softc *sc) uint32_t d, r; soc_id(&d, &r); - if (d == MV_DEV_88F6281 || + if (d == MV_DEV_88F6281 || d == MV_DEV_88F6781 || d == MV_DEV_88F6282 || d == MV_DEV_MV78100 || - d == MV_DEV_MV78100_Z0) { + d == MV_DEV_MV78100_Z0 || + (d & MV_DEV_FAMILY_MASK) == MV_DEV_DISCOVERY) { sc->mge_ver = 2; sc->mge_mtu = 0x4e8; sc->mge_tfut_ipg_max = 0xFFFF; @@ -278,6 +281,15 @@ mge_ver_params(struct mge_softc *sc) sc->mge_tx_tok_cfg = 0x3FFFFFFF; sc->mge_tx_tok_cnt = 0x3FFFFFFF; } + if (d == MV_DEV_88RC8180) + sc->mge_intr_cnt = 1; + else + sc->mge_intr_cnt = 2; + + if (d == MV_DEV_MV78160 || d == MV_DEV_MV78260 || d == MV_DEV_MV78460) + sc->mge_hw_csum = 0; + else + sc->mge_hw_csum = 1; } static void @@ -442,7 +454,7 @@ mge_alloc_desc_dma(struct mge_softc *sc, /* Allocate a busdma tag for mbufs. */ error = bus_dma_tag_create(bus_get_dma_tag(sc->dev), /* parent */ - 8, 0, /* alignment, boundary */ + 1, 0, /* alignment, boundary */ BUS_SPACE_MAXADDR_32BIT, /* lowaddr */ BUS_SPACE_MAXADDR, /* highaddr */ NULL, NULL, /* filtfunc, filtfuncarg */ @@ -681,9 +693,12 @@ mge_attach(device_t dev) if_initname(ifp, device_get_name(dev), device_get_unit(dev)); ifp->if_softc = sc; ifp->if_flags = IFF_SIMPLEX | IFF_MULTICAST | IFF_BROADCAST; - ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_MTU; + ifp->if_capabilities = IFCAP_VLAN_MTU; + if (sc->mge_hw_csum) { + ifp->if_capabilities |= IFCAP_HWCSUM; + ifp->if_hwassist = MGE_CHECKSUM_FEATURES; + } ifp->if_capenable = ifp->if_capabilities; - ifp->if_hwassist = MGE_CHECKSUM_FEATURES; #ifdef DEVICE_POLLING /* Advertise that polling is supported */ @@ -717,13 +732,15 @@ mge_attach(device_t dev) MGE_WRITE(sc, MGE_REG_PHYDEV, miisc->mii_phy); /* Attach interrupt handlers */ - for (i = 0; i < 2; ++i) { - error = bus_setup_intr(dev, sc->res[1 + i], - INTR_TYPE_NET | INTR_MPSAFE, NULL, *mge_intrs[i].handler, - sc, &sc->ih_cookie[i]); + /* TODO: review flags, in part. mark RX as INTR_ENTROPY ? */ + for (i = 1; i <= sc->mge_intr_cnt; ++i) { + error = bus_setup_intr(dev, sc->res[i], + INTR_TYPE_NET | INTR_MPSAFE, + NULL, *mge_intrs[(sc->mge_intr_cnt == 1 ? 0 : i)].handler, + sc, &sc->ih_cookie[i - 1]); if (error) { device_printf(dev, "could not setup %s\n", - mge_intrs[i].description); + mge_intrs[(sc->mge_intr_cnt == 1 ? 0 : i)].description); mge_detach(dev); return (error); } @@ -748,14 +765,14 @@ mge_detach(device_t dev) callout_drain(&sc->wd_callout); /* Stop and release all interrupts */ - for (i = 0; i < 2; ++i) { + for (i = 0; i < sc->mge_intr_cnt; ++i) { if (!sc->ih_cookie[i]) continue; error = bus_teardown_intr(dev, sc->res[1 + i], sc->ih_cookie[i]); if (error) device_printf(dev, "could not release %s\n", - mge_intrs[i].description); + mge_intrs[(sc->mge_intr_cnt == 1 ? 0 : i + 1)].description); } /* Detach network interface */ @@ -983,6 +1000,41 @@ mge_init_locked(void *arg) } static void +mge_intr_rxtx(void *arg) +{ + struct mge_softc *sc = arg; + uint32_t int_cause, int_cause_ext; + + MGE_GLOBAL_LOCK(sc); + +#ifdef DEVICE_POLLING + if (sc->ifp->if_capenable & IFCAP_POLLING) { + MGE_GLOBAL_UNLOCK(sc); + return; + } +#endif + + /* Get interrupt cause */ + int_cause = MGE_READ(sc, MGE_PORT_INT_CAUSE); + int_cause_ext = MGE_READ(sc, MGE_PORT_INT_CAUSE_EXT); + + /* Check for Transmit interrupt */ + if (int_cause_ext & (MGE_PORT_INT_EXT_TXBUF0 | + MGE_PORT_INT_EXT_TXUR)) { + MGE_WRITE(sc, MGE_PORT_INT_CAUSE_EXT, ~(int_cause_ext & + (MGE_PORT_INT_EXT_TXBUF0 | MGE_PORT_INT_EXT_TXUR))); + mge_intr_tx_locked(sc); + } + + MGE_TRANSMIT_UNLOCK(sc); + + /* Check for Receive interrupt */ + mge_intr_rx_check(sc, int_cause, int_cause_ext); + + MGE_RECEIVE_UNLOCK(sc); +} + +static void mge_intr_err(void *arg) { struct mge_softc *sc = arg; @@ -1020,11 +1072,20 @@ mge_intr_rx(void *arg) { int_cause = MGE_READ(sc, MGE_PORT_INT_CAUSE); int_cause_ext = MGE_READ(sc, MGE_PORT_INT_CAUSE_EXT); + mge_intr_rx_check(sc, int_cause, int_cause_ext); + + MGE_RECEIVE_UNLOCK(sc); +} + +static void +mge_intr_rx_check(struct mge_softc *sc, uint32_t int_cause, + uint32_t int_cause_ext) +{ /* Check for resource error */ if (int_cause & MGE_PORT_INT_RXERRQ0) { mge_reinit_rx(sc); MGE_WRITE(sc, MGE_PORT_INT_CAUSE, - int_cause & ~MGE_PORT_INT_RXERRQ0); + ~(int_cause & MGE_PORT_INT_RXERRQ0)); } int_cause &= MGE_PORT_INT_RXQ0; @@ -1035,11 +1096,8 @@ mge_intr_rx(void *arg) { MGE_WRITE(sc, MGE_PORT_INT_CAUSE_EXT, ~int_cause_ext); mge_intr_rx_locked(sc, -1); } - - MGE_RECEIVE_UNLOCK(sc); } - static int mge_intr_rx_locked(struct mge_softc *sc, int count) { @@ -1130,8 +1188,8 @@ mge_intr_tx(void *arg) /* Ack the interrupt */ int_cause_ext = MGE_READ(sc, MGE_PORT_INT_CAUSE_EXT); - MGE_WRITE(sc, MGE_PORT_INT_CAUSE_EXT, - int_cause_ext & ~MGE_PORT_INT_EXT_TXBUF0); + MGE_WRITE(sc, MGE_PORT_INT_CAUSE_EXT, ~(int_cause_ext & + (MGE_PORT_INT_EXT_TXBUF0 | MGE_PORT_INT_EXT_TXUR))); mge_intr_tx_locked(sc); @@ -1401,12 +1459,12 @@ mge_encap(struct mge_softc *sc, struct m dw->mge_desc->byte_count = segs[seg].ds_len; dw->mge_desc->buffer = segs[seg].ds_addr; dw->buffer = m0; - dw->mge_desc->cmd_status = MGE_TX_LAST | MGE_TX_FIRST | - MGE_TX_ETH_CRC | MGE_TX_EN_INT | MGE_TX_PADDING | - MGE_DMA_OWNED; - + dw->mge_desc->cmd_status = 0; if (seg == 0) mge_offload_setup_descriptor(sc, dw); + dw->mge_desc->cmd_status |= MGE_TX_LAST | MGE_TX_FIRST | + MGE_TX_ETH_CRC | MGE_TX_EN_INT | MGE_TX_PADDING | + MGE_DMA_OWNED; } bus_dmamap_sync(sc->mge_desc_dtag, dw->desc_dmap, Modified: head/sys/dev/mge/if_mgevar.h ============================================================================== --- head/sys/dev/mge/if_mgevar.h Wed Aug 15 04:03:55 2012 (r239275) +++ head/sys/dev/mge/if_mgevar.h Wed Aug 15 04:07:18 2012 (r239276) @@ -103,6 +103,8 @@ struct mge_softc { uint32_t mge_tx_tok_cnt; uint16_t mge_mtu; int mge_ver; + int mge_intr_cnt; + uint8_t mge_hw_csum; struct mge_softc *phy_sc; }; From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 05:15:49 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CC894106566C; Wed, 15 Aug 2012 05:15:49 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B305D8FC0C; Wed, 15 Aug 2012 05:15:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F5Fn3Y005192; Wed, 15 Aug 2012 05:15:49 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F5Fn5A005183; Wed, 15 Aug 2012 05:15:49 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150515.q7F5Fn5A005183@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 05:15:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239277 - in head/sys: arm/mv arm/mv/armadaxp arm/mv/discovery arm/mv/kirkwood arm/mv/orion boot/fdt/dts X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 05:15:49 -0000 Author: gonzo Date: Wed Aug 15 05:15:49 2012 New Revision: 239277 URL: http://svn.freebsd.org/changeset/base/239277 Log: Merging of projects/armv6, part 7 Add Marvell ARMADA XP support Obtained from: Marvell, Semihalf Added: head/sys/arm/mv/armadaxp/ head/sys/arm/mv/armadaxp/armadaxp.c (contents, props changed) head/sys/arm/mv/armadaxp/armadaxp_mp.c (contents, props changed) head/sys/arm/mv/armadaxp/files.armadaxp (contents, props changed) head/sys/arm/mv/armadaxp/std.armadaxp (contents, props changed) head/sys/arm/mv/armadaxp/std.mv78x60 (contents, props changed) head/sys/arm/mv/mpic.c (contents, props changed) head/sys/arm/mv/std-pj4b.mv (contents, props changed) head/sys/boot/fdt/dts/db88f78160.dts (contents, props changed) Modified: head/sys/arm/mv/common.c head/sys/arm/mv/discovery/files.db78xxx head/sys/arm/mv/files.mv head/sys/arm/mv/kirkwood/files.kirkwood head/sys/arm/mv/mv_machdep.c head/sys/arm/mv/mv_pci.c head/sys/arm/mv/mvreg.h head/sys/arm/mv/mvvar.h head/sys/arm/mv/mvwin.h head/sys/arm/mv/orion/files.db88f5xxx head/sys/arm/mv/orion/files.ts7800 head/sys/arm/mv/timer.c Added: head/sys/arm/mv/armadaxp/armadaxp.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/mv/armadaxp/armadaxp.c Wed Aug 15 05:15:49 2012 (r239277) @@ -0,0 +1,73 @@ +/*- + * Copyright (c) 2011 Semihalf. + * All rights reserved. + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * From: FreeBSD: src/sys/arm/mv/kirkwood/sheevaplug.c,v 1.2 2010/06/13 13:28:53 + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include + +#include +#include + +#include +#include + +#include + +struct resource_spec mv_gpio_res[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { SYS_RES_IRQ, 0, RF_ACTIVE }, + { -1, 0 } +}; + +uint32_t +get_tclk(void) +{ + + return (TCLK_200MHZ); +} + +uint32_t +get_l2clk(void) +{ + + return (TCLK_667MHZ); +} + +int +fdt_pci_devmap(phandle_t node, struct pmap_devmap *devmap, vm_offset_t io_va, + vm_offset_t mem_va) +{ + + return (0); +} + Added: head/sys/arm/mv/armadaxp/armadaxp_mp.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/mv/armadaxp/armadaxp_mp.c Wed Aug 15 05:15:49 2012 (r239277) @@ -0,0 +1,208 @@ +/*- + * Copyright (c) 2011 Semihalf. + * All rights reserved. + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +static int platform_get_ncpus(void); + +#define MV_AXP_CPU_DIVCLK_BASE (MV_BASE + 0x18700) +#define CPU_DIVCLK_CTRL0 0x00 +#define CPU_DIVCLK_CTRL2_RATIO_FULL0 0x08 +#define CPU_DIVCLK_CTRL2_RATIO_FULL1 0x0c + +#define MV_COHERENCY_FABRIC_BASE (MV_MBUS_BRIDGE_BASE + 0x200) +#define COHER_FABRIC_CTRL 0x00 +#define COHER_FABRIC_CONF 0x04 + +#define CPU_PMU(x) (MV_BASE + 0x22100 + (0x100 * (x))) +#define CPU_PMU_BOOT 0x24 + +#define MP (MV_BASE + 0x20800) +#define MP_SW_RESET(x) ((x) * 8) + +#define CPU_RESUME_CONTROL (0x20988) + +/* Coherency Fabric registers */ +static uint32_t +read_coher_fabric(uint32_t reg) +{ + + return (bus_space_read_4(fdtbus_bs_tag, MV_COHERENCY_FABRIC_BASE, reg)); +} + +static void +write_coher_fabric(uint32_t reg, uint32_t val) +{ + + bus_space_write_4(fdtbus_bs_tag, MV_COHERENCY_FABRIC_BASE, reg, val); +} + +/* Coherency Fabric registers */ +static uint32_t +read_cpu_clkdiv(uint32_t reg) +{ + + return (bus_space_read_4(fdtbus_bs_tag, MV_AXP_CPU_DIVCLK_BASE, reg)); +} + +static void +write_cpu_clkdiv(uint32_t reg, uint32_t val) +{ + + bus_space_write_4(fdtbus_bs_tag, MV_AXP_CPU_DIVCLK_BASE, reg, val); +} + +void +platform_mp_setmaxid(void) +{ + + mp_maxid = 3; +} + +int +platform_mp_probe(void) +{ + + mp_ncpus = platform_get_ncpus(); + + return (mp_ncpus > 1); +} + +void +platform_mp_init_secondary(void) +{ +} + +void mpentry(void); +void mptramp(void); + +static void +initialize_coherency_fabric(void) +{ + uint32_t val, cpus, mask; + + cpus = platform_get_ncpus(); + mask = (1 << cpus) - 1; + val = read_coher_fabric(COHER_FABRIC_CTRL); + val |= (mask << 24); + write_coher_fabric(COHER_FABRIC_CTRL, val); + + val = read_coher_fabric(COHER_FABRIC_CONF); + val |= (mask << 24); + write_coher_fabric(COHER_FABRIC_CONF, val); +} + + +void +platform_mp_start_ap(void) +{ + uint32_t reg, *ptr, cpu_num; + + /* Copy boot code to SRAM */ + *((unsigned int*)(0xf1020240)) = 0xffff0101; + *((unsigned int*)(0xf1008500)) = 0xffff0003; + + pmap_kenter_nocache(0x880f0000, 0xffff0000); + reg = 0x880f0000; + + for (ptr = (uint32_t *)mptramp; ptr < (uint32_t *)mpentry; + ptr++, reg += 4) + *((uint32_t *)reg) = *ptr; + + if (mp_ncpus > 1) { + reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL0); + reg &= 0x00ffffff; + reg |= 0x01000000; + write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL0, reg); + } + if (mp_ncpus > 2) { + reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1); + reg &= 0xff00ffff; + reg |= 0x00010000; + write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1, reg); + } + if (mp_ncpus > 3) { + reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1); + reg &= 0x00ffffff; + reg |= 0x01000000; + write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1, reg); + } + + reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL0); + reg |= ((0x1 << (mp_ncpus - 1)) - 1) << 21; + write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg); + reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL0); + reg |= 0x01000000; + write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg); + + DELAY(100); + reg &= ~(0xf << 21); + write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg); + DELAY(100); + + bus_space_write_4(fdtbus_bs_tag, MV_BASE, CPU_RESUME_CONTROL, 0); + + for (cpu_num = 1; cpu_num < mp_ncpus; cpu_num++ ) + bus_space_write_4(fdtbus_bs_tag, CPU_PMU(cpu_num), CPU_PMU_BOOT, + pmap_kextract(mpentry)); + + cpu_idcache_wbinv_all(); + + for (cpu_num = 1; cpu_num < mp_ncpus; cpu_num++ ) + bus_space_write_4(fdtbus_bs_tag, MP, MP_SW_RESET(cpu_num), 0); + + /* XXX: Temporary workaround for hangup after releasing AP's */ + wmb(); + DELAY(10); + + initialize_coherency_fabric(); +} + +static int +platform_get_ncpus(void) +{ + + return ((read_coher_fabric(COHER_FABRIC_CONF) & 0xf) + 1); +} + +void +platform_ipi_send(cpuset_t cpus, u_int ipi) +{ + + pic_ipi_send(cpus, ipi); +} Added: head/sys/arm/mv/armadaxp/files.armadaxp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/mv/armadaxp/files.armadaxp Wed Aug 15 05:15:49 2012 (r239277) @@ -0,0 +1,6 @@ +# $FreeBSD$ + +arm/mv/armadaxp/armadaxp.c standard +arm/mv/mpic.c standard +arm/mv/rtc.c standard +arm/mv/armadaxp/armadaxp_mp.c optional smp Added: head/sys/arm/mv/armadaxp/std.armadaxp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/mv/armadaxp/std.armadaxp Wed Aug 15 05:15:49 2012 (r239277) @@ -0,0 +1,15 @@ +# $FreeBSD$ + +# kernel gets loaded at 0x00f00000 by the loader, but runs at virtual address +# 0xc0f00000. RAM starts at 0. We put the pagetable at a reasonable place +# in memory, but may need to bounce it higher if there's a problem with this. +# We could paper over this by loading the kernel at 0xc0000000 virtual, but +# that leads to other complications, so we'll just reclaim the lower region of +# ram after we're loaded. Put the page tables for startup at 1MB. +makeoptions KERNPHYSADDR=0x00f00000 +makeoptions KERNVIRTADDR=0xc0f00000 + +options KERNPHYSADDR=0x00f00000 +options KERNVIRTADDR=0xc0f00000 +options PHYSADDR=0x00000000 +options STARTUP_PAGETABLE_ADDR=0x00100000 Added: head/sys/arm/mv/armadaxp/std.mv78x60 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/mv/armadaxp/std.mv78x60 Wed Aug 15 05:15:49 2012 (r239277) @@ -0,0 +1,5 @@ +# $FreeBSD$ + +include "../mv/std-pj4b.mv" +include "../mv/armadaxp/std.armadaxp" +files "../mv/armadaxp/files.armadaxp" Modified: head/sys/arm/mv/common.c ============================================================================== --- head/sys/arm/mv/common.c Wed Aug 15 04:07:18 2012 (r239276) +++ head/sys/arm/mv/common.c Wed Aug 15 05:15:49 2012 (r239277) @@ -1,5 +1,5 @@ /*- - * Copyright (C) 2008 MARVELL INTERNATIONAL LTD. + * Copyright (C) 2008-2011 MARVELL INTERNATIONAL LTD. * All rights reserved. * * Developed by Semihalf. @@ -29,6 +29,8 @@ * SUCH DAMAGE. */ +#include "opt_global.h" + #include __FBSDID("$FreeBSD$"); @@ -36,17 +38,27 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include +#include #include #include #include #include +#include #include #include #include + +MALLOC_DEFINE(M_IDMA, "idma", "idma dma test memory"); + +#define IDMA_DEBUG +#undef IDMA_DEBUG + #define MAX_CPU_WIN 5 #ifdef DEBUG @@ -64,7 +76,9 @@ __FBSDID("$FreeBSD$"); static int win_eth_can_remap(int i); +#ifndef SOC_MV_FREY static int decode_win_cpu_valid(void); +#endif static int decode_win_usb_valid(void); static int decode_win_eth_valid(void); static int decode_win_pcie_valid(void); @@ -73,10 +87,11 @@ static int decode_win_cesa_valid(void); static int decode_win_idma_valid(void); static int decode_win_xor_valid(void); +#ifndef SOC_MV_FREY static void decode_win_cpu_setup(void); +#endif static void decode_win_usb_setup(u_long); static void decode_win_eth_setup(u_long); -static void decode_win_pcie_setup(u_long); static void decode_win_sata_setup(u_long); static void decode_win_cesa_setup(u_long); static void decode_win_idma_setup(u_long); @@ -93,7 +108,6 @@ static int fdt_get_ranges(const char *, static int win_cpu_from_dt(void); static int fdt_win_setup(void); -static uint32_t used_cpu_wins; static uint32_t dev_mask = 0; static int cpu_wins_no = 0; static int eth_port = 0; @@ -101,7 +115,7 @@ static int usb_port = 0; static struct decode_win cpu_win_tbl[MAX_CPU_WIN]; -static const struct decode_win *cpu_wins = cpu_win_tbl; +const struct decode_win *cpu_wins = cpu_win_tbl; typedef void (*decode_win_setup_t)(u_long); typedef void (*dump_win_t)(u_long); @@ -251,15 +265,23 @@ cpu_extra_feat(void) uint32_t ef = 0; soc_id(&dev, &rev); - if (dev == MV_DEV_88F6281 || - dev == MV_DEV_88F6282 || - dev == MV_DEV_MV78100_Z0 || - dev == MV_DEV_MV78100) + + switch (dev) { + case MV_DEV_88F6281: + case MV_DEV_88F6282: + case MV_DEV_88RC8180: + case MV_DEV_MV78100_Z0: + case MV_DEV_MV78100: __asm __volatile("mrc p15, 1, %0, c15, c1, 0" : "=r" (ef)); - else if (dev == MV_DEV_88F5182 || dev == MV_DEV_88F5281) + break; + case MV_DEV_88F5182: + case MV_DEV_88F5281: __asm __volatile("mrc p15, 0, %0, c14, c0, 0" : "=r" (ef)); - else if (bootverbose) - printf("This ARM Core does not support any extra features\n"); + break; + default: + if (bootverbose) + printf("This ARM Core does not support any extra features\n"); + } return (ef); } @@ -272,7 +294,7 @@ uint32_t soc_power_ctrl_get(uint32_t mask) { -#ifndef SOC_MV_ORION +#if !defined(SOC_MV_ORION) && !defined(SOC_MV_LOKIPLUS) && !defined(SOC_MV_FREY) if (mask != CPU_PM_CTRL_NONE) mask &= read_cpu_ctrl(CPU_PM_CTRL); @@ -290,7 +312,7 @@ void soc_power_ctrl_set(uint32_t mask) { -#ifndef SOC_MV_ORION +#if !defined(SOC_MV_ORION) && !defined(SOC_MV_LOKIPLUS) if (mask != CPU_PM_CTRL_NONE) write_cpu_ctrl(CPU_PM_CTRL, mask); #endif @@ -313,7 +335,7 @@ soc_id(uint32_t *dev, uint32_t *rev) static void soc_identify(void) { - uint32_t d, r; + uint32_t d, r, size, mode; const char *dev; const char *rev; @@ -353,6 +375,20 @@ soc_identify(void) else if (r == 3) rev = "A1"; break; + case MV_DEV_88RC8180: + dev = "Marvell 88RC8180"; + break; + case MV_DEV_88RC9480: + dev = "Marvell 88RC9480"; + break; + case MV_DEV_88RC9580: + dev = "Marvell 88RC9580"; + break; + case MV_DEV_88F6781: + dev = "Marvell 88F6781"; + if (r == 2) + rev = "Y0"; + break; case MV_DEV_88F6282: dev = "Marvell 88F6282"; if (r == 0) @@ -366,6 +402,15 @@ soc_identify(void) case MV_DEV_MV78100: dev = "Marvell MV78100"; break; + case MV_DEV_MV78160: + dev = "Marvell MV78160"; + break; + case MV_DEV_MV78260: + dev = "Marvell MV78260"; + break; + case MV_DEV_MV78460: + dev = "Marvell MV78460"; + break; default: dev = "UNKNOWN"; break; @@ -376,7 +421,28 @@ soc_identify(void) printf(" rev %s", rev); printf(", TClock %dMHz\n", get_tclk() / 1000 / 1000); - /* TODO add info on currently set endianess */ + mode = read_cpu_ctrl(CPU_CONFIG); + printf(" Instruction cache prefetch %s, data cache prefetch %s\n", + (mode & CPU_CONFIG_IC_PREF) ? "enabled" : "disabled", + (mode & CPU_CONFIG_DC_PREF) ? "enabled" : "disabled"); + + switch (d) { + case MV_DEV_88F6281: + mode = read_cpu_ctrl(CPU_L2_CONFIG) & CPU_L2_CONFIG_MODE; + printf(" 256KB 4-way set-associative %s unified L2 cache\n", + mode ? "write-through" : "write-back"); + break; + case MV_DEV_MV78100: + mode = read_cpu_ctrl(CPU_CONTROL); + size = mode & CPU_CONTROL_L2_SIZE; + mode = mode & CPU_CONTROL_L2_MODE; + printf(" %s set-associative %s unified L2 cache\n", + size ? "256KB 4-way" : "512KB 8-way", + mode ? "write-through" : "write-back"); + break; + default: + break; + } } static void @@ -393,6 +459,17 @@ platform_identify(void *dummy) SYSINIT(platform_identify, SI_SUB_CPU, SI_ORDER_SECOND, platform_identify, NULL); +#ifdef KDB +static void +mv_enter_debugger(void *dummy) +{ + + if (boothowto & RB_KDB) + kdb_enter(KDB_WHY_BOOTFLAGS, "Boot flags requested debugger"); +} +SYSINIT(mv_enter_debugger, SI_SUB_CPU, SI_ORDER_ANY, mv_enter_debugger, NULL); +#endif + int soc_decode_win(void) { @@ -412,6 +489,7 @@ soc_decode_win(void) /* Retrieve our ID: some windows facilities vary between SoC models */ soc_id(&dev, &rev); +#ifndef SOC_MV_FREY if (!decode_win_cpu_valid() || !decode_win_usb_valid() || !decode_win_eth_valid() || !decode_win_idma_valid() || !decode_win_pcie_valid() || !decode_win_sata_valid() || @@ -419,6 +497,13 @@ soc_decode_win(void) return (EINVAL); decode_win_cpu_setup(); +#else + if (!decode_win_usb_valid() || + !decode_win_eth_valid() || !decode_win_idma_valid() || + !decode_win_pcie_valid() || !decode_win_sata_valid() || + !decode_win_cesa_valid() || !decode_win_xor_valid()) + return (EINVAL); +#endif if (MV_DUMP_WIN) soc_dump_decode_win(); @@ -433,6 +518,7 @@ soc_decode_win(void) /************************************************************************** * Decode windows registers accessors **************************************************************************/ +#if !defined(SOC_MV_FREY) WIN_REG_IDX_RD(win_cpu, cr, MV_WIN_CPU_CTRL, MV_MBUS_BRIDGE_BASE) WIN_REG_IDX_RD(win_cpu, br, MV_WIN_CPU_BASE, MV_MBUS_BRIDGE_BASE) WIN_REG_IDX_RD(win_cpu, remap_l, MV_WIN_CPU_REMAP_LO, MV_MBUS_BRIDGE_BASE) @@ -441,9 +527,7 @@ WIN_REG_IDX_WR(win_cpu, cr, MV_WIN_CPU_C WIN_REG_IDX_WR(win_cpu, br, MV_WIN_CPU_BASE, MV_MBUS_BRIDGE_BASE) WIN_REG_IDX_WR(win_cpu, remap_l, MV_WIN_CPU_REMAP_LO, MV_MBUS_BRIDGE_BASE) WIN_REG_IDX_WR(win_cpu, remap_h, MV_WIN_CPU_REMAP_HI, MV_MBUS_BRIDGE_BASE) - -WIN_REG_IDX_RD(ddr, br, MV_WIN_DDR_BASE, MV_DDR_CADR_BASE) -WIN_REG_IDX_RD(ddr, sz, MV_WIN_DDR_SIZE, MV_DDR_CADR_BASE) +#endif WIN_REG_BASE_IDX_RD(win_usb, cr, MV_WIN_USB_CTRL) WIN_REG_BASE_IDX_RD(win_usb, br, MV_WIN_USB_BASE) @@ -482,7 +566,10 @@ WIN_REG_BASE_IDX_RD(win_pcie, remap, MV_ WIN_REG_BASE_IDX_WR(win_pcie, cr, MV_WIN_PCIE_CTRL); WIN_REG_BASE_IDX_WR(win_pcie, br, MV_WIN_PCIE_BASE); WIN_REG_BASE_IDX_WR(win_pcie, remap, MV_WIN_PCIE_REMAP); -WIN_REG_BASE_IDX_WR(pcie, bar, MV_PCIE_BAR); +WIN_REG_BASE_IDX_RD(pcie_bar, br, MV_PCIE_BAR_BASE); +WIN_REG_BASE_IDX_WR(pcie_bar, br, MV_PCIE_BAR_BASE); +WIN_REG_BASE_IDX_WR(pcie_bar, brh, MV_PCIE_BAR_BASE_H); +WIN_REG_BASE_IDX_WR(pcie_bar, cr, MV_PCIE_BAR_CTRL); WIN_REG_BASE_IDX_RD(win_idma, br, MV_WIN_IDMA_BASE) WIN_REG_BASE_IDX_RD(win_idma, sz, MV_WIN_IDMA_SIZE) @@ -499,7 +586,44 @@ WIN_REG_BASE_IDX_RD(win_sata, cr, MV_WIN WIN_REG_BASE_IDX_RD(win_sata, br, MV_WIN_SATA_BASE); WIN_REG_BASE_IDX_WR(win_sata, cr, MV_WIN_SATA_CTRL); WIN_REG_BASE_IDX_WR(win_sata, br, MV_WIN_SATA_BASE); +#ifndef SOC_MV_DOVE +WIN_REG_IDX_RD(ddr, br, MV_WIN_DDR_BASE, MV_DDR_CADR_BASE) +WIN_REG_IDX_RD(ddr, sz, MV_WIN_DDR_SIZE, MV_DDR_CADR_BASE) +#else +/* + * On 88F6781 (Dove) SoC DDR Controller is accessed through + * single MBUS <-> AXI bridge. In this case we provide emulated + * ddr_br_read() and ddr_sz_read() functions to keep compatibility + * with common decoding windows setup code. + */ +static inline uint32_t ddr_br_read(int i) +{ + uint32_t mmap; + + /* Read Memory Address Map Register for CS i */ + mmap = bus_space_read_4(fdtbus_bs_tag, MV_DDR_CADR_BASE + (i * 0x10), 0); + + /* Return CS i base address */ + return (mmap & 0xFF000000); +} + +static inline uint32_t ddr_sz_read(int i) +{ + uint32_t mmap, size; + + /* Read Memory Address Map Register for CS i */ + mmap = bus_space_read_4(fdtbus_bs_tag, MV_DDR_CADR_BASE + (i * 0x10), 0); + + /* Extract size of CS space in 64kB units */ + size = (1 << ((mmap >> 16) & 0x0F)); + + /* Return CS size and enable/disable status */ + return (((size - 1) << 16) | (mmap & 0x01)); +} +#endif + +#if !defined(SOC_MV_FREY) /************************************************************************** * Decode windows helper routines **************************************************************************/ @@ -545,9 +669,12 @@ win_cpu_can_remap(int i) if ((dev == MV_DEV_88F5182 && i < 2) || (dev == MV_DEV_88F5281 && i < 4) || (dev == MV_DEV_88F6281 && i < 4) || + (dev == MV_DEV_88RC8180 && i < 2) || + (dev == MV_DEV_88F6781 && i < 4) || (dev == MV_DEV_88F6282 && i < 4) || (dev == MV_DEV_MV78100 && i < 8) || - (dev == MV_DEV_MV78100_Z0 && i < 8)) + (dev == MV_DEV_MV78100_Z0 && i < 8) || + ((dev & MV_DEV_FAMILY_MASK) == MV_DEV_DISCOVERY && i < 8)) return (1); return (0); @@ -600,7 +727,7 @@ decode_win_cpu_valid(void) rv = 0; } - if (cpu_wins[i].remap >= 0 && win_cpu_can_remap(i) != 1) { + if (cpu_wins[i].remap != ~0 && win_cpu_can_remap(i) != 1) { printf("CPU window#%d: not capable of remapping, but " "val 0x%08x defined\n", i, cpu_wins[i].remap); rv = 0; @@ -620,6 +747,13 @@ decode_win_cpu_valid(void) continue; } + if (b != (b & ~(s - 1))) { + printf("CPU window#%d: address 0x%08x is not aligned " + "to 0x%08x\n", i, b, s); + rv = 0; + continue; + } + j = decode_win_overlap(i, cpu_wins_no, &cpu_wins[0]); if (j >= 0) { printf("CPU window#%d: (0x%08x - 0x%08x) overlaps " @@ -635,21 +769,39 @@ decode_win_cpu_valid(void) int decode_win_cpu_set(int target, int attr, vm_paddr_t base, uint32_t size, - int remap) + vm_paddr_t remap) { uint32_t br, cr; - int win; + int win, i; - if (used_cpu_wins >= MV_WIN_CPU_MAX) - return (0); + if (remap == ~0) { + win = MV_WIN_CPU_MAX - 1; + i = -1; + } else { + win = 0; + i = 1; + } - win = used_cpu_wins++; + while ((win >= 0) && (win < MV_WIN_CPU_MAX)) { + cr = win_cpu_cr_read(win); + if ((cr & MV_WIN_CPU_ENABLE_BIT) == 0) + break; + if ((cr & ((0xff << MV_WIN_CPU_ATTR_SHIFT) | + (0x1f << MV_WIN_CPU_TARGET_SHIFT))) == + ((attr << MV_WIN_CPU_ATTR_SHIFT) | + (target << MV_WIN_CPU_TARGET_SHIFT))) + break; + win += i; + } + if ((win < 0) || (win >= MV_WIN_CPU_MAX) || + ((remap != ~0) && (win_cpu_can_remap(win) == 0))) + return (-1); br = base & 0xffff0000; win_cpu_br_write(win, br); if (win_cpu_can_remap(win)) { - if (remap >= 0) { + if (remap != ~0) { win_cpu_remap_l_write(win, remap & 0xffff0000); win_cpu_remap_h_write(win, 0); } else { @@ -663,7 +815,8 @@ decode_win_cpu_set(int target, int attr, } } - cr = ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1; + cr = ((size - 1) & 0xffff0000) | (attr << MV_WIN_CPU_ATTR_SHIFT) | + (target << MV_WIN_CPU_TARGET_SHIFT) | MV_WIN_CPU_ENABLE_BIT; win_cpu_cr_write(win, cr); return (0); @@ -674,8 +827,6 @@ decode_win_cpu_setup(void) { int i; - used_cpu_wins = 0; - /* Disable all CPU windows */ for (i = 0; i < MV_WIN_CPU_MAX; i++) { win_cpu_cr_write(i, 0); @@ -693,7 +844,7 @@ decode_win_cpu_setup(void) cpu_wins[i].size, cpu_wins[i].remap); } - +#endif /* * Check if we're able to cover all active DDR banks. */ @@ -746,6 +897,13 @@ ddr_size(int i) uint32_t ddr_attr(int i) { + uint32_t dev, rev; + + soc_id(&dev, &rev); + if (dev == MV_DEV_88RC8180) + return ((ddr_sz_read(i) & 0xf0) >> 4); + if (dev == MV_DEV_88F6781) + return (0); return (i == 0 ? 0xe : (i == 1 ? 0xd : @@ -756,8 +914,21 @@ ddr_attr(int i) uint32_t ddr_target(int i) { + uint32_t dev, rev; + + soc_id(&dev, &rev); + if (dev == MV_DEV_88RC8180) { + i = (ddr_sz_read(i) & 0xf0) >> 4; + return (i == 0xe ? 0xc : + (i == 0xd ? 0xd : + (i == 0xb ? 0xe : + (i == 0x7 ? 0xf : 0xc)))); + } - /* Mbus unit ID is 0x0 for DDR SDRAM controller */ + /* + * On SOCs other than 88RC8180 Mbus unit ID for + * DDR SDRAM controller is always 0x0. + */ return (0); } @@ -840,7 +1011,7 @@ win_eth_can_remap(int i) /* ETH encode windows 0-3 have remap capability */ if (i < 4) return (1); - + return (0); } @@ -901,6 +1072,12 @@ decode_win_eth_dump(u_long base) win_eth_epap_read(base)); } +#if defined(SOC_MV_LOKIPLUS) +#define MV_WIN_ETH_DDR_TRGT(n) 0 +#else +#define MV_WIN_ETH_DDR_TRGT(n) ddr_target(n) +#endif + static void decode_win_eth_setup(u_long base) { @@ -927,7 +1104,7 @@ decode_win_eth_setup(u_long base) for (i = 0; i < MV_WIN_DDR_MAX; i++) if (ddr_is_active(i)) { - br = ddr_base(i) | (ddr_attr(i) << 8) | ddr_target(i); + br = ddr_base(i) | (ddr_attr(i) << 8) | MV_WIN_ETH_DDR_TRGT(i); sz = ((ddr_size(i) - 1) & 0xffff0000); /* Set the first free ETH window */ @@ -961,15 +1138,21 @@ decode_win_eth_valid(void) * PCIE windows routines **************************************************************************/ -static void +void decode_win_pcie_setup(u_long base) { - uint32_t size = 0; + uint32_t size = 0, ddrbase = ~0; uint32_t cr, br; int i, j; - for (i = 0; i < MV_PCIE_BAR_MAX; i++) - pcie_bar_write(base, i, 0); + for (i = 0; i < MV_PCIE_BAR_MAX; i++) { + pcie_bar_br_write(base, i, + MV_PCIE_BAR_64BIT | MV_PCIE_BAR_PREFETCH_EN); + if (i < 3) + pcie_bar_brh_write(base, i, 0); + if (i > 0) + pcie_bar_cr_write(base, i, 0); + } for (i = 0; i < MV_WIN_PCIE_MAX; i++) { win_pcie_cr_write(base, i, 0); @@ -977,6 +1160,13 @@ decode_win_pcie_setup(u_long base) win_pcie_remap_write(base, i, 0); } + /* On End-Point only set BAR size to 1MB regardless of DDR size */ + if ((bus_space_read_4(fdtbus_bs_tag, base, MV_PCIE_CONTROL) + & MV_PCIE_ROOT_CMPLX) == 0) { + pcie_bar_cr_write(base, 1, 0xf0000 | 1); + return; + } + for (i = 0; i < MV_WIN_DDR_MAX; i++) { if (ddr_is_active(i)) { /* Map DDR to BAR 1 */ @@ -984,6 +1174,8 @@ decode_win_pcie_setup(u_long base) size += ddr_size(i) & 0xffff0000; cr |= (ddr_attr(i) << 8) | (ddr_target(i) << 4) | 1; br = ddr_base(i); + if (br < ddrbase) + ddrbase = br; /* Use the first available PCIE window */ for (j = 0; j < MV_WIN_PCIE_MAX; j++) { @@ -1003,7 +1195,11 @@ decode_win_pcie_setup(u_long base) * form value passed to register to get correct value. */ size -= 0x10000; - pcie_bar_write(base, 0, size | 1); + pcie_bar_cr_write(base, 1, size | 1); + pcie_bar_br_write(base, 1, ddrbase | + MV_PCIE_BAR_64BIT | MV_PCIE_BAR_PREFETCH_EN); + pcie_bar_br_write(base, 0, fdt_immr_pa | + MV_PCIE_BAR_64BIT | MV_PCIE_BAR_PREFETCH_EN); } static int @@ -1289,7 +1485,6 @@ xor_ctrl_write(u_long base, int i, int c /* * Set channel protection 'val' for window 'w' on channel 'c' */ - static void xor_chan_write(u_long base, int c, int e, int w, int val) { @@ -1748,7 +1943,7 @@ win_cpu_from_dt(void) /* Retrieve 'ranges' property of '/localbus' node. */ if ((err = fdt_get_ranges("/localbus", ranges, sizeof(ranges), &tuples, &tuple_size)) != 0) - return (err); + return (0); /* * Fill CPU decode windows table. @@ -1763,9 +1958,9 @@ win_cpu_from_dt(void) cpu_win_tbl[t].attr = fdt32_to_cpu(ranges[i + 1]); cpu_win_tbl[t].base = fdt32_to_cpu(ranges[i + 2]); cpu_win_tbl[t].size = fdt32_to_cpu(ranges[i + 3]); - cpu_win_tbl[t].remap = -1; + cpu_win_tbl[t].remap = ~0; debugf("target = 0x%0x attr = 0x%0x base = 0x%0x " - "size = 0x%0x remap = %d\n", cpu_win_tbl[t].target, + "size = 0x%0x remap = 0x%0x\n", cpu_win_tbl[t].target, cpu_win_tbl[t].attr, cpu_win_tbl[t].base, cpu_win_tbl[t].size, cpu_win_tbl[t].remap); } @@ -1792,7 +1987,7 @@ moveon: cpu_win_tbl[t].attr = MV_WIN_CESA_ATTR; cpu_win_tbl[t].base = sram_base; cpu_win_tbl[t].size = sram_size; - cpu_win_tbl[t].remap = -1; + cpu_win_tbl[t].remap = ~0; debugf("sram: base = 0x%0lx size = 0x%0lx\n", sram_base, sram_size); return (0); @@ -1810,15 +2005,12 @@ fdt_win_setup(void) if (node == -1) panic("fdt_win_setup: no root node"); - node = fdt_find_compatible(node, "simple-bus", 1); - if (node == 0) - return (ENXIO); - /* - * Traverse through all children of simple-bus node, and retrieve - * decode windows data for devices (if applicable). + * Traverse through all children of root and simple-bus nodes. + * For each found device retrieve decode windows data (if applicable). */ - for (child = OF_child(node); child != 0; child = OF_peer(child)) + child = OF_child(node); + while (child != 0) { for (i = 0; soc_nodes[i].compat != NULL; i++) { soc_node = &soc_nodes[i]; @@ -1830,7 +2022,7 @@ fdt_win_setup(void) if (err != 0) return (err); - base += fdt_immr_va; + base = (base & 0x000fffff) | fdt_immr_va; if (soc_node->decode_handler != NULL) soc_node->decode_handler(base); else @@ -1840,6 +2032,19 @@ fdt_win_setup(void) soc_node->dump_handler(base); } + /* + * Once done with root-level children let's move down to + * simple-bus and its children. + */ + child = OF_peer(child); + if ((child == 0) && (node == OF_finddevice("/"))) { + node = fdt_find_compatible(node, "simple-bus", 1); + if (node == 0) + return (ENXIO); + child = OF_child(node); + } + } + return (0); } @@ -1870,7 +2075,8 @@ fdt_pic_decode_ic(phandle_t node, pcell_ int *pol) { - if (!fdt_is_compatible(node, "mrvl,pic")) + if (!fdt_is_compatible(node, "mrvl,pic") && + !fdt_is_compatible(node, "mrvl,mpic")) return (ENXIO); *interrupt = fdt32_to_cpu(intr[0]); Modified: head/sys/arm/mv/discovery/files.db78xxx ============================================================================== --- head/sys/arm/mv/discovery/files.db78xxx Wed Aug 15 04:07:18 2012 (r239276) +++ head/sys/arm/mv/discovery/files.db78xxx Wed Aug 15 05:15:49 2012 (r239277) @@ -1,3 +1,5 @@ # $FreeBSD$ arm/mv/discovery/discovery.c standard +arm/mv/ic.c standard + Modified: head/sys/arm/mv/files.mv ============================================================================== --- head/sys/arm/mv/files.mv Wed Aug 15 04:07:18 2012 (r239276) +++ head/sys/arm/mv/files.mv Wed Aug 15 05:15:49 2012 (r239277) @@ -14,14 +14,17 @@ # arm/arm/bus_space_generic.c standard *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 05:37:11 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 313C7106566C; Wed, 15 Aug 2012 05:37:11 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1A4248FC08; Wed, 15 Aug 2012 05:37:11 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F5bBLO007451; Wed, 15 Aug 2012 05:37:11 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F5bAdi007448; Wed, 15 Aug 2012 05:37:10 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150537.q7F5bAdi007448@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 05:37:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239278 - in head/sys: arm/lpc boot/fdt/dts dev/uart X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 05:37:11 -0000 Author: gonzo Date: Wed Aug 15 05:37:10 2012 New Revision: 239278 URL: http://svn.freebsd.org/changeset/base/239278 Log: Merging of projects/armv6, part 8 r235162: Initial LPC32x0 support. Includes DTS file for Embedded Artists EA3250 board. Peripherals currently supported: - Serial ports - Interrupt controller - Timers - Ethernet - USB host - Framebuffer (in conjunction with SSD1289 LCD controller) - RTC - SPI - GPIO Submitted by: Jakub Wojciech Klama Added: head/sys/arm/lpc/ head/sys/arm/lpc/files.lpc (contents, props changed) head/sys/arm/lpc/if_lpe.c (contents, props changed) head/sys/arm/lpc/if_lpereg.h (contents, props changed) head/sys/arm/lpc/lpc_dmac.c (contents, props changed) head/sys/arm/lpc/lpc_fb.c (contents, props changed) head/sys/arm/lpc/lpc_gpio.c (contents, props changed) head/sys/arm/lpc/lpc_intc.c (contents, props changed) head/sys/arm/lpc/lpc_machdep.c (contents, props changed) head/sys/arm/lpc/lpc_mmc.c (contents, props changed) head/sys/arm/lpc/lpc_ohci.c (contents, props changed) head/sys/arm/lpc/lpc_pll.c (contents, props changed) head/sys/arm/lpc/lpc_pwr.c (contents, props changed) head/sys/arm/lpc/lpc_rtc.c (contents, props changed) head/sys/arm/lpc/lpc_space.c (contents, props changed) head/sys/arm/lpc/lpc_spi.c (contents, props changed) head/sys/arm/lpc/lpc_timer.c (contents, props changed) head/sys/arm/lpc/lpcreg.h (contents, props changed) head/sys/arm/lpc/lpcvar.h (contents, props changed) head/sys/arm/lpc/ssd1289.c (contents, props changed) head/sys/arm/lpc/std.lpc (contents, props changed) head/sys/boot/fdt/dts/ea3250.dts (contents, props changed) head/sys/dev/uart/uart_dev_lpc.c (contents, props changed) Modified: head/sys/dev/uart/uart.h head/sys/dev/uart/uart_bus_fdt.c head/sys/dev/uart/uart_subr.c Added: head/sys/arm/lpc/files.lpc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/lpc/files.lpc Wed Aug 15 05:37:10 2012 (r239278) @@ -0,0 +1,21 @@ +# $FreeBSD$ +arm/arm/bus_space_generic.c standard +arm/arm/irq_dispatch.S standard +arm/arm/cpufunc_asm_arm9.S standard +arm/arm/cpufunc_asm_armv5.S standard +arm/lpc/lpc_machdep.c standard +arm/lpc/lpc_space.c standard +arm/lpc/lpc_pwr.c standard +arm/lpc/lpc_intc.c standard +arm/lpc/lpc_timer.c standard +arm/lpc/lpc_rtc.c standard +arm/lpc/if_lpe.c optional lpe +arm/lpc/lpc_ohci.c optional ohci +arm/lpc/lpc_mmc.c optional lpcmmc +arm/lpc/lpc_fb.c optional lpcfb +arm/lpc/lpc_gpio.c optional lpcgpio +arm/lpc/lpc_spi.c optional lpcspi +arm/lpc/lpc_dmac.c optional dmac +arm/lpc/ssd1289.c optional ssd1289 +dev/uart/uart_dev_lpc.c optional uart +kern/kern_clocksource.c standard Added: head/sys/arm/lpc/if_lpe.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/lpc/if_lpe.c Wed Aug 15 05:37:10 2012 (r239278) @@ -0,0 +1,1231 @@ +/*- + * Copyright (c) 2011 Jakub Wojciech Klama + * All rights reserved. + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include + +#include +#include +#include + +#include "miibus_if.h" + +#define DEBUG +#undef DEBUG + +#ifdef DEBUG +#define debugf(fmt, args...) do { printf("%s(): ", __func__); \ + printf(fmt,##args); } while (0) +#else +#define debugf(fmt, args...) +#endif + +struct lpe_dmamap_arg { + bus_addr_t lpe_dma_busaddr; +}; + +struct lpe_rxdesc { + struct mbuf * lpe_rxdesc_mbuf; + bus_dmamap_t lpe_rxdesc_dmamap; +}; + +struct lpe_txdesc { + int lpe_txdesc_first; + struct mbuf * lpe_txdesc_mbuf; + bus_dmamap_t lpe_txdesc_dmamap; +}; + +struct lpe_chain_data { + bus_dma_tag_t lpe_parent_tag; + bus_dma_tag_t lpe_tx_ring_tag; + bus_dmamap_t lpe_tx_ring_map; + bus_dma_tag_t lpe_tx_status_tag; + bus_dmamap_t lpe_tx_status_map; + bus_dma_tag_t lpe_tx_buf_tag; + bus_dma_tag_t lpe_rx_ring_tag; + bus_dmamap_t lpe_rx_ring_map; + bus_dma_tag_t lpe_rx_status_tag; + bus_dmamap_t lpe_rx_status_map; + bus_dma_tag_t lpe_rx_buf_tag; + struct lpe_rxdesc lpe_rx_desc[LPE_RXDESC_NUM]; + struct lpe_txdesc lpe_tx_desc[LPE_TXDESC_NUM]; + int lpe_tx_prod; + int lpe_tx_last; + int lpe_tx_used; +}; + +struct lpe_ring_data { + struct lpe_hwdesc * lpe_rx_ring; + struct lpe_hwstatus * lpe_rx_status; + bus_addr_t lpe_rx_ring_phys; + bus_addr_t lpe_rx_status_phys; + struct lpe_hwdesc * lpe_tx_ring; + struct lpe_hwstatus * lpe_tx_status; + bus_addr_t lpe_tx_ring_phys; + bus_addr_t lpe_tx_status_phys; +}; + +struct lpe_softc { + struct ifnet * lpe_ifp; + struct mtx lpe_mtx; + phandle_t lpe_ofw; + device_t lpe_dev; + device_t lpe_miibus; + uint8_t lpe_enaddr[6]; + struct resource * lpe_mem_res; + struct resource * lpe_irq_res; + void * lpe_intrhand; + bus_space_tag_t lpe_bst; + bus_space_handle_t lpe_bsh; +#define LPE_FLAG_LINK (1 << 0) + uint32_t lpe_flags; + int lpe_watchdog_timer; + struct callout lpe_tick; + struct lpe_chain_data lpe_cdata; + struct lpe_ring_data lpe_rdata; +}; + +static int lpe_probe(device_t); +static int lpe_attach(device_t); +static int lpe_detach(device_t); +static int lpe_miibus_readreg(device_t, int, int); +static int lpe_miibus_writereg(device_t, int, int, int); +static void lpe_miibus_statchg(device_t); + +static void lpe_reset(struct lpe_softc *); +static void lpe_init(void *); +static void lpe_init_locked(struct lpe_softc *); +static void lpe_start(struct ifnet *); +static void lpe_start_locked(struct ifnet *); +static void lpe_stop(struct lpe_softc *); +static void lpe_stop_locked(struct lpe_softc *); +static int lpe_ioctl(struct ifnet *, u_long, caddr_t); +static void lpe_set_rxmode(struct lpe_softc *); +static void lpe_set_rxfilter(struct lpe_softc *); +static void lpe_intr(void *); +static void lpe_rxintr(struct lpe_softc *); +static void lpe_txintr(struct lpe_softc *); +static void lpe_tick(void *); +static void lpe_watchdog(struct lpe_softc *); +static int lpe_encap(struct lpe_softc *, struct mbuf **); +static int lpe_dma_alloc(struct lpe_softc *); +static int lpe_dma_alloc_rx(struct lpe_softc *); +static int lpe_dma_alloc_tx(struct lpe_softc *); +static int lpe_init_rx(struct lpe_softc *); +static int lpe_init_rxbuf(struct lpe_softc *, int); +static void lpe_discard_rxbuf(struct lpe_softc *, int); +static void lpe_dmamap_cb(void *, bus_dma_segment_t *, int, int); +static int lpe_ifmedia_upd(struct ifnet *); +static void lpe_ifmedia_sts(struct ifnet *, struct ifmediareq *); + +#define lpe_lock(_sc) mtx_lock(&(_sc)->lpe_mtx) +#define lpe_unlock(_sc) mtx_unlock(&(_sc)->lpe_mtx) +#define lpe_lock_assert(sc) mtx_assert(&(_sc)->lpe_mtx, MA_OWNED) + +#define lpe_read_4(_sc, _reg) \ + bus_space_read_4((_sc)->lpe_bst, (_sc)->lpe_bsh, (_reg)) +#define lpe_write_4(_sc, _reg, _val) \ + bus_space_write_4((_sc)->lpe_bst, (_sc)->lpe_bsh, (_reg), (_val)) + +#define LPE_HWDESC_RXERRS (LPE_HWDESC_CRCERROR | LPE_HWDESC_SYMBOLERROR | \ + LPE_HWDESC_LENGTHERROR | LPE_HWDESC_ALIGNERROR | LPE_HWDESC_OVERRUN | \ + LPE_HWDESC_RXNODESCR) + +#define LPE_HWDESC_TXERRS (LPE_HWDESC_EXCDEFER | LPE_HWDESC_EXCCOLL | \ + LPE_HWDESC_LATECOLL | LPE_HWDESC_UNDERRUN | LPE_HWDESC_TXNODESCR) + +static int +lpe_probe(device_t dev) +{ + + if (!ofw_bus_is_compatible(dev, "lpc,ethernet")) + return (ENXIO); + + device_set_desc(dev, "LPC32x0 10/100 Ethernet"); + return (BUS_PROBE_DEFAULT); +} + +static int +lpe_attach(device_t dev) +{ + struct lpe_softc *sc = device_get_softc(dev); + struct ifnet *ifp; + int rid, i; + uint32_t val; + + sc->lpe_dev = dev; + sc->lpe_ofw = ofw_bus_get_node(dev); + + i = OF_getprop(sc->lpe_ofw, "local-mac-address", (void *)&sc->lpe_enaddr, 6); + if (i != 6) { + sc->lpe_enaddr[0] = 0x00; + sc->lpe_enaddr[1] = 0x11; + sc->lpe_enaddr[2] = 0x22; + sc->lpe_enaddr[3] = 0x33; + sc->lpe_enaddr[4] = 0x44; + sc->lpe_enaddr[5] = 0x55; + } + + mtx_init(&sc->lpe_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, + MTX_DEF); + + callout_init_mtx(&sc->lpe_tick, &sc->lpe_mtx, 0); + + rid = 0; + sc->lpe_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (!sc->lpe_mem_res) { + device_printf(dev, "cannot allocate memory window\n"); + goto fail; + } + + sc->lpe_bst = rman_get_bustag(sc->lpe_mem_res); + sc->lpe_bsh = rman_get_bushandle(sc->lpe_mem_res); + + rid = 0; + sc->lpe_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, + RF_ACTIVE); + if (!sc->lpe_irq_res) { + device_printf(dev, "cannot allocate interrupt\n"); + goto fail; + } + + sc->lpe_ifp = if_alloc(IFT_ETHER); + if (!sc->lpe_ifp) { + device_printf(dev, "cannot allocated ifnet\n"); + goto fail; + } + + ifp = sc->lpe_ifp; + + if_initname(ifp, device_get_name(dev), device_get_unit(dev)); + ifp->if_softc = sc; + ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; + ifp->if_start = lpe_start; + ifp->if_ioctl = lpe_ioctl; + ifp->if_init = lpe_init; + IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN); + ifp->if_snd.ifq_drv_maxlen = IFQ_MAXLEN; + IFQ_SET_READY(&ifp->if_snd); + + ether_ifattach(ifp, sc->lpe_enaddr); + + if (bus_setup_intr(dev, sc->lpe_irq_res, INTR_TYPE_NET, NULL, + lpe_intr, sc, &sc->lpe_intrhand)) { + device_printf(dev, "cannot establish interrupt handler\n"); + ether_ifdetach(ifp); + goto fail; + } + + /* Enable Ethernet clock */ + lpc_pwr_write(dev, LPC_CLKPWR_MACCLK_CTRL, + LPC_CLKPWR_MACCLK_CTRL_REG | + LPC_CLKPWR_MACCLK_CTRL_SLAVE | + LPC_CLKPWR_MACCLK_CTRL_MASTER | + LPC_CLKPWR_MACCLK_CTRL_HDWINF(3)); + + /* Reset chip */ + lpe_reset(sc); + + /* Initialize MII */ + val = lpe_read_4(sc, LPE_COMMAND); + lpe_write_4(sc, LPE_COMMAND, val | LPE_COMMAND_RMII); + + if (mii_attach(dev, &sc->lpe_miibus, ifp, lpe_ifmedia_upd, + lpe_ifmedia_sts, BMSR_DEFCAPMASK, 0x01, + MII_OFFSET_ANY, 0)) { + device_printf(dev, "cannot find PHY\n"); + goto fail; + } + + lpe_dma_alloc(sc); + + return (0); + +fail: + if (sc->lpe_ifp) + if_free(sc->lpe_ifp); + if (sc->lpe_intrhand) + bus_teardown_intr(dev, sc->lpe_irq_res, sc->lpe_intrhand); + if (sc->lpe_irq_res) + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->lpe_irq_res); + if (sc->lpe_mem_res) + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->lpe_mem_res); + return (ENXIO); +} + +static int +lpe_detach(device_t dev) +{ + struct lpe_softc *sc = device_get_softc(dev); + + lpe_stop(sc); + + if_free(sc->lpe_ifp); + bus_teardown_intr(dev, sc->lpe_irq_res, sc->lpe_intrhand); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->lpe_irq_res); + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->lpe_mem_res); + + return (0); +} + +static int +lpe_miibus_readreg(device_t dev, int phy, int reg) +{ + struct lpe_softc *sc = device_get_softc(dev); + uint32_t val; + int result; + + lpe_write_4(sc, LPE_MCMD, LPE_MCMD_READ); + lpe_write_4(sc, LPE_MADR, + (reg & LPE_MADR_REGMASK) << LPE_MADR_REGSHIFT | + (phy & LPE_MADR_PHYMASK) << LPE_MADR_PHYSHIFT); + + val = lpe_read_4(sc, LPE_MIND); + + /* Wait until request is completed */ + while (val & LPE_MIND_BUSY) { + val = lpe_read_4(sc, LPE_MIND); + DELAY(10); + } + + if (val & LPE_MIND_INVALID) + return (0); + + lpe_write_4(sc, LPE_MCMD, 0); + result = (lpe_read_4(sc, LPE_MRDD) & LPE_MRDD_DATAMASK); + debugf("phy=%d reg=%d result=0x%04x\n", phy, reg, result); + + return (result); +} + +static int +lpe_miibus_writereg(device_t dev, int phy, int reg, int data) +{ + struct lpe_softc *sc = device_get_softc(dev); + uint32_t val; + + debugf("phy=%d reg=%d data=0x%04x\n", phy, reg, data); + + lpe_write_4(sc, LPE_MCMD, LPE_MCMD_WRITE); + lpe_write_4(sc, LPE_MADR, + (reg & LPE_MADR_REGMASK) << LPE_MADR_REGSHIFT | + (phy & LPE_MADR_PHYMASK) << LPE_MADR_PHYSHIFT); + + lpe_write_4(sc, LPE_MWTD, (data & LPE_MWTD_DATAMASK)); + + val = lpe_read_4(sc, LPE_MIND); + + /* Wait until request is completed */ + while (val & LPE_MIND_BUSY) { + val = lpe_read_4(sc, LPE_MIND); + DELAY(10); + } + + return (0); +} + +static void +lpe_miibus_statchg(device_t dev) +{ + struct lpe_softc *sc = device_get_softc(dev); + struct mii_data *mii = device_get_softc(sc->lpe_miibus); + + lpe_lock(sc); + + if ((mii->mii_media_status & IFM_ACTIVE) && + (mii->mii_media_status & IFM_AVALID)) + sc->lpe_flags |= LPE_FLAG_LINK; + else + sc->lpe_flags &= ~LPE_FLAG_LINK; + + lpe_unlock(sc); +} + +static void +lpe_reset(struct lpe_softc *sc) +{ + uint32_t mac1; + + /* Enter soft reset mode */ + mac1 = lpe_read_4(sc, LPE_MAC1); + lpe_write_4(sc, LPE_MAC1, mac1 | LPE_MAC1_SOFTRESET | LPE_MAC1_RESETTX | + LPE_MAC1_RESETMCSTX | LPE_MAC1_RESETRX | LPE_MAC1_RESETMCSRX); + + /* Reset registers, Tx path and Rx path */ + lpe_write_4(sc, LPE_COMMAND, LPE_COMMAND_REGRESET | + LPE_COMMAND_TXRESET | LPE_COMMAND_RXRESET); + + /* Set station address */ + lpe_write_4(sc, LPE_SA2, sc->lpe_enaddr[1] << 8 | sc->lpe_enaddr[0]); + lpe_write_4(sc, LPE_SA1, sc->lpe_enaddr[3] << 8 | sc->lpe_enaddr[2]); + lpe_write_4(sc, LPE_SA0, sc->lpe_enaddr[5] << 8 | sc->lpe_enaddr[4]); + + /* Leave soft reset mode */ + mac1 = lpe_read_4(sc, LPE_MAC1); + lpe_write_4(sc, LPE_MAC1, mac1 & ~(LPE_MAC1_SOFTRESET | LPE_MAC1_RESETTX | + LPE_MAC1_RESETMCSTX | LPE_MAC1_RESETRX | LPE_MAC1_RESETMCSRX)); +} + +static void +lpe_init(void *arg) +{ + struct lpe_softc *sc = (struct lpe_softc *)arg; + + lpe_lock(sc); + lpe_init_locked(sc); + lpe_unlock(sc); +} + +static void +lpe_init_locked(struct lpe_softc *sc) +{ + struct ifnet *ifp = sc->lpe_ifp; + uint32_t cmd, mac1; + + lpe_lock_assert(sc); + + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + return; + + /* Enable Tx and Rx */ + cmd = lpe_read_4(sc, LPE_COMMAND); + lpe_write_4(sc, LPE_COMMAND, cmd | LPE_COMMAND_RXENABLE | + LPE_COMMAND_TXENABLE | LPE_COMMAND_PASSRUNTFRAME); + + /* Enable receive */ + mac1 = lpe_read_4(sc, LPE_MAC1); + lpe_write_4(sc, LPE_MAC1, /*mac1 |*/ LPE_MAC1_RXENABLE | LPE_MAC1_PASSALL); + + lpe_write_4(sc, LPE_MAC2, LPE_MAC2_CRCENABLE | LPE_MAC2_PADCRCENABLE | + LPE_MAC2_FULLDUPLEX); + + lpe_write_4(sc, LPE_MCFG, LPE_MCFG_CLKSEL(7)); + + /* Set up Rx filter */ + lpe_set_rxmode(sc); + + /* Enable interrupts */ + lpe_write_4(sc, LPE_INTENABLE, LPE_INT_RXOVERRUN | LPE_INT_RXERROR | + LPE_INT_RXFINISH | LPE_INT_RXDONE | LPE_INT_TXUNDERRUN | + LPE_INT_TXERROR | LPE_INT_TXFINISH | LPE_INT_TXDONE); + + sc->lpe_cdata.lpe_tx_prod = 0; + sc->lpe_cdata.lpe_tx_last = 0; + sc->lpe_cdata.lpe_tx_used = 0; + + lpe_init_rx(sc); + + /* Initialize Rx packet and status descriptor heads */ + lpe_write_4(sc, LPE_RXDESC, sc->lpe_rdata.lpe_rx_ring_phys); + lpe_write_4(sc, LPE_RXSTATUS, sc->lpe_rdata.lpe_rx_status_phys); + lpe_write_4(sc, LPE_RXDESC_NUMBER, LPE_RXDESC_NUM - 1); + lpe_write_4(sc, LPE_RXDESC_CONS, 0); + + /* Initialize Tx packet and status descriptor heads */ + lpe_write_4(sc, LPE_TXDESC, sc->lpe_rdata.lpe_tx_ring_phys); + lpe_write_4(sc, LPE_TXSTATUS, sc->lpe_rdata.lpe_tx_status_phys); + lpe_write_4(sc, LPE_TXDESC_NUMBER, LPE_TXDESC_NUM - 1); + lpe_write_4(sc, LPE_TXDESC_PROD, 0); + + ifp->if_drv_flags |= IFF_DRV_RUNNING; + ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + + callout_reset(&sc->lpe_tick, hz, lpe_tick, sc); +} + +static void +lpe_start(struct ifnet *ifp) +{ + struct lpe_softc *sc = (struct lpe_softc *)ifp->if_softc; + + lpe_lock(sc); + lpe_start_locked(ifp); + lpe_unlock(sc); +} + +static void +lpe_start_locked(struct ifnet *ifp) +{ + struct lpe_softc *sc = (struct lpe_softc *)ifp->if_softc; + struct mbuf *m_head; + int encap = 0; + + lpe_lock_assert(sc); + + while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) { + if (lpe_read_4(sc, LPE_TXDESC_PROD) == + lpe_read_4(sc, LPE_TXDESC_CONS) - 5) + break; + + /* Dequeue first packet */ + IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); + if (!m_head) + break; + + lpe_encap(sc, &m_head); + + encap++; + } + + /* Submit new descriptor list */ + if (encap) { + lpe_write_4(sc, LPE_TXDESC_PROD, sc->lpe_cdata.lpe_tx_prod); + sc->lpe_watchdog_timer = 5; + } + +} + +static int +lpe_encap(struct lpe_softc *sc, struct mbuf **m_head) +{ + struct lpe_txdesc *txd; + struct lpe_hwdesc *hwd; + bus_dma_segment_t segs[LPE_MAXFRAGS]; + int i, err, nsegs, prod; + + lpe_lock_assert(sc); + M_ASSERTPKTHDR((*m_head)); + + prod = sc->lpe_cdata.lpe_tx_prod; + txd = &sc->lpe_cdata.lpe_tx_desc[prod]; + + debugf("starting with prod=%d\n", prod); + + err = bus_dmamap_load_mbuf_sg(sc->lpe_cdata.lpe_tx_buf_tag, + txd->lpe_txdesc_dmamap, *m_head, segs, &nsegs, BUS_DMA_NOWAIT); + + if (err) + return (err); + + if (nsegs == 0) { + m_freem(*m_head); + *m_head = NULL; + return (EIO); + } + + bus_dmamap_sync(sc->lpe_cdata.lpe_tx_buf_tag, txd->lpe_txdesc_dmamap, + BUS_DMASYNC_PREREAD); + bus_dmamap_sync(sc->lpe_cdata.lpe_tx_ring_tag, sc->lpe_cdata.lpe_tx_ring_map, + BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); + + txd->lpe_txdesc_first = 1; + txd->lpe_txdesc_mbuf = *m_head; + + for (i = 0; i < nsegs; i++) { + hwd = &sc->lpe_rdata.lpe_tx_ring[prod]; + hwd->lhr_data = segs[i].ds_addr; + hwd->lhr_control = segs[i].ds_len - 1; + + if (i == nsegs - 1) { + hwd->lhr_control |= LPE_HWDESC_LASTFLAG; + hwd->lhr_control |= LPE_HWDESC_INTERRUPT; + hwd->lhr_control |= LPE_HWDESC_CRC; + hwd->lhr_control |= LPE_HWDESC_PAD; + } + + LPE_INC(prod, LPE_TXDESC_NUM); + } + + bus_dmamap_sync(sc->lpe_cdata.lpe_tx_ring_tag, sc->lpe_cdata.lpe_tx_ring_map, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + + sc->lpe_cdata.lpe_tx_used += nsegs; + sc->lpe_cdata.lpe_tx_prod = prod; + + return (0); +} + +static void +lpe_stop(struct lpe_softc *sc) +{ + lpe_lock(sc); + lpe_stop_locked(sc); + lpe_unlock(sc); +} + +static void +lpe_stop_locked(struct lpe_softc *sc) +{ + lpe_lock_assert(sc); + + callout_stop(&sc->lpe_tick); + + /* Disable interrupts */ + lpe_write_4(sc, LPE_INTCLEAR, 0xffffffff); + + /* Stop EMAC */ + lpe_write_4(sc, LPE_MAC1, 0); + lpe_write_4(sc, LPE_MAC2, 0); + lpe_write_4(sc, LPE_COMMAND, 0); + + sc->lpe_ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + sc->lpe_ifp->if_drv_flags &= ~IFF_DRV_RUNNING; +} + +static int +lpe_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +{ + struct lpe_softc *sc = ifp->if_softc; + struct mii_data *mii = device_get_softc(sc->lpe_miibus); + struct ifreq *ifr = (struct ifreq *)data; + int err = 0; + + switch (cmd) { + case SIOCSIFFLAGS: + lpe_lock(sc); + if (ifp->if_flags & IFF_UP) { + if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + lpe_set_rxmode(sc); + lpe_set_rxfilter(sc); + } else + lpe_init_locked(sc); + } else + lpe_stop(sc); + lpe_unlock(sc); + break; + case SIOCADDMULTI: + case SIOCDELMULTI: + if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + lpe_lock(sc); + lpe_set_rxfilter(sc); + lpe_unlock(sc); + } + break; + case SIOCGIFMEDIA: + case SIOCSIFMEDIA: + err = ifmedia_ioctl(ifp, ifr, &mii->mii_media, cmd); + break; + default: + err = ether_ioctl(ifp, cmd, data); + break; + } + + return (err); +} + +static void lpe_set_rxmode(struct lpe_softc *sc) +{ + struct ifnet *ifp = sc->lpe_ifp; + uint32_t rxfilt; + + rxfilt = LPE_RXFILTER_UNIHASH | LPE_RXFILTER_MULTIHASH | LPE_RXFILTER_PERFECT; + + if (ifp->if_flags & IFF_BROADCAST) + rxfilt |= LPE_RXFILTER_BROADCAST; + + if (ifp->if_flags & IFF_PROMISC) + rxfilt |= LPE_RXFILTER_UNICAST | LPE_RXFILTER_MULTICAST; + + if (ifp->if_flags & IFF_ALLMULTI) + rxfilt |= LPE_RXFILTER_MULTICAST; + + lpe_write_4(sc, LPE_RXFILTER_CTRL, rxfilt); +} + +static void lpe_set_rxfilter(struct lpe_softc *sc) +{ + struct ifnet *ifp = sc->lpe_ifp; + struct ifmultiaddr *ifma; + int index; + uint32_t hashl, hashh; + + hashl = 0; + hashh = 0; + + if_maddr_rlock(ifp); + TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { + if (ifma->ifma_addr->sa_family != AF_LINK) + continue; + + index = ether_crc32_be(LLADDR((struct sockaddr_dl *) + ifma->ifma_addr), ETHER_ADDR_LEN) >> 23 & 0x3f; + + if (index > 31) + hashh |= (1 << (index - 32)); + else + hashl |= (1 << index); + } + if_maddr_runlock(ifp); + + /* Program new hash filter */ + lpe_write_4(sc, LPE_HASHFILTER_L, hashl); + lpe_write_4(sc, LPE_HASHFILTER_H, hashh); +} + +static void +lpe_intr(void *arg) +{ + struct lpe_softc *sc = (struct lpe_softc *)arg; + uint32_t intstatus; + + debugf("status=0x%08x\n", lpe_read_4(sc, LPE_INTSTATUS)); + + lpe_lock(sc); + + while ((intstatus = lpe_read_4(sc, LPE_INTSTATUS))) { + if (intstatus & LPE_INT_RXDONE) + lpe_rxintr(sc); + + if (intstatus & LPE_INT_TXDONE) + lpe_txintr(sc); + + lpe_write_4(sc, LPE_INTCLEAR, 0xffff); + } + + lpe_unlock(sc); +} + +static void +lpe_rxintr(struct lpe_softc *sc) +{ + struct ifnet *ifp = sc->lpe_ifp; + struct lpe_hwdesc *hwd; + struct lpe_hwstatus *hws; + struct lpe_rxdesc *rxd; + struct mbuf *m; + int prod, cons; + + for (;;) { + prod = lpe_read_4(sc, LPE_RXDESC_PROD); + cons = lpe_read_4(sc, LPE_RXDESC_CONS); + + if (prod == cons) + break; + + rxd = &sc->lpe_cdata.lpe_rx_desc[cons]; + hwd = &sc->lpe_rdata.lpe_rx_ring[cons]; + hws = &sc->lpe_rdata.lpe_rx_status[cons]; + + /* Check received frame for errors */ + if (hws->lhs_info & LPE_HWDESC_RXERRS) { + ifp->if_ierrors++; + lpe_discard_rxbuf(sc, cons); + lpe_init_rxbuf(sc, cons); + goto skip; + } + + m = rxd->lpe_rxdesc_mbuf; + m->m_pkthdr.rcvif = ifp; + m->m_data += 2; + + ifp->if_ipackets++; + + lpe_unlock(sc); + (*ifp->if_input)(ifp, m); + lpe_lock(sc); + + lpe_init_rxbuf(sc, cons); +skip: + LPE_INC(cons, LPE_RXDESC_NUM); + lpe_write_4(sc, LPE_RXDESC_CONS, cons); + } +} + +static void +lpe_txintr(struct lpe_softc *sc) +{ + struct ifnet *ifp = sc->lpe_ifp; + struct lpe_hwdesc *hwd; + struct lpe_hwstatus *hws; + struct lpe_txdesc *txd; + int cons, last; + + for (;;) { + cons = lpe_read_4(sc, LPE_TXDESC_CONS); + last = sc->lpe_cdata.lpe_tx_last; + + if (cons == last) + break; + + txd = &sc->lpe_cdata.lpe_tx_desc[last]; + hwd = &sc->lpe_rdata.lpe_tx_ring[last]; + hws = &sc->lpe_rdata.lpe_tx_status[last]; + + bus_dmamap_sync(sc->lpe_cdata.lpe_tx_buf_tag, + txd->lpe_txdesc_dmamap, BUS_DMASYNC_POSTWRITE); + + ifp->if_collisions += LPE_HWDESC_COLLISIONS(hws->lhs_info); + + if (hws->lhs_info & LPE_HWDESC_TXERRS) + ifp->if_oerrors++; + else + ifp->if_opackets++; + + if (txd->lpe_txdesc_first) { + bus_dmamap_unload(sc->lpe_cdata.lpe_tx_buf_tag, + txd->lpe_txdesc_dmamap); + + m_freem(txd->lpe_txdesc_mbuf); + txd->lpe_txdesc_mbuf = NULL; + txd->lpe_txdesc_first = 0; + } + + sc->lpe_cdata.lpe_tx_used--; + LPE_INC(sc->lpe_cdata.lpe_tx_last, LPE_TXDESC_NUM); + } + + if (!sc->lpe_cdata.lpe_tx_used) + sc->lpe_watchdog_timer = 0; +} + +static void +lpe_tick(void *arg) +{ + struct lpe_softc *sc = (struct lpe_softc *)arg; + struct mii_data *mii = device_get_softc(sc->lpe_miibus); + + lpe_lock_assert(sc); + + mii_tick(mii); + lpe_watchdog(sc); + + callout_reset(&sc->lpe_tick, hz, lpe_tick, sc); +} + +static void +lpe_watchdog(struct lpe_softc *sc) +{ + struct ifnet *ifp = sc->lpe_ifp; + + lpe_lock_assert(sc); + + if (sc->lpe_watchdog_timer == 0 || sc->lpe_watchdog_timer--) + return; + + /* Chip has stopped responding */ + device_printf(sc->lpe_dev, "WARNING: chip hangup, restarting...\n"); + lpe_stop_locked(sc); + lpe_init_locked(sc); + + /* Try to resend packets */ + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + lpe_start_locked(ifp); +} + +static int +lpe_dma_alloc(struct lpe_softc *sc) +{ + int err; + + /* Create parent DMA tag */ + err = bus_dma_tag_create( + bus_get_dma_tag(sc->lpe_dev), + 1, 0, /* alignment, boundary */ + BUS_SPACE_MAXADDR_32BIT, /* lowaddr */ + BUS_SPACE_MAXADDR, /* highaddr */ + NULL, NULL, /* filter, filterarg */ + BUS_SPACE_MAXSIZE_32BIT, 0, /* maxsize, nsegments */ + BUS_SPACE_MAXSIZE_32BIT, 0, /* maxsegsize, flags */ + NULL, NULL, /* lockfunc, lockarg */ + &sc->lpe_cdata.lpe_parent_tag); + + if (err) { + device_printf(sc->lpe_dev, "cannot create parent DMA tag\n"); + return (err); + } + + err = lpe_dma_alloc_rx(sc); + if (err) + return (err); + + err = lpe_dma_alloc_tx(sc); + if (err) + return (err); + + return (0); +} + +static int +lpe_dma_alloc_rx(struct lpe_softc *sc) +{ + struct lpe_rxdesc *rxd; + struct lpe_dmamap_arg ctx; + int err, i; + + /* Create tag for Rx ring */ + err = bus_dma_tag_create( + sc->lpe_cdata.lpe_parent_tag, + LPE_DESC_ALIGN, 0, /* alignment, boundary */ + BUS_SPACE_MAXADDR, /* lowaddr */ + BUS_SPACE_MAXADDR, /* highaddr */ + NULL, NULL, /* filter, filterarg */ + LPE_RXDESC_SIZE, 1, /* maxsize, nsegments */ + LPE_RXDESC_SIZE, 0, /* maxsegsize, flags */ + NULL, NULL, /* lockfunc, lockarg */ + &sc->lpe_cdata.lpe_rx_ring_tag); + + if (err) { + device_printf(sc->lpe_dev, "cannot create Rx ring DMA tag\n"); + goto fail; + } + + /* Create tag for Rx status ring */ + err = bus_dma_tag_create( + sc->lpe_cdata.lpe_parent_tag, + LPE_DESC_ALIGN, 0, /* alignment, boundary */ + BUS_SPACE_MAXADDR, /* lowaddr */ + BUS_SPACE_MAXADDR, /* highaddr */ + NULL, NULL, /* filter, filterarg */ + LPE_RXSTATUS_SIZE, 1, /* maxsize, nsegments */ + LPE_RXSTATUS_SIZE, 0, /* maxsegsize, flags */ + NULL, NULL, /* lockfunc, lockarg */ + &sc->lpe_cdata.lpe_rx_status_tag); + + if (err) { + device_printf(sc->lpe_dev, "cannot create Rx status ring DMA tag\n"); + goto fail; + } + + /* Create tag for Rx buffers */ + err = bus_dma_tag_create( + sc->lpe_cdata.lpe_parent_tag, + LPE_DESC_ALIGN, 0, /* alignment, boundary */ + BUS_SPACE_MAXADDR, /* lowaddr */ + BUS_SPACE_MAXADDR, /* highaddr */ + NULL, NULL, /* filter, filterarg */ + MCLBYTES * LPE_RXDESC_NUM, /* maxsize */ + LPE_RXDESC_NUM, /* segments */ + MCLBYTES, 0, /* maxsegsize, flags */ + NULL, NULL, /* lockfunc, lockarg */ + &sc->lpe_cdata.lpe_rx_buf_tag); + + if (err) { + device_printf(sc->lpe_dev, "cannot create Rx buffers DMA tag\n"); + goto fail; + } + + /* Allocate Rx DMA ring */ + err = bus_dmamem_alloc(sc->lpe_cdata.lpe_rx_ring_tag, + (void **)&sc->lpe_rdata.lpe_rx_ring, BUS_DMA_WAITOK | BUS_DMA_COHERENT | + BUS_DMA_ZERO, &sc->lpe_cdata.lpe_rx_ring_map); + + err = bus_dmamap_load(sc->lpe_cdata.lpe_rx_ring_tag, + sc->lpe_cdata.lpe_rx_ring_map, sc->lpe_rdata.lpe_rx_ring, + LPE_RXDESC_SIZE, lpe_dmamap_cb, &ctx, 0); + + sc->lpe_rdata.lpe_rx_ring_phys = ctx.lpe_dma_busaddr; + + /* Allocate Rx status ring */ + err = bus_dmamem_alloc(sc->lpe_cdata.lpe_rx_status_tag, + (void **)&sc->lpe_rdata.lpe_rx_status, BUS_DMA_WAITOK | BUS_DMA_COHERENT | + BUS_DMA_ZERO, &sc->lpe_cdata.lpe_rx_status_map); + + err = bus_dmamap_load(sc->lpe_cdata.lpe_rx_status_tag, + sc->lpe_cdata.lpe_rx_status_map, sc->lpe_rdata.lpe_rx_status, + LPE_RXDESC_SIZE, lpe_dmamap_cb, &ctx, 0); + + sc->lpe_rdata.lpe_rx_status_phys = ctx.lpe_dma_busaddr; + *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 05:55:17 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 21547106566B; Wed, 15 Aug 2012 05:55:17 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 021728FC0C; Wed, 15 Aug 2012 05:55:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F5tGsg009312; Wed, 15 Aug 2012 05:55:16 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F5tG0j009309; Wed, 15 Aug 2012 05:55:16 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150555.q7F5tG0j009309@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 05:55:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239279 - head/sys/arm/conf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 05:55:17 -0000 Author: gonzo Date: Wed Aug 15 05:55:16 2012 New Revision: 239279 URL: http://svn.freebsd.org/changeset/base/239279 Log: Merging of projects/armv6, intermission Add configs missed in previous commits: - ARMADA XP - Embedded Artists EA3250 Added: head/sys/arm/conf/ARMADAXP (contents, props changed) head/sys/arm/conf/EA3250 (contents, props changed) head/sys/arm/conf/EA3250.hints (contents, props changed) Added: head/sys/arm/conf/ARMADAXP ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/ARMADAXP Wed Aug 15 05:55:16 2012 (r239279) @@ -0,0 +1,102 @@ +# +# Custom kernel for Marvell Armada XP +# +# $FreeBSD$ +# + +ident MV-88F78XX0 +include "../mv/armadaxp/std.mv78x60" + +options SOC_MV_ARMADAXP +makeoptions MODULES_OVERRIDE="" + +makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +makeoptions WERROR="-Werror" + +#options SCHED_ULE #ULE scheduler +options SCHED_4BSD #4BSD scheduler +options INET #InterNETworking +options INET6 #IPv6 communications protocols +options FFS #Berkeley Fast Filesystem +options NFSCL #Network Filesystem Client +options NFSLOCKD #Network Lock Manager +options NFS_ROOT #NFS usable as /, requires NFSCLIENT +options BOOTP +options BOOTP_NFSROOT +options BOOTP_NFSV3 +options BOOTP_WIRED_TO=mge0 + +options GEOM_PART_GPT +options ROOTDEVNAME=\"ufs:/dev/da0p1\" + +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 MUTEX_NOINLINE +options RWLOCK_NOINLINE +options NO_FFS_SNAPSHOT +options NO_SWAPPING + +options SMP + +# Debugging +#options VERBOSE_SYSINIT +options ALT_BREAK_TO_DEBUGGER +options DDB +options GDB +#options DIAGNOSTIC +#options INVARIANTS #Enable calls of extra sanity checking +#options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required by INVARIANTS +options KDB +options KDB_TRACE +#options KTR +#options KTR_VERBOSE=0 +#options KTR_ENTRIES=16384 +#options KTR_MASK=(KTR_SPARE2) +#options KTR_COMPILE=KTR_ALL +#options WITNESS #Enable checks to detect deadlocks and cycles +#options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed +#options WITNESS_KDB + +# Pseudo devices +device random +device pty +device loop +device md + +# USB +options USB_DEBUG # enable debug msgs +device usb +device ehci +device umass +device scbus +device pass +device da + +# SATA +device ata +device atadisk +#device mvs + +# Serial ports +device uart + +# I2C (TWSI) +device iic +device iicbus + +#Network +device ether +device mge # Marvell Gigabit Ethernet controller +device mii +device e1000phy +device bpf +options HZ=1000 +options DEVICE_POLLING +device vlan + +#FDT +options FDT +options FDT_DTB_STATIC +makeoptions FDT_DTS_FILE=db88f78160.dts Added: head/sys/arm/conf/EA3250 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/EA3250 Wed Aug 15 05:55:16 2012 (r239279) @@ -0,0 +1,96 @@ +# +# Custom kernel for EA3250 boards. +# +# $FreeBSD$ +# + +ident EA3250 +include "../lpc/std.lpc" +hints "EA3250.hints" + +makeoptions MODULES_OVERRIDE="" + +#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +makeoptions WERROR="-Werror" + +options SCHED_4BSD #4BSD scheduler +options INET #InterNETworking +options INET6 #IPv6 communications protocols +options FFS #Berkeley Fast Filesystem +options NFSCL #Network Filesystem Client +options NFSLOCKD #Network Lock Manager +options NFS_ROOT #NFS usable as /, requires NFSCLIENT +options MSDOSFS +options BOOTP +options BOOTP_NFSROOT +options BOOTP_NFSV3 +options BOOTP_WIRED_TO=lpe0 + +#options ROOTDEVNAME=\"ufs:/dev/da0a\" + +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 MUTEX_NOINLINE +options RWLOCK_NOINLINE +options NO_FFS_SNAPSHOT +options NO_SWAPPING + +# Debugging +options ALT_BREAK_TO_DEBUGGER +options DDB +#options DEADLKRES #Enable the deadlock resolver +options DIAGNOSTIC +#options INVARIANTS #Enable calls of extra sanity checking +#options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required by INVARIANTS +options KDB +options WITNESS #Enable checks to detect deadlocks and cycles +options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed +#options WITNESS_KDB + +# Pseudo devices +device loop +device md +device pty +device random + +# Serial ports +device uart + +# Networking +device ether +device mii +device bpf +device lpe + +# USB +options USB_DEBUG +device usb +device ohci +device umass +device scbus +device pass +device da + +device mmc +device mmcsd +device lpcmmc + +device gpio +device gpioled +device lpcgpio + +device spibus +device lpcspi +device ssd1289 + +device lpcfb + +# DMAC +device dmac + +# Flattened Device Tree +options FDT +options FDT_DTB_STATIC +makeoptions FDT_DTS_FILE=ea3250.dts Added: head/sys/arm/conf/EA3250.hints ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/EA3250.hints Wed Aug 15 05:55:16 2012 (r239279) @@ -0,0 +1,4 @@ +# $FreeBSD$ + +hint.ssd1289.0.at="spibus0" +hint.ssd1289.0.cs=26 From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 06:06:44 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3290A106564A; Wed, 15 Aug 2012 06:06:44 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1B1D58FC08; Wed, 15 Aug 2012 06:06:44 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F66iXX010516; Wed, 15 Aug 2012 06:06:44 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F66huj010510; Wed, 15 Aug 2012 06:06:43 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150606.q7F66huj010510@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 06:06:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239280 - in head/sys: arm/tegra boot/fdt/dts X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 06:06:44 -0000 Author: gonzo Date: Wed Aug 15 06:06:43 2012 New Revision: 239280 URL: http://svn.freebsd.org/changeset/base/239280 Log: Merging of projects/armv6, part 9 Very basic support for Nvidia Tegra2: timer, interrupts, UART. Submitted by: Damjan Marion Added: head/sys/arm/tegra/ head/sys/arm/tegra/bus_space.c (contents, props changed) head/sys/arm/tegra/common.c (contents, props changed) head/sys/arm/tegra/files.tegra2 (contents, props changed) head/sys/arm/tegra/std.tegra2 (contents, props changed) head/sys/arm/tegra/tegra2_machdep.c (contents, props changed) head/sys/boot/fdt/dts/trimslice.dts (contents, props changed) Added: head/sys/arm/tegra/bus_space.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/tegra/bus_space.c Wed Aug 15 06:06:43 2012 (r239280) @@ -0,0 +1,153 @@ +/*- + * Copyright (c) 2012 Damjan Marion + * All rights reserved. + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +#include + +/* Prototypes for all the bus_space structure functions */ +bs_protos(generic); +bs_protos(generic_armv4); + +/* + * The bus space tag. This is constant for all instances, so + * we never have to explicitly "create" it. + */ +static struct bus_space _base_tag = { + /* cookie */ + (void *) 0, + + /* mapping/unmapping */ + generic_bs_map, + generic_bs_unmap, + generic_bs_subregion, + + /* allocation/deallocation */ + generic_bs_alloc, + generic_bs_free, + + /* barrier */ + generic_bs_barrier, + + /* read (single) */ + generic_bs_r_1, + generic_armv4_bs_r_2, + generic_bs_r_4, + NULL, + + /* read multiple */ + generic_bs_rm_1, + generic_armv4_bs_rm_2, + generic_bs_rm_4, + NULL, + + /* read region */ + generic_bs_rr_1, + generic_armv4_bs_rr_2, + generic_bs_rr_4, + NULL, + + /* write (single) */ + generic_bs_w_1, + generic_armv4_bs_w_2, + generic_bs_w_4, + NULL, + + /* write multiple */ + generic_bs_wm_1, + generic_armv4_bs_wm_2, + generic_bs_wm_4, + NULL, + + /* write region */ + NULL, + NULL, + NULL, + NULL, + + /* set multiple */ + NULL, + NULL, + NULL, + NULL, + + /* set region */ + NULL, + NULL, + NULL, + NULL, + + /* copy */ + NULL, + NULL, + NULL, + NULL, + + /* read stream (single) */ + NULL, + NULL, + NULL, + NULL, + + /* read multiple stream */ + NULL, + generic_armv4_bs_rm_2, /* bus_space_read_multi_stream_2 */ + NULL, + NULL, + + /* read region stream */ + NULL, + NULL, + NULL, + NULL, + + /* write stream (single) */ + NULL, + NULL, + NULL, + NULL, + + /* write multiple stream */ + NULL, + generic_armv4_bs_wm_2, /* bus_space_write_multi_stream_2 */ + NULL, + NULL, + + /* write region stream */ + NULL, + NULL, + NULL, + NULL +}; + +bus_space_tag_t fdtbus_bs_tag = &_base_tag; Added: head/sys/arm/tegra/common.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/tegra/common.c Wed Aug 15 06:06:43 2012 (r239280) @@ -0,0 +1,78 @@ +/*- + * Copyright (c) 2011 The FreeBSD Foundation + * All rights reserved. + * + * Developed by Damjan Marion + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include +#include + +#include +#include + +/* FIXME move to header file */ +#define TEGRA2_CLK_RST_PA_BASE 0x60006000 + +void +cpu_reset(void) +{ + bus_space_handle_t bsh; + printf("Restetting...\n"); + bus_space_map(fdtbus_bs_tag,TEGRA2_CLK_RST_PA_BASE, 0x1000, 0, &bsh); + bus_space_write_4(fdtbus_bs_tag, bsh, 4, 4); +} + +struct fdt_fixup_entry fdt_fixup_table[] = { + { NULL, NULL } +}; + +static int +fdt_pic_decode_ic(phandle_t node, pcell_t *intr, int *interrupt, int *trig, + int *pol) +{ + if (!fdt_is_compatible(node, "arm,gic")) + return (ENXIO); + + *interrupt = fdt32_to_cpu(intr[0]); + *trig = INTR_TRIGGER_CONFORM; + *pol = INTR_POLARITY_CONFORM; + return (0); +} + +fdt_pic_decode_t fdt_pic_table[] = { + &fdt_pic_decode_ic, + NULL +}; + + + Added: head/sys/arm/tegra/files.tegra2 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/tegra/files.tegra2 Wed Aug 15 06:06:43 2012 (r239280) @@ -0,0 +1,19 @@ +# $FreeBSD$ + +arm/arm/bus_space_asm_generic.S standard +arm/arm/bus_space_generic.c standard +arm/arm/cpufunc_asm_armv5.S standard +arm/arm/cpufunc_asm_arm11.S standard +arm/arm/cpufunc_asm_armv7.S standard +arm/arm/irq_dispatch.S standard + +arm/arm/gic.c standard +arm/arm/mpcore_timer.c standard + +arm/tegra/bus_space.c standard +arm/tegra/common.c standard +arm/tegra/tegra2_machdep.c standard + +kern/kern_clocksource.c standard + +dev/uart/uart_dev_ns8250.c optional uart Added: head/sys/arm/tegra/std.tegra2 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/tegra/std.tegra2 Wed Aug 15 06:06:43 2012 (r239280) @@ -0,0 +1,16 @@ +# nVidia Tegra 2 common options +#$FreeBSD$ + +cpu CPU_CORTEXA +makeoption ARM_LITTLE_ENDIAN + +options PHYSADDR=0x00000000 + +makeoptions KERNPHYSADDR=0x00200000 +options KERNPHYSADDR=0x00200000 +makeoptions KERNVIRTADDR=0xc0200000 +options KERNVIRTADDR=0xc0200000 + +options STARTUP_PAGETABLE_ADDR=0x00100000 + +files "../tegra/files.tegra2" Added: head/sys/arm/tegra/tegra2_machdep.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/tegra/tegra2_machdep.c Wed Aug 15 06:06:43 2012 (r239280) @@ -0,0 +1,705 @@ +/*- + * Copyright (c) 2011 Damjan Marion. + * Copyright (c) 1994-1998 Mark Brinicombe. + * Copyright (c) 1994 Brini. + * All rights reserved. + * + * This code is derived from software written for Brini by Mark Brinicombe + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: FreeBSD: //depot/projects/arm/src/sys/arm/mv/mv_machdep.c + */ + +#include "opt_ddb.h" +#include "opt_platform.h" + +#include +__FBSDID("$FreeBSD$"); + +#define _ARM32_BUS_DMA_PRIVATE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* FIXME move to tegrareg.h */ +#define TEGRA2_BASE 0xE0000000 /* KVM base for peripherials */ +#define TEGRA2_UARTA_VA_BASE 0xE1006000 +#define TEGRA2_UARTA_PA_BASE 0x70006000 + + + + + +#define KERNEL_PT_MAX 78 +#define IRQ_STACK_SIZE 1 +#define ABT_STACK_SIZE 1 +#define UND_STACK_SIZE 1 +#define FIQ_STACK_SIZE 1 + +#define PTE_DEVICE 3 + +#define debugf(fmt, args...) printf(fmt, ##args) + +#define KERNEL_PT_SYS 0 /* Page table for mapping proc0 zero page */ +#define KERNEL_PT_KERN 1 +#define KERNEL_PT_KERN_NUM 22 +#define KERNEL_PT_AFKERNEL KERNEL_PT_KERN + KERNEL_PT_KERN_NUM /* L2 table for mapping after kernel */ +#define KERNEL_PT_AFKERNEL_NUM 5 + +/* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ +#define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) + +#ifdef DDB +extern vm_offset_t ksym_start, ksym_end; +#endif + + +extern unsigned char kernbase[]; +extern unsigned char _etext[]; +extern unsigned char _edata[]; +extern unsigned char __bss_start[]; +extern unsigned char _end[]; + +extern u_int data_abort_handler_address; +extern u_int prefetch_abort_handler_address; +extern u_int undefined_handler_address; + +struct pv_addr kernel_pt_table[KERNEL_PT_MAX]; + + + +static struct pv_addr kernel_l1pt; /* Level-1 page table entry */ + +/* Physical and virtual addresses for some global pages */ + +vm_paddr_t phys_avail[10]; +vm_paddr_t dump_avail[4]; + +static struct mem_region availmem_regions[FDT_MEM_REGIONS]; +static int availmem_regions_sz; + +extern vm_offset_t pmap_bootstrap_lastaddr; + +vm_offset_t pmap_bootstrap_lastaddr; + +const struct pmap_devmap *pmap_devmap_bootstrap_table; +struct pv_addr systempage; +struct pv_addr msgbufpv; +static struct pv_addr fiqstack; +static struct pv_addr irqstack; +static struct pv_addr undstack; +static struct pv_addr abtstack; +static struct pv_addr kernelstack; + +#define PHYS2VIRT(x) ((x - KERNPHYSADDR) + KERNVIRTADDR) +#define VIRT2PHYS(x) ((x - KERNVIRTADDR) + KERNPHYSADDR) + +static int platform_devmap_init(void); + +static char * +kenv_next(char *cp) +{ + + if (cp != NULL) { + while (*cp != 0) + cp++; + cp++; + if (*cp == 0) + cp = NULL; + } + return (cp); +} + + +/* + * Early Print + */ + +#define DEBUGBUF_SIZE 256 +#define LSR_THRE 0x20 /* Xmit holding register empty */ +#define EARLY_UART_VA_BASE TEGRA2_UARTA_VA_BASE +#define EARLY_UART_PA_BASE TEGRA2_UARTA_PA_BASE +char debugbuf[DEBUGBUF_SIZE]; + +void early_putstr(unsigned char *str) +{ + volatile uint8_t *p_lsr = (volatile uint8_t*) (EARLY_UART_VA_BASE + 0x14); + volatile uint8_t *p_thr = (volatile uint8_t*) (EARLY_UART_VA_BASE + 0x00); + + do { + while ((*p_lsr & LSR_THRE) == 0); + *p_thr = *str; + + if (*str == '\n') + { + while ((*p_lsr & LSR_THRE) == 0); + *p_thr = '\r'; + } + } while (*++str != '\0'); +} + +#if (STARTUP_PAGETABLE_ADDR < PHYSADDR) || \ + (STARTUP_PAGETABLE_ADDR > (PHYSADDR + (64 * 1024 * 1024))) +#error STARTUP_PAGETABLE_ADDR is not within init. MMU table, early print support not possible +#endif + +void +early_print_init(void) +{ + volatile uint32_t *mmu_tbl = (volatile uint32_t*)STARTUP_PAGETABLE_ADDR; + mmu_tbl[(EARLY_UART_VA_BASE >> L1_S_SHIFT)] = L1_TYPE_S | L1_S_AP(AP_KRW) | (EARLY_UART_PA_BASE & L1_S_FRAME); + __asm __volatile ("mcr p15, 0, r0, c8, c7, 0"); /* invalidate I+D TLBs */ + __asm __volatile ("mcr p15, 0, r0, c7, c10, 4"); /* drain the write buffer */ + early_putstr("Early printf initialise\n"); +} + +#define EPRINTF(args...) \ + snprintf(debugbuf,DEBUGBUF_SIZE, ##args ); \ + early_putstr(debugbuf); + +static void +print_kenv(void) +{ + int len; + char *cp; + + debugf("loader passed (static) kenv:\n"); + if (kern_envp == NULL) { + debugf(" no env, null ptr\n"); + return; + } + debugf(" kern_envp = 0x%08x\n", (uint32_t)kern_envp); + + len = 0; + for (cp = kern_envp; cp != NULL; cp = kenv_next(cp)) + debugf(" %x %s\n", (uint32_t)cp, cp); +} + +static void +print_kernel_section_addr(void) +{ + + debugf("kernel image addresses:\n"); + debugf(" kernbase = 0x%08x\n", (uint32_t)kernbase); + debugf(" _etext (sdata) = 0x%08x\n", (uint32_t)_etext); + debugf(" _edata = 0x%08x\n", (uint32_t)_edata); + debugf(" __bss_start = 0x%08x\n", (uint32_t)__bss_start); + debugf(" _end = 0x%08x\n", (uint32_t)_end); +} + +static void +physmap_init(void) +{ + int i, j, cnt; + vm_offset_t phys_kernelend, kernload; + uint32_t s, e, sz; + struct mem_region *mp, *mp1; + + phys_kernelend = KERNPHYSADDR + (virtual_avail - KERNVIRTADDR); + kernload = KERNPHYSADDR; + + /* + * Remove kernel physical address range from avail + * regions list. Page align all regions. + * Non-page aligned memory isn't very interesting to us. + * Also, sort the entries for ascending addresses. + */ + sz = 0; + cnt = availmem_regions_sz; + debugf("processing avail regions:\n"); + for (mp = availmem_regions; mp->mr_size; mp++) { + s = mp->mr_start; + e = mp->mr_start + mp->mr_size; + debugf(" %08x-%08x -> ", s, e); + /* Check whether this region holds all of the kernel. */ + if (s < kernload && e > phys_kernelend) { + availmem_regions[cnt].mr_start = phys_kernelend; + availmem_regions[cnt++].mr_size = e - phys_kernelend; + e = kernload; + } + /* Look whether this regions starts within the kernel. */ + if (s >= kernload && s < phys_kernelend) { + if (e <= phys_kernelend) + goto empty; + s = phys_kernelend; + } + /* Now look whether this region ends within the kernel. */ + if (e > kernload && e <= phys_kernelend) { + if (s >= kernload) { + goto empty; + } + e = kernload; + } + /* Now page align the start and size of the region. */ + s = round_page(s); + e = trunc_page(e); + if (e < s) + e = s; + sz = e - s; + debugf("%08x-%08x = %x\n", s, e, sz); + + /* Check whether some memory is left here. */ + if (sz == 0) { + empty: + printf("skipping\n"); + bcopy(mp + 1, mp, + (cnt - (mp - availmem_regions)) * sizeof(*mp)); + cnt--; + mp--; + continue; + } + + /* Do an insertion sort. */ + for (mp1 = availmem_regions; mp1 < mp; mp1++) + if (s < mp1->mr_start) + break; + if (mp1 < mp) { + bcopy(mp1, mp1 + 1, (char *)mp - (char *)mp1); + mp1->mr_start = s; + mp1->mr_size = sz; + } else { + mp->mr_start = s; + mp->mr_size = sz; + } + } + availmem_regions_sz = cnt; + + /* Fill in phys_avail table, based on availmem_regions */ + debugf("fill in phys_avail:\n"); + for (i = 0, j = 0; i < availmem_regions_sz; i++, j += 2) { + + debugf(" region: 0x%08x - 0x%08x (0x%08x)\n", + availmem_regions[i].mr_start, + availmem_regions[i].mr_start + availmem_regions[i].mr_size, + availmem_regions[i].mr_size); + + phys_avail[j] = availmem_regions[i].mr_start; + phys_avail[j + 1] = availmem_regions[i].mr_start + + availmem_regions[i].mr_size; + } + phys_avail[j] = 0; + phys_avail[j + 1] = 0; +} + +#define TEGRA2_CLK_RST_PA_BASE 0x60006000 + +#define TEGRA2_CLK_RST_OSC_FREQ_DET_REG 0x58 +#define TEGRA2_CLK_RST_OSC_FREQ_DET_STAT_REG 0x5C +#define OSC_FREQ_DET_TRIG (1<<31) +#define OSC_FREQ_DET_BUSY (1<<31) + +static int +tegra2_osc_freq_detect(void) +{ + bus_space_handle_t bsh; + uint32_t c; + uint32_t r=0; + int i=0; + + struct { + uint32_t val; + uint32_t freq; + } freq_det_cnts[] = { + { 732, 12000000 }, + { 794, 13000000 }, + {1172, 19200000 }, + {1587, 26000000 }, + { -1, 0 }, + }; + + printf("Measuring...\n"); + bus_space_map(fdtbus_bs_tag,TEGRA2_CLK_RST_PA_BASE, 0x1000, 0, &bsh); + + bus_space_write_4(fdtbus_bs_tag, bsh, TEGRA2_CLK_RST_OSC_FREQ_DET_REG, + OSC_FREQ_DET_TRIG | 1 ); + do {} while (bus_space_read_4(fdtbus_bs_tag, bsh, + TEGRA2_CLK_RST_OSC_FREQ_DET_STAT_REG) & OSC_FREQ_DET_BUSY); + + c = bus_space_read_4(fdtbus_bs_tag, bsh, TEGRA2_CLK_RST_OSC_FREQ_DET_STAT_REG); + + while (freq_det_cnts[i].val > 0) { + if (((freq_det_cnts[i].val - 3) < c) && (c < (freq_det_cnts[i].val + 3))) + r = freq_det_cnts[i].freq; + i++; + } + printf("c=%u r=%u\n",c,r ); + bus_space_free(fdtbus_bs_tag, bsh, 0x1000); + return r; +} + +void * +initarm(void *mdp, void *unused __unused) +{ + vm_offset_t freemempos; + vm_offset_t dtbp; + vm_offset_t lastaddr; + vm_offset_t l2_start; + struct pv_addr dpcpu; + uint32_t memsize = 0; + u_int l1pagetable; + uint32_t l2size; + int i = 0; + int j = 0; + void *kmdp; + + lastaddr = 0; + dtbp = (vm_offset_t)NULL; + + /* FIXME */ + early_print_init(); + +#define PHYS2VIRT(x) ((x - KERNPHYSADDR) + KERNVIRTADDR) +#define VIRT2PHYS(x) ((x - KERNVIRTADDR) + KERNPHYSADDR) + +#define VALLOC_PAGES(var, np) \ + ALLOC_PAGES((var).pv_pa, (np)); \ + (var).pv_va = PHYS2VIRT((var).pv_pa); + +#define ALLOC_PAGES(var, np) \ + (var) = freemempos; \ + freemempos += (np * PAGE_SIZE); \ + memset((char *)(var), 0, ((np) * PAGE_SIZE)); + +#define ROUND_L_PAGE(x) (((x) + L2_L_OFFSET) & L2_L_FRAME) + + set_cpufuncs(); + + /* + * Mask metadata pointer: it is supposed to be on page boundary. If + * the first argument (mdp) doesn't point to a valid address the + * bootloader must have passed us something else than the metadata + * ptr... In this case we want to fall back to some built-in settings. + */ + mdp = (void *)((uint32_t)mdp & ~PAGE_MASK); + + /* Parse metadata and fetch parameters */ + if (mdp != NULL) { + preload_metadata = mdp; + kmdp = preload_search_by_type("elf kernel"); + if (kmdp != NULL) { + boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int); + kern_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *); + dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t); + lastaddr = MD_FETCH(kmdp, MODINFOMD_KERNEND, + vm_offset_t); +#ifdef DDB + ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t); + ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t); +#endif + } + + preload_addr_relocate = KERNVIRTADDR - KERNPHYSADDR; + } else { + /* Fall back to hardcoded metadata. */ + lastaddr = fake_preload_metadata(); + } + +#if defined(FDT_DTB_STATIC) + /* + * In case the device tree blob was not retrieved (from metadata) try + * to use the statically embedded one. + */ + if (dtbp == (vm_offset_t)NULL) + dtbp = (vm_offset_t)&fdt_static_dtb; +#endif + + if (OF_install(OFW_FDT, 0) == FALSE) + while (1); + + if (OF_init((void *)dtbp) != 0) + while (1); + + /* Grab physical memory regions information from device tree. */ + if (fdt_get_mem_regions(availmem_regions, &availmem_regions_sz, + &memsize) != 0) + while(1); + + if (fdt_immr_addr(TEGRA2_BASE) != 0) /* FIXME ???? */ + while (1); + + pmap_bootstrap_lastaddr = fdt_immr_va - ARM_NOCACHE_KVA_SIZE; + + pcpu0_init(); + + /* Calculate number of L2 tables needed for mapping vm_page_array */ + l2size = (memsize / PAGE_SIZE) * sizeof(struct vm_page); + l2size = (l2size >> L1_S_SHIFT) + 1; + + /* + * Add one table for end of kernel map, one for stacks, msgbuf and + * L1 and L2 tables map and one for vectors map and make it div by 4. + */ + l2size += 3; + l2size = (l2size + 3) & ~3; + + freemempos = VIRT2PHYS(ROUND_L_PAGE(lastaddr)); + + VALLOC_PAGES(kernel_l1pt, L1_TABLE_SIZE / PAGE_SIZE); + + for (i = 0; i < l2size; ++i) { + if (!(i % (PAGE_SIZE / L2_TABLE_SIZE_REAL))) { + VALLOC_PAGES(kernel_pt_table[i], + L2_TABLE_SIZE / PAGE_SIZE); + j = i; + } else { + kernel_pt_table[i].pv_va = kernel_pt_table[j].pv_va + + L2_TABLE_SIZE_REAL * (i - j); + kernel_pt_table[i].pv_pa = + kernel_pt_table[i].pv_va - KERNVIRTADDR + + KERNPHYSADDR; + + } + } + /* + * Allocate a page for the system page mapped to 0x00000000 + * or 0xffff0000. This page will just contain the system vectors + * and can be shared by all processes. + */ + + VALLOC_PAGES(systempage, 1); + EPRINTF("systempage PA:0x%08x VA:0x%08x\n", systempage.pv_pa, systempage.pv_va); + + /* Allocate dynamic per-cpu area. */ + VALLOC_PAGES(dpcpu, DPCPU_SIZE / PAGE_SIZE); + dpcpu_init((void *)dpcpu.pv_va, 0); + + /* Allocate stacks for all modes */ + VALLOC_PAGES(fiqstack, FIQ_STACK_SIZE); + VALLOC_PAGES(irqstack, IRQ_STACK_SIZE); + VALLOC_PAGES(abtstack, ABT_STACK_SIZE); + VALLOC_PAGES(undstack, UND_STACK_SIZE); + VALLOC_PAGES(kernelstack, KSTACK_PAGES); + + init_param1(); + + VALLOC_PAGES(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); + + /* + * Now we start construction of the L1 page table + * We start by mapping the L2 page tables into the L1. + * This means that we can replace L1 mappings later on if necessary + */ + l1pagetable = kernel_l1pt.pv_va; + + /* + * Try to map as much as possible of kernel text and data using + * 1MB section mapping and for the rest of initial kernel address + * space use L2 coarse tables. + * + * Link L2 tables for mapping remainder of kernel (modulo 1MB) + * and kernel structures + */ + l2_start = lastaddr & ~(L1_S_OFFSET); + for (i = 0 ; i < l2size - 1; i++) + pmap_link_l2pt(l1pagetable, l2_start + i * L1_S_SIZE, + &kernel_pt_table[i]); + + pmap_curmaxkvaddr = l2_start + (l2size - 1) * L1_S_SIZE; + + /* Map kernel code and data */ + pmap_map_chunk(l1pagetable, KERNVIRTADDR, KERNPHYSADDR, + (((uint32_t)(lastaddr) - KERNVIRTADDR) + PAGE_MASK) & ~PAGE_MASK, + VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); + + /* Map L1 directory and allocated L2 page tables */ + pmap_map_chunk(l1pagetable, kernel_l1pt.pv_va, kernel_l1pt.pv_pa, + L1_TABLE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE); + + pmap_map_chunk(l1pagetable, kernel_pt_table[0].pv_va, + kernel_pt_table[0].pv_pa, + L2_TABLE_SIZE_REAL * l2size, + VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE); + + /* Map allocated DPCPU, stacks and msgbuf */ + pmap_map_chunk(l1pagetable, dpcpu.pv_va, dpcpu.pv_pa, + PHYS2VIRT(freemempos) - dpcpu.pv_va, + VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); + + /* Link and map the vector page */ + pmap_link_l2pt(l1pagetable, ARM_VECTORS_HIGH, + &kernel_pt_table[l2size - 1]); + pmap_map_entry(l1pagetable, ARM_VECTORS_HIGH, systempage.pv_pa, + VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE, PTE_CACHE); + + /* Map pmap_devmap[] entries */ + if (platform_devmap_init() != 0) + while (1); + pmap_devmap_bootstrap(l1pagetable, pmap_devmap_bootstrap_table); + + /* Switch L1 table */ + cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT); + setttb(kernel_l1pt.pv_pa); + cpu_tlb_flushID(); + cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2))); + + OF_interpret("perform-fixup", 0); + + cninit(); + physmem = memsize / PAGE_SIZE; + + debugf("initarm: console initialized\n"); + debugf(" arg1 mdp = 0x%08x\n", (uint32_t)mdp); + debugf(" boothowto = 0x%08x\n", boothowto); + printf(" dtbp = 0x%08x\n", (uint32_t)dtbp); + print_kernel_section_addr(); + print_kenv(); + + /* + * Pages were allocated during the secondary bootstrap for the + * stacks for different CPU modes. + * We must now set the r13 registers in the different CPU modes to + * point to these stacks. + * Since the ARM stacks use STMFD etc. we must set r13 to the top end + * of the stack memory. + */ + cpu_control(CPU_CONTROL_MMU_ENABLE, CPU_CONTROL_MMU_ENABLE); + set_stackptr(PSR_FIQ32_MODE, + fiqstack.pv_va + FIQ_STACK_SIZE * PAGE_SIZE); + set_stackptr(PSR_IRQ32_MODE, + irqstack.pv_va + IRQ_STACK_SIZE * PAGE_SIZE); + set_stackptr(PSR_ABT32_MODE, + abtstack.pv_va + ABT_STACK_SIZE * PAGE_SIZE); + set_stackptr(PSR_UND32_MODE, + undstack.pv_va + UND_STACK_SIZE * PAGE_SIZE); + + /* + * We must now clean the cache again.... + * Cleaning may be done by reading new data to displace any + * dirty data in the cache. This will have happened in setttb() + * but since we are boot strapping the addresses used for the read + * may have just been remapped and thus the cache could be out + * of sync. A re-clean after the switch will cure this. + * After booting there are no gross relocations of the kernel thus + * this problem will not occur after initarm(). + */ + cpu_idcache_wbinv_all(); + + /* Set stack for exception handlers */ + data_abort_handler_address = (u_int)data_abort_handler; + prefetch_abort_handler_address = (u_int)prefetch_abort_handler; + undefined_handler_address = (u_int)undefinedinstruction_bounce; + undefined_init(); + + init_proc0(kernelstack.pv_va); + arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); + + dump_avail[0] = 0; + dump_avail[1] = memsize; + dump_avail[2] = 0; + dump_avail[3] = 0; + + pmap_bootstrap(PHYS2VIRT(freemempos), pmap_bootstrap_lastaddr, &kernel_l1pt); + msgbufp = (void *)msgbufpv.pv_va; + msgbufinit(msgbufp, msgbufsize); + mutex_init(); + + /* + * Prepare map of physical memory regions available to vm subsystem. + */ + + physmap_init(); + + /* Do basic tuning, hz etc */ + init_param2(physmem); + kdb_init(); + return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP - + sizeof(struct pcb))); +} + +#define FDT_DEVMAP_MAX (1 + 2 + 1 + 1) /* FIXME */ +static struct pmap_devmap fdt_devmap[FDT_DEVMAP_MAX] = { + { 0, 0, 0, 0, 0, } +}; + +/* + * Construct pmap_devmap[] with DT-derived config data. + */ +static int +platform_devmap_init(void) +{ + int i = 0; + fdt_devmap[i].pd_va = 0xe0000000; + fdt_devmap[i].pd_pa = 0x70000000; + fdt_devmap[i].pd_size = 0x100000; + fdt_devmap[i].pd_prot = VM_PROT_READ | VM_PROT_WRITE; + fdt_devmap[i].pd_cache = PTE_NOCACHE; + i++; + + pmap_devmap_bootstrap_table = &fdt_devmap[0]; + return (0); +} + + +struct arm32_dma_range * +bus_dma_get_range(void) +{ + + return (NULL); +} + +int +bus_dma_get_range_nb(void) +{ + + return (0); +} Added: head/sys/boot/fdt/dts/trimslice.dts ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/boot/fdt/dts/trimslice.dts Wed Aug 15 06:06:43 2012 (r239280) @@ -0,0 +1,143 @@ +/*- + * Copyright (c) 2011 The FreeBSD Foundation + * All rights reserved. + * + * Developed by Damjan Marion + * + * 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. *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 06:31:33 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BA939106564A; Wed, 15 Aug 2012 06:31:33 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A03D78FC14; Wed, 15 Aug 2012 06:31:33 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F6VXNI013213; Wed, 15 Aug 2012 06:31:33 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F6VXMV013205; Wed, 15 Aug 2012 06:31:33 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150631.q7F6VXMV013205@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 06:31:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239281 - in head/sys: arm/conf arm/ti arm/ti/am335x arm/ti/cpsw arm/ti/omap3 arm/ti/omap4 arm/ti/omap4/pandaboard arm/ti/twl arm/ti/usb boot/fdt/dts dev/mmc modules modules/cpsw X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 06:31:33 -0000 Author: gonzo Date: Wed Aug 15 06:31:32 2012 New Revision: 239281 URL: http://svn.freebsd.org/changeset/base/239281 Log: Merging of projects/armv6, part 10 - Support for Texas Instruments SoCs: - AM335x - OMAP4 - Kernel configs, DTS for Beaglebone and Pandaboard Submitted by: Ben Gray, Damjan Marion Added: head/sys/arm/conf/BEAGLEBONE (contents, props changed) head/sys/arm/conf/PANDABOARD (contents, props changed) head/sys/arm/conf/PANDABOARD.hints (contents, props changed) head/sys/arm/ti/ head/sys/arm/ti/aintc.c (contents, props changed) head/sys/arm/ti/am335x/ head/sys/arm/ti/am335x/am335x_dmtimer.c (contents, props changed) head/sys/arm/ti/am335x/am335x_pmic.c (contents, props changed) head/sys/arm/ti/am335x/am335x_prcm.c (contents, props changed) head/sys/arm/ti/am335x/am335x_reg.h (contents, props changed) head/sys/arm/ti/am335x/am335x_scm_padconf.c (contents, props changed) head/sys/arm/ti/am335x/files.am335x (contents, props changed) head/sys/arm/ti/am335x/files.beaglebone (contents, props changed) head/sys/arm/ti/am335x/std.am335x (contents, props changed) head/sys/arm/ti/am335x/std.beaglebone (contents, props changed) head/sys/arm/ti/bus_space.c (contents, props changed) head/sys/arm/ti/common.c (contents, props changed) head/sys/arm/ti/cpsw/ head/sys/arm/ti/cpsw/if_cpsw.c (contents, props changed) head/sys/arm/ti/cpsw/if_cpswreg.h (contents, props changed) head/sys/arm/ti/cpsw/if_cpswvar.h (contents, props changed) head/sys/arm/ti/files.ti (contents, props changed) head/sys/arm/ti/omap3/ head/sys/arm/ti/omap3/omap3_reg.h (contents, props changed) head/sys/arm/ti/omap4/ head/sys/arm/ti/omap4/files.omap4 (contents, props changed) head/sys/arm/ti/omap4/omap4_l2cache.c (contents, props changed) head/sys/arm/ti/omap4/omap4_mp.c (contents, props changed) head/sys/arm/ti/omap4/omap4_prcm_clks.c (contents, props changed) head/sys/arm/ti/omap4/omap4_reg.h (contents, props changed) head/sys/arm/ti/omap4/omap4_scm_padconf.c (contents, props changed) head/sys/arm/ti/omap4/omap4_smc.h (contents, props changed) head/sys/arm/ti/omap4/omap4var.h (contents, props changed) head/sys/arm/ti/omap4/pandaboard/ head/sys/arm/ti/omap4/pandaboard/files.pandaboard (contents, props changed) head/sys/arm/ti/omap4/pandaboard/pandaboard.c (contents, props changed) head/sys/arm/ti/omap4/pandaboard/std.pandaboard (contents, props changed) head/sys/arm/ti/omap4/std.omap4 (contents, props changed) head/sys/arm/ti/std.ti (contents, props changed) head/sys/arm/ti/ti_cpuid.c (contents, props changed) head/sys/arm/ti/ti_cpuid.h (contents, props changed) head/sys/arm/ti/ti_edma3.c (contents, props changed) head/sys/arm/ti/ti_edma3.h (contents, props changed) head/sys/arm/ti/ti_gpio.c (contents, props changed) head/sys/arm/ti/ti_i2c.c (contents, props changed) head/sys/arm/ti/ti_i2c.h (contents, props changed) head/sys/arm/ti/ti_machdep.c (contents, props changed) head/sys/arm/ti/ti_mmchs.c (contents, props changed) head/sys/arm/ti/ti_mmchs.h (contents, props changed) head/sys/arm/ti/ti_prcm.c (contents, props changed) head/sys/arm/ti/ti_prcm.h (contents, props changed) head/sys/arm/ti/ti_scm.c (contents, props changed) head/sys/arm/ti/ti_scm.h (contents, props changed) head/sys/arm/ti/ti_sdma.c (contents, props changed) head/sys/arm/ti/ti_sdma.h (contents, props changed) head/sys/arm/ti/ti_sdmareg.h (contents, props changed) head/sys/arm/ti/ti_smc.S (contents, props changed) head/sys/arm/ti/ti_smc.h (contents, props changed) head/sys/arm/ti/tivar.h (contents, props changed) head/sys/arm/ti/twl/ head/sys/arm/ti/twl/twl.c (contents, props changed) head/sys/arm/ti/twl/twl.h (contents, props changed) head/sys/arm/ti/twl/twl_clks.c (contents, props changed) head/sys/arm/ti/twl/twl_clks.h (contents, props changed) head/sys/arm/ti/twl/twl_vreg.c (contents, props changed) head/sys/arm/ti/twl/twl_vreg.h (contents, props changed) head/sys/arm/ti/usb/ head/sys/arm/ti/usb/omap_ehci.c (contents, props changed) head/sys/arm/ti/usb/omap_usb.h (contents, props changed) head/sys/boot/fdt/dts/beaglebone.dts (contents, props changed) head/sys/boot/fdt/dts/pandaboard.dts (contents, props changed) head/sys/modules/cpsw/ head/sys/modules/cpsw/Makefile (contents, props changed) Modified: head/sys/dev/mmc/mmc.c head/sys/modules/Makefile Added: head/sys/arm/conf/BEAGLEBONE ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/BEAGLEBONE Wed Aug 15 06:31:32 2012 (r239281) @@ -0,0 +1,126 @@ +# BEAGLEBONE -- Custom configuration for the BeagleBone ARM development +# platform, check out http://www.beagleboard.org/bone +# +# For more information on this file, please read 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$ + +ident BEAGLEBONE + +include "../ti/am335x/std.beaglebone" + +makeoptions MODULES_OVERRIDE="" +makeoptions WITHOUT_MODULES="ahc" + +options HZ=100 +options SCHED_4BSD #4BSD scheduler +options INET #InterNETworking +options INET6 #IPv6 communications protocols +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 MSDOSFS #MSDOS Filesystem +options CD9660 #ISO 9660 Filesystem +options PROCFS #Process filesystem (requires PSEUDOFS) +options PSEUDOFS #Pseudo-filesystem framework +options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!] +options SCSI_DELAY=5000 #Delay (in ms) before probing SCSI +options KTRACE #ktrace(1) 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 KBD_INSTALL_CDEV # install a CDEV entry in /dev +options PREEMPTION + +# Debugging +makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +options BREAK_TO_DEBUGGER +#options VERBOSE_SYSINIT #Enable verbose sysinit messages +options KDB +options DDB #Enable the kernel debugger +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 DIAGNOSTIC + +# NFS support +#options NFSCL +#options NFSSERVER #Network Filesystem Server +#options NFSCLIENT #Network Filesystem Client + +# Uncomment this for NFS root +#options NFS_ROOT #NFS usable as /, requires NFSCLIENT +#options BOOTP_NFSROOT +#options BOOTP_COMPAT +#options BOOTP +#options BOOTP_NFSV3 +#options BOOTP_WIRED_TO=cpsw0 + + +# MMC/SD/SDIO card slot support +device mmc # mmc/sd bus +device mmcsd # mmc/sd flash cards + +# Boot device is 2nd slice on MMC/SD card +options ROOTDEVNAME=\"ufs:mmcsd0s2\" + +# Console and misc +device uart +device uart_ns8250 +device pty +device snp +device md +device random # Entropy device + +# I2C support +device iicbus +device iic +device ti_i2c +device am335x_pmic # AM335x Power Management IC (TPC65217) + +# GPIO +device gpio + +# USB support +device usb +options USB_DEBUG +#options USB_REQ_DEBUG +#options USB_VERBOSE +device musb +device umass +device scbus # SCSI bus (required for SCSI) +device da # Direct Access (disks) + +# Ethernet +device loop +device ether +device mii +device smscphy +device cpsw +device bpf + +# USB ethernet support, requires miibus +device miibus +device axe # ASIX Electronics USB Ethernet + +# Flattened Device Tree +options FDT +options FDT_DTB_STATIC +makeoptions FDT_DTS_FILE=beaglebone.dts + Added: head/sys/arm/conf/PANDABOARD ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/PANDABOARD Wed Aug 15 06:31:32 2012 (r239281) @@ -0,0 +1,144 @@ +# PANDABOARD -- Custom configuration for the PandaBoard ARM development +# platform, check out www.pandaboard.org +# +# For more information on this file, please read 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$ + +ident PANDABOARD + + + +# This probably wants to move somewhere else. Maybe we can create a basic +# OMAP4340 config, then make a PANDABOARD config that includes the basic one, +# adds the start addresses and custom devices plus pulls in this hints file. + +hints "PANDABOARD.hints" + +include "../ti/omap4/pandaboard/std.pandaboard" + +#To statically compile in device wiring instead of /boot/device.hints +makeoptions MODULES_OVERRIDE="" +makeoptions WITHOUT_MODULES="ahc" + +makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +options HZ=100 + +options SCHED_4BSD #4BSD scheduler +options INET #InterNETworking +#options INET6 #IPv6 communications protocols +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 NFSCLIENT #Network Filesystem Client +device snp +#options NFSCL +#options NFSSERVER #Network Filesystem Server +options NFS_ROOT #NFS usable as /, requires NFSCLIENT +options BREAK_TO_DEBUGGER +options BOOTP_NFSROOT +options BOOTP_COMPAT +options BOOTP +options BOOTP_NFSV3 +options BOOTP_WIRED_TO=ue0 +options MSDOSFS #MSDOS Filesystem +#options CD9660 #ISO 9660 Filesystem +#options PROCFS #Process filesystem (requires PSEUDOFS) +options PSEUDOFS #Pseudo-filesystem framework +options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!] +options SCSI_DELAY=5000 #Delay (in ms) before probing SCSI +options KTRACE #ktrace(1) 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 KBD_INSTALL_CDEV # install a CDEV entry in /dev + +options PREEMPTION + +# MMC/SD/SDIO Card slot support +device mmc # mmc/sd bus +device mmcsd # mmc/sd flash cards + +# I2C support +device iicbus +device iic +device ti_i2c + +device loop +device ether +device mii +device smc +device smcphy +device uart +device uart_ns8250 + +device gpio + +device pty + +device pl310 # PL310 L2 cache controller +# Debugging for use in -current +#options VERBOSE_SYSINIT #Enable verbose sysinit messages +options KDB +options DDB #Enable the kernel debugger +#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 DIAGNOSTIC + +device md + +# The following enables MFS as root, this seems similar to an initramfs or initrd +# as used in Linux. +# options MD_ROOT +# options MD_ROOT_SIZE=7560 + +device random # Entropy device + +# USB support +device usb +options USB_DEBUG +#options USB_REQ_DEBUG +#options USB_VERBOSE +device ohci +device ehci +device umass +device scbus # SCSI bus (required for SCSI) +device da # Direct Access (disks) + + +# USB Ethernet support, requires miibus +device miibus +# device axe # ASIX Electronics USB Ethernet +device smsc # SMSC LAN95xx USB Ethernet + + +# OMAP-specific devices +device ti_sdma +device twl +device twl_vreg +device twl_clks + +# Flattened Device Tree +options FDT +options FDT_DTB_STATIC +makeoptions FDT_DTS_FILE=pandaboard.dts + +# device vfp # vfp/neon +# options ARM_VFP_SUPPORT # vfp/neon Added: head/sys/arm/conf/PANDABOARD.hints ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/PANDABOARD.hints Wed Aug 15 06:31:32 2012 (r239281) @@ -0,0 +1,61 @@ +# $FreeBSD$ + +# USB ECHI + +# +# TI OMAP Power Management and System Companion Device sitting on the I2C bus +# hint.tps65950.0.at="iicbus0" +# hint.tps65950.0.addr=0xd0 + + +# +# Defines the GPIO pin used to detect the Write Protect stat of the MMC/SD card. +#hint.omap_mmc.0.wp_gpio="23" + + +# +# If 'phy_reset" is set, then the accompaning PHY is reset using one of the +# GPIO pins. If the reset GPIO pin is not -1 then the pin will be toggled when +# the USB driver is loaded. +hint.ehci.0.phy_reset="0" + +# +# Sets the PHY mode for the individual ports, the following values are allowed +# - EHCI_HCD_OMAP3_MODE_UNKNOWN 0 +# - EHCI_HCD_OMAP3_MODE_PHY 1 +# - EHCI_HCD_OMAP3_MODE_TLL 2 +hint.ehci.0.phy_mode_0="1" +hint.ehci.0.phy_mode_1="0" +hint.ehci.0.phy_mode_2="0" + +# +# If specified the value indicates a pin that is toggled as a heart-beat. The +# heart beat pusle is triggered every 500ms using the system tick timer. +hint.omap_clk.0.heartbeat_gpio="150" + + +# +# Padconf (pinmux) settings - typically this would be set by the boot-loader +# but can be overridden here. These hints are applied to the H/W when the +# SCM module is initialised. +# +# The format is: +# hint.omap_scm.0.padconf.= +# +# Where the options can be one of the following: +# output, input, input_pullup, input_pulldown +# + +# Setup the pin settings for the HS USB Host (PHY mode) +hint.omap4.0.padconf.ag19="usbb1_ulpiphy_stp:output" +hint.omap4.0.padconf.ae18="usbb1_ulpiphy_clk:input_pulldown" +hint.omap4.0.padconf.af19="usbb1_ulpiphy_dir:input_pulldown" +hint.omap4.0.padconf.ae19="usbb1_ulpiphy_nxt:input_pulldown" +hint.omap4.0.padconf.af18="usbb1_ulpiphy_dat0:input_pulldown" +hint.omap4.0.padconf.ag18="usbb1_ulpiphy_dat1:input_pulldown" +hint.omap4.0.padconf.ae17="usbb1_ulpiphy_dat2:input_pulldown" +hint.omap4.0.padconf.af17="usbb1_ulpiphy_dat3:input_pulldown" +hint.omap4.0.padconf.ah17="usbb1_ulpiphy_dat4:input_pulldown" +hint.omap4.0.padconf.ae16="usbb1_ulpiphy_dat5:input_pulldown" +hint.omap4.0.padconf.af16="usbb1_ulpiphy_dat6:input_pulldown" +hint.omap4.0.padconf.ag16="usbb1_ulpiphy_dat7:input_pulldown" Added: head/sys/arm/ti/aintc.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/ti/aintc.c Wed Aug 15 06:31:32 2012 (r239281) @@ -0,0 +1,179 @@ +/*- + * Copyright (c) 2012 Damjan Marion + * All rights reserved. + * + * Based on OMAP3 INTC code by Ben Gray + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#define INTC_REVISION 0x00 +#define INTC_SYSCONFIG 0x10 +#define INTC_SYSSTATUS 0x14 +#define INTC_SIR_IRQ 0x40 +#define INTC_CONTROL 0x48 +#define INTC_THRESHOLD 0x68 +#define INTC_MIR_CLEAR(x) (0x88 + ((x) * 0x20)) +#define INTC_MIR_SET(x) (0x8C + ((x) * 0x20)) +#define INTC_ISR_SET(x) (0x90 + ((x) * 0x20)) +#define INTC_ISR_CLEAR(x) (0x94 + ((x) * 0x20)) + +struct ti_aintc_softc { + device_t sc_dev; + struct resource * aintc_res[3]; + bus_space_tag_t aintc_bst; + bus_space_handle_t aintc_bsh; + uint8_t ver; +}; + +static struct resource_spec ti_aintc_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { -1, 0 } +}; + + +static struct ti_aintc_softc *ti_aintc_sc = NULL; + +#define aintc_read_4(reg) \ + bus_space_read_4(ti_aintc_sc->aintc_bst, ti_aintc_sc->aintc_bsh, reg) +#define aintc_write_4(reg, val) \ + bus_space_write_4(ti_aintc_sc->aintc_bst, ti_aintc_sc->aintc_bsh, reg, val) + + +static int +ti_aintc_probe(device_t dev) +{ + if (!ofw_bus_is_compatible(dev, "ti,aintc")) + return (ENXIO); + device_set_desc(dev, "TI AINTC Interrupt Controller"); + return (BUS_PROBE_DEFAULT); +} + +static int +ti_aintc_attach(device_t dev) +{ + struct ti_aintc_softc *sc = device_get_softc(dev); + uint32_t x; + + sc->sc_dev = dev; + + if (ti_aintc_sc) + return (ENXIO); + + if (bus_alloc_resources(dev, ti_aintc_spec, sc->aintc_res)) { + device_printf(dev, "could not allocate resources\n"); + return (ENXIO); + } + + sc->aintc_bst = rman_get_bustag(sc->aintc_res[0]); + sc->aintc_bsh = rman_get_bushandle(sc->aintc_res[0]); + + ti_aintc_sc = sc; + + x = aintc_read_4(INTC_REVISION); + device_printf(dev, "Revision %u.%u\n",(x >> 4) & 0xF, x & 0xF); + + /* SoftReset */ + aintc_write_4(INTC_SYSCONFIG, 2); + + /* Wait for reset to complete */ + while(!(aintc_read_4(INTC_SYSSTATUS) & 1)); + + /*Set Priority Threshold */ + aintc_write_4(INTC_THRESHOLD, 0xFF); + + return (0); +} + +static device_method_t ti_aintc_methods[] = { + DEVMETHOD(device_probe, ti_aintc_probe), + DEVMETHOD(device_attach, ti_aintc_attach), + { 0, 0 } +}; + +static driver_t ti_aintc_driver = { + "aintc", + ti_aintc_methods, + sizeof(struct ti_aintc_softc), +}; + +static devclass_t ti_aintc_devclass; + +DRIVER_MODULE(aintc, simplebus, ti_aintc_driver, ti_aintc_devclass, 0, 0); + +int +arm_get_next_irq(int last_irq) +{ + uint32_t active_irq; + + if (last_irq != -1) { + aintc_write_4(INTC_ISR_CLEAR(last_irq >> 5), + 1UL << (last_irq & 0x1F)); + aintc_write_4(INTC_CONTROL,1); + } + + /* Get the next active interrupt */ + active_irq = aintc_read_4(INTC_SIR_IRQ); + + /* Check for spurious interrupt */ + if ((active_irq & 0xffffff80)) { + device_printf(ti_aintc_sc->sc_dev, + "Spurious interrupt detected (0x%08x)\n", active_irq); + return -1; + } + + if (active_irq != last_irq) + return active_irq; + else + return -1; +} + +void +arm_mask_irq(uintptr_t nb) +{ + aintc_write_4(INTC_MIR_SET(nb >> 5), (1UL << (nb & 0x1F))); +} + +void +arm_unmask_irq(uintptr_t nb) +{ + aintc_write_4(INTC_MIR_CLEAR(nb >> 5), (1UL << (nb & 0x1F))); +} Added: head/sys/arm/ti/am335x/am335x_dmtimer.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/ti/am335x/am335x_dmtimer.c Wed Aug 15 06:31:32 2012 (r239281) @@ -0,0 +1,385 @@ +/*- + * Copyright (c) 2012 Damjan Marion + * All rights reserved. + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +#define AM335X_NUM_TIMERS 8 + +#define DMTIMER_TIDR 0x00 /* Identification Register */ +#define DMTIMER_TIOCP_CFG 0x10 /* Timer OCP Configuration Reg */ +#define DMTIMER_IQR_EOI 0x20 /* Timer IRQ End-Of-Interrupt Reg */ +#define DMTIMER_IRQSTATUS_RAW 0x24 /* Timer IRQSTATUS Raw Reg */ +#define DMTIMER_IRQSTATUS 0x28 /* Timer IRQSTATUS Reg */ +#define DMTIMER_IRQENABLE_SET 0x2c /* Timer IRQSTATUS Set Reg */ +#define DMTIMER_IRQENABLE_CLR 0x30 /* Timer IRQSTATUS Clear Reg */ +#define DMTIMER_IRQWAKEEN 0x34 /* Timer IRQ Wakeup Enable Reg */ +#define DMTIMER_TCLR 0x38 /* Timer Control Register */ +#define DMTIMER_TCRR 0x3C /* Timer Counter Register */ +#define DMTIMER_TLDR 0x40 /* Timer Load Reg */ +#define DMTIMER_TTGR 0x44 /* Timer Trigger Reg */ +#define DMTIMER_TWPS 0x48 /* Timer Write Posted Status Reg */ +#define DMTIMER_TMAR 0x4C /* Timer Match Reg */ +#define DMTIMER_TCAR1 0x50 /* Timer Capture Reg */ +#define DMTIMER_TSICR 0x54 /* Timer Synchr. Interface Control Reg */ +#define DMTIMER_TCAR2 0x48 /* Timer Capture Reg */ + + +struct am335x_dmtimer_softc { + struct resource * tmr_mem_res[AM335X_NUM_TIMERS]; + struct resource * tmr_irq_res[AM335X_NUM_TIMERS]; + uint32_t sysclk_freq; + struct am335x_dmtimer { + bus_space_tag_t bst; + bus_space_handle_t bsh; + struct eventtimer et; + } t[AM335X_NUM_TIMERS]; +}; + +static struct resource_spec am335x_dmtimer_mem_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { SYS_RES_MEMORY, 1, RF_ACTIVE }, + { SYS_RES_MEMORY, 2, RF_ACTIVE }, + { SYS_RES_MEMORY, 3, RF_ACTIVE }, + { SYS_RES_MEMORY, 4, RF_ACTIVE }, + { SYS_RES_MEMORY, 5, RF_ACTIVE }, + { SYS_RES_MEMORY, 6, RF_ACTIVE }, + { SYS_RES_MEMORY, 7, RF_ACTIVE }, + { -1, 0, 0 } +}; +static struct resource_spec am335x_dmtimer_irq_spec[] = { + { SYS_RES_IRQ, 0, RF_ACTIVE }, + { SYS_RES_IRQ, 1, RF_ACTIVE }, + { SYS_RES_IRQ, 2, RF_ACTIVE }, + { SYS_RES_IRQ, 3, RF_ACTIVE }, + { SYS_RES_IRQ, 4, RF_ACTIVE }, + { SYS_RES_IRQ, 5, RF_ACTIVE }, + { SYS_RES_IRQ, 6, RF_ACTIVE }, + { SYS_RES_IRQ, 7, RF_ACTIVE }, + { -1, 0, 0 } +}; + +static struct am335x_dmtimer *am335x_dmtimer_tc_tmr = NULL; + +/* Read/Write macros for Timer used as timecounter */ +#define am335x_dmtimer_tc_read_4(reg) \ + bus_space_read_4(am335x_dmtimer_tc_tmr->bst, \ + am335x_dmtimer_tc_tmr->bsh, reg) + +#define am335x_dmtimer_tc_write_4(reg, val) \ + bus_space_write_4(am335x_dmtimer_tc_tmr->bst, \ + am335x_dmtimer_tc_tmr->bsh, reg, val) + +/* Read/Write macros for Timer used as eventtimer */ +#define am335x_dmtimer_et_read_4(reg) \ + bus_space_read_4(tmr->bst, tmr->bsh, reg) + +#define am335x_dmtimer_et_write_4(reg, val) \ + bus_space_write_4(tmr->bst, tmr->bsh, reg, val) + +static unsigned am335x_dmtimer_tc_get_timecount(struct timecounter *); + +static struct timecounter am335x_dmtimer_tc = { + .tc_name = "AM335x Timecouter", + .tc_get_timecount = am335x_dmtimer_tc_get_timecount, + .tc_poll_pps = NULL, + .tc_counter_mask = ~0u, + .tc_frequency = 0, + .tc_quality = 1000, +}; + +static unsigned +am335x_dmtimer_tc_get_timecount(struct timecounter *tc) +{ + return am335x_dmtimer_tc_read_4(DMTIMER_TCRR); +} + +static int +am335x_dmtimer_start(struct eventtimer *et, struct bintime *first, + struct bintime *period) +{ + struct am335x_dmtimer *tmr = (struct am335x_dmtimer *)et->et_priv; + uint32_t load, count; + uint32_t tclr = 0; + + if (period != NULL) { + load = (et->et_frequency * (period->frac >> 32)) >> 32; + if (period->sec > 0) + load += et->et_frequency * period->sec; + tclr |= 2; /* autoreload bit */ + panic("periodic timer not implemented\n"); + } else { + load = 0; + } + + if (first != NULL) { + count = (tmr->et.et_frequency * (first->frac >> 32)) >> 32; + if (first->sec != 0) + count += tmr->et.et_frequency * first->sec; + } else { + count = load; + } + + /* Reset Timer */ + am335x_dmtimer_et_write_4(DMTIMER_TSICR, 2); + + /* Wait for reset to complete */ + while (am335x_dmtimer_et_read_4(DMTIMER_TIOCP_CFG) & 1); + + /* set load value */ + am335x_dmtimer_et_write_4(DMTIMER_TLDR, 0xFFFFFFFE - load); + + /* set counter value */ + am335x_dmtimer_et_write_4(DMTIMER_TCRR, 0xFFFFFFFE - count); + + /* enable overflow interrupt */ + am335x_dmtimer_et_write_4(DMTIMER_IRQENABLE_SET, 2); + + /* start timer(ST) */ + tclr |= 1; + am335x_dmtimer_et_write_4(DMTIMER_TCLR, tclr); + + return (0); +} + +static int +am335x_dmtimer_stop(struct eventtimer *et) +{ + struct am335x_dmtimer *tmr = (struct am335x_dmtimer *)et->et_priv; + + /* Disable all interrupts */ + am335x_dmtimer_et_write_4(DMTIMER_IRQENABLE_CLR, 7); + + /* Stop Timer */ + am335x_dmtimer_et_write_4(DMTIMER_TCLR, 0); + + return (0); +} + +static int +am335x_dmtimer_intr(void *arg) +{ + struct am335x_dmtimer *tmr = (struct am335x_dmtimer *)arg; + + /* Ack interrupt */ + am335x_dmtimer_et_write_4(DMTIMER_IRQSTATUS, 7); + if (tmr->et.et_active) + tmr->et.et_event_cb(&tmr->et, tmr->et.et_arg); + + return (FILTER_HANDLED); +} + +static int +am335x_dmtimer_probe(device_t dev) +{ + struct am335x_dmtimer_softc *sc; + sc = (struct am335x_dmtimer_softc *)device_get_softc(dev); + + if (ofw_bus_is_compatible(dev, "ti,am335x-dmtimer")) { + device_set_desc(dev, "AM335x DMTimer"); + return(BUS_PROBE_DEFAULT); + } + + return (ENXIO); +} + +static int +am335x_dmtimer_attach(device_t dev) +{ + struct am335x_dmtimer_softc *sc = device_get_softc(dev); + void *ihl; + int err; + int i; + + if (am335x_dmtimer_tc_tmr != NULL) + return (EINVAL); + + /* Get the base clock frequency */ + err = ti_prcm_clk_get_source_freq(SYS_CLK, &sc->sysclk_freq); + if (err) { + device_printf(dev, "Error: could not get sysclk frequency\n"); + return (ENXIO); + } + + /* Request the memory resources */ + err = bus_alloc_resources(dev, am335x_dmtimer_mem_spec, + sc->tmr_mem_res); + if (err) { + device_printf(dev, "Error: could not allocate mem resources\n"); + return (ENXIO); + } + + /* Request the IRQ resources */ + err = bus_alloc_resources(dev, am335x_dmtimer_irq_spec, + sc->tmr_irq_res); + if (err) { + device_printf(dev, "Error: could not allocate irq resources\n"); + return (ENXIO); + } + + for(i=0;it[i].bst = rman_get_bustag(sc->tmr_mem_res[i]); + sc->t[i].bsh = rman_get_bushandle(sc->tmr_mem_res[i]); + } + + /* Configure DMTimer2 and DMTimer3 source and enable them */ + err = ti_prcm_clk_set_source(DMTIMER2_CLK, SYSCLK_CLK); + err |= ti_prcm_clk_enable(DMTIMER2_CLK); + err |= ti_prcm_clk_set_source(DMTIMER3_CLK, SYSCLK_CLK); + err |= ti_prcm_clk_enable(DMTIMER3_CLK); + if (err) { + device_printf(dev, "Error: could not setup timer clock\n"); + return (ENXIO); + } + + /* Take DMTimer2 for TC */ + am335x_dmtimer_tc_tmr = &sc->t[2]; + + /* Reset Timer */ + am335x_dmtimer_tc_write_4(DMTIMER_TSICR, 2); + + /* Wait for reset to complete */ + while (am335x_dmtimer_tc_read_4(DMTIMER_TIOCP_CFG) & 1); + + /* set load value */ + am335x_dmtimer_tc_write_4(DMTIMER_TLDR, 0); + + /* set counter value */ + am335x_dmtimer_tc_write_4(DMTIMER_TCRR, 0); + + /* Set Timer autoreload(AR) and start timer(ST) */ + am335x_dmtimer_tc_write_4(DMTIMER_TCLR, 3); + + am335x_dmtimer_tc.tc_frequency = sc->sysclk_freq; + tc_init(&am335x_dmtimer_tc); + + /* Register DMTimer3 as ET */ + + /* Setup and enable the timer */ + if (bus_setup_intr(dev, sc->tmr_irq_res[3], INTR_TYPE_CLK, + am335x_dmtimer_intr, NULL, &sc->t[3], &ihl) != 0) { + bus_release_resources(dev, am335x_dmtimer_irq_spec, + sc->tmr_irq_res); + device_printf(dev, "Unable to setup the clock irq handler.\n"); + return (ENXIO); + } + + sc->t[3].et.et_name = "AM335x Eventtimer0"; + sc->t[3].et.et_flags = ET_FLAGS_PERIODIC | ET_FLAGS_ONESHOT; + sc->t[3].et.et_quality = 1000; + sc->t[3].et.et_frequency = sc->sysclk_freq; + sc->t[3].et.et_min_period.sec = 0; + sc->t[3].et.et_min_period.frac = + ((0x00000002LLU << 32) / sc->t[3].et.et_frequency) << 32; + sc->t[3].et.et_max_period.sec = 0xfffffff0U / sc->t[3].et.et_frequency; + sc->t[3].et.et_max_period.frac = + ((0xfffffffeLLU << 32) / sc->t[3].et.et_frequency) << 32; + sc->t[3].et.et_start = am335x_dmtimer_start; + sc->t[3].et.et_stop = am335x_dmtimer_stop; + sc->t[3].et.et_priv = &sc->t[3]; + et_register(&sc->t[3].et); + + return (0); +} + +static device_method_t am335x_dmtimer_methods[] = { + DEVMETHOD(device_probe, am335x_dmtimer_probe), + DEVMETHOD(device_attach, am335x_dmtimer_attach), + { 0, 0 } +}; + +static driver_t am335x_dmtimer_driver = { + "am335x_dmtimer", + am335x_dmtimer_methods, + sizeof(struct am335x_dmtimer_softc), +}; + +static devclass_t am335x_dmtimer_devclass; + +DRIVER_MODULE(am335x_dmtimer, simplebus, am335x_dmtimer_driver, am335x_dmtimer_devclass, 0, 0); +MODULE_DEPEND(am335x_dmtimer, am335x_prcm, 1, 1, 1); + +void +cpu_initclocks(void) +{ + cpu_initclocks_bsp(); +} + +void +DELAY(int usec) +{ + int32_t counts; + uint32_t first, last; + + if (am335x_dmtimer_tc_tmr == NULL) { + for (; usec > 0; usec--) + for (counts = 200; counts > 0; counts--) + /* Prevent gcc from optimizing out the loop */ + cpufunc_nullop(); + return; + } + + /* Get the number of times to count */ + counts = usec * ((am335x_dmtimer_tc.tc_frequency / 1000000) + 1);; + + first = am335x_dmtimer_tc_read_4(DMTIMER_TCRR); + + while (counts > 0) { + last = am335x_dmtimer_tc_read_4(DMTIMER_TCRR); + if (last>first) { + counts -= (int32_t)(last - first); + } else { + counts -= (int32_t)((0xFFFFFFFF - first) + last); + } + first = last; + } +} + Added: head/sys/arm/ti/am335x/am335x_pmic.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/ti/am335x/am335x_pmic.c Wed Aug 15 06:31:32 2012 (r239281) @@ -0,0 +1,176 @@ +/*- + * Copyright (c) 2012 Damjan Marion + * All rights reserved. + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); +/* +* TPS65217 PMIC companion chip for AM335x SoC sitting on I2C bus +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "iicbus_if.h" + +#define TPS65217A 0x7 +#define TPS65217B 0xF + +/* TPS65217 Reisters */ +#define TPS65217_CHIPID_REG 0x00 +#define TPS65217_STATUS_REG 0x0A + +#define MAX_IIC_DATA_SIZE 2 + + +struct am335x_pmic_softc { + device_t sc_dev; + uint32_t sc_addr; + struct intr_config_hook enum_hook; +}; + +static int +am335x_pmic_read(device_t dev, uint8_t addr, uint8_t *data, uint8_t size) +{ + struct am335x_pmic_softc *sc = device_get_softc(dev); + struct iic_msg msg[] = { + { sc->sc_addr, IIC_M_WR, 1, &addr }, + { sc->sc_addr, IIC_M_RD, size, data }, + }; + return (iicbus_transfer(dev, msg, 2)); +} + +#ifdef notyet +static int +am335x_pmic_write(device_t dev, uint8_t address, uint8_t *data, uint8_t size) +{ + uint8_t buffer[MAX_IIC_DATA_SIZE + 1]; + struct am335x_pmic_softc *sc = device_get_softc(dev); + struct iic_msg msg[] = { + { sc->sc_addr, IIC_M_WR, size + 1, buffer }, + }; + *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 06:48:35 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2AC35106566B; Wed, 15 Aug 2012 06:48:35 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AE6B48FC1A; Wed, 15 Aug 2012 06:48:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F6mYpX015343; Wed, 15 Aug 2012 06:48:34 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F6mYYu015340; Wed, 15 Aug 2012 06:48:34 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208150648.q7F6mYYu015340@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 06:48:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239282 - head/sys/dev/ath X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 06:48:35 -0000 Author: adrian Date: Wed Aug 15 06:48:34 2012 New Revision: 239282 URL: http://svn.freebsd.org/changeset/base/239282 Log: Implement a sequential descriptor ID value and stuff it in the ath_buf. This will be used by the EDMA TX code to assign descriptor IDs in order to provide some debugging. Modified: head/sys/dev/ath/if_ath.c head/sys/dev/ath/if_athvar.h Modified: head/sys/dev/ath/if_ath.c ============================================================================== --- head/sys/dev/ath/if_ath.c Wed Aug 15 06:31:32 2012 (r239281) +++ head/sys/dev/ath/if_ath.c Wed Aug 15 06:48:34 2012 (r239282) @@ -2344,6 +2344,14 @@ _ath_getbuf_locked(struct ath_softc *sc, bf->bf_comp = NULL; /* XXX again, just to be sure */ bzero(&bf->bf_state, sizeof(bf->bf_state)); + /* + * Track the descriptor ID only if doing EDMA + */ + if (sc->sc_isedma) { + bf->bf_descid = sc->sc_txbuf_descid; + sc->sc_txbuf_descid++; + } + return bf; } Modified: head/sys/dev/ath/if_athvar.h ============================================================================== --- head/sys/dev/ath/if_athvar.h Wed Aug 15 06:31:32 2012 (r239281) +++ head/sys/dev/ath/if_athvar.h Wed Aug 15 06:48:34 2012 (r239282) @@ -191,6 +191,7 @@ struct ath_buf { int bf_nseg; HAL_STATUS bf_rxstatus; uint16_t bf_flags; /* status flags (below) */ + uint16_t bf_descid; /* 16 bit descriptor ID */ struct ath_desc *bf_desc; /* virtual addr of desc */ struct ath_desc_status bf_status; /* tx/rx status */ bus_addr_t bf_daddr; /* physical addr of desc */ @@ -576,6 +577,7 @@ struct ath_softc { u_int sc_monpass; /* frames to pass in mon.mode */ struct ath_descdma sc_txdma; /* TX descriptors */ + uint16_t sc_txbuf_descid; ath_bufhead sc_txbuf; /* transmit buffer */ int sc_txbuf_cnt; /* how many buffers avail */ struct ath_descdma sc_txdma_mgmt; /* mgmt TX descriptors */ From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 07:00:34 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E2A0F1065672; Wed, 15 Aug 2012 07:00:34 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CD7228FC0A; Wed, 15 Aug 2012 07:00:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F70YwL016669; Wed, 15 Aug 2012 07:00:34 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F70YEn016667; Wed, 15 Aug 2012 07:00:34 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150700.q7F70YEn016667@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 07:00:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239283 - head/sys/arm/ti X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 07:00:35 -0000 Author: gonzo Date: Wed Aug 15 07:00:34 2012 New Revision: 239283 URL: http://svn.freebsd.org/changeset/base/239283 Log: Specify architecture for assembler Modified: head/sys/arm/ti/ti_smc.S Modified: head/sys/arm/ti/ti_smc.S ============================================================================== --- head/sys/arm/ti/ti_smc.S Wed Aug 15 06:48:34 2012 (r239282) +++ head/sys/arm/ti/ti_smc.S Wed Aug 15 07:00:34 2012 (r239283) @@ -26,6 +26,8 @@ #include __FBSDID("$FreeBSD$"); +.arch armv7a + /* Issue a smc #0 call */ /* r0 and r1 contains the eventual arguments, r2 contains the function ID */ ENTRY(ti_smc0) From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 07:10:11 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 49DC8106566C; Wed, 15 Aug 2012 07:10:11 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 317FF8FC12; Wed, 15 Aug 2012 07:10:11 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F7AB44017662; Wed, 15 Aug 2012 07:10:11 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F7AAv0017659; Wed, 15 Aug 2012 07:10:10 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208150710.q7F7AAv0017659@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 07:10:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239284 - head/sys/dev/ath/ath_rate/sample X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 07:10:11 -0000 Author: adrian Date: Wed Aug 15 07:10:10 2012 New Revision: 239284 URL: http://svn.freebsd.org/changeset/base/239284 Log: Extend the sample mask from 32 bits to 64 bits. This is required to support > MCS15 as more than 32 bit rate entries are suddenly available. This is quite messy - instead of doing typecasts at each mask operation, this should be migrated to use a macro and have that do the typecast. Modified: head/sys/dev/ath/ath_rate/sample/sample.c head/sys/dev/ath/ath_rate/sample/sample.h Modified: head/sys/dev/ath/ath_rate/sample/sample.c ============================================================================== --- head/sys/dev/ath/ath_rate/sample/sample.c Wed Aug 15 07:00:34 2012 (r239283) +++ head/sys/dev/ath/ath_rate/sample/sample.c Wed Aug 15 07:10:10 2012 (r239284) @@ -164,7 +164,7 @@ pick_best_rate(struct ath_node *an, cons { struct sample_node *sn = ATH_NODE_SAMPLE(an); int best_rate_rix, best_rate_tt, best_rate_pct; - uint32_t mask; + uint64_t mask; int rix, tt, pct; best_rate_rix = 0; @@ -251,7 +251,7 @@ pick_sample_rate(struct sample_softc *ss struct sample_node *sn = ATH_NODE_SAMPLE(an); int current_rix, rix; unsigned current_tt; - uint32_t mask; + uint64_t mask; current_rix = sn->current_rix[size_bin]; if (current_rix < 0) { @@ -263,9 +263,9 @@ pick_sample_rate(struct sample_softc *ss current_tt = sn->stats[size_bin][current_rix].average_tx_time; rix = sn->last_sample_rix[size_bin]+1; /* next sample rate */ - mask = sn->ratemask &~ (1<ratemask &~ ((uint64_t) 1<= rt->rateCount) rix = 0; @@ -275,20 +275,20 @@ pick_sample_rate(struct sample_softc *ss /* if the node is HT and the rate isn't HT, don't bother sample */ if ((an->an_node.ni_flags & IEEE80211_NODE_HT) && (rt->info[rix].phy != IEEE80211_T_HT)) { - mask &= ~(1<stats[size_bin][rix].perfect_tx_time > current_tt) { - mask &= ~(1<stats[size_bin][rix].successive_failures > ssc->max_successive_failures && ticks - sn->stats[size_bin][rix].last_tx < ssc->stale_failure_timeout) { - mask &= ~(1<stats[size_bin][rix].average_tx_time * 10 > sn->stats[size_bin][current_rix].average_tx_time * 9) && (ticks - sn->stats[size_bin][rix].last_tx < ssc->stale_failure_timeout)) { - mask &= ~(1< 11M for non-HT rates */ if (! (an->an_node.ni_flags & IEEE80211_NODE_HT)) { if (DOT11RATE(rix) > 2*11 && rix > current_rix + 2) { - mask &= ~(1<rateCount-1; rix > 0; rix--) { - if ((sn->ratemask & (1<ratemask & ((uint64_t) 1<rateCount-1; rix > 0; rix--) { /* Skip rates we can't use */ - if ((sn->ratemask & (1<ratemask & ((uint64_t) 1<sched[rix0]; - KASSERT(rix0 == sched->r0, ("rix0 (%x) != sched->r0 (%x)!\n", rix0, sched->r0)); + KASSERT(rix0 == sched->r0, ("rix0 (%x) != sched->r0 (%x)!\n", + rix0, sched->r0)); rc[0].flags = rc[1].flags = rc[2].flags = rc[3].flags = 0; @@ -919,6 +920,8 @@ ath_rate_tx_complete(struct ath_softc *s if (!mrr || ts->ts_finaltsi == 0) { if (!IS_RATE_DEFINED(sn, final_rix)) { + device_printf(sc->sc_dev, "%s: ts_rate=%d ts_finaltsi=%d\n", + __func__, ts->ts_rate, ts->ts_finaltsi); badrate(ifp, 0, ts->ts_rate, long_tries, status); return; } @@ -1087,6 +1090,7 @@ ath_rate_ctl_reset(struct ath_softc *sc, KASSERT(sc->sc_curmode < IEEE80211_MODE_MAX+2, ("curmode %u", sc->sc_curmode)); + sn->sched = mrr_schedules[sc->sc_curmode]; KASSERT(sn->sched != NULL, ("no mrr schedule for mode %u", sc->sc_curmode)); @@ -1113,7 +1117,7 @@ ath_rate_ctl_reset(struct ath_softc *sc, continue; KASSERT(rix < SAMPLE_MAXRATES, ("mcs %u has rix %d", MCS(x), rix)); - sn->ratemask |= 1<ratemask |= (uint64_t) 1<ratemask |= 1<ratemask |= (uint64_t) 1<ni_vap, IEEE80211_MSG_RATECTL)) { - uint32_t mask; + uint64_t mask; ieee80211_note(ni->ni_vap, "[%6D] %s: size 1600 rate/tt", ni->ni_macaddr, ":", __func__); @@ -1147,7 +1151,7 @@ ath_rate_ctl_reset(struct ath_softc *sc, #endif for (y = 0; y < NUM_PACKET_SIZE_BINS; y++) { int size = bin_to_size(y); - uint32_t mask; + uint64_t mask; sn->packets_sent[y] = 0; sn->current_sample_rix[y] = -1; @@ -1289,10 +1293,10 @@ sample_stats(void *arg, struct ieee80211 struct ath_softc *sc = arg; const HAL_RATE_TABLE *rt = sc->sc_currates; struct sample_node *sn = ATH_NODE_SAMPLE(ATH_NODE(ni)); - uint32_t mask; + uint64_t mask; int rix, y; - printf("\n[%s] refcnt %d static_rix (%d %s) ratemask 0x%x\n", + printf("\n[%s] refcnt %d static_rix (%d %s) ratemask 0x%qx\n", ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni), dot11rate(rt, sn->static_rix), dot11rate_label(rt, sn->static_rix), Modified: head/sys/dev/ath/ath_rate/sample/sample.h ============================================================================== --- head/sys/dev/ath/ath_rate/sample/sample.h Wed Aug 15 07:00:34 2012 (r239283) +++ head/sys/dev/ath/ath_rate/sample/sample.h Wed Aug 15 07:10:10 2012 (r239284) @@ -91,7 +91,7 @@ bin_to_size(int index) struct sample_node { int static_rix; /* rate index of fixed tx rate */ #define SAMPLE_MAXRATES 64 /* NB: corresponds to hal info[32] */ - uint32_t ratemask; /* bit mask of valid rate indices */ + uint64_t ratemask; /* bit mask of valid rate indices */ const struct txschedule *sched; /* tx schedule table */ const HAL_RATE_TABLE *currates; From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 07:32:35 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 154CB106566C; Wed, 15 Aug 2012 07:32:35 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E91188FC0A; Wed, 15 Aug 2012 07:32:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F7WYgY020060; Wed, 15 Aug 2012 07:32:34 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F7WYwk020058; Wed, 15 Aug 2012 07:32:34 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208150732.q7F7WYwk020058@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 07:32:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239285 - head/sys/dev/ath/ath_rate/sample X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 07:32:35 -0000 Author: adrian Date: Wed Aug 15 07:32:34 2012 New Revision: 239285 URL: http://svn.freebsd.org/changeset/base/239285 Log: Add 3 stream rates to the sample rate control module. Modified: head/sys/dev/ath/ath_rate/sample/tx_schedules.h Modified: head/sys/dev/ath/ath_rate/sample/tx_schedules.h ============================================================================== --- head/sys/dev/ath/ath_rate/sample/tx_schedules.h Wed Aug 15 07:10:10 2012 (r239284) +++ head/sys/dev/ath/ath_rate/sample/tx_schedules.h Wed Aug 15 07:32:34 2012 (r239285) @@ -63,6 +63,10 @@ static const struct txschedule series_11 (((_r) == 13) ? 16 : (((_r) == 26) ? 17 : (((_r) == 39) ? 18 : \ (((_r) == 52) ? 19 : (((_r) == 78) ? 20 : (((_r) == 104)? 21 : \ (((_r) == 117)? 22 : (((_r) == 130)? 23 : 0)))))))) +#define NA3(_r) \ + (((_r) == 19.5) ? 24 : (((_r) == 39) ? 25 : (((_r) == 58.5) ? 26 : \ + (((_r) == 78) ? 27 : (((_r) == 117) ? 28 : (((_r) == 156) ? 29 : \ + (((_r) == 175.5) ? 30 : (((_r) == 195)? 31 : 0)))))))) static const struct txschedule series_11na[] = { { 3,A( 6), 3,A( 6), 0,A( 6), 0,A( 6) }, /* 6Mb/s */ { 4,A( 9), 3,A( 6), 4,A( 6), 0,A( 6) }, /* 9Mb/s */ @@ -72,6 +76,9 @@ static const struct txschedule series_11 { 4,A(36), 3,A( 24), 4,A( 18), 2,A( 6) }, /* 36Mb/s */ { 4,A(48), 3,A( 36), 4,A( 24), 2,A(12) }, /* 48Mb/s */ { 4,A(54), 3,A( 48), 4,A( 36), 2,A(24) }, /* 54Mb/s */ + + /* 1 stream rates */ + { 3,NA1( 6.5), 3,NA1( 6.5), 0,NA1( 6.5), 0,NA1(6.5) }, /* 6.5Mb/s */ { 4,NA1( 13), 3,NA1( 6.5), 4,NA1( 6.5), 0,NA1(6.5) }, /* 13Mb/s */ { 4,NA1(19.5), 3,NA1( 6.5), 4,NA1( 6.5), 0,NA1(6.5) }, /*19.5Mb/s */ @@ -80,6 +87,9 @@ static const struct txschedule series_11 { 4,NA1( 52), 3,NA1( 39), 4,NA1( 26), 2,NA1(6.5) }, /* 52Mb/s */ { 4,NA1(58.5), 3,NA1( 52), 4,NA1( 39), 2,NA1( 13) }, /*58.5Mb/s */ { 4,NA1( 65), 3,NA1(58.5), 4,NA1( 52), 2,NA1( 13) }, /* 65Mb/s */ + + /* 2 stream rates */ + { 3,NA2( 13), 3,NA2( 13), 0,NA2( 13), 0,NA2( 13) }, /* 13Mb/s */ { 4,NA2( 26), 3,NA2( 13), 4,NA2( 13), 0,NA2( 13) }, /* 26Mb/s */ { 4,NA2( 39), 3,NA2( 26), 4,NA2( 13), 2,NA2( 13) }, /* 39Mb/s */ @@ -88,8 +98,20 @@ static const struct txschedule series_11 { 4,NA2( 104), 3,NA2( 78), 4,NA2( 52), 2,NA2( 13) }, /* 104Mb/s */ { 4,NA2( 117), 3,NA2( 104), 4,NA2( 78), 2,NA2( 26) }, /* 117Mb/s */ { 4,NA2( 130), 3,NA2( 117), 4,NA2( 104), 2,NA2( 26) } /* 130Mb/s */ + + /* 3 stream rates */ + + { 3,NA3(19.5), 3,NA3(19.5), 0,NA3(19.5), 0,NA3(19.5) }, /* 19Mb/s */ + { 3,NA3( 39), 3,NA3(19.5), 0,NA3(19.5), 0,NA3(19.5) }, /* 39Mb/s */ + { 3,NA3(58.5), 3,NA3( 39), 0,NA3(19.5), 0,NA3(19.5) }, /* 58Mb/s */ + { 3,NA3( 78), 3,NA3(58.5), 0,NA3( 39), 0,NA3(19.5) }, /* 78Mb/s */ + { 3,NA3( 117), 3,NA3( 78), 0,NA3(58.5), 0,NA3(19.5) }, /* 117Mb/s */ + { 3,NA3( 156), 3,NA3( 117), 0,NA3( 78), 0,NA3(19.5) }, /* 156Mb/s */ + { 3,NA3(175.5), 3,NA3( 156), 0,NA3( 117), 0,NA3( 39) }, /* 175Mb/s */ + { 3,NA3( 195), 3,NA3( 195), 0,NA3( 156), 0,NA3(58.5) }, /* 195Mb/s */ }; #undef A +#undef NA3 #undef NA2 #undef NA1 @@ -121,6 +143,11 @@ static const struct txschedule series_11 (((_r) == 13) ? 20 : (((_r) == 26) ? 21 : (((_r) == 39) ? 22 : \ (((_r) == 52) ? 23 : (((_r) == 78) ? 24 : (((_r) == 104) ? 25 : \ (((_r) == 117) ? 26 : (((_r) == 130)? 27 : 0)))))))) +#define NG3(_r) \ + (((_r) == 19.5) ? 28 : (((_r) == 39) ? 29 : (((_r) == 58.5) ? 30 : \ + (((_r) == 78) ? 31 : (((_r) == 117) ? 32 : (((_r) == 156) ? 33 : \ + (((_r) == 175.5) ? 34 : (((_r) == 195)? 35 : 0)))))))) + static const struct txschedule series_11ng[] = { { 3,G( 1), 3,G( 1), 0,G( 1), 0,G( 1) }, /* 1Mb/s */ { 4,G( 2), 3,G( 1), 4,G( 1), 0,G( 1) }, /* 2Mb/s */ @@ -134,6 +161,9 @@ static const struct txschedule series_11 { 4,G(36), 3,G( 24), 4,G( 18), 2,G( 1) }, /* 36Mb/s */ { 4,G(48), 3,G( 36), 4,G( 24), 2,G( 1) }, /* 48Mb/s */ { 4,G(54), 3,G( 48), 4,G( 36), 2,G( 1) }, /* 54Mb/s */ + + /* 1 stream rates */ + { 3,NG1( 6.5), 3,NG1( 6.5), 0,NG1( 6.5), 0,NG1(6.5) }, /* 6.5Mb/s */ { 4,NG1( 13), 3,NG1( 6.5), 4,NG1( 6.5), 0,NG1(6.5) }, /* 13Mb/s */ { 4,NG1(19.5), 3,NG1( 6.5), 4,NG1( 6.5), 0,NG1(6.5) }, /*19.5Mb/s */ @@ -142,6 +172,9 @@ static const struct txschedule series_11 { 4,NG1( 52), 3,NG1( 39), 4,NG1( 26), 2,NG1(6.5) }, /* 52Mb/s */ { 4,NG1(58.5), 3,NG1( 52), 4,NG1( 39), 2,NG1( 13) }, /*58.5Mb/s */ { 4,NG1( 65), 3,NG1(58.5), 4,NG1( 52), 2,NG1( 13) }, /* 65Mb/s */ + + /* 2 stream rates */ + { 3,NG2( 13), 3,NG2( 13), 0,NG2( 13), 0,NG2( 13) }, /* 13Mb/s */ { 4,NG2( 26), 3,NG2( 13), 4,NG2( 13), 0,NG2( 13) }, /* 26Mb/s */ { 4,NG2( 39), 3,NG2( 26), 4,NG2( 13), 2,NG2( 13) }, /* 39Mb/s */ @@ -149,9 +182,22 @@ static const struct txschedule series_11 { 4,NG2( 78), 3,NG2( 52), 4,NG2( 39), 2,NG2( 13) }, /* 78Mb/s */ { 4,NG2( 104), 3,NG2( 78), 4,NG2( 52), 2,NG2( 13) }, /* 104Mb/s */ { 4,NG2( 117), 3,NG2( 104), 4,NG2( 78), 2,NG2( 26) }, /* 117Mb/s */ - { 4,NG2( 130), 3,NG2( 117), 4,NG2( 104), 2,NG2( 26) } /* 130Mb/s */ + { 4,NG2( 130), 3,NG2( 117), 4,NG2( 104), 2,NG2( 26) }, /* 130Mb/s */ + + /* 3 stream rates */ + + { 3,NG3(19.5), 3,NG3(19.5), 0,NG3(19.5), 0,NG3(19.5) }, /* 19Mb/s */ + { 3,NG3( 39), 3,NG3(19.5), 0,NG3(19.5), 0,NG3(19.5) }, /* 39Mb/s */ + { 3,NG3(58.5), 3,NG3( 39), 0,NG3(19.5), 0,NG3(19.5) }, /* 58Mb/s */ + { 3,NG3( 78), 3,NG3(58.5), 0,NG3( 39), 0,NG3(19.5) }, /* 78Mb/s */ + { 3,NG3( 117), 3,NG3( 78), 0,NG3(58.5), 0,NG3(19.5) }, /* 117Mb/s */ + { 3,NG3( 156), 3,NG3( 117), 0,NG3( 78), 0,NG3(19.5) }, /* 156Mb/s */ + { 3,NG3(175.5), 3,NG3( 156), 0,NG3( 117), 0,NG3( 39) }, /* 175Mb/s */ + { 3,NG3( 195), 3,NG3( 195), 0,NG3( 156), 0,NG3(58.5) }, /* 195Mb/s */ + }; #undef G +#undef NG3 #undef NG2 #undef NG1 From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 07:50:43 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 153551065673; Wed, 15 Aug 2012 07:50:43 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F39098FC0A; Wed, 15 Aug 2012 07:50:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F7og56022024; Wed, 15 Aug 2012 07:50:42 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F7ogDL022022; Wed, 15 Aug 2012 07:50:42 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208150750.q7F7ogDL022022@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 07:50:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239286 - head/sys/dev/ath/ath_rate/sample X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 07:50:43 -0000 Author: adrian Date: Wed Aug 15 07:50:42 2012 New Revision: 239286 URL: http://svn.freebsd.org/changeset/base/239286 Log: Add a missing comma. Pointy hat to: me, for not doing a 'clean' build first. Modified: head/sys/dev/ath/ath_rate/sample/tx_schedules.h Modified: head/sys/dev/ath/ath_rate/sample/tx_schedules.h ============================================================================== --- head/sys/dev/ath/ath_rate/sample/tx_schedules.h Wed Aug 15 07:32:34 2012 (r239285) +++ head/sys/dev/ath/ath_rate/sample/tx_schedules.h Wed Aug 15 07:50:42 2012 (r239286) @@ -97,7 +97,7 @@ static const struct txschedule series_11 { 4,NA2( 78), 3,NA2( 52), 4,NA2( 39), 2,NA2( 13) }, /* 78Mb/s */ { 4,NA2( 104), 3,NA2( 78), 4,NA2( 52), 2,NA2( 13) }, /* 104Mb/s */ { 4,NA2( 117), 3,NA2( 104), 4,NA2( 78), 2,NA2( 26) }, /* 117Mb/s */ - { 4,NA2( 130), 3,NA2( 117), 4,NA2( 104), 2,NA2( 26) } /* 130Mb/s */ + { 4,NA2( 130), 3,NA2( 117), 4,NA2( 104), 2,NA2( 26) }, /* 130Mb/s */ /* 3 stream rates */ From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 07:52:50 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 62446106566B; Wed, 15 Aug 2012 07:52:50 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 33F3C8FC0C; Wed, 15 Aug 2012 07:52:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F7qoU6022294; Wed, 15 Aug 2012 07:52:50 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F7qo52022292; Wed, 15 Aug 2012 07:52:50 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208150752.q7F7qo52022292@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 07:52:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239287 - head/sys/dev/ath/ath_hal X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 07:52:50 -0000 Author: adrian Date: Wed Aug 15 07:52:49 2012 New Revision: 239287 URL: http://svn.freebsd.org/changeset/base/239287 Log: Extend the duration calculations to work with three and four stream rates. Modified: head/sys/dev/ath/ath_hal/ah.c Modified: head/sys/dev/ath/ath_hal/ah.c ============================================================================== --- head/sys/dev/ath/ath_hal/ah.c Wed Aug 15 07:50:42 2012 (r239286) +++ head/sys/dev/ath/ath_hal/ah.c Wed Aug 15 07:52:49 2012 (r239287) @@ -275,31 +275,38 @@ ath_hal_pkt_txtime(struct ath_hal *ah, c /* 11n frame - extract out the number of spatial streams */ numStreams = HT_RC_2_STREAMS(rc); - KASSERT(numStreams == 1 || numStreams == 2, ("number of spatial streams needs to be 1 or 2: MCS rate 0x%x!", rateix)); + KASSERT(numStreams > 0 && numStreams <= 4, + ("number of spatial streams needs to be 1..3: MCS rate 0x%x!", + rateix)); return ath_computedur_ht(frameLen, rc, numStreams, isht40, shortPreamble); } +static const uint16_t ht20_bps[32] = { + 26, 52, 78, 104, 156, 208, 234, 260, + 52, 104, 156, 208, 312, 416, 468, 520, + 78, 156, 234, 312, 468, 624, 702, 780, + 104, 208, 312, 416, 624, 832, 936, 1040 +}; +static const uint16_t ht40_bps[32] = { + 54, 108, 162, 216, 324, 432, 486, 540, + 108, 216, 324, 432, 648, 864, 972, 1080, + 162, 324, 486, 648, 972, 1296, 1458, 1620, + 216, 432, 648, 864, 1296, 1728, 1944, 2160 +}; + /* * Calculate the transmit duration of an 11n frame. * This only works for MCS0->MCS15. */ uint32_t -ath_computedur_ht(uint32_t frameLen, uint16_t rate, int streams, HAL_BOOL isht40, - HAL_BOOL isShortGI) +ath_computedur_ht(uint32_t frameLen, uint16_t rate, int streams, + HAL_BOOL isht40, HAL_BOOL isShortGI) { - static const uint16_t ht20_bps[16] = { - 26, 52, 78, 104, 156, 208, 234, 260, - 52, 104, 156, 208, 312, 416, 468, 520 - }; - static const uint16_t ht40_bps[16] = { - 54, 108, 162, 216, 324, 432, 486, 540, - 108, 216, 324, 432, 648, 864, 972, 1080, - }; uint32_t bitsPerSymbol, numBits, numSymbols, txTime; KASSERT(rate & IEEE80211_RATE_MCS, ("not mcs %d", rate)); - KASSERT((rate &~ IEEE80211_RATE_MCS) < 16, ("bad mcs 0x%x", rate)); + KASSERT((rate &~ IEEE80211_RATE_MCS) < 31, ("bad mcs 0x%x", rate)); if (isht40) bitsPerSymbol = ht40_bps[rate & 0xf]; From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 07:56:49 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8E5BD1065674; Wed, 15 Aug 2012 07:56:49 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7A3B58FC1A; Wed, 15 Aug 2012 07:56:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F7unTb022736; Wed, 15 Aug 2012 07:56:49 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F7unK5022734; Wed, 15 Aug 2012 07:56:49 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208150756.q7F7unK5022734@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 07:56:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239288 - head/sys/dev/ath/ath_hal X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 07:56:49 -0000 Author: adrian Date: Wed Aug 15 07:56:48 2012 New Revision: 239288 URL: http://svn.freebsd.org/changeset/base/239288 Log: Remove this comment, it's no longer relevant. Modified: head/sys/dev/ath/ath_hal/ah.c Modified: head/sys/dev/ath/ath_hal/ah.c ============================================================================== --- head/sys/dev/ath/ath_hal/ah.c Wed Aug 15 07:52:49 2012 (r239287) +++ head/sys/dev/ath/ath_hal/ah.c Wed Aug 15 07:56:48 2012 (r239288) @@ -297,7 +297,6 @@ static const uint16_t ht40_bps[32] = { /* * Calculate the transmit duration of an 11n frame. - * This only works for MCS0->MCS15. */ uint32_t ath_computedur_ht(uint32_t frameLen, uint16_t rate, int streams, From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 08:06:07 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B360B106566C; Wed, 15 Aug 2012 08:06:07 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9E29F8FC1B; Wed, 15 Aug 2012 08:06:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F867vV023708; Wed, 15 Aug 2012 08:06:07 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F867Ap023705; Wed, 15 Aug 2012 08:06:07 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208150806.q7F867Ap023705@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 08:06:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239289 - head/sys/dev/ath/ath_hal X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 08:06:07 -0000 Author: adrian Date: Wed Aug 15 08:06:06 2012 New Revision: 239289 URL: http://svn.freebsd.org/changeset/base/239289 Log: Bump up the rate control table size to incorporate 3 stream entries. Modified: head/sys/dev/ath/ath_hal/ah.h Modified: head/sys/dev/ath/ath_hal/ah.h ============================================================================== --- head/sys/dev/ath/ath_hal/ah.h Wed Aug 15 07:56:48 2012 (r239288) +++ head/sys/dev/ath/ath_hal/ah.h Wed Aug 15 08:06:06 2012 (r239289) @@ -550,7 +550,7 @@ enum { typedef struct { int rateCount; /* NB: for proper padding */ - uint8_t rateCodeToIndex[144]; /* back mapping */ + uint8_t rateCodeToIndex[256]; /* back mapping */ struct { uint8_t valid; /* valid for rate control use */ uint8_t phy; /* CCK/OFDM/XR */ @@ -564,12 +564,12 @@ typedef struct { * rate; used for dur. calcs */ uint16_t lpAckDuration; /* long preamble ACK duration */ uint16_t spAckDuration; /* short preamble ACK duration*/ - } info[32]; + } info[64]; } HAL_RATE_TABLE; typedef struct { u_int rs_count; /* number of valid entries */ - uint8_t rs_rates[32]; /* rates */ + uint8_t rs_rates[64]; /* rates */ } HAL_RATE_SET; /* From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 08:14:17 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 277AD106564A; Wed, 15 Aug 2012 08:14:17 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 117B18FC14; Wed, 15 Aug 2012 08:14:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F8EG8X024604; Wed, 15 Aug 2012 08:14:16 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F8EGm8024602; Wed, 15 Aug 2012 08:14:16 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208150814.q7F8EGm8024602@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 08:14:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239290 - head/sys/dev/ath X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 08:14:17 -0000 Author: adrian Date: Wed Aug 15 08:14:16 2012 New Revision: 239290 URL: http://svn.freebsd.org/changeset/base/239290 Log: Extend the non-aggregate TX descriptor chain routine to be aware of: * the descriptor ID, and * the multi-buffer support that the EDMA chips support. This is required for successful MAC transmission of multi-descriptor frames. The MAC simply hangs if there are NULL buffers + 0 length pointers, but the descriptor did have TxMore set. This won't be done for the 11n aggregate path, as that will be modified to use the newer API (ie, ath_hal_filltxdesc() and then set first|middle| last_aggr), which will deprecate some of the current code. TODO: * Populate the numTxMaps field in the HAL, then make sure that's fetched by the driver. Then I can undo that hack. Tested: * AR9380, AP mode, TX'ing non-aggregate 802.11n frames; * AR9280, STA/AP mode, doing aggregate and non-aggregate traffic. Modified: head/sys/dev/ath/if_ath_tx.c Modified: head/sys/dev/ath/if_ath_tx.c ============================================================================== --- head/sys/dev/ath/if_ath_tx.c Wed Aug 15 08:06:06 2012 (r239289) +++ head/sys/dev/ath/if_ath_tx.c Wed Aug 15 08:14:16 2012 (r239290) @@ -302,9 +302,10 @@ ath_tx_chaindesclist(struct ath_softc *s { struct ath_hal *ah = sc->sc_ah; struct ath_desc *ds, *ds0; - int i; + int i, bp, dsp; HAL_DMA_ADDR bufAddrList[4]; uint32_t segLenList[4]; + int numTxMaps = 1; /* * XXX There's txdma and txdma_mgmt; the descriptor @@ -315,20 +316,47 @@ ath_tx_chaindesclist(struct ath_softc *s /* * Fillin the remainder of the descriptor info. */ + + /* + * For now the HAL doesn't implement halNumTxMaps for non-EDMA + * (ie it's 0.) So just work around it. + * + * XXX TODO: populate halNumTxMaps for each HAL chip and + * then undo this hack. + */ + if (sc->sc_ah->ah_magic == 0x19741014) + numTxMaps = 4; + + /* + * For EDMA and later chips ensure the TX map is fully populated + * before advancing to the next descriptor. + */ ds0 = ds = bf->bf_desc; - for (i = 0; i < bf->bf_nseg; i++, ds++) { - bufAddrList[0] = bf->bf_segs[i].ds_addr; - segLenList[0] = bf->bf_segs[i].ds_len; + bp = dsp = 0; + bzero(bufAddrList, sizeof(bufAddrList)); + bzero(segLenList, sizeof(segLenList)); + for (i = 0; i < bf->bf_nseg; i++) { + bufAddrList[bp] = bf->bf_segs[i].ds_addr; + segLenList[bp] = bf->bf_segs[i].ds_len; + bp++; + + /* + * Go to the next segment if this isn't the last segment + * and there's space in the current TX map. + */ + if ((i != bf->bf_nseg - 1) && (bp < numTxMaps)) + continue; - /* Blank this out until multi-buf support is added for AR9300 */ - bufAddrList[1] = bufAddrList[2] = bufAddrList[3] = 0; - segLenList[1] = segLenList[2] = segLenList[3] = 0; + /* + * Last segment or we're out of buffer pointers. + */ + bp = 0; if (i == bf->bf_nseg - 1) ath_hal_settxdesclink(ah, ds, 0); else ath_hal_settxdesclink(ah, ds, - bf->bf_daddr + dd->dd_descsize * (i + 1)); + bf->bf_daddr + dd->dd_descsize * (dsp + 1)); /* * XXX this assumes that bfs_txq is the actual destination @@ -339,7 +367,7 @@ ath_tx_chaindesclist(struct ath_softc *s ath_hal_filltxdesc(ah, ds , bufAddrList , segLenList - , 0 /* XXX desc id */ + , bf->bf_descid /* XXX desc id */ , bf->bf_state.bfs_txq->axq_qnum /* XXX multicast? */ , i == 0 /* first segment */ , i == bf->bf_nseg - 1 /* last segment */ @@ -350,6 +378,18 @@ ath_tx_chaindesclist(struct ath_softc *s __func__, i, ds->ds_link, ds->ds_data, ds->ds_ctl0, ds->ds_ctl1, ds->ds_hw[0], ds->ds_hw[1]); bf->bf_lastds = ds; + + /* + * Don't forget to skip to the next descriptor. + */ + ds++; + dsp++; + + /* + * .. and don't forget to blank these out! + */ + bzero(bufAddrList, sizeof(bufAddrList)); + bzero(segLenList, sizeof(segLenList)); } bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE); } From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 08:34:32 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4BCB6106564A; Wed, 15 Aug 2012 08:34:32 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 379B38FC18; Wed, 15 Aug 2012 08:34:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F8YWlM026773; Wed, 15 Aug 2012 08:34:32 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F8YWkn026771; Wed, 15 Aug 2012 08:34:32 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208150834.q7F8YWkn026771@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 08:34:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239291 - head/sys/arm/at91 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 08:34:32 -0000 Author: gonzo Date: Wed Aug 15 08:34:31 2012 New Revision: 239291 URL: http://svn.freebsd.org/changeset/base/239291 Log: Unbreak ATMEL kernel build Modified: head/sys/arm/at91/std.atmel Modified: head/sys/arm/at91/std.atmel ============================================================================== --- head/sys/arm/at91/std.atmel Wed Aug 15 08:14:16 2012 (r239290) +++ head/sys/arm/at91/std.atmel Wed Aug 15 08:34:31 2012 (r239291) @@ -4,6 +4,7 @@ files "../at91/files.at91" cpu CPU_ARM9 makeoptions CONF_CFLAGS=-mcpu=arm9 options PHYSADDR=0x20000000 +options NO_EVENTTIMERS # Supported SoCs for the at91 platform device at91rm9200 From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 09:18:50 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D7F561065689; Wed, 15 Aug 2012 09:18:50 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 641FB8FC1A; Wed, 15 Aug 2012 09:18:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7F9IoP3031383; Wed, 15 Aug 2012 09:18:50 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7F9IoTl031381; Wed, 15 Aug 2012 09:18:50 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208150918.q7F9IoTl031381@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Wed, 15 Aug 2012 09:18:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239292 - head/sys/boot/zfs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 09:18:51 -0000 Author: ae Date: Wed Aug 15 09:18:49 2012 New Revision: 239292 URL: http://svn.freebsd.org/changeset/base/239292 Log: Explicitly terminate the string after strncpy(3). Modified: head/sys/boot/zfs/zfs.c Modified: head/sys/boot/zfs/zfs.c ============================================================================== --- head/sys/boot/zfs/zfs.c Wed Aug 15 08:34:31 2012 (r239291) +++ head/sys/boot/zfs/zfs.c Wed Aug 15 09:18:49 2012 (r239292) @@ -422,6 +422,7 @@ zfs_probe_partition(void *arg, const cha ppa = (struct zfs_probe_args *)arg; strncpy(devname, ppa->devname, strlen(ppa->devname) - 1); + devname[strlen(ppa->devname) - 1] = '\0'; sprintf(devname, "%s%s:", devname, partname); pa.fd = open(devname, O_RDONLY); if (pa.fd == -1) From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 10:11:29 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CD81C106564A; Wed, 15 Aug 2012 10:11:29 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B80B08FC0C; Wed, 15 Aug 2012 10:11:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FABTMf036754; Wed, 15 Aug 2012 10:11:29 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FABTLl036752; Wed, 15 Aug 2012 10:11:29 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208151011.q7FABTLl036752@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Wed, 15 Aug 2012 10:11:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239293 - head/sys/boot/common X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 10:11:29 -0000 Author: ae Date: Wed Aug 15 10:11:29 2012 New Revision: 239293 URL: http://svn.freebsd.org/changeset/base/239293 Log: Rework r239232 to unbreak ZFS detection on MBR slices. Modified: head/sys/boot/common/disk.c Modified: head/sys/boot/common/disk.c ============================================================================== --- head/sys/boot/common/disk.c Wed Aug 15 09:18:49 2012 (r239292) +++ head/sys/boot/common/disk.c Wed Aug 15 10:11:29 2012 (r239293) @@ -187,16 +187,14 @@ disk_open(struct disk_devdesc *dev, off_ dev->d_offset = part.start; if (dev->d_partition == 255) goto out; /* Nothing more to do */ - if (dev->d_partition == -1) { - /* - * If we are looking at a BSD slice, and the - * partition is < 0, assume the 'a' partition. - */ - if (part.type == PART_FREEBSD) - dev->d_partition = 0; - else - goto out; - } + /* + * If d_partition < 0 and we are looking at a BSD slice, + * then try to read BSD label, otherwise return the + * whole MBR slice. + */ + if (dev->d_partition == -1 && + part.type != PART_FREEBSD) + goto out; /* Try to read BSD label */ table = ptable_open(dev, part.end - part.start + 1, od->sectorsize, ptblread); @@ -205,6 +203,16 @@ disk_open(struct disk_devdesc *dev, off_ rc = ENXIO; goto out; } + /* + * If slice contains BSD label and d_partition < 0, then + * assume the 'a' partition. Otherwise just return the + * whole MBR slice, because it can contain ZFS. + */ + if (dev->d_partition < 0) { + if (ptable_gettype(table) != PTABLE_BSD) + goto out; + dev->d_partition = 0; + } rc = ptable_getpart(table, &part, dev->d_partition); if (rc != 0) goto out; From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 12:01:14 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6F8D8106566B; Wed, 15 Aug 2012 12:01:14 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5A57A8FC0C; Wed, 15 Aug 2012 12:01:14 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FC1EI3050977; Wed, 15 Aug 2012 12:01:14 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FC1Ewm050975; Wed, 15 Aug 2012 12:01:14 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208151201.q7FC1Ewm050975@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Wed, 15 Aug 2012 12:01:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239294 - head/sys/boot/common X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 12:01:14 -0000 Author: ae Date: Wed Aug 15 12:01:13 2012 New Revision: 239294 URL: http://svn.freebsd.org/changeset/base/239294 Log: Some BIOSes return incorrect number of sectors, make checks less strictly, to do not lost some partitions. Reported by: swills@ Modified: head/sys/boot/common/part.c Modified: head/sys/boot/common/part.c ============================================================================== --- head/sys/boot/common/part.c Wed Aug 15 10:11:29 2012 (r239293) +++ head/sys/boot/common/part.c Wed Aug 15 12:01:13 2012 (r239294) @@ -372,8 +372,10 @@ ptable_ebrread(struct ptable *table, voi if (buf == NULL) return (table); for (i = 0; i < MAXEBRENTRIES; i++) { +#if 0 if (offset >= table->sectors) break; +#endif if (dread(dev, buf, 1, offset) != 0) break; dp = (struct dos_partition *)(buf + DOSPARTOFF); @@ -663,8 +665,10 @@ ptable_open(void *dev, off_t sectors, ui end = le32toh(dp[i].dp_size); if (start == 0 || end == 0) continue; +#if 0 if (start + end - 1 >= sectors) continue; /* XXX: ignore */ +#endif if (dp[i].dp_typ == DOSPTYP_EXT || dp[i].dp_typ == DOSPTYP_EXTLBA) has_ext = 1; From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 14:18:55 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1AC23106564A; Wed, 15 Aug 2012 14:18:55 +0000 (UTC) (envelope-from obrien@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E0EAF8FC0C; Wed, 15 Aug 2012 14:18:54 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FEIs4L065429; Wed, 15 Aug 2012 14:18:54 GMT (envelope-from obrien@svn.freebsd.org) Received: (from obrien@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FEIsjt065427; Wed, 15 Aug 2012 14:18:54 GMT (envelope-from obrien@svn.freebsd.org) Message-Id: <201208151418.q7FEIsjt065427@svn.freebsd.org> From: "David E. O'Brien" Date: Wed, 15 Aug 2012 14:18:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239295 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 14:18:55 -0000 Author: obrien Date: Wed Aug 15 14:18:54 2012 New Revision: 239295 URL: http://svn.freebsd.org/changeset/base/239295 Log: Don't include opt_ddb.h & twice. Modified: head/sys/kern/kern_proc.c Modified: head/sys/kern/kern_proc.c ============================================================================== --- head/sys/kern/kern_proc.c Wed Aug 15 12:01:13 2012 (r239294) +++ head/sys/kern/kern_proc.c Wed Aug 15 14:18:54 2012 (r239295) @@ -725,9 +725,7 @@ sess_release(struct session *s) } } -#include "opt_ddb.h" #ifdef DDB -#include DB_SHOW_COMMAND(pgrpdump, pgrpdump) { From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 15:17:57 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1E95A1065673; Wed, 15 Aug 2012 15:17:57 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 09C778FC08; Wed, 15 Aug 2012 15:17:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FFHueA071760; Wed, 15 Aug 2012 15:17:56 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FFHuII071758; Wed, 15 Aug 2012 15:17:56 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208151517.q7FFHuII071758@svn.freebsd.org> From: Konstantin Belousov Date: Wed, 15 Aug 2012 15:17:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239296 - head/sys/compat/freebsd32 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 15:17:57 -0000 Author: kib Date: Wed Aug 15 15:17:56 2012 New Revision: 239296 URL: http://svn.freebsd.org/changeset/base/239296 Log: Provide 32bit compat for truncate(2) and ftruncate(2). MFC after: 1 week Modified: head/sys/compat/freebsd32/syscalls.master Modified: head/sys/compat/freebsd32/syscalls.master ============================================================================== --- head/sys/compat/freebsd32/syscalls.master Wed Aug 15 14:18:54 2012 (r239295) +++ head/sys/compat/freebsd32/syscalls.master Wed Aug 15 15:17:56 2012 (r239296) @@ -257,8 +257,9 @@ 126 AUE_SETREUID NOPROTO { int setreuid(int ruid, int euid); } 127 AUE_SETREGID NOPROTO { int setregid(int rgid, int egid); } 128 AUE_RENAME NOPROTO { int rename(char *from, char *to); } -129 AUE_TRUNCATE OBSOL otruncate -130 AUE_FTRUNCATE OBSOL ftruncate +129 AUE_TRUNCATE COMPAT|NOPROTO { int truncate(char *path, \ + int length); } +130 AUE_FTRUNCATE COMPAT|NOPROTO { int ftruncate(int fd, int length); } 131 AUE_FLOCK NOPROTO { int flock(int fd, int how); } 132 AUE_MKFIFO NOPROTO { int mkfifo(char *path, int mode); } 133 AUE_SENDTO NOPROTO { int sendto(int s, caddr_t buf, \ From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 15:18:21 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 784D010657C2; Wed, 15 Aug 2012 15:18:21 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 57DC28FC0A; Wed, 15 Aug 2012 15:18:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FFILLF071841; Wed, 15 Aug 2012 15:18:21 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FFILH2071835; Wed, 15 Aug 2012 15:18:21 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208151518.q7FFILH2071835@svn.freebsd.org> From: Konstantin Belousov Date: Wed, 15 Aug 2012 15:18:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239297 - head/sys/compat/freebsd32 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 15:18:21 -0000 Author: kib Date: Wed Aug 15 15:18:20 2012 New Revision: 239297 URL: http://svn.freebsd.org/changeset/base/239297 Log: Regenerate. Modified: head/sys/compat/freebsd32/freebsd32_proto.h head/sys/compat/freebsd32/freebsd32_syscall.h head/sys/compat/freebsd32/freebsd32_syscalls.c head/sys/compat/freebsd32/freebsd32_sysent.c Modified: head/sys/compat/freebsd32/freebsd32_proto.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_proto.h Wed Aug 15 15:17:56 2012 (r239296) +++ head/sys/compat/freebsd32/freebsd32_proto.h Wed Aug 15 15:18:20 2012 (r239297) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239248 2012-08-14 12:09:09Z kib + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239296 2012-08-15 15:17:56Z kib */ #ifndef _FREEBSD32_SYSPROTO_H_ Modified: head/sys/compat/freebsd32/freebsd32_syscall.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscall.h Wed Aug 15 15:17:56 2012 (r239296) +++ head/sys/compat/freebsd32/freebsd32_syscall.h Wed Aug 15 15:18:20 2012 (r239297) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239248 2012-08-14 12:09:09Z kib + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239296 2012-08-15 15:17:56Z kib */ #define FREEBSD32_SYS_syscall 0 @@ -132,8 +132,8 @@ #define FREEBSD32_SYS_setreuid 126 #define FREEBSD32_SYS_setregid 127 #define FREEBSD32_SYS_rename 128 - /* 129 is obsolete otruncate */ - /* 130 is obsolete ftruncate */ + /* 129 is old truncate */ + /* 130 is old ftruncate */ #define FREEBSD32_SYS_flock 131 #define FREEBSD32_SYS_mkfifo 132 #define FREEBSD32_SYS_sendto 133 Modified: head/sys/compat/freebsd32/freebsd32_syscalls.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscalls.c Wed Aug 15 15:17:56 2012 (r239296) +++ head/sys/compat/freebsd32/freebsd32_syscalls.c Wed Aug 15 15:18:20 2012 (r239297) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239248 2012-08-14 12:09:09Z kib + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239296 2012-08-15 15:17:56Z kib */ const char *freebsd32_syscallnames[] = { @@ -139,8 +139,8 @@ const char *freebsd32_syscallnames[] = { "setreuid", /* 126 = setreuid */ "setregid", /* 127 = setregid */ "rename", /* 128 = rename */ - "obs_otruncate", /* 129 = obsolete otruncate */ - "obs_ftruncate", /* 130 = obsolete ftruncate */ + "compat.truncate", /* 129 = old truncate */ + "compat.ftruncate", /* 130 = old ftruncate */ "flock", /* 131 = flock */ "mkfifo", /* 132 = mkfifo */ "sendto", /* 133 = sendto */ Modified: head/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_sysent.c Wed Aug 15 15:17:56 2012 (r239296) +++ head/sys/compat/freebsd32/freebsd32_sysent.c Wed Aug 15 15:18:20 2012 (r239297) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239248 2012-08-14 12:09:09Z kib + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239296 2012-08-15 15:17:56Z kib */ #include "opt_compat.h" @@ -176,8 +176,8 @@ struct sysent freebsd32_sysent[] = { { AS(setreuid_args), (sy_call_t *)sys_setreuid, AUE_SETREUID, NULL, 0, 0, 0, SY_THR_STATIC }, /* 126 = setreuid */ { AS(setregid_args), (sy_call_t *)sys_setregid, AUE_SETREGID, NULL, 0, 0, 0, SY_THR_STATIC }, /* 127 = setregid */ { AS(rename_args), (sy_call_t *)sys_rename, AUE_RENAME, NULL, 0, 0, 0, SY_THR_STATIC }, /* 128 = rename */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 129 = obsolete otruncate */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 130 = obsolete ftruncate */ + { compat(AS(otruncate_args),truncate), AUE_TRUNCATE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 129 = old truncate */ + { compat(AS(oftruncate_args),ftruncate), AUE_FTRUNCATE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 130 = old ftruncate */ { AS(flock_args), (sy_call_t *)sys_flock, AUE_FLOCK, NULL, 0, 0, 0, SY_THR_STATIC }, /* 131 = flock */ { AS(mkfifo_args), (sy_call_t *)sys_mkfifo, AUE_MKFIFO, NULL, 0, 0, 0, SY_THR_STATIC }, /* 132 = mkfifo */ { AS(sendto_args), (sy_call_t *)sys_sendto, AUE_SENDTO, NULL, 0, 0, 0, SY_THR_STATIC }, /* 133 = sendto */ From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 15:35:21 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 61A12106564A; Wed, 15 Aug 2012 15:35:21 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3289A8FC14; Wed, 15 Aug 2012 15:35:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FFZLBB073798; Wed, 15 Aug 2012 15:35:21 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FFZKiq073795; Wed, 15 Aug 2012 15:35:20 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208151535.q7FFZKiq073795@svn.freebsd.org> From: Hans Petter Selasky Date: Wed, 15 Aug 2012 15:35:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239298 - in head/sys/dev/usb: . quirk X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 15:35:21 -0000 Author: hselasky Date: Wed Aug 15 15:35:20 2012 New Revision: 239298 URL: http://svn.freebsd.org/changeset/base/239298 Log: Add new USB device quirk. Submitted by: Kra OTN MFC after: 2 weeks Modified: head/sys/dev/usb/quirk/usb_quirk.c head/sys/dev/usb/usbdevs Modified: head/sys/dev/usb/quirk/usb_quirk.c ============================================================================== --- head/sys/dev/usb/quirk/usb_quirk.c Wed Aug 15 15:18:20 2012 (r239297) +++ head/sys/dev/usb/quirk/usb_quirk.c Wed Aug 15 15:35:20 2012 (r239298) @@ -125,6 +125,8 @@ static struct usb_quirk_entry usb_quirks /* MS keyboards do weird things */ USB_QUIRK(MICROSOFT, NATURAL4000, 0x0000, 0xFFFF, UQ_KBD_BOOTPROTO), USB_QUIRK(MICROSOFT, WLINTELLIMOUSE, 0x0000, 0xffff, UQ_MS_LEADING_BYTE), + /* Quirk for Corsair Vengeance K60 keyboard */ + USB_QUIRK(CORSAIR, K60, 0x0000, 0xffff, UQ_KBD_BOOTPROTO), /* umodem(4) device quirks */ USB_QUIRK(METRICOM, RICOCHET_GS, 0x100, 0x100, UQ_ASSUME_CM_OVER_DATA), USB_QUIRK(SANYO, SCP4900, 0x000, 0x000, UQ_ASSUME_CM_OVER_DATA), Modified: head/sys/dev/usb/usbdevs ============================================================================== --- head/sys/dev/usb/usbdevs Wed Aug 15 15:18:20 2012 (r239297) +++ head/sys/dev/usb/usbdevs Wed Aug 15 15:35:20 2012 (r239298) @@ -687,6 +687,7 @@ vendor QUALCOMMINC 0x19d2 Qualcomm, Inco vendor BAYER 0x1a79 Bayer vendor WCH2 0x1a86 QinHeng Electronics vendor STELERA 0x1a8d Stelera Wireless +vendor CORSAIR 0x1b1c Corsair vendor MATRIXORBITAL 0x1b3d Matrix Orbital vendor OVISLINK 0x1b75 OvisLink vendor TML 0x1b91 The Mobility Lab @@ -1373,6 +1374,9 @@ product COREGA CGWLUSB300GNM 0x0042 CG-W product COREGA WLUSB_11_STICK 0x7613 WLAN USB Stick 11 product COREGA FETHER_USB_TXC 0x9601 FEther USB-TXC +/* Corsair products */ +product CORSAIR K60 0x0a60 Corsair Vengeance K60 keyboard + /* Creative products */ product CREATIVE NOMAD_II 0x1002 Nomad II MP3 player product CREATIVE NOMAD_IIMG 0x4004 Nomad II MG From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 15:42:58 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9EB251065674; Wed, 15 Aug 2012 15:42:58 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 812D68FC08; Wed, 15 Aug 2012 15:42:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FFgwsm074588; Wed, 15 Aug 2012 15:42:58 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FFgw9i074568; Wed, 15 Aug 2012 15:42:58 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208151542.q7FFgw9i074568@svn.freebsd.org> From: Hans Petter Selasky Date: Wed, 15 Aug 2012 15:42:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239299 - in head/sys: dev/usb/net dev/usb/serial kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 15:42:58 -0000 Author: hselasky Date: Wed Aug 15 15:42:57 2012 New Revision: 239299 URL: http://svn.freebsd.org/changeset/base/239299 Log: Revert r239178 and implement two new functions, namely "device_free_softc()" and "device_claim_softc()", to allow USB serial drivers refcounting the softc. These functions are used to grab the softc from auto-free and to free the softc back to the correct malloc type, respectivly. Discussed with: jhb MFC after: 2 weeks Modified: head/sys/dev/usb/net/if_usie.c head/sys/dev/usb/net/uhso.c head/sys/dev/usb/serial/u3g.c head/sys/dev/usb/serial/uark.c head/sys/dev/usb/serial/ubsa.c head/sys/dev/usb/serial/ubser.c head/sys/dev/usb/serial/uchcom.c head/sys/dev/usb/serial/ucycom.c head/sys/dev/usb/serial/ufoma.c head/sys/dev/usb/serial/uftdi.c head/sys/dev/usb/serial/ugensa.c head/sys/dev/usb/serial/uipaq.c head/sys/dev/usb/serial/umcs.c head/sys/dev/usb/serial/umct.c head/sys/dev/usb/serial/umodem.c head/sys/dev/usb/serial/umoscom.c head/sys/dev/usb/serial/uplcom.c head/sys/dev/usb/serial/usb_serial.c head/sys/dev/usb/serial/usb_serial.h head/sys/dev/usb/serial/uslcom.c head/sys/dev/usb/serial/uvisor.c head/sys/dev/usb/serial/uvscom.c head/sys/kern/device_if.m head/sys/kern/subr_bus.c head/sys/sys/bus.h Modified: head/sys/dev/usb/net/if_usie.c ============================================================================== --- head/sys/dev/usb/net/if_usie.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/net/if_usie.c Wed Aug 15 15:42:57 2012 (r239299) @@ -95,7 +95,7 @@ static const STRUCT_USB_HOST_ID usie_dev static device_probe_t usie_probe; static device_attach_t usie_attach; static device_detach_t usie_detach; -static device_free_softc_t usie_free_softc; +static void usie_free_softc(struct usie_softc *); static void usie_free(struct ucom_softc *); static void usie_uc_update_line_state(struct ucom_softc *, uint8_t); @@ -191,7 +191,6 @@ static device_method_t usie_methods[] = DEVMETHOD(device_probe, usie_probe), DEVMETHOD(device_attach, usie_attach), DEVMETHOD(device_detach, usie_detach), - DEVMETHOD(device_free_softc, usie_free_softc), DEVMETHOD_END }; @@ -488,27 +487,28 @@ usie_detach(device_t self) usbd_transfer_unsetup(sc->sc_uc_xfer[x], USIE_UC_N_XFER); + device_claim_softc(self); + + usie_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(usie); static void -usie_free_softc(device_t dev, void *arg) +usie_free_softc(struct usie_softc *sc) { - struct usie_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void usie_free(struct ucom_softc *ucom) { - usie_free_softc(NULL, ucom->sc_parent); + usie_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/net/uhso.c ============================================================================== --- head/sys/dev/usb/net/uhso.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/net/uhso.c Wed Aug 15 15:42:57 2012 (r239299) @@ -474,13 +474,12 @@ static void uhso_if_rxflush(void *); static device_probe_t uhso_probe; static device_attach_t uhso_attach; static device_detach_t uhso_detach; -static device_free_softc_t uhso_free_softc; +static void uhso_free_softc(struct uhso_softc *); static device_method_t uhso_methods[] = { DEVMETHOD(device_probe, uhso_probe), DEVMETHOD(device_attach, uhso_attach), DEVMETHOD(device_detach, uhso_detach), - DEVMETHOD(device_free_softc, uhso_free_softc), { 0, 0 } }; @@ -697,27 +696,28 @@ uhso_detach(device_t self) usbd_transfer_unsetup(sc->sc_if_xfer, UHSO_IFNET_MAX); } + device_claim_softc(self); + + uhso_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(uhso); static void -uhso_free_softc(device_t dev, void *arg) +uhso_free_softc(struct uhso_softc *sc) { - struct uhso_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void uhso_free(struct ucom_softc *ucom) { - uhso_free_softc(NULL, ucom->sc_parent); + uhso_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/u3g.c ============================================================================== --- head/sys/dev/usb/serial/u3g.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/u3g.c Wed Aug 15 15:42:57 2012 (r239299) @@ -118,7 +118,7 @@ struct u3g_softc { static device_probe_t u3g_probe; static device_attach_t u3g_attach; static device_detach_t u3g_detach; -static device_free_softc_t u3g_free_softc; +static void u3g_free_softc(struct u3g_softc *); static usb_callback_t u3g_write_callback; static usb_callback_t u3g_read_callback; @@ -169,7 +169,6 @@ static device_method_t u3g_methods[] = { DEVMETHOD(device_probe, u3g_probe), DEVMETHOD(device_attach, u3g_attach), DEVMETHOD(device_detach, u3g_detach), - DEVMETHOD(device_free_softc, u3g_free_softc), DEVMETHOD_END }; @@ -898,27 +897,28 @@ u3g_detach(device_t dev) for (subunit = 0; subunit != U3G_MAXPORTS; subunit++) usbd_transfer_unsetup(sc->sc_xfer[subunit], U3G_N_TRANSFER); + device_claim_softc(dev); + + u3g_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(u3g); static void -u3g_free_softc(device_t dev, void *arg) +u3g_free_softc(struct u3g_softc *sc) { - struct u3g_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void u3g_free(struct ucom_softc *ucom) { - u3g_free_softc(NULL, ucom->sc_parent); + u3g_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/uark.c ============================================================================== --- head/sys/dev/usb/serial/uark.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/uark.c Wed Aug 15 15:42:57 2012 (r239299) @@ -99,7 +99,7 @@ struct uark_softc { static device_probe_t uark_probe; static device_attach_t uark_attach; static device_detach_t uark_detach; -static device_free_softc_t uark_free_softc; +static void uark_free_softc(struct uark_softc *); static usb_callback_t uark_bulk_write_callback; static usb_callback_t uark_bulk_read_callback; @@ -157,7 +157,6 @@ static device_method_t uark_methods[] = DEVMETHOD(device_probe, uark_probe), DEVMETHOD(device_attach, uark_attach), DEVMETHOD(device_detach, uark_detach), - DEVMETHOD(device_free_softc, uark_free_softc), DEVMETHOD_END }; @@ -248,27 +247,28 @@ uark_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UARK_N_TRANSFER); + device_claim_softc(dev); + + uark_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(uark); static void -uark_free_softc(device_t dev, void *arg) +uark_free_softc(struct uark_softc *sc) { - struct uark_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void uark_free(struct ucom_softc *ucom) { - uark_free_softc(NULL, ucom->sc_parent); + uark_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/ubsa.c ============================================================================== --- head/sys/dev/usb/serial/ubsa.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/ubsa.c Wed Aug 15 15:42:57 2012 (r239299) @@ -176,7 +176,7 @@ struct ubsa_softc { static device_probe_t ubsa_probe; static device_attach_t ubsa_attach; static device_detach_t ubsa_detach; -static device_free_softc_t ubsa_free_softc; +static void ubsa_free_softc(struct ubsa_softc *); static usb_callback_t ubsa_write_callback; static usb_callback_t ubsa_read_callback; @@ -265,7 +265,6 @@ static device_method_t ubsa_methods[] = DEVMETHOD(device_probe, ubsa_probe), DEVMETHOD(device_attach, ubsa_attach), DEVMETHOD(device_detach, ubsa_detach), - DEVMETHOD(device_free_softc, ubsa_free_softc), DEVMETHOD_END }; @@ -354,27 +353,28 @@ ubsa_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UBSA_N_TRANSFER); + device_claim_softc(dev); + + ubsa_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(ubsa); static void -ubsa_free_softc(device_t dev, void *arg) +ubsa_free_softc(struct ubsa_softc *sc) { - struct ubsa_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void ubsa_free(struct ucom_softc *ucom) { - ubsa_free_softc(NULL, ucom->sc_parent); + ubsa_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/ubser.c ============================================================================== --- head/sys/dev/usb/serial/ubser.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/ubser.c Wed Aug 15 15:42:57 2012 (r239299) @@ -148,7 +148,7 @@ struct ubser_softc { static device_probe_t ubser_probe; static device_attach_t ubser_attach; static device_detach_t ubser_detach; -static device_free_softc_t ubser_free_softc; +static void ubser_free_softc(struct ubser_softc *); static usb_callback_t ubser_write_callback; static usb_callback_t ubser_read_callback; @@ -201,7 +201,6 @@ static device_method_t ubser_methods[] = DEVMETHOD(device_probe, ubser_probe), DEVMETHOD(device_attach, ubser_attach), DEVMETHOD(device_detach, ubser_detach), - DEVMETHOD(device_free_softc, ubser_free_softc), DEVMETHOD_END }; @@ -321,27 +320,28 @@ ubser_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UBSER_N_TRANSFER); + device_claim_softc(dev); + + ubser_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(ubser); static void -ubser_free_softc(device_t dev, void *arg) +ubser_free_softc(struct ubser_softc *sc) { - struct ubser_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void ubser_free(struct ucom_softc *ucom) { - ubser_free_softc(NULL, ucom->sc_parent); + ubser_free_softc(ucom->sc_parent); } static int Modified: head/sys/dev/usb/serial/uchcom.c ============================================================================== --- head/sys/dev/usb/serial/uchcom.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/uchcom.c Wed Aug 15 15:42:57 2012 (r239299) @@ -235,7 +235,7 @@ static void uchcom_poll(struct ucom_soft static device_probe_t uchcom_probe; static device_attach_t uchcom_attach; static device_detach_t uchcom_detach; -static device_free_softc_t uchcom_free_softc; +static void uchcom_free_softc(struct uchcom_softc *); static usb_callback_t uchcom_intr_callback; static usb_callback_t uchcom_write_callback; @@ -376,27 +376,28 @@ uchcom_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UCHCOM_N_TRANSFER); + device_claim_softc(dev); + + uchcom_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(uchcom); static void -uchcom_free_softc(device_t dev, void *arg) +uchcom_free_softc(struct uchcom_softc *sc) { - struct uchcom_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void uchcom_free(struct ucom_softc *ucom) { - uchcom_free_softc(NULL, ucom->sc_parent); + uchcom_free_softc(ucom->sc_parent); } /* ---------------------------------------------------------------------- @@ -864,7 +865,6 @@ static device_method_t uchcom_methods[] DEVMETHOD(device_probe, uchcom_probe), DEVMETHOD(device_attach, uchcom_attach), DEVMETHOD(device_detach, uchcom_detach), - DEVMETHOD(device_free_softc, uchcom_free_softc), DEVMETHOD_END }; Modified: head/sys/dev/usb/serial/ucycom.c ============================================================================== --- head/sys/dev/usb/serial/ucycom.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/ucycom.c Wed Aug 15 15:42:57 2012 (r239299) @@ -110,7 +110,7 @@ struct ucycom_softc { static device_probe_t ucycom_probe; static device_attach_t ucycom_attach; static device_detach_t ucycom_detach; -static device_free_softc_t ucycom_free_softc; +static void ucycom_free_softc(struct ucycom_softc *); static usb_callback_t ucycom_ctrl_write_callback; static usb_callback_t ucycom_intr_read_callback; @@ -163,7 +163,6 @@ static device_method_t ucycom_methods[] DEVMETHOD(device_probe, ucycom_probe), DEVMETHOD(device_attach, ucycom_attach), DEVMETHOD(device_detach, ucycom_detach), - DEVMETHOD(device_free_softc, ucycom_free_softc), DEVMETHOD_END }; @@ -299,27 +298,28 @@ ucycom_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UCYCOM_N_TRANSFER); + device_claim_softc(dev); + + ucycom_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(ucycom); static void -ucycom_free_softc(device_t dev, void *arg) +ucycom_free_softc(struct ucycom_softc *sc) { - struct ucycom_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void ucycom_free(struct ucom_softc *ucom) { - ucycom_free_softc(NULL, ucom->sc_parent); + ucycom_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/ufoma.c ============================================================================== --- head/sys/dev/usb/serial/ufoma.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/ufoma.c Wed Aug 15 15:42:57 2012 (r239299) @@ -202,7 +202,7 @@ struct ufoma_softc { static device_probe_t ufoma_probe; static device_attach_t ufoma_attach; static device_detach_t ufoma_detach; -static device_free_softc_t ufoma_free_softc; +static void ufoma_free_softc(struct ufoma_softc *); static usb_callback_t ufoma_ctrl_read_callback; static usb_callback_t ufoma_ctrl_write_callback; @@ -313,7 +313,6 @@ static device_method_t ufoma_methods[] = DEVMETHOD(device_probe, ufoma_probe), DEVMETHOD(device_attach, ufoma_attach), DEVMETHOD(device_detach, ufoma_detach), - DEVMETHOD(device_free_softc, ufoma_free_softc), DEVMETHOD_END }; @@ -498,27 +497,28 @@ ufoma_detach(device_t dev) } cv_destroy(&sc->sc_cv); + device_claim_softc(dev); + + ufoma_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(ufoma); static void -ufoma_free_softc(device_t dev, void *arg) +ufoma_free_softc(struct ufoma_softc *sc) { - struct ufoma_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void ufoma_free(struct ucom_softc *ucom) { - ufoma_free_softc(NULL, ucom->sc_parent); + ufoma_free_softc(ucom->sc_parent); } static void * Modified: head/sys/dev/usb/serial/uftdi.c ============================================================================== --- head/sys/dev/usb/serial/uftdi.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/uftdi.c Wed Aug 15 15:42:57 2012 (r239299) @@ -125,7 +125,7 @@ struct uftdi_param_config { static device_probe_t uftdi_probe; static device_attach_t uftdi_attach; static device_detach_t uftdi_detach; -static device_free_softc_t uftdi_free_softc; +static void uftdi_free_softc(struct uftdi_softc *); static usb_callback_t uftdi_write_callback; static usb_callback_t uftdi_read_callback; @@ -190,7 +190,6 @@ static device_method_t uftdi_methods[] = DEVMETHOD(device_probe, uftdi_probe), DEVMETHOD(device_attach, uftdi_attach), DEVMETHOD(device_detach, uftdi_detach), - DEVMETHOD(device_free_softc, uftdi_free_softc), DEVMETHOD_END }; @@ -960,27 +959,28 @@ uftdi_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UFTDI_N_TRANSFER); + device_claim_softc(dev); + + uftdi_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(uftdi); static void -uftdi_free_softc(device_t dev, void *arg) +uftdi_free_softc(struct uftdi_softc *sc) { - struct uftdi_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void uftdi_free(struct ucom_softc *ucom) { - uftdi_free_softc(NULL, ucom->sc_parent); + uftdi_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/ugensa.c ============================================================================== --- head/sys/dev/usb/serial/ugensa.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/ugensa.c Wed Aug 15 15:42:57 2012 (r239299) @@ -94,7 +94,7 @@ struct ugensa_softc { static device_probe_t ugensa_probe; static device_attach_t ugensa_attach; static device_detach_t ugensa_detach; -static device_free_softc_t ugensa_free_softc; +static void ugensa_free_softc(struct ugensa_softc *); static usb_callback_t ugensa_bulk_write_callback; static usb_callback_t ugensa_bulk_read_callback; @@ -141,7 +141,6 @@ static device_method_t ugensa_methods[] DEVMETHOD(device_probe, ugensa_probe), DEVMETHOD(device_attach, ugensa_attach), DEVMETHOD(device_detach, ugensa_detach), - DEVMETHOD(device_free_softc, ugensa_free_softc), DEVMETHOD_END }; @@ -272,27 +271,28 @@ ugensa_detach(device_t dev) usbd_transfer_unsetup(sc->sc_sub[x].sc_xfer, UGENSA_N_TRANSFER); } + device_claim_softc(dev); + + ugensa_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(ugensa); static void -ugensa_free_softc(device_t dev, void *arg) +ugensa_free_softc(struct ugensa_softc *sc) { - struct ugensa_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void ugensa_free(struct ucom_softc *ucom) { - ugensa_free_softc(NULL, ucom->sc_parent); + ugensa_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/uipaq.c ============================================================================== --- head/sys/dev/usb/serial/uipaq.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/uipaq.c Wed Aug 15 15:42:57 2012 (r239299) @@ -103,7 +103,7 @@ struct uipaq_softc { static device_probe_t uipaq_probe; static device_attach_t uipaq_attach; static device_detach_t uipaq_detach; -static device_free_softc_t uipaq_free_softc; +static void uipaq_free_softc(struct uipaq_softc *); static usb_callback_t uipaq_write_callback; static usb_callback_t uipaq_read_callback; @@ -1073,7 +1073,6 @@ static device_method_t uipaq_methods[] = DEVMETHOD(device_probe, uipaq_probe), DEVMETHOD(device_attach, uipaq_attach), DEVMETHOD(device_detach, uipaq_detach), - DEVMETHOD(device_free_softc, uipaq_free_softc), DEVMETHOD_END }; @@ -1182,27 +1181,28 @@ uipaq_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UIPAQ_N_TRANSFER); + device_claim_softc(dev); + + uipaq_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(uipaq); static void -uipaq_free_softc(device_t dev, void *arg) +uipaq_free_softc(struct uipaq_softc *sc) { - struct uipaq_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void uipaq_free(struct ucom_softc *ucom) { - uipaq_free_softc(NULL, ucom->sc_parent); + uipaq_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/umcs.c ============================================================================== --- head/sys/dev/usb/serial/umcs.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/umcs.c Wed Aug 15 15:42:57 2012 (r239299) @@ -176,7 +176,7 @@ static void umcs7840_poll(struct ucom_so static device_probe_t umcs7840_probe; static device_attach_t umcs7840_attach; static device_detach_t umcs7840_detach; -static device_free_softc_t umcs7840_free_softc; +static void umcs7840_free_softc(struct umcs7840_softc *); static usb_callback_t umcs7840_intr_callback; static usb_callback_t umcs7840_read_callback1; @@ -265,7 +265,6 @@ static device_method_t umcs7840_methods[ DEVMETHOD(device_probe, umcs7840_probe), DEVMETHOD(device_attach, umcs7840_attach), DEVMETHOD(device_detach, umcs7840_detach), - DEVMETHOD(device_free_softc, umcs7840_free_softc), DEVMETHOD_END }; @@ -413,27 +412,28 @@ umcs7840_detach(device_t dev) usbd_transfer_unsetup(sc->sc_ports[sc->sc_ucom[subunit].sc_portno].sc_xfer, UMCS7840_N_TRANSFERS); usbd_transfer_unsetup(&sc->sc_intr_xfer, 1); + device_claim_softc(dev); + + umcs7840_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(umcs7840); static void -umcs7840_free_softc(device_t dev, void *arg) +umcs7840_free_softc(struct umcs7840_softc *sc) { - struct umcs7840_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void umcs7840_free(struct ucom_softc *ucom) { - umcs7840_free_softc(NULL, ucom->sc_parent); + umcs7840_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/umct.c ============================================================================== --- head/sys/dev/usb/serial/umct.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/umct.c Wed Aug 15 15:42:57 2012 (r239299) @@ -122,7 +122,7 @@ struct umct_softc { static device_probe_t umct_probe; static device_attach_t umct_attach; static device_detach_t umct_detach; -static device_free_softc_t umct_free_softc; +static void umct_free_softc(struct umct_softc *); static usb_callback_t umct_intr_callback; static usb_callback_t umct_intr_callback_sub; @@ -206,7 +206,6 @@ static device_method_t umct_methods[] = DEVMETHOD(device_probe, umct_probe), DEVMETHOD(device_attach, umct_attach), DEVMETHOD(device_detach, umct_detach), - DEVMETHOD(device_free_softc, umct_free_softc), DEVMETHOD_END }; @@ -314,27 +313,28 @@ umct_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UMCT_N_TRANSFER); + device_claim_softc(dev); + + umct_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(umct); static void -umct_free_softc(device_t dev, void *arg) +umct_free_softc(struct umct_softc *sc) { - struct umct_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void umct_free(struct ucom_softc *ucom) { - umct_free_softc(NULL, ucom->sc_parent); + umct_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/umodem.c ============================================================================== --- head/sys/dev/usb/serial/umodem.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/umodem.c Wed Aug 15 15:42:57 2012 (r239299) @@ -178,7 +178,7 @@ struct umodem_softc { static device_probe_t umodem_probe; static device_attach_t umodem_attach; static device_detach_t umodem_detach; -static device_free_softc_t umodem_free_softc; +static void umodem_free_softc(struct umodem_softc *); static usb_callback_t umodem_intr_callback; static usb_callback_t umodem_write_callback; @@ -259,7 +259,6 @@ static device_method_t umodem_methods[] DEVMETHOD(device_probe, umodem_probe), DEVMETHOD(device_attach, umodem_attach), DEVMETHOD(device_detach, umodem_detach), - DEVMETHOD(device_free_softc, umodem_free_softc), DEVMETHOD_END }; @@ -881,27 +880,28 @@ umodem_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UMODEM_N_TRANSFER); + device_claim_softc(dev); + + umodem_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(umodem); static void -umodem_free_softc(device_t dev, void *arg) +umodem_free_softc(struct umodem_softc *sc) { - struct umodem_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void umodem_free(struct ucom_softc *ucom) { - umodem_free_softc(NULL, ucom->sc_parent); + umodem_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/umoscom.c ============================================================================== --- head/sys/dev/usb/serial/umoscom.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/umoscom.c Wed Aug 15 15:42:57 2012 (r239299) @@ -189,7 +189,7 @@ struct umoscom_softc { static device_probe_t umoscom_probe; static device_attach_t umoscom_attach; static device_detach_t umoscom_detach; -static device_free_softc_t umoscom_free_softc; +static void umoscom_free_softc(struct umoscom_softc *); static usb_callback_t umoscom_write_callback; static usb_callback_t umoscom_read_callback; @@ -267,7 +267,6 @@ static device_method_t umoscom_methods[] DEVMETHOD(device_probe, umoscom_probe), DEVMETHOD(device_attach, umoscom_attach), DEVMETHOD(device_detach, umoscom_detach), - DEVMETHOD(device_free_softc, umoscom_free_softc), DEVMETHOD_END }; @@ -360,27 +359,28 @@ umoscom_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UMOSCOM_N_TRANSFER); + device_claim_softc(dev); + + umoscom_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(umoscom); static void -umoscom_free_softc(device_t dev, void *arg) +umoscom_free_softc(struct umoscom_softc *sc) { - struct umoscom_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void umoscom_free(struct ucom_softc *ucom) { - umoscom_free_softc(NULL, ucom->sc_parent); + umoscom_free_softc(ucom->sc_parent); } static void Modified: head/sys/dev/usb/serial/uplcom.c ============================================================================== --- head/sys/dev/usb/serial/uplcom.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/uplcom.c Wed Aug 15 15:42:57 2012 (r239299) @@ -193,7 +193,7 @@ static void uplcom_poll(struct ucom_soft static device_probe_t uplcom_probe; static device_attach_t uplcom_attach; static device_detach_t uplcom_detach; -static device_free_softc_t uplcom_free_softc; +static void uplcom_free_softc(struct uplcom_softc *); static usb_callback_t uplcom_intr_callback; static usb_callback_t uplcom_write_callback; @@ -318,7 +318,6 @@ static device_method_t uplcom_methods[] DEVMETHOD(device_probe, uplcom_probe), DEVMETHOD(device_attach, uplcom_attach), DEVMETHOD(device_detach, uplcom_detach), - DEVMETHOD(device_free_softc, uplcom_free_softc), DEVMETHOD_END }; @@ -471,27 +470,28 @@ uplcom_detach(device_t dev) ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); usbd_transfer_unsetup(sc->sc_xfer, UPLCOM_N_TRANSFER); + device_claim_softc(dev); + + uplcom_free_softc(sc); + return (0); } UCOM_UNLOAD_DRAIN(uplcom); static void -uplcom_free_softc(device_t dev, void *arg) +uplcom_free_softc(struct uplcom_softc *sc) { - struct uplcom_softc *sc = arg; - if (ucom_unref(&sc->sc_super_ucom)) { - if (mtx_initialized(&sc->sc_mtx)) - mtx_destroy(&sc->sc_mtx); - device_free_softc(dev, sc); + mtx_destroy(&sc->sc_mtx); + device_free_softc(sc); } } static void uplcom_free(struct ucom_softc *ucom) { - uplcom_free_softc(NULL, ucom->sc_parent); + uplcom_free_softc(ucom->sc_parent); } static usb_error_t Modified: head/sys/dev/usb/serial/usb_serial.c ============================================================================== --- head/sys/dev/usb/serial/usb_serial.c Wed Aug 15 15:35:20 2012 (r239298) +++ head/sys/dev/usb/serial/usb_serial.c Wed Aug 15 15:42:57 2012 (r239299) @@ -284,11 +284,14 @@ ucom_attach(struct ucom_super_softc *ssc return (error); } ssc->sc_subunits = subunits; + ssc->sc_flag = UCOM_FLAG_ATTACHED | + UCOM_FLAG_FREE_UNIT; - if (callback->ucom_free == NULL) { - ssc->sc_wait_refs = 1; - ucom_ref(ssc); - } + if (callback->ucom_free == NULL) + ssc->sc_flag |= UCOM_FLAG_WAIT_REFS; + + /* increment reference count */ + ucom_ref(ssc); for (subunit = 0; subunit < ssc->sc_subunits; subunit++) { sc[subunit].sc_subunit = subunit; @@ -316,15 +319,15 @@ ucom_attach(struct ucom_super_softc *ssc } /* - * NOTE: the following function will do nothing if - * the structure pointed to by "ssc" and "sc" is zero. + * The following function will do nothing if the structure pointed to + * by "ssc" and "sc" is zero or has already been detached. */ void ucom_detach(struct ucom_super_softc *ssc, struct ucom_softc *sc) { int subunit; - if (ssc->sc_subunits == 0) + if (!(ssc->sc_flag & UCOM_FLAG_ATTACHED)) return; /* not initialized */ if (ssc->sc_sysctl_ttyname != NULL) { @@ -350,17 +353,20 @@ ucom_detach(struct ucom_super_softc *ssc } usb_proc_free(&ssc->sc_tq); - if (ssc->sc_wait_refs != 0) { - ucom_unref(ssc); + ucom_unref(ssc); + + if (ssc->sc_flag & UCOM_FLAG_WAIT_REFS) ucom_drain(ssc); - } + + /* make sure we don't detach twice */ + ssc->sc_flag &= ~UCOM_FLAG_ATTACHED; } void ucom_drain(struct ucom_super_softc *ssc) { mtx_lock(&ucom_mtx); - while (ssc->sc_refs >= 2) { + while (ssc->sc_refs > 0) { printf("ucom: Waiting for a TTY device to close.\n"); usb_pause_mtx(&ucom_mtx, hz); } @@ -1513,6 +1519,24 @@ ucom_ref(struct ucom_super_softc *ssc) } *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 15:53:28 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 74A4E1065672; Wed, 15 Aug 2012 15:53:28 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5F7D28FC1F; Wed, 15 Aug 2012 15:53:28 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FFrS6v075678; Wed, 15 Aug 2012 15:53:28 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FFrSw8075676; Wed, 15 Aug 2012 15:53:28 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208151553.q7FFrSw8075676@svn.freebsd.org> From: Konstantin Belousov Date: Wed, 15 Aug 2012 15:53:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239300 - head/sys/dev/ath/ath_rate/sample X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 15:53:28 -0000 Author: kib Date: Wed Aug 15 15:53:27 2012 New Revision: 239300 URL: http://svn.freebsd.org/changeset/base/239300 Log: Fix build Modified: head/sys/dev/ath/ath_rate/sample/sample.c Modified: head/sys/dev/ath/ath_rate/sample/sample.c ============================================================================== --- head/sys/dev/ath/ath_rate/sample/sample.c Wed Aug 15 15:42:57 2012 (r239299) +++ head/sys/dev/ath/ath_rate/sample/sample.c Wed Aug 15 15:53:27 2012 (r239300) @@ -1296,11 +1296,11 @@ sample_stats(void *arg, struct ieee80211 uint64_t mask; int rix, y; - printf("\n[%s] refcnt %d static_rix (%d %s) ratemask 0x%qx\n", + printf("\n[%s] refcnt %d static_rix (%d %s) ratemask 0x%jx\n", ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni), dot11rate(rt, sn->static_rix), dot11rate_label(rt, sn->static_rix), - sn->ratemask); + (uintmax_t)sn->ratemask); for (y = 0; y < NUM_PACKET_SIZE_BINS; y++) { printf("[%4u] cur rix %d (%d %s) since switch: packets %d ticks %u\n", bin_to_size(y), sn->current_rix[y], From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 15:56:21 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E494C106564A; Wed, 15 Aug 2012 15:56:21 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CEEA48FC16; Wed, 15 Aug 2012 15:56:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FFuLGH076023; Wed, 15 Aug 2012 15:56:21 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FFuLnM076015; Wed, 15 Aug 2012 15:56:21 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208151556.q7FFuLnM076015@svn.freebsd.org> From: Konstantin Belousov Date: Wed, 15 Aug 2012 15:56:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239301 - in head/sys: kern nlm sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 15:56:22 -0000 Author: kib Date: Wed Aug 15 15:56:21 2012 New Revision: 239301 URL: http://svn.freebsd.org/changeset/base/239301 Log: Add a sysctl kern.pid_max, which limits the maximum pid the system is allowed to allocate, and corresponding tunable with the same name. Note that existing processes with higher pids are left intact. MFC after: 1 week Modified: head/sys/kern/init_main.c head/sys/kern/kern_fork.c head/sys/kern/kern_mib.c head/sys/kern/kern_thread.c head/sys/kern/subr_param.c head/sys/nlm/nlm_advlock.c head/sys/sys/proc.h Modified: head/sys/kern/init_main.c ============================================================================== --- head/sys/kern/init_main.c Wed Aug 15 15:53:27 2012 (r239300) +++ head/sys/kern/init_main.c Wed Aug 15 15:56:21 2012 (r239301) @@ -476,6 +476,7 @@ proc0_init(void *dummy __unused) knlist_init_mtx(&p->p_klist, &p->p_mtx); STAILQ_INIT(&p->p_ktr); p->p_nice = NZERO; + /* pid_max cannot be greater then PID_MAX */ td->td_tid = PID_MAX + 1; LIST_INSERT_HEAD(TIDHASH(td->td_tid), td, td_hash); td->td_state = TDS_RUNNING; Modified: head/sys/kern/kern_fork.c ============================================================================== --- head/sys/kern/kern_fork.c Wed Aug 15 15:53:27 2012 (r239300) +++ head/sys/kern/kern_fork.c Wed Aug 15 15:56:21 2012 (r239301) @@ -209,8 +209,8 @@ sysctl_kern_randompid(SYSCTL_HANDLER_ARG pid = randompid; error = sysctl_handle_int(oidp, &pid, 0, req); if (error == 0 && req->newptr != NULL) { - if (pid < 0 || pid > PID_MAX - 100) /* out of range */ - pid = PID_MAX - 100; + if (pid < 0 || pid > pid_max - 100) /* out of range */ + pid = pid_max - 100; else if (pid < 2) /* NOP */ pid = 0; else if (pid < 100) /* Make it reasonable */ @@ -259,8 +259,8 @@ retry: * restart somewhat above 0, as the low-numbered procs * tend to include daemons that don't exit. */ - if (trypid >= PID_MAX) { - trypid = trypid % PID_MAX; + if (trypid >= pid_max) { + trypid = trypid % pid_max; if (trypid < 100) trypid += 100; pidchecked = 0; Modified: head/sys/kern/kern_mib.c ============================================================================== --- head/sys/kern/kern_mib.c Wed Aug 15 15:53:27 2012 (r239300) +++ head/sys/kern/kern_mib.c Wed Aug 15 15:56:21 2012 (r239301) @@ -499,6 +499,30 @@ SYSCTL_INT(_debug_sizeof, OID_AUTO, vnod SYSCTL_INT(_debug_sizeof, OID_AUTO, proc, CTLFLAG_RD, 0, sizeof(struct proc), "sizeof(struct proc)"); +static int +sysctl_kern_pid_max(SYSCTL_HANDLER_ARGS) +{ + int error, pm; + + pm = pid_max; + error = sysctl_handle_int(oidp, &pm, 0, req); + if (error || !req->newptr) + return (error); + sx_xlock(&proctree_lock); + sx_xlock(&allproc_lock); + /* Only permit the values less then PID_MAX. */ + if (pm > PID_MAX) + error = EINVAL; + else + pid_max = pm; + sx_xunlock(&allproc_lock); + sx_xunlock(&proctree_lock); + return (error); +} +SYSCTL_PROC(_kern, OID_AUTO, pid_max, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_TUN | + CTLFLAG_MPSAFE, 0, 0, sysctl_kern_pid_max, "I", + "Maximum allowed pid"); + #include #include SYSCTL_INT(_debug_sizeof, OID_AUTO, bio, CTLFLAG_RD, Modified: head/sys/kern/kern_thread.c ============================================================================== --- head/sys/kern/kern_thread.c Wed Aug 15 15:53:27 2012 (r239300) +++ head/sys/kern/kern_thread.c Wed Aug 15 15:56:21 2012 (r239301) @@ -269,7 +269,11 @@ threadinit(void) { mtx_init(&tid_lock, "TID lock", NULL, MTX_DEF); - /* leave one number for thread0 */ + + /* + * pid_max cannot be greater then PID_MAX. + * leave one number for thread0. + */ tid_unrhdr = new_unrhdr(PID_MAX + 2, INT_MAX, &tid_lock); thread_zone = uma_zcreate("THREAD", sched_sizeof_thread(), Modified: head/sys/kern/subr_param.c ============================================================================== --- head/sys/kern/subr_param.c Wed Aug 15 15:53:27 2012 (r239300) +++ head/sys/kern/subr_param.c Wed Aug 15 15:56:21 2012 (r239301) @@ -41,12 +41,13 @@ __FBSDID("$FreeBSD$"); #include "opt_msgbuf.h" #include "opt_maxusers.h" -#include #include #include #include -#include +#include #include +#include +#include #include #include @@ -92,6 +93,7 @@ int ncallout; /* maximum # of timer ev int nbuf; int ngroups_max; /* max # groups per process */ int nswbuf; +pid_t pid_max = PID_MAX; long maxswzone; /* max swmeta KVA storage */ long maxbcache; /* max buffer cache KVA storage */ long maxpipekva; /* Limit on pipe KVA */ @@ -250,6 +252,13 @@ init_param1(void) TUNABLE_INT_FETCH("kern.ngroups", &ngroups_max); if (ngroups_max < NGROUPS_MAX) ngroups_max = NGROUPS_MAX; + + /* + * Only allow to lower the maximal pid. + */ + TUNABLE_INT_FETCH("kern.pid_max", &pid_max); + if (pid_max > PID_MAX) + pid_max = PID_MAX; } /* Modified: head/sys/nlm/nlm_advlock.c ============================================================================== --- head/sys/nlm/nlm_advlock.c Wed Aug 15 15:53:27 2012 (r239300) +++ head/sys/nlm/nlm_advlock.c Wed Aug 15 15:56:21 2012 (r239301) @@ -98,6 +98,7 @@ nlm_client_init(void *dummy) int i; mtx_init(&nlm_svid_lock, "NLM svid lock", NULL, MTX_DEF); + /* pid_max cannot be greater then PID_MAX */ nlm_svid_allocator = new_unrhdr(PID_MAX + 2, INT_MAX, &nlm_svid_lock); for (i = 0; i < NLM_SVID_HASH_SIZE; i++) LIST_INIT(&nlm_file_svids[i]); Modified: head/sys/sys/proc.h ============================================================================== --- head/sys/sys/proc.h Wed Aug 15 15:53:27 2012 (r239300) +++ head/sys/sys/proc.h Wed Aug 15 15:56:21 2012 (r239301) @@ -696,11 +696,12 @@ MALLOC_DECLARE(M_SUBPROC); #define FIRST_THREAD_IN_PROC(p) TAILQ_FIRST(&(p)->p_threads) /* - * We use process IDs <= PID_MAX; PID_MAX + 1 must also fit in a pid_t, - * as it is used to represent "no process group". + * We use process IDs <= pid_max <= PID_MAX; PID_MAX + 1 must also fit + * in a pid_t, as it is used to represent "no process group". */ #define PID_MAX 99999 #define NO_PID 100000 +extern pid_t pid_max; #define SESS_LEADER(p) ((p)->p_session->s_leader == (p)) From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 16:01:46 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3B4A6106564A; Wed, 15 Aug 2012 16:01:46 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 24CCB8FC15; Wed, 15 Aug 2012 16:01:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FG1jOs076596; Wed, 15 Aug 2012 16:01:45 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FG1jQv076592; Wed, 15 Aug 2012 16:01:45 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208151601.q7FG1jQv076592@svn.freebsd.org> From: Konstantin Belousov Date: Wed, 15 Aug 2012 16:01:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239302 - head/share/man/man4 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 16:01:46 -0000 Author: kib Date: Wed Aug 15 16:01:45 2012 New Revision: 239302 URL: http://svn.freebsd.org/changeset/base/239302 Log: Add a short man page describing how to run a.out binaries on the current kernels. MFC after: 1 week Added: head/share/man/man4/aout.4 (contents, props changed) Modified: head/share/man/man4/Makefile Modified: head/share/man/man4/Makefile ============================================================================== --- head/share/man/man4/Makefile Wed Aug 15 15:56:21 2012 (r239301) +++ head/share/man/man4/Makefile Wed Aug 15 16:01:45 2012 (r239302) @@ -40,6 +40,7 @@ MAN= aac.4 \ ${_bxe.4} \ amr.4 \ an.4 \ + ${_aout.4} \ ${_apic.4} \ arcmsr.4 \ ${_asmc.4} \ @@ -710,6 +711,7 @@ _acpi_sony.4= acpi_sony.4 _acpi_toshiba.4=acpi_toshiba.4 _acpi_wmi.4= acpi_wmi.4 _aesni.4= aesni.4 +_aout.4= aout.4 _apic.4= apic.4 _atrtc.4= atrtc.4 _attimer.4= attimer.4 Added: head/share/man/man4/aout.4 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man4/aout.4 Wed Aug 15 16:01:45 2012 (r239302) @@ -0,0 +1,145 @@ +.\" Copyright (c) 2012 Konstantin Belousov +.\" +.\" 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 ``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 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; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd August 14, 2012 +.Dt AOUT 4 +.Os +.Sh NAME +.Nm aout +.Nd kernel support for executing binary files in legacy a.out format +.Sh SYNOPSIS +.Bd -literal -offset indent +kldload a.out +.Ed +.Sh DESCRIPTION +The +.Xr a.out 5 +executable format was used by +.Fx +of versions \*(Lt 3.0. +Since only i386 architecture was supported at that time, the +.Xr a.out 5 +executables can only be activated on the platforms that support +execution of i386 code, which are i386, amd64 and (partially) ia64. +.Pp +To add kernel support for old syscalls and old syscall invocation methods, +you need to place the following options in the kernel configuration file: +.Bd -ragged -offset indent +.Cd "options COMPAT_43" +.br +.Cd "options COMPAT_FREEBSD32" +.Ed +.Pp +The +.Va COMPAT_FREEBSD32 +option is only required on 64-bit CPU architectures. +.Pp +The +.Va aout.ko +module must be loaded to get support for +.Xr a.out 5 +image activator. +Use the command +.Bd -ragged -offset indent +.Ic kldload aout +.Ed +or put the following line in +.Xr loader.conf 5 : +.Bd -literal -offset indent +aout_load="YES" +.Ed +.Pp +The +.Xr a.out 5 +format was mainstream quite long time ago. +The reasonable default settings and security requirements of the +modern OS contradict to the default environment of that time and +require adjustments of the system to mimic natural environment for +old binaries. +.Pp +The following +.Xr sysctl 8 +tunables are useful for this: +.Bl -tag -offset indent -width "XXXXXXXXXXXXXXXXXXXXXXXXX" +.It Xo Va security.bsd.map_at_zero +.Xc +Set to 1 to allow the mapping of process pages at the address 0. +Some very old +.Va ZMAGIC +executable images require the text mapping at the address 0. +.It Xo Va kern.pid_max +.Xc +Old versions of +.Fx +used 16-bit types for +.Vt pid_t . +Current kernels use 32-bit type for +.Vt pid_t , +and allow the process id's up to 99999. +Such values cannot be represented by old +.Vt pid_t , +mostly causing issues for the processes using +.Xr wait 2 +syscalls, for instance, shells. +Set the sysctl to 30000 to work around the problem. +.It Xo Va kern.elf32.read_exec +.Xc +Set to 1 to force any accessible memory mapping performed by 32-bit +process to allow execution, see +.Xr mmap 2 . +Old i386 CPUs did not have a bit in PTE which disallowed execution +from the page, so many old programs did not specified +.Va PROT_EXEC +even for mapping of executable code. +The sysctl forces +.Va PROT_EXEC +if mapping has any access allowed at all. +The setting is only needed if the host architecture allows +non-executable mappings. +.El +.Sh SEE ALSO +.Xr execve 2 , +.Xr a.out 5 , +.Xr elf 5 , +.Xr sysctl 8 . +.Sh BUGS +On 64bit architectures, not all wrappers for older syscalls are implemented. +.Sh HISTORY +The +.Xr a.out 5 +executable format was used on ancient +.At +and served as the main executable format for +.Fx +from inception up to +.Fx 2.2.9 . +In +.Fx 3.0 +it was superseded by +.Xr elf 5 . +.Sh AUTHORS +The +.Nm +manual page was written by +.An Konstantin Belousov Aq kib@FreeBSD.org . From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 16:19:40 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9AF6C106566C; Wed, 15 Aug 2012 16:19:40 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 82AF68FC12; Wed, 15 Aug 2012 16:19:40 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FGJexe078475; Wed, 15 Aug 2012 16:19:40 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FGJe8j078467; Wed, 15 Aug 2012 16:19:40 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208151619.q7FGJe8j078467@svn.freebsd.org> From: Hans Petter Selasky Date: Wed, 15 Aug 2012 16:19:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239303 - in head: share/man/man9 sys/cddl/contrib/opensolaris/uts/common/dtrace sys/dev/drm sys/dev/drm2 sys/dev/ksyms sys/fs/devfs sys/ofed/include/linux X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 16:19:40 -0000 Author: hselasky Date: Wed Aug 15 16:19:39 2012 New Revision: 239303 URL: http://svn.freebsd.org/changeset/base/239303 Log: Streamline use of cdevpriv and correct some corner cases. 1) It is not useful to call "devfs_clear_cdevpriv()" from "d_close" callbacks, hence for example read, write, ioctl and so on might be sleeping at the time of "d_close" being called and then then freed private data can still be accessed. Examples: dtrace, linux_compat, ksyms (all fixed by this patch) 2) In sys/dev/drm* there are some cases in which memory will be freed twice, if open fails, first by code in the open routine, secondly by the cdevpriv destructor. Move registration of the cdevpriv to the end of the drm open routines. 3) devfs_clear_cdevpriv() is not called if the "d_open" callback registered cdevpriv data and the "d_open" callback function returned an error. Fix this. Discussed with: phk MFC after: 2 weeks Modified: head/share/man/man9/devfs_set_cdevpriv.9 head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c head/sys/dev/drm/drm_fops.c head/sys/dev/drm2/drm_fops.c head/sys/dev/ksyms/ksyms.c head/sys/fs/devfs/devfs_vnops.c head/sys/ofed/include/linux/linux_compat.c Modified: head/share/man/man9/devfs_set_cdevpriv.9 ============================================================================== --- head/share/man/man9/devfs_set_cdevpriv.9 Wed Aug 15 16:01:45 2012 (r239302) +++ head/share/man/man9/devfs_set_cdevpriv.9 Wed Aug 15 16:19:39 2012 (r239303) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd September 8, 2008 +.Dd August 15, 2012 .Dt DEVFS_CDEVPRIV 9 .Os .Sh NAME @@ -79,6 +79,10 @@ finished operating, the callback is called, with private data supplied .Va data argument. +The +.Fn devfs_clear_cdevpriv +function will be also be called if the open callback +function returns an error code. .Pp On the last filedescriptor close, system automatically arranges .Fn devfs_clear_cdevpriv Modified: head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c Wed Aug 15 16:01:45 2012 (r239302) +++ head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c Wed Aug 15 16:19:39 2012 (r239303) @@ -15517,8 +15517,6 @@ dtrace_close(struct cdev *dev, int flags kmem_free(state, 0); #if __FreeBSD_version < 800039 dev->si_drv1 = NULL; -#else - devfs_clear_cdevpriv(); #endif #endif } Modified: head/sys/dev/drm/drm_fops.c ============================================================================== --- head/sys/dev/drm/drm_fops.c Wed Aug 15 16:01:45 2012 (r239302) +++ head/sys/dev/drm/drm_fops.c Wed Aug 15 16:19:39 2012 (r239303) @@ -57,12 +57,6 @@ int drm_open_helper(struct cdev *kdev, i return ENOMEM; } - retcode = devfs_set_cdevpriv(priv, drm_close); - if (retcode != 0) { - free(priv, DRM_MEM_FILES); - return retcode; - } - DRM_LOCK(); priv->dev = dev; priv->uid = p->td_ucred->cr_svuid; @@ -76,7 +70,6 @@ int drm_open_helper(struct cdev *kdev, i /* shared code returns -errno */ retcode = -dev->driver->open(dev, priv); if (retcode != 0) { - devfs_clear_cdevpriv(); free(priv, DRM_MEM_FILES); DRM_UNLOCK(); return retcode; @@ -89,7 +82,12 @@ int drm_open_helper(struct cdev *kdev, i TAILQ_INSERT_TAIL(&dev->files, priv, link); DRM_UNLOCK(); kdev->si_drv1 = dev; - return 0; + + retcode = devfs_set_cdevpriv(priv, drm_close); + if (retcode != 0) + drm_close(priv); + + return (retcode); } Modified: head/sys/dev/drm2/drm_fops.c ============================================================================== --- head/sys/dev/drm2/drm_fops.c Wed Aug 15 16:01:45 2012 (r239302) +++ head/sys/dev/drm2/drm_fops.c Wed Aug 15 16:19:39 2012 (r239303) @@ -57,12 +57,6 @@ int drm_open_helper(struct cdev *kdev, i return ENOMEM; } - retcode = devfs_set_cdevpriv(priv, drm_close); - if (retcode != 0) { - free(priv, DRM_MEM_FILES); - return retcode; - } - DRM_LOCK(dev); priv->dev = dev; priv->uid = p->td_ucred->cr_svuid; @@ -83,7 +77,6 @@ int drm_open_helper(struct cdev *kdev, i /* shared code returns -errno */ retcode = -dev->driver->open(dev, priv); if (retcode != 0) { - devfs_clear_cdevpriv(); free(priv, DRM_MEM_FILES); DRM_UNLOCK(dev); return retcode; @@ -96,7 +89,12 @@ int drm_open_helper(struct cdev *kdev, i TAILQ_INSERT_TAIL(&dev->files, priv, link); DRM_UNLOCK(dev); kdev->si_drv1 = dev; - return 0; + + retcode = devfs_set_cdevpriv(priv, drm_close); + if (retcode != 0) + drm_close(priv); + + return (retcode); } static bool Modified: head/sys/dev/ksyms/ksyms.c ============================================================================== --- head/sys/dev/ksyms/ksyms.c Wed Aug 15 16:01:45 2012 (r239302) +++ head/sys/dev/ksyms/ksyms.c Wed Aug 15 16:19:39 2012 (r239303) @@ -579,8 +579,6 @@ ksyms_close(struct cdev *dev, int flags /* Unmap the buffer from the process address space. */ error = copyout_unmap(td, sc->sc_uaddr, sc->sc_usize); - devfs_clear_cdevpriv(); - return (error); } Modified: head/sys/fs/devfs/devfs_vnops.c ============================================================================== --- head/sys/fs/devfs/devfs_vnops.c Wed Aug 15 16:01:45 2012 (r239302) +++ head/sys/fs/devfs/devfs_vnops.c Wed Aug 15 16:19:39 2012 (r239303) @@ -1081,6 +1081,9 @@ devfs_open(struct vop_open_args *ap) error = dsw->d_fdopen(dev, ap->a_mode, td, fp); else error = dsw->d_open(dev, ap->a_mode, S_IFCHR, td); + /* cleanup any cdevpriv upon error */ + if (error != 0) + devfs_clear_cdevpriv(); td->td_fpop = fpop; vn_lock(vp, vlocked | LK_RETRY); Modified: head/sys/ofed/include/linux/linux_compat.c ============================================================================== --- head/sys/ofed/include/linux/linux_compat.c Wed Aug 15 16:01:45 2012 (r239302) +++ head/sys/ofed/include/linux/linux_compat.c Wed Aug 15 16:19:39 2012 (r239303) @@ -263,7 +263,6 @@ linux_dev_close(struct cdev *dev, int ff if ((error = devfs_get_cdevpriv((void **)&filp)) != 0) return (error); filp->f_flags = file->f_flag; - devfs_clear_cdevpriv(); return (0); } From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 16:28:02 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C69E4106568B; Wed, 15 Aug 2012 16:28:02 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-pb0-f54.google.com (mail-pb0-f54.google.com [209.85.160.54]) by mx1.freebsd.org (Postfix) with ESMTP id 87F4D8FC1D; Wed, 15 Aug 2012 16:28:02 +0000 (UTC) Received: by pbbrp2 with SMTP id rp2so46738pbb.13 for ; Wed, 15 Aug 2012 09:27:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=94J19YRYAuAh8NHD6qE8K8pS5esS3FQlCUBUHlQRo00=; b=TeYkajzB3HJEwey9SUNhrRSoJ/0i74bnJadFTcbvbn9IBzfCSeC76O96JwJI98KDE1 3xiRYPpJhwI2g3A0pMCkeG/+jz6J1SIqPsdz3GcvtjUepkHqM4lbFT7h4hsCXPPlOM9H jVhgO4EwiR8VvmvgeWY8ay7mVBl7IIgNx2FwpfkHCrf/TDKJUtTpusgc7MIuou1Q6bNQ QP6PvsRLBva0MqUXFpZ5PtTHT6H1/Mr4D+zOOod6TzwN3pdaB45h3v99TVrHL2atJO8g DqooH9dfGNgZ8eelbyU+T8mEmpp9IYYiZCNuB0xL7lX8Fx8Kv2+p7jI4Y+q1cVTdb1T2 EIXA== MIME-Version: 1.0 Received: by 10.68.192.40 with SMTP id hd8mr24174876pbc.125.1345048076239; Wed, 15 Aug 2012 09:27:56 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.68.43.169 with HTTP; Wed, 15 Aug 2012 09:27:56 -0700 (PDT) In-Reply-To: <201208151553.q7FFrSw8075676@svn.freebsd.org> References: <201208151553.q7FFrSw8075676@svn.freebsd.org> Date: Wed, 15 Aug 2012 09:27:56 -0700 X-Google-Sender-Auth: cOsAwA287252HwufxEdIK19incg Message-ID: From: Adrian Chadd To: Konstantin Belousov Content-Type: text/plain; charset=ISO-8859-1 Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239300 - head/sys/dev/ath/ath_rate/sample X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 16:28:02 -0000 Thanks. I need to tattoo unitmax_t and %j somewhere nearby... Adrian On 15 August 2012 08:53, Konstantin Belousov wrote: > Author: kib > Date: Wed Aug 15 15:53:27 2012 > New Revision: 239300 > URL: http://svn.freebsd.org/changeset/base/239300 > > Log: > Fix build > > Modified: > head/sys/dev/ath/ath_rate/sample/sample.c > > Modified: head/sys/dev/ath/ath_rate/sample/sample.c > ============================================================================== > --- head/sys/dev/ath/ath_rate/sample/sample.c Wed Aug 15 15:42:57 2012 (r239299) > +++ head/sys/dev/ath/ath_rate/sample/sample.c Wed Aug 15 15:53:27 2012 (r239300) > @@ -1296,11 +1296,11 @@ sample_stats(void *arg, struct ieee80211 > uint64_t mask; > int rix, y; > > - printf("\n[%s] refcnt %d static_rix (%d %s) ratemask 0x%qx\n", > + printf("\n[%s] refcnt %d static_rix (%d %s) ratemask 0x%jx\n", > ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni), > dot11rate(rt, sn->static_rix), > dot11rate_label(rt, sn->static_rix), > - sn->ratemask); > + (uintmax_t)sn->ratemask); > for (y = 0; y < NUM_PACKET_SIZE_BINS; y++) { > printf("[%4u] cur rix %d (%d %s) since switch: packets %d ticks %u\n", > bin_to_size(y), sn->current_rix[y], From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 17:12:41 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 014521065673; Wed, 15 Aug 2012 17:12:41 +0000 (UTC) (envelope-from jfv@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E06618FC0A; Wed, 15 Aug 2012 17:12:40 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FHCeWU084368; Wed, 15 Aug 2012 17:12:40 GMT (envelope-from jfv@svn.freebsd.org) Received: (from jfv@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FHCeUf084366; Wed, 15 Aug 2012 17:12:40 GMT (envelope-from jfv@svn.freebsd.org) Message-Id: <201208151712.q7FHCeUf084366@svn.freebsd.org> From: Jack F Vogel Date: Wed, 15 Aug 2012 17:12:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239304 - head/sys/dev/e1000 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 17:12:41 -0000 Author: jfv Date: Wed Aug 15 17:12:40 2012 New Revision: 239304 URL: http://svn.freebsd.org/changeset/base/239304 Log: Customer report of a panic on boot due to the old "m_getjcl:invalid cluster type" that occurred some time back with the igb driver. This happens often when booting over the net. I believe the NIC hardware is left in a warm state when handed over to the driver, and a stray RX interrupt happens earlier than the code is prepared for it to happen. This change was verified to fix the problem, its kind of a bandaid... but it is similar to what was done in the igb code. Modified: head/sys/dev/e1000/if_em.c Modified: head/sys/dev/e1000/if_em.c ============================================================================== --- head/sys/dev/e1000/if_em.c Wed Aug 15 16:19:39 2012 (r239303) +++ head/sys/dev/e1000/if_em.c Wed Aug 15 17:12:40 2012 (r239304) @@ -1570,6 +1570,8 @@ em_msix_rx(void *arg) bool more; ++rxr->rx_irq; + if (!(adapter->ifp->if_drv_flags & IFF_DRV_RUNNING)) + return; more = em_rxeof(rxr, adapter->rx_process_limit, NULL); if (more) taskqueue_enqueue(rxr->tq, &rxr->rx_task); From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 17:29:05 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9DC88106564A; Wed, 15 Aug 2012 17:29:05 +0000 (UTC) (envelope-from joel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8861F8FC08; Wed, 15 Aug 2012 17:29:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FHT5on086288; Wed, 15 Aug 2012 17:29:05 GMT (envelope-from joel@svn.freebsd.org) Received: (from joel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FHT51O086286; Wed, 15 Aug 2012 17:29:05 GMT (envelope-from joel@svn.freebsd.org) Message-Id: <201208151729.q7FHT51O086286@svn.freebsd.org> From: Joel Dahl Date: Wed, 15 Aug 2012 17:29:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239305 - head/share/man/man4 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 17:29:05 -0000 Author: joel (doc committer) Date: Wed Aug 15 17:29:05 2012 New Revision: 239305 URL: http://svn.freebsd.org/changeset/base/239305 Log: Minor mdoc fixes and language tweaks. Modified: head/share/man/man4/aout.4 Modified: head/share/man/man4/aout.4 ============================================================================== --- head/share/man/man4/aout.4 Wed Aug 15 17:12:40 2012 (r239304) +++ head/share/man/man4/aout.4 Wed Aug 15 17:29:05 2012 (r239305) @@ -35,16 +35,15 @@ kldload a.out .Sh DESCRIPTION The .Xr a.out 5 -executable format was used by -.Fx -of versions \*(Lt 3.0. -Since only i386 architecture was supported at that time, the +executable format was used before the release of +.Fx 3.0. +Since i386 was the only supported architecture at that time, .Xr a.out 5 -executables can only be activated on the platforms that support -execution of i386 code, which are i386, amd64 and (partially) ia64. +executables can only be activated on platforms that support +execution of i386 code, such as i386, amd64 and (partially) ia64. .Pp To add kernel support for old syscalls and old syscall invocation methods, -you need to place the following options in the kernel configuration file: +place the following options in the kernel configuration file: .Bd -ragged -offset indent .Cd "options COMPAT_43" .br @@ -57,14 +56,16 @@ option is only required on 64-bit CPU ar .Pp The .Va aout.ko -module must be loaded to get support for +module needs to be loaded with the +.Xr kldload 8 +utility in order to support the .Xr a.out 5 -image activator. -Use the command +image activator: .Bd -ragged -offset indent .Ic kldload aout .Ed -or put the following line in +.Pp +Alternatively, to load the module at boot time, place the following line in .Xr loader.conf 5 : .Bd -literal -offset indent aout_load="YES" @@ -72,9 +73,9 @@ aout_load="YES" .Pp The .Xr a.out 5 -format was mainstream quite long time ago. -The reasonable default settings and security requirements of the -modern OS contradict to the default environment of that time and +format was mainstream quite a long time ago. +Reasonable default settings and security requirements of +modern operating systems today contradict the default environment of that time and require adjustments of the system to mimic natural environment for old binaries. .Pp @@ -84,10 +85,10 @@ tunables are useful for this: .Bl -tag -offset indent -width "XXXXXXXXXXXXXXXXXXXXXXXXX" .It Xo Va security.bsd.map_at_zero .Xc -Set to 1 to allow the mapping of process pages at the address 0. +Set to 1 to allow mapping of process pages at address 0. Some very old .Va ZMAGIC -executable images require the text mapping at the address 0. +executable images require text mapping at address 0. .It Xo Va kern.pid_max .Xc Old versions of @@ -96,12 +97,12 @@ used 16-bit types for .Vt pid_t . Current kernels use 32-bit type for .Vt pid_t , -and allow the process id's up to 99999. +and allow process id's up to 99999. Such values cannot be represented by old .Vt pid_t , -mostly causing issues for the processes using +mostly causing issues for processes using .Xr wait 2 -syscalls, for instance, shells. +syscalls, for example shells. Set the sysctl to 30000 to work around the problem. .It Xo Va kern.elf32.read_exec .Xc @@ -109,7 +110,7 @@ Set to 1 to force any accessible memory process to allow execution, see .Xr mmap 2 . Old i386 CPUs did not have a bit in PTE which disallowed execution -from the page, so many old programs did not specified +from the page, so many old programs did not specify .Va PROT_EXEC even for mapping of executable code. The sysctl forces @@ -123,8 +124,6 @@ non-executable mappings. .Xr a.out 5 , .Xr elf 5 , .Xr sysctl 8 . -.Sh BUGS -On 64bit architectures, not all wrappers for older syscalls are implemented. .Sh HISTORY The .Xr a.out 5 @@ -132,7 +131,7 @@ executable format was used on ancient .At and served as the main executable format for .Fx -from inception up to +from the beginning up to .Fx 2.2.9 . In .Fx 3.0 @@ -143,3 +142,5 @@ The .Nm manual page was written by .An Konstantin Belousov Aq kib@FreeBSD.org . +.Sh BUGS +On 64bit architectures, not all wrappers for older syscalls are implemented. From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 18:00:53 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 44D4B106566C; Wed, 15 Aug 2012 18:00:53 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2FC7E8FC0C; Wed, 15 Aug 2012 18:00:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FI0rBv090164; Wed, 15 Aug 2012 18:00:53 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FI0qYS090162; Wed, 15 Aug 2012 18:00:52 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208151800.q7FI0qYS090162@svn.freebsd.org> From: Konstantin Belousov Date: Wed, 15 Aug 2012 18:00:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239306 - head/share/man/man4 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 18:00:53 -0000 Author: kib Date: Wed Aug 15 18:00:52 2012 New Revision: 239306 URL: http://svn.freebsd.org/changeset/base/239306 Log: Small tweaks: - fix macro argument - wrap long line - be more explicit about old pid_t type. MFC after: 1 week Modified: head/share/man/man4/aout.4 Modified: head/share/man/man4/aout.4 ============================================================================== --- head/share/man/man4/aout.4 Wed Aug 15 17:29:05 2012 (r239305) +++ head/share/man/man4/aout.4 Wed Aug 15 18:00:52 2012 (r239306) @@ -36,7 +36,7 @@ kldload a.out The .Xr a.out 5 executable format was used before the release of -.Fx 3.0. +.Fx 3.0 . Since i386 was the only supported architecture at that time, .Xr a.out 5 executables can only be activated on platforms that support @@ -75,8 +75,8 @@ The .Xr a.out 5 format was mainstream quite a long time ago. Reasonable default settings and security requirements of -modern operating systems today contradict the default environment of that time and -require adjustments of the system to mimic natural environment for +modern operating systems today contradict the default environment of that time +and require adjustments of the system to mimic natural environment for old binaries. .Pp The following @@ -93,7 +93,7 @@ executable images require text mapping a .Xc Old versions of .Fx -used 16-bit types for +used signed 16-bit type for .Vt pid_t . Current kernels use 32-bit type for .Vt pid_t , From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 18:18:30 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4D1781065673; Wed, 15 Aug 2012 18:18:30 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1E9818FC26; Wed, 15 Aug 2012 18:18:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FIITR8092008; Wed, 15 Aug 2012 18:18:29 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FIITes092006; Wed, 15 Aug 2012 18:18:29 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201208151818.q7FIITes092006@svn.freebsd.org> From: Jakub Wojciech Klama Date: Wed, 15 Aug 2012 18:18:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239307 - head/sys/arm/lpc X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 18:18:30 -0000 Author: jceel Date: Wed Aug 15 18:18:29 2012 New Revision: 239307 URL: http://svn.freebsd.org/changeset/base/239307 Log: Switch lpc initarm() to use struct arm_boot_params and therefore fix EA3250 kernel build. Approved by: gonzo Modified: head/sys/arm/lpc/lpc_machdep.c Modified: head/sys/arm/lpc/lpc_machdep.c ============================================================================== --- head/sys/arm/lpc/lpc_machdep.c Wed Aug 15 18:00:52 2012 (r239306) +++ head/sys/arm/lpc/lpc_machdep.c Wed Aug 15 18:18:29 2012 (r239307) @@ -296,7 +296,7 @@ physmap_init(void) } void * -initarm(void *mdp, void *unused __unused) +initarm(struct arm_boot_params *abp) { struct pv_addr kernel_l1pt; struct pv_addr dpcpu; @@ -306,41 +306,15 @@ initarm(void *mdp, void *unused __unused u_int l1pagetable; int i = 0, j = 0; - kmdp = NULL; - lastaddr = 0; + lastaddr = parse_boot_param(abp); memsize = 0; - dtbp = (vm_offset_t)NULL; - set_cpufuncs(); - /* - * Mask metadata pointer: it is supposed to be on page boundary. If - * the first argument (mdp) doesn't point to a valid address the - * bootloader must have passed us something else than the metadata - * ptr... In this case we want to fall back to some built-in settings. - */ - mdp = (void *)((uint32_t)mdp & ~PAGE_MASK); - - /* Parse metadata and fetch parameters */ - if (mdp != NULL) { - preload_metadata = mdp; - kmdp = preload_search_by_type("elf kernel"); - if (kmdp != NULL) { - boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int); - kern_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *); - dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t); - lastaddr = MD_FETCH(kmdp, MODINFOMD_KERNEND, - vm_offset_t); -#ifdef DDB - ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t); - ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t); -#endif - } - - } else { - /* Fall back to hardcoded metadata. */ - lastaddr = fake_preload_metadata(); - } + kmdp = preload_search_by_type("elf kernel"); + if (kmdp != NULL) + dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t); + else + dtbp = (vm_offset_t)NULL; #if defined(FDT_DTB_STATIC) /* From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 18:33:59 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4BC77106566C; Wed, 15 Aug 2012 18:33:59 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 36F928FC0A; Wed, 15 Aug 2012 18:33:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FIXxAK093650; Wed, 15 Aug 2012 18:33:59 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FIXxdU093646; Wed, 15 Aug 2012 18:33:59 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208151833.q7FIXxdU093646@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 18:33:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239308 - head/sys/arm/at91 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 18:33:59 -0000 Author: gonzo Date: Wed Aug 15 18:33:58 2012 New Revision: 239308 URL: http://svn.freebsd.org/changeset/base/239308 Log: Unbreak build for the rest of AT91 platforms Modified: head/sys/arm/at91/std.at91sam9 head/sys/arm/at91/std.at91sam9g45 Modified: head/sys/arm/at91/std.at91sam9 ============================================================================== --- head/sys/arm/at91/std.at91sam9 Wed Aug 15 18:18:29 2012 (r239307) +++ head/sys/arm/at91/std.at91sam9 Wed Aug 15 18:33:58 2012 (r239308) @@ -4,6 +4,7 @@ files "../at91/files.at91" cpu CPU_ARM9 makeoptions CONF_CFLAGS=-mcpu=arm9 options PHYSADDR=0x20000000 +options NO_EVENTTIMERS # bring in the sam specific timers and such device at91sam9 Modified: head/sys/arm/at91/std.at91sam9g45 ============================================================================== --- head/sys/arm/at91/std.at91sam9g45 Wed Aug 15 18:18:29 2012 (r239307) +++ head/sys/arm/at91/std.at91sam9g45 Wed Aug 15 18:33:58 2012 (r239308) @@ -9,6 +9,7 @@ files "../at91/files.at91" cpu CPU_ARM9 makeoptions CONF_CFLAGS=-mcpu=arm9 options PHYSADDR=0x70000000 +options NO_EVENTTIMERS # bring in the sam specific timers and such device at91sam9 From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 18:37:02 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 95F93106566C; Wed, 15 Aug 2012 18:37:02 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 818078FC0A; Wed, 15 Aug 2012 18:37:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FIb25I093995; Wed, 15 Aug 2012 18:37:02 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FIb2nK093993; Wed, 15 Aug 2012 18:37:02 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208151837.q7FIb2nK093993@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Wed, 15 Aug 2012 18:37:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239309 - head/sys/dev/fdt X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 18:37:02 -0000 Author: gonzo Date: Wed Aug 15 18:37:01 2012 New Revision: 239309 URL: http://svn.freebsd.org/changeset/base/239309 Log: Fix argument type for bus_space_map Modified: head/sys/dev/fdt/fdt_common.c Modified: head/sys/dev/fdt/fdt_common.c ============================================================================== --- head/sys/dev/fdt/fdt_common.c Wed Aug 15 18:33:58 2012 (r239308) +++ head/sys/dev/fdt/fdt_common.c Wed Aug 15 18:37:01 2012 (r239309) @@ -426,7 +426,7 @@ fdt_reg_to_rl(phandle_t node, struct res pcell_t addr_cells, size_cells; int tuple_size, tuples; int i, rv; - long vaddr; + bus_space_handle_t vaddr; long busaddr, bussize; if (fdt_addrsize_cells(OF_parent(node), &addr_cells, &size_cells) != 0) From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 19:34:29 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 110E81065672; Wed, 15 Aug 2012 19:34:29 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E75D98FC1E; Wed, 15 Aug 2012 19:34:28 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FJYSaY001565; Wed, 15 Aug 2012 19:34:28 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FJYSwf001540; Wed, 15 Aug 2012 19:34:28 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201208151934.q7FJYSwf001540@svn.freebsd.org> From: Dimitry Andric Date: Wed, 15 Aug 2012 19:34:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239310 - in vendor/llvm/dist: . autoconf autoconf/m4 bindings/ocaml/bitreader bindings/ocaml/transforms/scalar cmake cmake/modules docs docs/CommandGuide docs/CommandGuide/html docs/Co... X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 19:34:29 -0000 Author: dim Date: Wed Aug 15 19:34:23 2012 New Revision: 239310 URL: http://svn.freebsd.org/changeset/base/239310 Log: Vendor import of llvm trunk r161861: http://llvm.org/svn/llvm-project/llvm/trunk@161861 Added: vendor/llvm/dist/CODE_OWNERS.TXT vendor/llvm/dist/docs/AliasAnalysis.rst vendor/llvm/dist/docs/Atomics.rst vendor/llvm/dist/docs/BitCodeFormat.rst vendor/llvm/dist/docs/BranchWeightMetadata.rst vendor/llvm/dist/docs/Bugpoint.rst vendor/llvm/dist/docs/CMake.rst vendor/llvm/dist/docs/CodeGenerator.rst vendor/llvm/dist/docs/CodingStandards.rst vendor/llvm/dist/docs/CommandGuide/FileCheck.rst vendor/llvm/dist/docs/CommandGuide/bugpoint.rst vendor/llvm/dist/docs/CommandGuide/index.rst vendor/llvm/dist/docs/CommandGuide/lit.rst vendor/llvm/dist/docs/CommandGuide/llc.rst vendor/llvm/dist/docs/CommandGuide/lli.rst vendor/llvm/dist/docs/CommandGuide/llvm-ar.rst vendor/llvm/dist/docs/CommandGuide/llvm-as.rst vendor/llvm/dist/docs/CommandGuide/llvm-bcanalyzer.rst vendor/llvm/dist/docs/CommandGuide/llvm-build.rst vendor/llvm/dist/docs/CommandGuide/llvm-config.rst vendor/llvm/dist/docs/CommandGuide/llvm-cov.rst vendor/llvm/dist/docs/CommandGuide/llvm-diff.rst vendor/llvm/dist/docs/CommandGuide/llvm-dis.rst vendor/llvm/dist/docs/CommandGuide/llvm-extract.rst vendor/llvm/dist/docs/CommandGuide/llvm-link.rst vendor/llvm/dist/docs/CommandGuide/llvm-nm.rst vendor/llvm/dist/docs/CommandGuide/llvm-prof.rst vendor/llvm/dist/docs/CommandGuide/llvm-ranlib.rst vendor/llvm/dist/docs/CommandGuide/llvm-stress.rst vendor/llvm/dist/docs/CommandGuide/opt.rst vendor/llvm/dist/docs/CommandGuide/tblgen.rst vendor/llvm/dist/docs/CommandLine.rst vendor/llvm/dist/docs/DeveloperPolicy.rst vendor/llvm/dist/docs/ExceptionHandling.rst vendor/llvm/dist/docs/FAQ.rst vendor/llvm/dist/docs/GetElementPtr.rst vendor/llvm/dist/docs/GettingStartedVS.rst vendor/llvm/dist/docs/Lexicon.rst vendor/llvm/dist/docs/LinkTimeOptimization.rst vendor/llvm/dist/docs/Makefile.sphinx vendor/llvm/dist/docs/MakefileGuide.rst vendor/llvm/dist/docs/Packaging.rst vendor/llvm/dist/docs/Projects.rst vendor/llvm/dist/docs/README.txt vendor/llvm/dist/docs/SegmentedStacks.rst vendor/llvm/dist/docs/TableGenFundamentals.rst vendor/llvm/dist/docs/_static/ vendor/llvm/dist/docs/_static/lines.gif (contents, props changed) vendor/llvm/dist/docs/_static/llvm.css vendor/llvm/dist/docs/_templates/ vendor/llvm/dist/docs/_templates/indexsidebar.html vendor/llvm/dist/docs/_templates/layout.html vendor/llvm/dist/docs/conf.py vendor/llvm/dist/docs/design_and_overview.rst vendor/llvm/dist/docs/development_process.rst vendor/llvm/dist/docs/index.rst vendor/llvm/dist/docs/llvm-theme/ vendor/llvm/dist/docs/llvm-theme/layout.html vendor/llvm/dist/docs/llvm-theme/static/ vendor/llvm/dist/docs/llvm-theme/static/contents.png (contents, props changed) vendor/llvm/dist/docs/llvm-theme/static/llvm-theme.css vendor/llvm/dist/docs/llvm-theme/static/logo.png (contents, props changed) vendor/llvm/dist/docs/llvm-theme/static/navigation.png (contents, props changed) vendor/llvm/dist/docs/llvm-theme/theme.conf vendor/llvm/dist/docs/mailing_lists.rst vendor/llvm/dist/docs/make.bat vendor/llvm/dist/docs/programming.rst vendor/llvm/dist/docs/subsystems.rst vendor/llvm/dist/docs/userguides.rst vendor/llvm/dist/docs/yaml2obj.rst vendor/llvm/dist/include/llvm-c/Linker.h vendor/llvm/dist/include/llvm/Analysis/LoopInfoImpl.h vendor/llvm/dist/include/llvm/CodeGen/RegisterClassInfo.h vendor/llvm/dist/include/llvm/CodeGen/RegisterPressure.h vendor/llvm/dist/include/llvm/DIBuilder.h vendor/llvm/dist/include/llvm/DebugInfo.h vendor/llvm/dist/include/llvm/IRBuilder.h vendor/llvm/dist/include/llvm/IntrinsicsMips.td vendor/llvm/dist/include/llvm/IntrinsicsNVVM.td vendor/llvm/dist/include/llvm/MC/MCSchedule.h vendor/llvm/dist/include/llvm/MDBuilder.h vendor/llvm/dist/include/llvm/Support/FileOutputBuffer.h vendor/llvm/dist/include/llvm/Support/IntegersSubset.h vendor/llvm/dist/include/llvm/Support/IntegersSubsetMapping.h vendor/llvm/dist/include/llvm/Support/LEB128.h vendor/llvm/dist/include/llvm/TableGen/StringMatcher.h vendor/llvm/dist/include/llvm/Target/TargetItinerary.td vendor/llvm/dist/include/llvm/Transforms/Utils/CodeExtractor.h vendor/llvm/dist/include/llvm/TypeBuilder.h vendor/llvm/dist/include/llvm/TypeFinder.h vendor/llvm/dist/lib/CodeGen/EarlyIfConversion.cpp vendor/llvm/dist/lib/CodeGen/LiveRegMatrix.cpp vendor/llvm/dist/lib/CodeGen/LiveRegMatrix.h vendor/llvm/dist/lib/CodeGen/MachineTraceMetrics.cpp vendor/llvm/dist/lib/CodeGen/MachineTraceMetrics.h vendor/llvm/dist/lib/CodeGen/RegisterPressure.cpp vendor/llvm/dist/lib/MC/MCRegisterInfo.cpp vendor/llvm/dist/lib/Support/FileOutputBuffer.cpp vendor/llvm/dist/lib/TableGen/StringMatcher.cpp vendor/llvm/dist/lib/Target/AMDGPU/ vendor/llvm/dist/lib/Target/AMDGPU/MCTargetDesc/ vendor/llvm/dist/lib/Target/AMDGPU/TargetInfo/ vendor/llvm/dist/lib/Target/Hexagon/HexagonInstrInfoV5.td vendor/llvm/dist/lib/Target/Hexagon/HexagonIntrinsicsV5.td vendor/llvm/dist/lib/Target/Hexagon/HexagonMCInst.h vendor/llvm/dist/lib/Target/Hexagon/HexagonNewValueJump.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp vendor/llvm/dist/lib/Target/Mips/Mips16FrameLowering.cpp vendor/llvm/dist/lib/Target/Mips/Mips16FrameLowering.h vendor/llvm/dist/lib/Target/Mips/Mips16InstrFormats.td vendor/llvm/dist/lib/Target/Mips/Mips16InstrInfo.cpp vendor/llvm/dist/lib/Target/Mips/Mips16InstrInfo.h vendor/llvm/dist/lib/Target/Mips/Mips16InstrInfo.td vendor/llvm/dist/lib/Target/Mips/Mips16RegisterInfo.cpp vendor/llvm/dist/lib/Target/Mips/Mips16RegisterInfo.h vendor/llvm/dist/lib/Target/Mips/MipsLongBranch.cpp vendor/llvm/dist/lib/Target/Mips/MipsSEFrameLowering.cpp vendor/llvm/dist/lib/Target/Mips/MipsSEFrameLowering.h vendor/llvm/dist/lib/Target/Mips/MipsSEInstrInfo.cpp vendor/llvm/dist/lib/Target/Mips/MipsSEInstrInfo.h vendor/llvm/dist/lib/Target/Mips/MipsSERegisterInfo.cpp vendor/llvm/dist/lib/Target/Mips/MipsSERegisterInfo.h vendor/llvm/dist/lib/Target/NVPTX/ vendor/llvm/dist/lib/Target/NVPTX/CMakeLists.txt vendor/llvm/dist/lib/Target/NVPTX/InstPrinter/ vendor/llvm/dist/lib/Target/NVPTX/InstPrinter/CMakeLists.txt vendor/llvm/dist/lib/Target/NVPTX/InstPrinter/LLVMBuild.txt vendor/llvm/dist/lib/Target/NVPTX/InstPrinter/Makefile vendor/llvm/dist/lib/Target/NVPTX/InstPrinter/NVPTXInstPrinter.cpp vendor/llvm/dist/lib/Target/NVPTX/LLVMBuild.txt vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/ vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/CMakeLists.txt vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/LLVMBuild.txt vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/Makefile vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/NVPTXBaseInfo.h vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.h vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/NVPTXMCTargetDesc.cpp vendor/llvm/dist/lib/Target/NVPTX/MCTargetDesc/NVPTXMCTargetDesc.h vendor/llvm/dist/lib/Target/NVPTX/Makefile vendor/llvm/dist/lib/Target/NVPTX/ManagedStringPool.h vendor/llvm/dist/lib/Target/NVPTX/NVPTX.h vendor/llvm/dist/lib/Target/NVPTX/NVPTX.td vendor/llvm/dist/lib/Target/NVPTX/NVPTXAllocaHoisting.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXAllocaHoisting.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXAsmPrinter.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXAsmPrinter.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXFrameLowering.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXFrameLowering.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXISelDAGToDAG.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXISelLowering.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXISelLowering.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXInstrFormats.td vendor/llvm/dist/lib/Target/NVPTX/NVPTXInstrInfo.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXInstrInfo.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXInstrInfo.td vendor/llvm/dist/lib/Target/NVPTX/NVPTXIntrinsics.td vendor/llvm/dist/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXLowerAggrCopies.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXNumRegisters.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXRegisterInfo.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXRegisterInfo.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXRegisterInfo.td vendor/llvm/dist/lib/Target/NVPTX/NVPTXSection.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXSplitBBatBar.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXSplitBBatBar.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXSubtarget.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXSubtarget.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXTargetMachine.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXTargetMachine.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXTargetObjectFile.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXUtilities.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXUtilities.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXVector.td vendor/llvm/dist/lib/Target/NVPTX/NVPTXutil.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXutil.h vendor/llvm/dist/lib/Target/NVPTX/TargetInfo/ vendor/llvm/dist/lib/Target/NVPTX/TargetInfo/CMakeLists.txt vendor/llvm/dist/lib/Target/NVPTX/TargetInfo/LLVMBuild.txt vendor/llvm/dist/lib/Target/NVPTX/TargetInfo/Makefile vendor/llvm/dist/lib/Target/NVPTX/TargetInfo/NVPTXTargetInfo.cpp vendor/llvm/dist/lib/Target/NVPTX/VectorElementize.cpp vendor/llvm/dist/lib/Target/NVPTX/cl_common_defines.h vendor/llvm/dist/lib/Target/NVPTX/gen-register-defs.py vendor/llvm/dist/lib/Target/PowerPC/PPCCTRLoops.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/BoundsChecking.cpp vendor/llvm/dist/lib/VMCore/DIBuilder.cpp vendor/llvm/dist/lib/VMCore/DebugInfo.cpp vendor/llvm/dist/lib/VMCore/TypeFinder.cpp vendor/llvm/dist/test/Analysis/GlobalsModRef/volatile-instrs.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2012-05-18-LoopPredRecurse.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2012-05-29-MulAddRec.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/how-far-to-zero.ll vendor/llvm/dist/test/Assembler/half-constprop.ll vendor/llvm/dist/test/Assembler/half-conv.ll vendor/llvm/dist/test/Assembler/half.ll vendor/llvm/dist/test/Assembler/tls-models.ll vendor/llvm/dist/test/Bitcode/2012-05-07-SwitchInstRangesSupport.ll vendor/llvm/dist/test/Bitcode/arm32_neon_vcnt_upgrade.ll vendor/llvm/dist/test/Bitcode/attributes.ll vendor/llvm/dist/test/Bitcode/ptest-new.ll vendor/llvm/dist/test/Bitcode/ptest-old.ll vendor/llvm/dist/test/CodeGen/ARM/2012-04-24-SplitEHCriticalEdge.ll vendor/llvm/dist/test/CodeGen/ARM/2012-05-29-TailDupBug.ll vendor/llvm/dist/test/CodeGen/ARM/2012-06-12-SchedMemLatency.ll vendor/llvm/dist/test/CodeGen/ARM/2012-08-04-DtripleSpillReload.ll vendor/llvm/dist/test/CodeGen/ARM/2012-08-08-legalize-unaligned.ll vendor/llvm/dist/test/CodeGen/ARM/2012-08-09-neon-extload.ll vendor/llvm/dist/test/CodeGen/ARM/2012-08-13-bfi.ll vendor/llvm/dist/test/CodeGen/ARM/bicZext.ll vendor/llvm/dist/test/CodeGen/ARM/cmn.ll vendor/llvm/dist/test/CodeGen/ARM/coalesce-subregs.ll vendor/llvm/dist/test/CodeGen/ARM/data-in-code-annotations.ll vendor/llvm/dist/test/CodeGen/ARM/fast-isel-call-multi-reg-return.ll vendor/llvm/dist/test/CodeGen/ARM/fast-isel-frameaddr.ll vendor/llvm/dist/test/CodeGen/ARM/fast-isel-shifter.ll vendor/llvm/dist/test/CodeGen/ARM/floorf.ll vendor/llvm/dist/test/CodeGen/ARM/pr13249.ll vendor/llvm/dist/test/CodeGen/ARM/smml.ll vendor/llvm/dist/test/CodeGen/ARM/struct_byval.ll vendor/llvm/dist/test/CodeGen/ARM/sub-cmp-peephole.ll vendor/llvm/dist/test/CodeGen/ARM/tls-models.ll vendor/llvm/dist/test/CodeGen/ARM/twoaddrinstr.ll vendor/llvm/dist/test/CodeGen/ARM/unsafe-fsub.ll vendor/llvm/dist/test/CodeGen/Generic/2012-06-08-APIntCrash.ll vendor/llvm/dist/test/CodeGen/Generic/2012-07-15-BuildVectorPromote.ll vendor/llvm/dist/test/CodeGen/Generic/donothing.ll vendor/llvm/dist/test/CodeGen/Generic/print-after.ll vendor/llvm/dist/test/CodeGen/Generic/print-machineinstrs.ll vendor/llvm/dist/test/CodeGen/Generic/stop-after.ll vendor/llvm/dist/test/CodeGen/Generic/undef-phi.ll vendor/llvm/dist/test/CodeGen/Hexagon/convertdptoint.ll vendor/llvm/dist/test/CodeGen/Hexagon/convertdptoll.ll vendor/llvm/dist/test/CodeGen/Hexagon/convertsptoint.ll vendor/llvm/dist/test/CodeGen/Hexagon/convertsptoll.ll vendor/llvm/dist/test/CodeGen/Hexagon/dadd.ll vendor/llvm/dist/test/CodeGen/Hexagon/dmul.ll vendor/llvm/dist/test/CodeGen/Hexagon/doubleconvert-ieee-rnd-near.ll vendor/llvm/dist/test/CodeGen/Hexagon/dsub.ll vendor/llvm/dist/test/CodeGen/Hexagon/dualstore.ll vendor/llvm/dist/test/CodeGen/Hexagon/fadd.ll vendor/llvm/dist/test/CodeGen/Hexagon/fcmp.ll vendor/llvm/dist/test/CodeGen/Hexagon/floatconvert-ieee-rnd-near.ll vendor/llvm/dist/test/CodeGen/Hexagon/fmul.ll vendor/llvm/dist/test/CodeGen/Hexagon/fsub.ll vendor/llvm/dist/test/CodeGen/Hexagon/fusedandshift.ll vendor/llvm/dist/test/CodeGen/Hexagon/macint.ll vendor/llvm/dist/test/CodeGen/Hexagon/newvaluejump.ll vendor/llvm/dist/test/CodeGen/Hexagon/newvaluejump2.ll vendor/llvm/dist/test/CodeGen/Hexagon/newvaluestore.ll vendor/llvm/dist/test/CodeGen/Hexagon/opt-fabs.ll vendor/llvm/dist/test/CodeGen/Hexagon/opt-fneg.ll vendor/llvm/dist/test/CodeGen/Hexagon/simpletailcall.ll vendor/llvm/dist/test/CodeGen/Mips/and1.ll vendor/llvm/dist/test/CodeGen/Mips/asm-large-immediate.ll vendor/llvm/dist/test/CodeGen/Mips/fastcc.ll vendor/llvm/dist/test/CodeGen/Mips/fp-spill-reload.ll vendor/llvm/dist/test/CodeGen/Mips/helloworld.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-bad-I-1.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-bad-J.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-bad-K.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-bad-L.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-bad-N.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-bad-O.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-bad-P.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-reg.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-cnstrnt-reg64.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm-operand-code.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasm_constraint.ll vendor/llvm/dist/test/CodeGen/Mips/lb1.ll vendor/llvm/dist/test/CodeGen/Mips/lbu1.ll vendor/llvm/dist/test/CodeGen/Mips/lh1.ll vendor/llvm/dist/test/CodeGen/Mips/lhu1.ll vendor/llvm/dist/test/CodeGen/Mips/load-store-left-right.ll vendor/llvm/dist/test/CodeGen/Mips/longbranch.ll vendor/llvm/dist/test/CodeGen/Mips/machineverifier.ll vendor/llvm/dist/test/CodeGen/Mips/memcpy.ll vendor/llvm/dist/test/CodeGen/Mips/mips64load-store-left-right.ll vendor/llvm/dist/test/CodeGen/Mips/neg1.ll vendor/llvm/dist/test/CodeGen/Mips/not1.ll vendor/llvm/dist/test/CodeGen/Mips/null.ll vendor/llvm/dist/test/CodeGen/Mips/or1.ll vendor/llvm/dist/test/CodeGen/Mips/ra-allocatable.ll vendor/llvm/dist/test/CodeGen/Mips/rdhwr-directives.ll vendor/llvm/dist/test/CodeGen/Mips/return_address.ll vendor/llvm/dist/test/CodeGen/Mips/sb1.ll vendor/llvm/dist/test/CodeGen/Mips/selectcc.ll vendor/llvm/dist/test/CodeGen/Mips/sh1.ll vendor/llvm/dist/test/CodeGen/Mips/shift-parts.ll vendor/llvm/dist/test/CodeGen/Mips/sitofp-selectcc-opt.ll vendor/llvm/dist/test/CodeGen/Mips/sll1.ll vendor/llvm/dist/test/CodeGen/Mips/sll2.ll vendor/llvm/dist/test/CodeGen/Mips/sra1.ll vendor/llvm/dist/test/CodeGen/Mips/sra2.ll vendor/llvm/dist/test/CodeGen/Mips/srl1.ll vendor/llvm/dist/test/CodeGen/Mips/srl2.ll vendor/llvm/dist/test/CodeGen/Mips/stacksize.ll vendor/llvm/dist/test/CodeGen/Mips/sub1.ll vendor/llvm/dist/test/CodeGen/Mips/sub2.ll vendor/llvm/dist/test/CodeGen/Mips/tls-alias.ll vendor/llvm/dist/test/CodeGen/Mips/tls-models.ll vendor/llvm/dist/test/CodeGen/Mips/xor1.ll vendor/llvm/dist/test/CodeGen/NVPTX/ vendor/llvm/dist/test/CodeGen/NVPTX/annotations.ll vendor/llvm/dist/test/CodeGen/NVPTX/arithmetic-fp-sm10.ll vendor/llvm/dist/test/CodeGen/NVPTX/arithmetic-fp-sm20.ll vendor/llvm/dist/test/CodeGen/NVPTX/arithmetic-int.ll vendor/llvm/dist/test/CodeGen/NVPTX/calling-conv.ll vendor/llvm/dist/test/CodeGen/NVPTX/compare-int.ll vendor/llvm/dist/test/CodeGen/NVPTX/convert-fp.ll vendor/llvm/dist/test/CodeGen/NVPTX/convert-int-sm10.ll vendor/llvm/dist/test/CodeGen/NVPTX/convert-int-sm20.ll vendor/llvm/dist/test/CodeGen/NVPTX/fma-disable.ll vendor/llvm/dist/test/CodeGen/NVPTX/fma.ll vendor/llvm/dist/test/CodeGen/NVPTX/intrinsic-old.ll vendor/llvm/dist/test/CodeGen/NVPTX/intrinsics.ll vendor/llvm/dist/test/CodeGen/NVPTX/ld-addrspace.ll vendor/llvm/dist/test/CodeGen/NVPTX/ld-generic.ll vendor/llvm/dist/test/CodeGen/NVPTX/lit.local.cfg vendor/llvm/dist/test/CodeGen/NVPTX/simple-call.ll vendor/llvm/dist/test/CodeGen/NVPTX/st-addrspace.ll vendor/llvm/dist/test/CodeGen/NVPTX/st-generic.ll vendor/llvm/dist/test/CodeGen/PowerPC/coalesce-ext.ll vendor/llvm/dist/test/CodeGen/PowerPC/ctrloop-reg.ll vendor/llvm/dist/test/CodeGen/PowerPC/ctrloop-s000.ll vendor/llvm/dist/test/CodeGen/PowerPC/ctrloop-sums.ll vendor/llvm/dist/test/CodeGen/PowerPC/ctrloops.ll vendor/llvm/dist/test/CodeGen/PowerPC/isel.ll vendor/llvm/dist/test/CodeGen/PowerPC/lbzux.ll vendor/llvm/dist/test/CodeGen/PowerPC/ppc64-cyclecounter.ll vendor/llvm/dist/test/CodeGen/PowerPC/stwu-gta.ll vendor/llvm/dist/test/CodeGen/PowerPC/stwu8.ll vendor/llvm/dist/test/CodeGen/PowerPC/stwux.ll vendor/llvm/dist/test/CodeGen/PowerPC/tls.ll vendor/llvm/dist/test/CodeGen/R600/ vendor/llvm/dist/test/CodeGen/SPARC/2012-05-01-LowerArguments.ll vendor/llvm/dist/test/CodeGen/Thumb/2012-04-26-M0ISelBug.ll vendor/llvm/dist/test/CodeGen/Thumb2/inflate-regs.ll vendor/llvm/dist/test/CodeGen/Thumb2/inlineasm.ll vendor/llvm/dist/test/CodeGen/X86/2011-04-19-sclr-bb.ll vendor/llvm/dist/test/CodeGen/X86/2012-05-17-TwoAddressBug.ll vendor/llvm/dist/test/CodeGen/X86/2012-05-19-CoalescerCrash.ll vendor/llvm/dist/test/CodeGen/X86/2012-05-19-avx2-store.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-10-extload64.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-10-shufnorm.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-15-broadcastfold.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-15-tconst_shl.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-15-vshl.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-16-LeaUndef.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-16-fp2ui-i1.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-17-vtrunc.ll vendor/llvm/dist/test/CodeGen/X86/2012-07-23-select_cc.ll vendor/llvm/dist/test/CodeGen/X86/2012-08-07-CmpISelBug.ll vendor/llvm/dist/test/CodeGen/X86/asm-reg-type-mismatch.ll vendor/llvm/dist/test/CodeGen/X86/avx2-conversions.ll (contents, props changed) vendor/llvm/dist/test/CodeGen/X86/avx2-shuffle.ll vendor/llvm/dist/test/CodeGen/X86/bool-simplify.ll vendor/llvm/dist/test/CodeGen/X86/cmov-into-branch.ll vendor/llvm/dist/test/CodeGen/X86/coalescer-dce2.ll vendor/llvm/dist/test/CodeGen/X86/coalescer-identity.ll vendor/llvm/dist/test/CodeGen/X86/constructor.ll vendor/llvm/dist/test/CodeGen/X86/dynamic-allocas-VLAs.ll vendor/llvm/dist/test/CodeGen/X86/early-ifcvt.ll vendor/llvm/dist/test/CodeGen/X86/fma3-intrinsics.ll (contents, props changed) vendor/llvm/dist/test/CodeGen/X86/fma_patterns.ll vendor/llvm/dist/test/CodeGen/X86/force-align-stack-alloca.ll vendor/llvm/dist/test/CodeGen/X86/fp-stack-compare-cmov.ll vendor/llvm/dist/test/CodeGen/X86/gs-fold.ll vendor/llvm/dist/test/CodeGen/X86/inreg.ll vendor/llvm/dist/test/CodeGen/X86/large-global.ll vendor/llvm/dist/test/CodeGen/X86/neg_cmp.ll vendor/llvm/dist/test/CodeGen/X86/pass-three.ll vendor/llvm/dist/test/CodeGen/X86/phielim-split.ll vendor/llvm/dist/test/CodeGen/X86/pr11468.ll vendor/llvm/dist/test/CodeGen/X86/pr12889.ll vendor/llvm/dist/test/CodeGen/X86/pr13209.ll vendor/llvm/dist/test/CodeGen/X86/pr13220.ll vendor/llvm/dist/test/CodeGen/X86/pr13577.ll vendor/llvm/dist/test/CodeGen/X86/rdrand.ll vendor/llvm/dist/test/CodeGen/X86/remat-fold-load.ll vendor/llvm/dist/test/CodeGen/X86/reverse_branches.ll vendor/llvm/dist/test/CodeGen/X86/selectiondag-cse.ll vendor/llvm/dist/test/CodeGen/X86/sext-setcc-self.ll vendor/llvm/dist/test/CodeGen/X86/sink-out-of-loop.ll vendor/llvm/dist/test/CodeGen/X86/sse4a.ll vendor/llvm/dist/test/CodeGen/X86/stack-protector.ll vendor/llvm/dist/test/CodeGen/X86/switch-order-weight.ll vendor/llvm/dist/test/CodeGen/X86/tailcall-64.ll vendor/llvm/dist/test/CodeGen/X86/tailcall-cgp-dup.ll vendor/llvm/dist/test/CodeGen/X86/tailcall.ll vendor/llvm/dist/test/CodeGen/X86/targetLoweringGeneric.ll vendor/llvm/dist/test/CodeGen/X86/tls-local-dynamic.ll vendor/llvm/dist/test/CodeGen/X86/tls-models.ll vendor/llvm/dist/test/CodeGen/X86/unwindraise.ll vendor/llvm/dist/test/CodeGen/X86/vec_cast2.ll vendor/llvm/dist/test/CodeGen/XCore/mkmsk.ll vendor/llvm/dist/test/DebugInfo/Inputs/ vendor/llvm/dist/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64 (contents, props changed) vendor/llvm/dist/test/DebugInfo/Inputs/dwarfdump-test2.elf-x86-64 (contents, props changed) vendor/llvm/dist/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 (contents, props changed) vendor/llvm/dist/test/DebugInfo/Inputs/dwarfdump-test4.elf-x86-64 (contents, props changed) vendor/llvm/dist/test/DebugInfo/X86/DW_AT_location-reference.ll vendor/llvm/dist/test/DebugInfo/X86/aligned_stack_var.ll vendor/llvm/dist/test/DebugInfo/X86/enum-class.ll vendor/llvm/dist/test/DebugInfo/X86/enum-fwd-decl.ll vendor/llvm/dist/test/DebugInfo/X86/op_deref.ll vendor/llvm/dist/test/DebugInfo/X86/pr12831.ll vendor/llvm/dist/test/DebugInfo/X86/pr13303.ll vendor/llvm/dist/test/DebugInfo/X86/rvalue-ref.ll vendor/llvm/dist/test/DebugInfo/dwarfdump-test.test vendor/llvm/dist/test/DebugInfo/inlined-vars.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2002-12-16-ArgTest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-01-04-ArgumentBug.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-01-04-LoopTest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-01-04-PhiTest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-01-09-SARTest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-01-10-FUCOM.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-01-15-AlignmentTest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-05-06-LivenessClobber.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-05-07-ArgumentTest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-05-11-PHIRegAllocBug.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-06-04-bzip2-bug.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-06-05-PHIBug.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-08-15-AllocaAssertion.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-08-21-EnvironmentTest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-08-23-RegisterAllocatePhysReg.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2003-10-18-PHINode-ConstantExpr-CondCode-Failure.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2005-12-02-TailCallBug.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2007-12-10-APIntLoadStore.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2008-06-05-APInt-OverAShr.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/2010-01-15-UndefValue.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/fpbitcast.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/hello.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/hello2.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/lit.local.cfg vendor/llvm/dist/test/ExecutionEngine/MCJIT/simplesttest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/simpletest.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/stubs.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-arith.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-branch.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-call-no-external-funcs.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-call.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-cast.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-common-symbols.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-constantexpr.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-fp-no-external-funcs.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-fp.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-global-init-nonzero.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-global.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-loadstore.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-local.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-logical.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-loop.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-phi.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-ret.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-return.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-setcond-fp.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-setcond-int.ll vendor/llvm/dist/test/ExecutionEngine/MCJIT/test-shift.ll vendor/llvm/dist/test/Instrumentation/AddressSanitizer/basic.ll vendor/llvm/dist/test/Instrumentation/BoundsChecking/ vendor/llvm/dist/test/Instrumentation/BoundsChecking/lit.local.cfg vendor/llvm/dist/test/Instrumentation/BoundsChecking/many-trap.ll vendor/llvm/dist/test/Instrumentation/BoundsChecking/phi.ll vendor/llvm/dist/test/Instrumentation/BoundsChecking/simple.ll vendor/llvm/dist/test/Instrumentation/ThreadSanitizer/atomic.ll vendor/llvm/dist/test/Linker/Inputs/ vendor/llvm/dist/test/Linker/Inputs/PR11464.a.ll vendor/llvm/dist/test/Linker/Inputs/PR11464.b.ll vendor/llvm/dist/test/Linker/Inputs/PR8300.a.ll vendor/llvm/dist/test/Linker/Inputs/PR8300.b.ll vendor/llvm/dist/test/Linker/Inputs/basiclink.a.ll vendor/llvm/dist/test/Linker/Inputs/basiclink.b.ll vendor/llvm/dist/test/Linker/Inputs/linkage.a.ll vendor/llvm/dist/test/Linker/Inputs/linkage.b.ll vendor/llvm/dist/test/Linker/linkage.ll vendor/llvm/dist/test/MC/ARM/neon-shiftaccum-encoding.s vendor/llvm/dist/test/MC/ARM/thumb2-narrow-dp.ll vendor/llvm/dist/test/MC/AsmParser/extern.s vendor/llvm/dist/test/MC/AsmParser/ifb.s vendor/llvm/dist/test/MC/AsmParser/ifc.s vendor/llvm/dist/test/MC/AsmParser/macro-err1.s vendor/llvm/dist/test/MC/AsmParser/macro-irp.s vendor/llvm/dist/test/MC/AsmParser/macro-irpc.s vendor/llvm/dist/test/MC/AsmParser/macro-rept-err1.s vendor/llvm/dist/test/MC/AsmParser/macro-rept-err2.s vendor/llvm/dist/test/MC/AsmParser/macro-rept.s vendor/llvm/dist/test/MC/AsmParser/purgem.s vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-AExtI-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-SEL-arm.txt vendor/llvm/dist/test/MC/Disassembler/Mips/lit.local.cfg vendor/llvm/dist/test/MC/ELF/fde.s vendor/llvm/dist/test/MC/ELF/version.s vendor/llvm/dist/test/MC/MachO/ARM/data-in-code.s vendor/llvm/dist/test/MC/MachO/ARM/llvm-objdump-macho-stripped.s vendor/llvm/dist/test/MC/MachO/ARM/llvm-objdump-macho.s vendor/llvm/dist/test/MC/MachO/ARM/thumb-bl-jbits.s vendor/llvm/dist/test/MC/MachO/ARM/thumb2-movw-fixup.s vendor/llvm/dist/test/MC/MachO/previous.s vendor/llvm/dist/test/MC/MachO/pushsection.s vendor/llvm/dist/test/MC/Mips/elf-N64.ll vendor/llvm/dist/test/MC/Mips/elf-objdump.s vendor/llvm/dist/test/MC/Mips/higher_highest.ll vendor/llvm/dist/test/MC/Mips/lea_64.ll vendor/llvm/dist/test/MC/Mips/mips64shift.ll vendor/llvm/dist/test/MC/Mips/multi-64bit-func.ll vendor/llvm/dist/test/MC/Mips/r-mips-got-disp.ll vendor/llvm/dist/test/MC/Mips/sext_64_32.ll vendor/llvm/dist/test/MC/X86/x86_64-sse4a.s vendor/llvm/dist/test/Object/COFF/ vendor/llvm/dist/test/Object/Inputs/COFF/ vendor/llvm/dist/test/Object/Inputs/COFF/i386.yaml vendor/llvm/dist/test/Object/Inputs/COFF/x86-64.yaml vendor/llvm/dist/test/Object/Inputs/trivial-object-test.elf-hexagon (contents, props changed) vendor/llvm/dist/test/Other/optimize-options.ll vendor/llvm/dist/test/Transforms/BBVectorize/metadata.ll vendor/llvm/dist/test/Transforms/BBVectorize/simple-tst.ll vendor/llvm/dist/test/Transforms/BBVectorize/simple3.ll vendor/llvm/dist/test/Transforms/GVN/2012-05-22-PreCrash.ll vendor/llvm/dist/test/Transforms/GVN/fpmath.ll vendor/llvm/dist/test/Transforms/GVN/pr12979.ll vendor/llvm/dist/test/Transforms/GVN/range.ll vendor/llvm/dist/test/Transforms/GVN/tbaa.ll vendor/llvm/dist/test/Transforms/GlobalOpt/2012-05-11-blockaddress.ll vendor/llvm/dist/test/Transforms/GlobalOpt/cleanup-pointer-root-users.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/2012-07-17-lftr-undef.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/ult-sub-to-eq.ll vendor/llvm/dist/test/Transforms/Inline/inline-byval-bonus.ll vendor/llvm/dist/test/Transforms/Inline/inline-optsize.ll vendor/llvm/dist/test/Transforms/InstCombine/2012-04-23-Neon-Intrinsics.ll vendor/llvm/dist/test/Transforms/InstCombine/2012-04-24-vselect.ll vendor/llvm/dist/test/Transforms/InstCombine/2012-05-27-Negative-Shift-Crash.ll vendor/llvm/dist/test/Transforms/InstCombine/2012-05-28-select-hang.ll vendor/llvm/dist/test/Transforms/InstCombine/2012-06-06-LoadOfPHIs.ll vendor/llvm/dist/test/Transforms/InstCombine/2012-07-25-LoadPart.ll vendor/llvm/dist/test/Transforms/InstCombine/2012-07-30-addrsp-bitcast.ll vendor/llvm/dist/test/Transforms/InstCombine/2012-6-7-vselect-bitcast.ll vendor/llvm/dist/test/Transforms/InstCombine/and-xor-or.ll vendor/llvm/dist/test/Transforms/InstCombine/div-shift.ll vendor/llvm/dist/test/Transforms/InstCombine/invoke.ll vendor/llvm/dist/test/Transforms/InstCombine/objsize-64.ll vendor/llvm/dist/test/Transforms/InstCombine/pr12338.ll vendor/llvm/dist/test/Transforms/JumpThreading/2012-07-19-NoSuccessorIndirectBr.ll vendor/llvm/dist/test/Transforms/JumpThreading/phi-eq.ll vendor/llvm/dist/test/Transforms/LICM/promote-order.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/2012-07-13-ExpandUDiv.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/2012-07-18-LimitReassociate.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/ARM/2012-06-15-lsr-noaddrmode.ll vendor/llvm/dist/test/Transforms/LoopUnswitch/2012-05-20-Phi.ll vendor/llvm/dist/test/Transforms/ObjCARC/split-backedge.ll vendor/llvm/dist/test/Transforms/ObjCARC/weak-dce.ll vendor/llvm/dist/test/Transforms/PhaseOrdering/PR6627.ll vendor/llvm/dist/test/Transforms/PhaseOrdering/scev.ll vendor/llvm/dist/test/Transforms/Reassociate/2012-05-08-UndefLeak.ll vendor/llvm/dist/test/Transforms/Reassociate/2012-06-08-InfiniteLoop.ll vendor/llvm/dist/test/Transforms/Reassociate/absorption.ll vendor/llvm/dist/test/Transforms/Reassociate/fp-commute.ll vendor/llvm/dist/test/Transforms/Reassociate/mightymul.ll vendor/llvm/dist/test/Transforms/Reassociate/multistep.ll vendor/llvm/dist/test/Transforms/Reassociate/no-op.ll vendor/llvm/dist/test/Transforms/Reassociate/repeats.ll vendor/llvm/dist/test/Transforms/SCCP/vector-bitcast.ll vendor/llvm/dist/test/Transforms/ScalarRepl/dynamic-vector-gep.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/invoke.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/StpCpy.ll vendor/llvm/dist/test/Verifier/dominates.ll vendor/llvm/dist/test/Verifier/invoke.ll vendor/llvm/dist/unittests/ADT/CMakeLists.txt vendor/llvm/dist/unittests/ADT/TinyPtrVectorTest.cpp vendor/llvm/dist/unittests/Analysis/CMakeLists.txt vendor/llvm/dist/unittests/Bitcode/CMakeLists.txt vendor/llvm/dist/unittests/ExecutionEngine/CMakeLists.txt vendor/llvm/dist/unittests/ExecutionEngine/JIT/CMakeLists.txt vendor/llvm/dist/unittests/Support/AlignOfTest.cpp vendor/llvm/dist/unittests/Support/CMakeLists.txt vendor/llvm/dist/unittests/Support/FileOutputBufferTest.cpp vendor/llvm/dist/unittests/Support/IntegersSubsetTest.cpp vendor/llvm/dist/unittests/Transforms/CMakeLists.txt vendor/llvm/dist/unittests/Transforms/Utils/CMakeLists.txt vendor/llvm/dist/unittests/VMCore/CMakeLists.txt vendor/llvm/dist/unittests/VMCore/IRBuilderTest.cpp vendor/llvm/dist/unittests/VMCore/MDBuilderTest.cpp vendor/llvm/dist/unittests/VMCore/TypeBuilderTest.cpp vendor/llvm/dist/unittests/VMCore/TypesTest.cpp vendor/llvm/dist/utils/TableGen/CodeGenSchedule.cpp vendor/llvm/dist/utils/TableGen/CodeGenSchedule.h vendor/llvm/dist/utils/TableGen/TableGenBackends.h vendor/llvm/dist/utils/obj2yaml/ vendor/llvm/dist/utils/obj2yaml/CMakeLists.txt vendor/llvm/dist/utils/obj2yaml/Makefile vendor/llvm/dist/utils/obj2yaml/coff2yaml.cpp vendor/llvm/dist/utils/obj2yaml/obj2yaml.cpp vendor/llvm/dist/utils/obj2yaml/obj2yaml.h vendor/llvm/dist/utils/yaml2obj/ vendor/llvm/dist/utils/yaml2obj/CMakeLists.txt vendor/llvm/dist/utils/yaml2obj/Makefile vendor/llvm/dist/utils/yaml2obj/yaml2obj.cpp Deleted: vendor/llvm/dist/docs/AliasAnalysis.html vendor/llvm/dist/docs/Atomics.html vendor/llvm/dist/docs/BitCodeFormat.html vendor/llvm/dist/docs/BranchWeightMetadata.html vendor/llvm/dist/docs/Bugpoint.html vendor/llvm/dist/docs/CMake.html vendor/llvm/dist/docs/CodeGenerator.html vendor/llvm/dist/docs/CodingStandards.html vendor/llvm/dist/docs/CommandGuide/FileCheck.pod vendor/llvm/dist/docs/CommandGuide/Makefile vendor/llvm/dist/docs/CommandGuide/bugpoint.pod vendor/llvm/dist/docs/CommandGuide/html/ vendor/llvm/dist/docs/CommandGuide/index.html vendor/llvm/dist/docs/CommandGuide/lit.pod vendor/llvm/dist/docs/CommandGuide/llc.pod vendor/llvm/dist/docs/CommandGuide/lli.pod vendor/llvm/dist/docs/CommandGuide/llvm-ar.pod vendor/llvm/dist/docs/CommandGuide/llvm-as.pod vendor/llvm/dist/docs/CommandGuide/llvm-bcanalyzer.pod vendor/llvm/dist/docs/CommandGuide/llvm-build.pod vendor/llvm/dist/docs/CommandGuide/llvm-config.pod vendor/llvm/dist/docs/CommandGuide/llvm-cov.pod vendor/llvm/dist/docs/CommandGuide/llvm-diff.pod vendor/llvm/dist/docs/CommandGuide/llvm-dis.pod vendor/llvm/dist/docs/CommandGuide/llvm-extract.pod vendor/llvm/dist/docs/CommandGuide/llvm-ld.pod vendor/llvm/dist/docs/CommandGuide/llvm-link.pod vendor/llvm/dist/docs/CommandGuide/llvm-nm.pod vendor/llvm/dist/docs/CommandGuide/llvm-prof.pod vendor/llvm/dist/docs/CommandGuide/llvm-ranlib.pod vendor/llvm/dist/docs/CommandGuide/llvm-stress.pod vendor/llvm/dist/docs/CommandGuide/man/ vendor/llvm/dist/docs/CommandGuide/manpage.css vendor/llvm/dist/docs/CommandGuide/opt.pod vendor/llvm/dist/docs/CommandGuide/ps/ vendor/llvm/dist/docs/CommandGuide/tblgen.pod vendor/llvm/dist/docs/CommandLine.html vendor/llvm/dist/docs/DeveloperPolicy.html vendor/llvm/dist/docs/ExceptionHandling.html vendor/llvm/dist/docs/FAQ.html vendor/llvm/dist/docs/GetElementPtr.html vendor/llvm/dist/docs/GettingStartedVS.html vendor/llvm/dist/docs/Lexicon.html vendor/llvm/dist/docs/LinkTimeOptimization.html vendor/llvm/dist/docs/MakefileGuide.html vendor/llvm/dist/docs/Packaging.html vendor/llvm/dist/docs/Projects.html vendor/llvm/dist/docs/SegmentedStacks.html vendor/llvm/dist/docs/TableGenFundamentals.html vendor/llvm/dist/docs/img/ vendor/llvm/dist/docs/index.html vendor/llvm/dist/docs/llvm.css vendor/llvm/dist/docs/tutorial/Makefile vendor/llvm/dist/include/llvm/Analysis/DIBuilder.h vendor/llvm/dist/include/llvm/Analysis/DebugInfo.h vendor/llvm/dist/include/llvm/CodeGen/ProcessImplicitDefs.h vendor/llvm/dist/include/llvm/IntrinsicsPTX.td vendor/llvm/dist/include/llvm/Support/IRBuilder.h vendor/llvm/dist/include/llvm/Support/MDBuilder.h vendor/llvm/dist/include/llvm/Support/TypeBuilder.h vendor/llvm/dist/include/llvm/Transforms/Utils/FunctionUtils.h vendor/llvm/dist/lib/Analysis/DIBuilder.cpp vendor/llvm/dist/lib/Analysis/DebugInfo.cpp vendor/llvm/dist/lib/CodeGen/RegisterClassInfo.h vendor/llvm/dist/lib/CodeGen/RenderMachineFunction.cpp vendor/llvm/dist/lib/CodeGen/RenderMachineFunction.h vendor/llvm/dist/lib/Target/Mips/MipsEmitGPRestore.cpp vendor/llvm/dist/lib/Target/Mips/MipsExpandPseudo.cpp vendor/llvm/dist/lib/Target/PTX/CMakeLists.txt vendor/llvm/dist/lib/Target/PTX/InstPrinter/CMakeLists.txt vendor/llvm/dist/lib/Target/PTX/InstPrinter/LLVMBuild.txt vendor/llvm/dist/lib/Target/PTX/InstPrinter/Makefile vendor/llvm/dist/lib/Target/PTX/InstPrinter/PTXInstPrinter.cpp vendor/llvm/dist/lib/Target/PTX/InstPrinter/PTXInstPrinter.h vendor/llvm/dist/lib/Target/PTX/LLVMBuild.txt vendor/llvm/dist/lib/Target/PTX/MCTargetDesc/CMakeLists.txt vendor/llvm/dist/lib/Target/PTX/MCTargetDesc/LLVMBuild.txt vendor/llvm/dist/lib/Target/PTX/MCTargetDesc/Makefile vendor/llvm/dist/lib/Target/PTX/MCTargetDesc/PTXBaseInfo.h vendor/llvm/dist/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.cpp vendor/llvm/dist/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.h vendor/llvm/dist/lib/Target/PTX/MCTargetDesc/PTXMCTargetDesc.cpp vendor/llvm/dist/lib/Target/PTX/MCTargetDesc/PTXMCTargetDesc.h vendor/llvm/dist/lib/Target/PTX/Makefile vendor/llvm/dist/lib/Target/PTX/PTX.h vendor/llvm/dist/lib/Target/PTX/PTX.td vendor/llvm/dist/lib/Target/PTX/PTXAsmPrinter.cpp vendor/llvm/dist/lib/Target/PTX/PTXAsmPrinter.h vendor/llvm/dist/lib/Target/PTX/PTXFPRoundingModePass.cpp vendor/llvm/dist/lib/Target/PTX/PTXFrameLowering.cpp vendor/llvm/dist/lib/Target/PTX/PTXFrameLowering.h vendor/llvm/dist/lib/Target/PTX/PTXISelDAGToDAG.cpp vendor/llvm/dist/lib/Target/PTX/PTXISelLowering.cpp vendor/llvm/dist/lib/Target/PTX/PTXISelLowering.h vendor/llvm/dist/lib/Target/PTX/PTXInstrFormats.td vendor/llvm/dist/lib/Target/PTX/PTXInstrInfo.cpp vendor/llvm/dist/lib/Target/PTX/PTXInstrInfo.h vendor/llvm/dist/lib/Target/PTX/PTXInstrInfo.td vendor/llvm/dist/lib/Target/PTX/PTXInstrLoadStore.td vendor/llvm/dist/lib/Target/PTX/PTXIntrinsicInstrInfo.td vendor/llvm/dist/lib/Target/PTX/PTXMCAsmStreamer.cpp vendor/llvm/dist/lib/Target/PTX/PTXMCInstLower.cpp vendor/llvm/dist/lib/Target/PTX/PTXMFInfoExtract.cpp vendor/llvm/dist/lib/Target/PTX/PTXMachineFunctionInfo.cpp vendor/llvm/dist/lib/Target/PTX/PTXMachineFunctionInfo.h vendor/llvm/dist/lib/Target/PTX/PTXParamManager.cpp vendor/llvm/dist/lib/Target/PTX/PTXParamManager.h vendor/llvm/dist/lib/Target/PTX/PTXRegAlloc.cpp vendor/llvm/dist/lib/Target/PTX/PTXRegisterInfo.cpp vendor/llvm/dist/lib/Target/PTX/PTXRegisterInfo.h vendor/llvm/dist/lib/Target/PTX/PTXRegisterInfo.td vendor/llvm/dist/lib/Target/PTX/PTXSelectionDAGInfo.cpp vendor/llvm/dist/lib/Target/PTX/PTXSelectionDAGInfo.h vendor/llvm/dist/lib/Target/PTX/PTXSubtarget.cpp vendor/llvm/dist/lib/Target/PTX/PTXSubtarget.h vendor/llvm/dist/lib/Target/PTX/PTXTargetMachine.cpp vendor/llvm/dist/lib/Target/PTX/PTXTargetMachine.h vendor/llvm/dist/lib/Target/PTX/TargetInfo/CMakeLists.txt vendor/llvm/dist/lib/Target/PTX/TargetInfo/LLVMBuild.txt vendor/llvm/dist/lib/Target/PTX/TargetInfo/Makefile vendor/llvm/dist/lib/Target/PTX/TargetInfo/PTXTargetInfo.cpp vendor/llvm/dist/test/Assembler/2003-06-17-InvokeDisassemble.ll vendor/llvm/dist/test/CodeGen/Generic/2009-06-03-UnreachableSplitPad.ll vendor/llvm/dist/test/CodeGen/PTX/20110926-sitofp.ll vendor/llvm/dist/test/CodeGen/PTX/add.ll vendor/llvm/dist/test/CodeGen/PTX/aggregates.ll vendor/llvm/dist/test/CodeGen/PTX/bitwise.ll vendor/llvm/dist/test/CodeGen/PTX/bra.ll vendor/llvm/dist/test/CodeGen/PTX/cvt.ll vendor/llvm/dist/test/CodeGen/PTX/exit.ll vendor/llvm/dist/test/CodeGen/PTX/fdiv-sm10.ll vendor/llvm/dist/test/CodeGen/PTX/fdiv-sm13.ll vendor/llvm/dist/test/CodeGen/PTX/fneg.ll vendor/llvm/dist/test/CodeGen/PTX/intrinsic.ll vendor/llvm/dist/test/CodeGen/PTX/ld.ll vendor/llvm/dist/test/CodeGen/PTX/lit.local.cfg vendor/llvm/dist/test/CodeGen/PTX/llvm-intrinsic.ll vendor/llvm/dist/test/CodeGen/PTX/mad-disabling.ll vendor/llvm/dist/test/CodeGen/PTX/mad.ll vendor/llvm/dist/test/CodeGen/PTX/mov.ll vendor/llvm/dist/test/CodeGen/PTX/mul.ll vendor/llvm/dist/test/CodeGen/PTX/options.ll vendor/llvm/dist/test/CodeGen/PTX/parameter-order.ll vendor/llvm/dist/test/CodeGen/PTX/printf.ll vendor/llvm/dist/test/CodeGen/PTX/ret.ll vendor/llvm/dist/test/CodeGen/PTX/selp.ll vendor/llvm/dist/test/CodeGen/PTX/setp.ll vendor/llvm/dist/test/CodeGen/PTX/shl.ll vendor/llvm/dist/test/CodeGen/PTX/shr.ll vendor/llvm/dist/test/CodeGen/PTX/simple-call.ll vendor/llvm/dist/test/CodeGen/PTX/st.ll vendor/llvm/dist/test/CodeGen/PTX/stack-object.ll vendor/llvm/dist/test/CodeGen/PTX/sub.ll vendor/llvm/dist/test/CodeGen/X86/2008-08-25-AsmRegTypeMismatch.ll vendor/llvm/dist/test/CodeGen/X86/stack-protector-linux.ll vendor/llvm/dist/test/CodeGen/X86/tailcall-i1.ll vendor/llvm/dist/test/CodeGen/X86/tailcall-void.ll vendor/llvm/dist/test/CodeGen/X86/tailcall1.ll vendor/llvm/dist/test/Integer/varargs_bt.ll vendor/llvm/dist/test/Integer/varargs_new_bt.ll vendor/llvm/dist/test/Linker/2003-04-21-Linkage.ll vendor/llvm/dist/test/Linker/link-archive.ll vendor/llvm/dist/test/Transforms/InstCombine/sdiv-shift.ll vendor/llvm/dist/test/Transforms/PruneEH/2003-09-14-ExternalCall.ll vendor/llvm/dist/test/Transforms/Reassociate/2005-08-24-Crash.ll vendor/llvm/dist/test/Transforms/Reassociate/mulfactor2.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2003-08-05-MishandleInvoke.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2006-10-29-InvokeCrash.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2009-06-15-InvokeCrash.ll vendor/llvm/dist/test/Verifier/invoke-1.ll vendor/llvm/dist/test/Verifier/invoke-2.ll vendor/llvm/dist/test/site.exp.in vendor/llvm/dist/tools/llvm-ld/ vendor/llvm/dist/tools/llvm-stub/CMakeLists.txt vendor/llvm/dist/tools/llvm-stub/LLVMBuild.txt vendor/llvm/dist/tools/llvm-stub/Makefile vendor/llvm/dist/tools/llvm-stub/llvm-stub.c vendor/llvm/dist/unittests/ADT/SmallBitVectorTest.cpp vendor/llvm/dist/unittests/Support/IRBuilderTest.cpp vendor/llvm/dist/unittests/Support/MDBuilderTest.cpp vendor/llvm/dist/unittests/Support/TypeBuilderTest.cpp vendor/llvm/dist/utils/TableGen/AsmMatcherEmitter.h vendor/llvm/dist/utils/TableGen/AsmWriterEmitter.h vendor/llvm/dist/utils/TableGen/CallingConvEmitter.h vendor/llvm/dist/utils/TableGen/CodeEmitterGen.h vendor/llvm/dist/utils/TableGen/DAGISelEmitter.h vendor/llvm/dist/utils/TableGen/DFAPacketizerEmitter.h vendor/llvm/dist/utils/TableGen/DisassemblerEmitter.h vendor/llvm/dist/utils/TableGen/EDEmitter.h vendor/llvm/dist/utils/TableGen/FastISelEmitter.h vendor/llvm/dist/utils/TableGen/FixedLenDecoderEmitter.h vendor/llvm/dist/utils/TableGen/InstrInfoEmitter.h vendor/llvm/dist/utils/TableGen/IntrinsicEmitter.h vendor/llvm/dist/utils/TableGen/PseudoLoweringEmitter.h vendor/llvm/dist/utils/TableGen/RegisterInfoEmitter.h vendor/llvm/dist/utils/TableGen/StringMatcher.cpp vendor/llvm/dist/utils/TableGen/StringMatcher.h vendor/llvm/dist/utils/TableGen/SubtargetEmitter.h Modified: vendor/llvm/dist/.gitignore vendor/llvm/dist/CMakeLists.txt vendor/llvm/dist/CREDITS.TXT vendor/llvm/dist/Makefile.common vendor/llvm/dist/Makefile.config.in vendor/llvm/dist/Makefile.rules vendor/llvm/dist/README.txt vendor/llvm/dist/autoconf/config.guess vendor/llvm/dist/autoconf/configure.ac vendor/llvm/dist/autoconf/ltmain.sh vendor/llvm/dist/autoconf/m4/func_isinf.m4 vendor/llvm/dist/autoconf/m4/huge_val.m4 vendor/llvm/dist/autoconf/m4/libtool.m4 vendor/llvm/dist/autoconf/m4/rand48.m4 vendor/llvm/dist/bindings/ocaml/bitreader/llvm_bitreader.mli vendor/llvm/dist/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c vendor/llvm/dist/cmake/config-ix.cmake vendor/llvm/dist/cmake/modules/AddLLVM.cmake vendor/llvm/dist/cmake/modules/HandleLLVMOptions.cmake vendor/llvm/dist/cmake/modules/LLVMConfig.cmake.in vendor/llvm/dist/cmake/modules/LLVMProcessSources.cmake vendor/llvm/dist/cmake/modules/TableGen.cmake vendor/llvm/dist/configure vendor/llvm/dist/docs/CompilerWriterInfo.html vendor/llvm/dist/docs/DebuggingJITedCode.html vendor/llvm/dist/docs/ExtendingLLVM.html vendor/llvm/dist/docs/GCCFEBuildInstrs.html vendor/llvm/dist/docs/GarbageCollection.html vendor/llvm/dist/docs/GettingStarted.html vendor/llvm/dist/docs/GoldPlugin.html vendor/llvm/dist/docs/HowToAddABuilder.html vendor/llvm/dist/docs/HowToReleaseLLVM.html vendor/llvm/dist/docs/HowToSubmitABug.html vendor/llvm/dist/docs/LLVMBuild.html vendor/llvm/dist/docs/LangRef.html vendor/llvm/dist/docs/Makefile vendor/llvm/dist/docs/Passes.html vendor/llvm/dist/docs/ProgrammersManual.html vendor/llvm/dist/docs/ReleaseNotes.html vendor/llvm/dist/docs/SourceLevelDebugging.html vendor/llvm/dist/docs/SystemLibrary.html vendor/llvm/dist/docs/TestSuiteMakefileGuide.html vendor/llvm/dist/docs/TestingGuide.html vendor/llvm/dist/docs/WritingAnLLVMBackend.html vendor/llvm/dist/docs/WritingAnLLVMPass.html vendor/llvm/dist/docs/doxygen.css vendor/llvm/dist/docs/tutorial/LangImpl1.html vendor/llvm/dist/docs/tutorial/LangImpl2.html vendor/llvm/dist/docs/tutorial/LangImpl3.html vendor/llvm/dist/docs/tutorial/LangImpl4.html vendor/llvm/dist/docs/tutorial/LangImpl5.html vendor/llvm/dist/docs/tutorial/LangImpl6.html vendor/llvm/dist/docs/tutorial/LangImpl7.html vendor/llvm/dist/docs/tutorial/LangImpl8.html vendor/llvm/dist/docs/tutorial/OCamlLangImpl1.html vendor/llvm/dist/docs/tutorial/OCamlLangImpl2.html vendor/llvm/dist/docs/tutorial/OCamlLangImpl3.html vendor/llvm/dist/docs/tutorial/OCamlLangImpl4.html vendor/llvm/dist/docs/tutorial/OCamlLangImpl5.html vendor/llvm/dist/docs/tutorial/OCamlLangImpl6.html vendor/llvm/dist/docs/tutorial/OCamlLangImpl7.html vendor/llvm/dist/docs/tutorial/OCamlLangImpl8.html vendor/llvm/dist/docs/tutorial/index.html vendor/llvm/dist/examples/BrainF/BrainF.h vendor/llvm/dist/examples/BrainF/BrainFDriver.cpp vendor/llvm/dist/examples/ExceptionDemo/ExceptionDemo.cpp vendor/llvm/dist/examples/Fibonacci/fibonacci.cpp vendor/llvm/dist/examples/HowToUseJIT/HowToUseJIT.cpp vendor/llvm/dist/examples/Kaleidoscope/Chapter3/toy.cpp vendor/llvm/dist/examples/Kaleidoscope/Chapter4/toy.cpp vendor/llvm/dist/examples/Kaleidoscope/Chapter5/toy.cpp vendor/llvm/dist/examples/Kaleidoscope/Chapter6/toy.cpp vendor/llvm/dist/examples/Kaleidoscope/Chapter7/toy.cpp vendor/llvm/dist/include/llvm-c/Core.h vendor/llvm/dist/include/llvm-c/Disassembler.h vendor/llvm/dist/include/llvm-c/Target.h vendor/llvm/dist/include/llvm/ADT/APFloat.h vendor/llvm/dist/include/llvm/ADT/APInt.h vendor/llvm/dist/include/llvm/ADT/APSInt.h vendor/llvm/dist/include/llvm/ADT/ArrayRef.h vendor/llvm/dist/include/llvm/ADT/BitVector.h vendor/llvm/dist/include/llvm/ADT/DenseMap.h vendor/llvm/dist/include/llvm/ADT/DepthFirstIterator.h vendor/llvm/dist/include/llvm/ADT/FoldingSet.h vendor/llvm/dist/include/llvm/ADT/Hashing.h vendor/llvm/dist/include/llvm/ADT/ImmutableSet.h vendor/llvm/dist/include/llvm/ADT/IndexedMap.h vendor/llvm/dist/include/llvm/ADT/IntrusiveRefCntPtr.h vendor/llvm/dist/include/llvm/ADT/PointerIntPair.h vendor/llvm/dist/include/llvm/ADT/PointerUnion.h vendor/llvm/dist/include/llvm/ADT/PostOrderIterator.h vendor/llvm/dist/include/llvm/ADT/STLExtras.h vendor/llvm/dist/include/llvm/ADT/SmallBitVector.h vendor/llvm/dist/include/llvm/ADT/SmallString.h vendor/llvm/dist/include/llvm/ADT/SmallVector.h vendor/llvm/dist/include/llvm/ADT/SparseSet.h vendor/llvm/dist/include/llvm/ADT/StringRef.h vendor/llvm/dist/include/llvm/ADT/StringSwitch.h vendor/llvm/dist/include/llvm/ADT/TinyPtrVector.h vendor/llvm/dist/include/llvm/ADT/Triple.h vendor/llvm/dist/include/llvm/ADT/ValueMap.h vendor/llvm/dist/include/llvm/Analysis/AliasAnalysis.h vendor/llvm/dist/include/llvm/Analysis/BlockFrequencyImpl.h vendor/llvm/dist/include/llvm/Analysis/CodeMetrics.h vendor/llvm/dist/include/llvm/Analysis/Dominators.h vendor/llvm/dist/include/llvm/Analysis/InlineCost.h vendor/llvm/dist/include/llvm/Analysis/LoopInfo.h vendor/llvm/dist/include/llvm/Analysis/LoopIterator.h vendor/llvm/dist/include/llvm/Analysis/MemoryBuiltins.h vendor/llvm/dist/include/llvm/Analysis/MemoryDependenceAnalysis.h vendor/llvm/dist/include/llvm/Analysis/ProfileInfoLoader.h vendor/llvm/dist/include/llvm/Analysis/RegionInfo.h vendor/llvm/dist/include/llvm/Analysis/ScalarEvolution.h vendor/llvm/dist/include/llvm/Analysis/ScalarEvolutionExpander.h vendor/llvm/dist/include/llvm/Analysis/ScalarEvolutionExpressions.h vendor/llvm/dist/include/llvm/Analysis/ValueTracking.h vendor/llvm/dist/include/llvm/Attributes.h vendor/llvm/dist/include/llvm/Bitcode/Archive.h vendor/llvm/dist/include/llvm/Bitcode/ReaderWriter.h vendor/llvm/dist/include/llvm/CMakeLists.txt vendor/llvm/dist/include/llvm/CodeGen/AsmPrinter.h vendor/llvm/dist/include/llvm/CodeGen/DFAPacketizer.h vendor/llvm/dist/include/llvm/CodeGen/EdgeBundles.h vendor/llvm/dist/include/llvm/CodeGen/FastISel.h vendor/llvm/dist/include/llvm/CodeGen/GCMetadata.h vendor/llvm/dist/include/llvm/CodeGen/GCStrategy.h vendor/llvm/dist/include/llvm/CodeGen/ISDOpcodes.h vendor/llvm/dist/include/llvm/CodeGen/LexicalScopes.h vendor/llvm/dist/include/llvm/CodeGen/LiveInterval.h vendor/llvm/dist/include/llvm/CodeGen/LiveIntervalAnalysis.h vendor/llvm/dist/include/llvm/CodeGen/LiveRangeEdit.h vendor/llvm/dist/include/llvm/CodeGen/MachineBasicBlock.h vendor/llvm/dist/include/llvm/CodeGen/MachineFrameInfo.h vendor/llvm/dist/include/llvm/CodeGen/MachineFunction.h vendor/llvm/dist/include/llvm/CodeGen/MachineInstr.h vendor/llvm/dist/include/llvm/CodeGen/MachineInstrBuilder.h vendor/llvm/dist/include/llvm/CodeGen/MachineInstrBundle.h vendor/llvm/dist/include/llvm/CodeGen/MachineJumpTableInfo.h vendor/llvm/dist/include/llvm/CodeGen/MachineLoopInfo.h vendor/llvm/dist/include/llvm/CodeGen/MachineOperand.h vendor/llvm/dist/include/llvm/CodeGen/MachinePassRegistry.h vendor/llvm/dist/include/llvm/CodeGen/MachineRegisterInfo.h vendor/llvm/dist/include/llvm/CodeGen/MachineScheduler.h vendor/llvm/dist/include/llvm/CodeGen/Passes.h vendor/llvm/dist/include/llvm/CodeGen/ScheduleDAG.h vendor/llvm/dist/include/llvm/CodeGen/ScheduleDAGInstrs.h vendor/llvm/dist/include/llvm/CodeGen/ScheduleHazardRecognizer.h vendor/llvm/dist/include/llvm/CodeGen/SelectionDAG.h vendor/llvm/dist/include/llvm/CodeGen/SelectionDAGISel.h vendor/llvm/dist/include/llvm/CodeGen/SelectionDAGNodes.h vendor/llvm/dist/include/llvm/CodeGen/SlotIndexes.h vendor/llvm/dist/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h vendor/llvm/dist/include/llvm/CodeGen/ValueTypes.h vendor/llvm/dist/include/llvm/CodeGen/ValueTypes.td vendor/llvm/dist/include/llvm/Config/config.h.cmake vendor/llvm/dist/include/llvm/Config/config.h.in vendor/llvm/dist/include/llvm/Config/llvm-config.h.cmake vendor/llvm/dist/include/llvm/Config/llvm-config.h.in vendor/llvm/dist/include/llvm/Constant.h vendor/llvm/dist/include/llvm/Constants.h vendor/llvm/dist/include/llvm/DebugInfo/DIContext.h vendor/llvm/dist/include/llvm/ExecutionEngine/ExecutionEngine.h vendor/llvm/dist/include/llvm/ExecutionEngine/Interpreter.h vendor/llvm/dist/include/llvm/ExecutionEngine/JIT.h vendor/llvm/dist/include/llvm/ExecutionEngine/MCJIT.h vendor/llvm/dist/include/llvm/ExecutionEngine/RuntimeDyld.h vendor/llvm/dist/include/llvm/Function.h vendor/llvm/dist/include/llvm/GlobalValue.h vendor/llvm/dist/include/llvm/GlobalVariable.h vendor/llvm/dist/include/llvm/InitializePasses.h vendor/llvm/dist/include/llvm/Instruction.h vendor/llvm/dist/include/llvm/Instructions.h vendor/llvm/dist/include/llvm/Intrinsics.h vendor/llvm/dist/include/llvm/Intrinsics.td vendor/llvm/dist/include/llvm/IntrinsicsHexagon.td vendor/llvm/dist/include/llvm/IntrinsicsX86.td vendor/llvm/dist/include/llvm/LinkAllPasses.h vendor/llvm/dist/include/llvm/MC/EDInstInfo.h vendor/llvm/dist/include/llvm/MC/MCAsmInfo.h vendor/llvm/dist/include/llvm/MC/MCAssembler.h vendor/llvm/dist/include/llvm/MC/MCContext.h vendor/llvm/dist/include/llvm/MC/MCDirectives.h vendor/llvm/dist/include/llvm/MC/MCDisassembler.h vendor/llvm/dist/include/llvm/MC/MCELFObjectWriter.h vendor/llvm/dist/include/llvm/MC/MCExpr.h vendor/llvm/dist/include/llvm/MC/MCFixupKindInfo.h vendor/llvm/dist/include/llvm/MC/MCInstrItineraries.h vendor/llvm/dist/include/llvm/MC/MCMachObjectWriter.h vendor/llvm/dist/include/llvm/MC/MCObjectFileInfo.h vendor/llvm/dist/include/llvm/MC/MCObjectWriter.h vendor/llvm/dist/include/llvm/MC/MCRegisterInfo.h vendor/llvm/dist/include/llvm/MC/MCStreamer.h vendor/llvm/dist/include/llvm/MC/MCSubtargetInfo.h vendor/llvm/dist/include/llvm/MC/MCTargetAsmLexer.h vendor/llvm/dist/include/llvm/MC/MCTargetAsmParser.h vendor/llvm/dist/include/llvm/MC/MachineLocation.h vendor/llvm/dist/include/llvm/MC/SubtargetFeature.h vendor/llvm/dist/include/llvm/Metadata.h vendor/llvm/dist/include/llvm/Module.h vendor/llvm/dist/include/llvm/Object/Binary.h vendor/llvm/dist/include/llvm/Object/COFF.h vendor/llvm/dist/include/llvm/Object/ELF.h vendor/llvm/dist/include/llvm/Object/MachOFormat.h vendor/llvm/dist/include/llvm/Object/MachOObject.h vendor/llvm/dist/include/llvm/Object/ObjectFile.h vendor/llvm/dist/include/llvm/PassManagers.h vendor/llvm/dist/include/llvm/Support/AlignOf.h vendor/llvm/dist/include/llvm/Support/COFF.h vendor/llvm/dist/include/llvm/Support/CallSite.h vendor/llvm/dist/include/llvm/Support/CommandLine.h vendor/llvm/dist/include/llvm/Support/Compiler.h vendor/llvm/dist/include/llvm/Support/ConstantRange.h vendor/llvm/dist/include/llvm/Support/DataTypes.h.cmake vendor/llvm/dist/include/llvm/Support/DataTypes.h.in vendor/llvm/dist/include/llvm/Support/Debug.h vendor/llvm/dist/include/llvm/Support/DebugLoc.h vendor/llvm/dist/include/llvm/Support/ELF.h vendor/llvm/dist/include/llvm/Support/Endian.h vendor/llvm/dist/include/llvm/Support/FileSystem.h vendor/llvm/dist/include/llvm/Support/GCOV.h vendor/llvm/dist/include/llvm/Support/GraphWriter.h vendor/llvm/dist/include/llvm/Support/InstVisitor.h vendor/llvm/dist/include/llvm/Support/MachO.h vendor/llvm/dist/include/llvm/Support/MathExtras.h vendor/llvm/dist/include/llvm/Support/PathV2.h vendor/llvm/dist/include/llvm/Support/Process.h vendor/llvm/dist/include/llvm/Support/SMLoc.h vendor/llvm/dist/include/llvm/Support/SourceMgr.h vendor/llvm/dist/include/llvm/Support/TargetRegistry.h vendor/llvm/dist/include/llvm/Support/ThreadLocal.h vendor/llvm/dist/include/llvm/Support/ValueHandle.h vendor/llvm/dist/include/llvm/Support/YAMLParser.h vendor/llvm/dist/include/llvm/Support/raw_ostream.h vendor/llvm/dist/include/llvm/Support/type_traits.h vendor/llvm/dist/include/llvm/TableGen/Record.h vendor/llvm/dist/include/llvm/TableGen/TableGenBackend.h vendor/llvm/dist/include/llvm/Target/Target.td vendor/llvm/dist/include/llvm/Target/TargetCallingConv.h vendor/llvm/dist/include/llvm/Target/TargetData.h vendor/llvm/dist/include/llvm/Target/TargetELFWriterInfo.h vendor/llvm/dist/include/llvm/Target/TargetInstrInfo.h vendor/llvm/dist/include/llvm/Target/TargetLibraryInfo.h vendor/llvm/dist/include/llvm/Target/TargetLowering.h vendor/llvm/dist/include/llvm/Target/TargetMachine.h vendor/llvm/dist/include/llvm/Target/TargetOptions.h vendor/llvm/dist/include/llvm/Target/TargetRegisterInfo.h vendor/llvm/dist/include/llvm/Target/TargetSchedule.td vendor/llvm/dist/include/llvm/Target/TargetSelectionDAG.td vendor/llvm/dist/include/llvm/Transforms/Instrumentation.h vendor/llvm/dist/include/llvm/Transforms/Scalar.h vendor/llvm/dist/include/llvm/Transforms/Utils/BasicBlockUtils.h vendor/llvm/dist/include/llvm/Transforms/Utils/BuildLibCalls.h vendor/llvm/dist/include/llvm/Transforms/Utils/Local.h vendor/llvm/dist/include/llvm/Transforms/Utils/PromoteMemToReg.h vendor/llvm/dist/include/llvm/Transforms/Vectorize.h vendor/llvm/dist/include/llvm/User.h vendor/llvm/dist/lib/Analysis/AliasAnalysis.cpp vendor/llvm/dist/lib/Analysis/AliasSetTracker.cpp vendor/llvm/dist/lib/Analysis/BasicAliasAnalysis.cpp vendor/llvm/dist/lib/Analysis/CMakeLists.txt vendor/llvm/dist/lib/Analysis/CaptureTracking.cpp vendor/llvm/dist/lib/Analysis/CodeMetrics.cpp vendor/llvm/dist/lib/Analysis/ConstantFolding.cpp vendor/llvm/dist/lib/Analysis/DbgInfoPrinter.cpp vendor/llvm/dist/lib/Analysis/IPA/CMakeLists.txt vendor/llvm/dist/lib/Analysis/IPA/CallGraphSCCPass.cpp vendor/llvm/dist/lib/Analysis/IPA/GlobalsModRef.cpp vendor/llvm/dist/lib/Analysis/IVUsers.cpp vendor/llvm/dist/lib/Analysis/InlineCost.cpp vendor/llvm/dist/lib/Analysis/InstructionSimplify.cpp vendor/llvm/dist/lib/Analysis/LazyValueInfo.cpp vendor/llvm/dist/lib/Analysis/LoopInfo.cpp vendor/llvm/dist/lib/Analysis/LoopPass.cpp vendor/llvm/dist/lib/Analysis/MemDepPrinter.cpp vendor/llvm/dist/lib/Analysis/MemoryBuiltins.cpp vendor/llvm/dist/lib/Analysis/MemoryDependenceAnalysis.cpp vendor/llvm/dist/lib/Analysis/ModuleDebugInfoPrinter.cpp vendor/llvm/dist/lib/Analysis/PathNumbering.cpp vendor/llvm/dist/lib/Analysis/ProfileInfoLoader.cpp vendor/llvm/dist/lib/Analysis/ProfileInfoLoaderPass.cpp vendor/llvm/dist/lib/Analysis/RegionInfo.cpp vendor/llvm/dist/lib/Analysis/RegionPass.cpp vendor/llvm/dist/lib/Analysis/RegionPrinter.cpp vendor/llvm/dist/lib/Analysis/ScalarEvolution.cpp vendor/llvm/dist/lib/Analysis/ScalarEvolutionExpander.cpp vendor/llvm/dist/lib/Analysis/ValueTracking.cpp vendor/llvm/dist/lib/Archive/ArchiveReader.cpp vendor/llvm/dist/lib/Archive/ArchiveWriter.cpp vendor/llvm/dist/lib/AsmParser/LLLexer.cpp vendor/llvm/dist/lib/AsmParser/LLParser.cpp vendor/llvm/dist/lib/AsmParser/LLParser.h vendor/llvm/dist/lib/AsmParser/LLToken.h vendor/llvm/dist/lib/Bitcode/Reader/BitcodeReader.cpp vendor/llvm/dist/lib/Bitcode/Reader/CMakeLists.txt vendor/llvm/dist/lib/Bitcode/Writer/BitcodeWriter.cpp vendor/llvm/dist/lib/CodeGen/AggressiveAntiDepBreaker.cpp vendor/llvm/dist/lib/CodeGen/AllocationOrder.cpp vendor/llvm/dist/lib/CodeGen/Analysis.cpp vendor/llvm/dist/lib/CodeGen/AsmPrinter/ARMException.cpp vendor/llvm/dist/lib/CodeGen/AsmPrinter/AsmPrinter.cpp vendor/llvm/dist/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp vendor/llvm/dist/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp vendor/llvm/dist/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h vendor/llvm/dist/lib/CodeGen/AsmPrinter/DwarfDebug.cpp vendor/llvm/dist/lib/CodeGen/AsmPrinter/DwarfDebug.h vendor/llvm/dist/lib/CodeGen/AsmPrinter/DwarfException.h vendor/llvm/dist/lib/CodeGen/BranchFolding.cpp vendor/llvm/dist/lib/CodeGen/CMakeLists.txt vendor/llvm/dist/lib/CodeGen/CalcSpillWeights.cpp vendor/llvm/dist/lib/CodeGen/CallingConvLower.cpp vendor/llvm/dist/lib/CodeGen/CodeGen.cpp vendor/llvm/dist/lib/CodeGen/CodePlacementOpt.cpp vendor/llvm/dist/lib/CodeGen/CriticalAntiDepBreaker.cpp vendor/llvm/dist/lib/CodeGen/CriticalAntiDepBreaker.h vendor/llvm/dist/lib/CodeGen/DFAPacketizer.cpp vendor/llvm/dist/lib/CodeGen/DeadMachineInstructionElim.cpp vendor/llvm/dist/lib/CodeGen/DwarfEHPrepare.cpp vendor/llvm/dist/lib/CodeGen/ExecutionDepsFix.cpp vendor/llvm/dist/lib/CodeGen/ExpandPostRAPseudos.cpp vendor/llvm/dist/lib/CodeGen/IfConversion.cpp vendor/llvm/dist/lib/CodeGen/InlineSpiller.cpp vendor/llvm/dist/lib/CodeGen/InterferenceCache.cpp vendor/llvm/dist/lib/CodeGen/InterferenceCache.h vendor/llvm/dist/lib/CodeGen/IntrinsicLowering.cpp vendor/llvm/dist/lib/CodeGen/LLVMTargetMachine.cpp vendor/llvm/dist/lib/CodeGen/LexicalScopes.cpp vendor/llvm/dist/lib/CodeGen/LiveDebugVariables.cpp vendor/llvm/dist/lib/CodeGen/LiveInterval.cpp vendor/llvm/dist/lib/CodeGen/LiveIntervalAnalysis.cpp vendor/llvm/dist/lib/CodeGen/LiveIntervalUnion.cpp vendor/llvm/dist/lib/CodeGen/LiveIntervalUnion.h vendor/llvm/dist/lib/CodeGen/LiveRangeCalc.cpp vendor/llvm/dist/lib/CodeGen/LiveRangeCalc.h vendor/llvm/dist/lib/CodeGen/LiveRangeEdit.cpp vendor/llvm/dist/lib/CodeGen/LiveVariables.cpp vendor/llvm/dist/lib/CodeGen/LocalStackSlotAllocation.cpp vendor/llvm/dist/lib/CodeGen/MachineBasicBlock.cpp vendor/llvm/dist/lib/CodeGen/MachineBlockPlacement.cpp vendor/llvm/dist/lib/CodeGen/MachineCSE.cpp vendor/llvm/dist/lib/CodeGen/MachineCopyPropagation.cpp vendor/llvm/dist/lib/CodeGen/MachineFunction.cpp vendor/llvm/dist/lib/CodeGen/MachineFunctionPrinterPass.cpp vendor/llvm/dist/lib/CodeGen/MachineInstr.cpp vendor/llvm/dist/lib/CodeGen/MachineInstrBundle.cpp vendor/llvm/dist/lib/CodeGen/MachineLICM.cpp vendor/llvm/dist/lib/CodeGen/MachineLoopInfo.cpp vendor/llvm/dist/lib/CodeGen/MachinePassRegistry.cpp vendor/llvm/dist/lib/CodeGen/MachineRegisterInfo.cpp vendor/llvm/dist/lib/CodeGen/MachineSSAUpdater.cpp vendor/llvm/dist/lib/CodeGen/MachineScheduler.cpp vendor/llvm/dist/lib/CodeGen/MachineSink.cpp vendor/llvm/dist/lib/CodeGen/MachineVerifier.cpp vendor/llvm/dist/lib/CodeGen/PHIElimination.cpp vendor/llvm/dist/lib/CodeGen/Passes.cpp vendor/llvm/dist/lib/CodeGen/PeepholeOptimizer.cpp vendor/llvm/dist/lib/CodeGen/PostRASchedulerList.cpp vendor/llvm/dist/lib/CodeGen/ProcessImplicitDefs.cpp vendor/llvm/dist/lib/CodeGen/PrologEpilogInserter.cpp vendor/llvm/dist/lib/CodeGen/RegAllocBase.cpp vendor/llvm/dist/lib/CodeGen/RegAllocBase.h vendor/llvm/dist/lib/CodeGen/RegAllocBasic.cpp vendor/llvm/dist/lib/CodeGen/RegAllocFast.cpp vendor/llvm/dist/lib/CodeGen/RegAllocGreedy.cpp vendor/llvm/dist/lib/CodeGen/RegAllocPBQP.cpp vendor/llvm/dist/lib/CodeGen/RegisterClassInfo.cpp vendor/llvm/dist/lib/CodeGen/RegisterCoalescer.cpp vendor/llvm/dist/lib/CodeGen/RegisterCoalescer.h vendor/llvm/dist/lib/CodeGen/RegisterScavenging.cpp vendor/llvm/dist/lib/CodeGen/ScheduleDAG.cpp vendor/llvm/dist/lib/CodeGen/ScheduleDAGInstrs.cpp vendor/llvm/dist/lib/CodeGen/ScoreboardHazardRecognizer.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/CMakeLists.txt vendor/llvm/dist/lib/CodeGen/SelectionDAG/DAGCombiner.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/FastISel.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/InstrEmitter.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/InstrEmitter.h vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeTypes.h vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/ResourcePriorityQueue.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAG.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAGPrinter.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/TargetLowering.cpp vendor/llvm/dist/lib/CodeGen/ShadowStackGC.cpp vendor/llvm/dist/lib/CodeGen/SjLjEHPrepare.cpp vendor/llvm/dist/lib/CodeGen/SlotIndexes.cpp vendor/llvm/dist/lib/CodeGen/SpillPlacement.cpp vendor/llvm/dist/lib/CodeGen/SplitKit.cpp vendor/llvm/dist/lib/CodeGen/StackProtector.cpp vendor/llvm/dist/lib/CodeGen/StackSlotColoring.cpp vendor/llvm/dist/lib/CodeGen/StrongPHIElimination.cpp vendor/llvm/dist/lib/CodeGen/TailDuplication.cpp vendor/llvm/dist/lib/CodeGen/TargetInstrInfoImpl.cpp vendor/llvm/dist/lib/CodeGen/TargetLoweringObjectFileImpl.cpp vendor/llvm/dist/lib/CodeGen/TwoAddressInstructionPass.cpp vendor/llvm/dist/lib/CodeGen/VirtRegMap.cpp vendor/llvm/dist/lib/CodeGen/VirtRegMap.h vendor/llvm/dist/lib/DebugInfo/DWARFCompileUnit.cpp vendor/llvm/dist/lib/DebugInfo/DWARFCompileUnit.h vendor/llvm/dist/lib/DebugInfo/DWARFContext.cpp vendor/llvm/dist/lib/DebugInfo/DWARFContext.h vendor/llvm/dist/lib/DebugInfo/DWARFDebugAranges.cpp vendor/llvm/dist/lib/DebugInfo/DWARFDebugInfoEntry.cpp vendor/llvm/dist/lib/DebugInfo/DWARFDebugInfoEntry.h vendor/llvm/dist/lib/DebugInfo/DWARFDebugLine.cpp vendor/llvm/dist/lib/DebugInfo/DWARFDebugLine.h vendor/llvm/dist/lib/ExecutionEngine/EventListenerCommon.h vendor/llvm/dist/lib/ExecutionEngine/IntelJITEvents/IntelJITEventListener.cpp vendor/llvm/dist/lib/ExecutionEngine/Interpreter/CMakeLists.txt vendor/llvm/dist/lib/ExecutionEngine/Interpreter/Execution.cpp vendor/llvm/dist/lib/ExecutionEngine/JIT/JIT.cpp vendor/llvm/dist/lib/ExecutionEngine/JIT/JITEmitter.cpp vendor/llvm/dist/lib/ExecutionEngine/JIT/JITMemoryManager.cpp vendor/llvm/dist/lib/ExecutionEngine/MCJIT/MCJIT.cpp vendor/llvm/dist/lib/ExecutionEngine/MCJIT/MCJIT.h vendor/llvm/dist/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.h vendor/llvm/dist/lib/ExecutionEngine/OProfileJIT/OProfileJITEventListener.cpp vendor/llvm/dist/lib/ExecutionEngine/RuntimeDyld/ObjectImage.h vendor/llvm/dist/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp vendor/llvm/dist/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp vendor/llvm/dist/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h vendor/llvm/dist/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h vendor/llvm/dist/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp vendor/llvm/dist/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h vendor/llvm/dist/lib/ExecutionEngine/TargetSelect.cpp vendor/llvm/dist/lib/Linker/LinkModules.cpp vendor/llvm/dist/lib/MC/CMakeLists.txt vendor/llvm/dist/lib/MC/ELFObjectWriter.cpp vendor/llvm/dist/lib/MC/MCAsmBackend.cpp vendor/llvm/dist/lib/MC/MCAsmInfo.cpp vendor/llvm/dist/lib/MC/MCAsmInfoCOFF.cpp vendor/llvm/dist/lib/MC/MCAsmInfoDarwin.cpp vendor/llvm/dist/lib/MC/MCAsmStreamer.cpp vendor/llvm/dist/lib/MC/MCAssembler.cpp vendor/llvm/dist/lib/MC/MCContext.cpp vendor/llvm/dist/lib/MC/MCDisassembler/Disassembler.h vendor/llvm/dist/lib/MC/MCDisassembler/EDDisassembler.cpp vendor/llvm/dist/lib/MC/MCDisassembler/EDMain.cpp vendor/llvm/dist/lib/MC/MCDwarf.cpp vendor/llvm/dist/lib/MC/MCELFObjectTargetWriter.cpp vendor/llvm/dist/lib/MC/MCELFStreamer.cpp vendor/llvm/dist/lib/MC/MCExpr.cpp vendor/llvm/dist/lib/MC/MCMachOStreamer.cpp vendor/llvm/dist/lib/MC/MCNullStreamer.cpp vendor/llvm/dist/lib/MC/MCObjectFileInfo.cpp vendor/llvm/dist/lib/MC/MCObjectWriter.cpp vendor/llvm/dist/lib/MC/MCParser/AsmParser.cpp vendor/llvm/dist/lib/MC/MCParser/DarwinAsmParser.cpp vendor/llvm/dist/lib/MC/MCParser/ELFAsmParser.cpp vendor/llvm/dist/lib/MC/MCPureStreamer.cpp vendor/llvm/dist/lib/MC/MCSectionCOFF.cpp vendor/llvm/dist/lib/MC/MCSectionELF.cpp vendor/llvm/dist/lib/MC/MCStreamer.cpp vendor/llvm/dist/lib/MC/MCSubtargetInfo.cpp vendor/llvm/dist/lib/MC/MCSymbol.cpp vendor/llvm/dist/lib/MC/MCWin64EH.cpp vendor/llvm/dist/lib/MC/MachObjectWriter.cpp vendor/llvm/dist/lib/MC/SubtargetFeature.cpp vendor/llvm/dist/lib/MC/WinCOFFStreamer.cpp vendor/llvm/dist/lib/Object/Archive.cpp vendor/llvm/dist/lib/Object/COFFObjectFile.cpp vendor/llvm/dist/lib/Object/MachOObject.cpp vendor/llvm/dist/lib/Object/MachOObjectFile.cpp vendor/llvm/dist/lib/Support/APFloat.cpp vendor/llvm/dist/lib/Support/APInt.cpp vendor/llvm/dist/lib/Support/CMakeLists.txt vendor/llvm/dist/lib/Support/CommandLine.cpp vendor/llvm/dist/lib/Support/ConstantRange.cpp vendor/llvm/dist/lib/Support/CrashRecoveryContext.cpp vendor/llvm/dist/lib/Support/Debug.cpp vendor/llvm/dist/lib/Support/Errno.cpp vendor/llvm/dist/lib/Support/GraphWriter.cpp vendor/llvm/dist/lib/Support/Host.cpp vendor/llvm/dist/lib/Support/Memory.cpp vendor/llvm/dist/lib/Support/MemoryBuffer.cpp vendor/llvm/dist/lib/Support/Mutex.cpp vendor/llvm/dist/lib/Support/Path.cpp vendor/llvm/dist/lib/Support/PathV2.cpp vendor/llvm/dist/lib/Support/SourceMgr.cpp vendor/llvm/dist/lib/Support/StreamableMemoryObject.cpp vendor/llvm/dist/lib/Support/StringMap.cpp vendor/llvm/dist/lib/Support/StringRef.cpp vendor/llvm/dist/lib/Support/TargetRegistry.cpp vendor/llvm/dist/lib/Support/ThreadLocal.cpp vendor/llvm/dist/lib/Support/Triple.cpp vendor/llvm/dist/lib/Support/Unix/Path.inc vendor/llvm/dist/lib/Support/Unix/PathV2.inc vendor/llvm/dist/lib/Support/Unix/Process.inc vendor/llvm/dist/lib/Support/Unix/Signals.inc vendor/llvm/dist/lib/Support/Unix/Unix.h vendor/llvm/dist/lib/Support/Windows/Path.inc vendor/llvm/dist/lib/Support/Windows/PathV2.inc vendor/llvm/dist/lib/Support/Windows/Process.inc vendor/llvm/dist/lib/Support/Windows/RWMutex.inc vendor/llvm/dist/lib/Support/Windows/ThreadLocal.inc vendor/llvm/dist/lib/Support/YAMLParser.cpp vendor/llvm/dist/lib/Support/raw_ostream.cpp vendor/llvm/dist/lib/TableGen/CMakeLists.txt vendor/llvm/dist/lib/TableGen/Main.cpp vendor/llvm/dist/lib/TableGen/Record.cpp vendor/llvm/dist/lib/TableGen/TGParser.cpp vendor/llvm/dist/lib/TableGen/TGParser.h vendor/llvm/dist/lib/TableGen/TableGenBackend.cpp vendor/llvm/dist/lib/Target/ARM/ARM.td vendor/llvm/dist/lib/Target/ARM/ARMAsmPrinter.cpp vendor/llvm/dist/lib/Target/ARM/ARMAsmPrinter.h vendor/llvm/dist/lib/Target/ARM/ARMBaseInstrInfo.cpp vendor/llvm/dist/lib/Target/ARM/ARMBaseInstrInfo.h vendor/llvm/dist/lib/Target/ARM/ARMBaseRegisterInfo.cpp vendor/llvm/dist/lib/Target/ARM/ARMBaseRegisterInfo.h vendor/llvm/dist/lib/Target/ARM/ARMCallingConv.td vendor/llvm/dist/lib/Target/ARM/ARMCodeEmitter.cpp vendor/llvm/dist/lib/Target/ARM/ARMConstantIslandPass.cpp vendor/llvm/dist/lib/Target/ARM/ARMExpandPseudoInsts.cpp vendor/llvm/dist/lib/Target/ARM/ARMFastISel.cpp vendor/llvm/dist/lib/Target/ARM/ARMFrameLowering.cpp vendor/llvm/dist/lib/Target/ARM/ARMISelDAGToDAG.cpp vendor/llvm/dist/lib/Target/ARM/ARMISelLowering.cpp vendor/llvm/dist/lib/Target/ARM/ARMISelLowering.h vendor/llvm/dist/lib/Target/ARM/ARMInstrFormats.td vendor/llvm/dist/lib/Target/ARM/ARMInstrInfo.cpp vendor/llvm/dist/lib/Target/ARM/ARMInstrInfo.td vendor/llvm/dist/lib/Target/ARM/ARMInstrNEON.td vendor/llvm/dist/lib/Target/ARM/ARMInstrThumb.td vendor/llvm/dist/lib/Target/ARM/ARMInstrThumb2.td vendor/llvm/dist/lib/Target/ARM/ARMInstrVFP.td vendor/llvm/dist/lib/Target/ARM/ARMJITInfo.cpp vendor/llvm/dist/lib/Target/ARM/ARMLoadStoreOptimizer.cpp vendor/llvm/dist/lib/Target/ARM/ARMRegisterInfo.td vendor/llvm/dist/lib/Target/ARM/ARMSchedule.td vendor/llvm/dist/lib/Target/ARM/ARMScheduleA8.td vendor/llvm/dist/lib/Target/ARM/ARMScheduleA9.td vendor/llvm/dist/lib/Target/ARM/ARMSelectionDAGInfo.cpp vendor/llvm/dist/lib/Target/ARM/ARMSubtarget.cpp vendor/llvm/dist/lib/Target/ARM/ARMSubtarget.h vendor/llvm/dist/lib/Target/ARM/ARMTargetMachine.cpp vendor/llvm/dist/lib/Target/ARM/ARMTargetObjectFile.cpp vendor/llvm/dist/lib/Target/ARM/ARMTargetObjectFile.h vendor/llvm/dist/lib/Target/ARM/AsmParser/ARMAsmParser.cpp vendor/llvm/dist/lib/Target/ARM/CMakeLists.txt vendor/llvm/dist/lib/Target/ARM/Disassembler/ARMDisassembler.cpp vendor/llvm/dist/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp vendor/llvm/dist/lib/Target/ARM/InstPrinter/ARMInstPrinter.h vendor/llvm/dist/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp vendor/llvm/dist/lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h vendor/llvm/dist/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp vendor/llvm/dist/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp vendor/llvm/dist/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp vendor/llvm/dist/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp vendor/llvm/dist/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h vendor/llvm/dist/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp vendor/llvm/dist/lib/Target/ARM/MLxExpansionPass.cpp vendor/llvm/dist/lib/Target/ARM/README.txt vendor/llvm/dist/lib/Target/ARM/Thumb1InstrInfo.cpp vendor/llvm/dist/lib/Target/ARM/Thumb1RegisterInfo.cpp vendor/llvm/dist/lib/Target/ARM/Thumb1RegisterInfo.h vendor/llvm/dist/lib/Target/ARM/Thumb2ITBlockPass.cpp vendor/llvm/dist/lib/Target/ARM/Thumb2InstrInfo.cpp vendor/llvm/dist/lib/Target/ARM/Thumb2InstrInfo.h vendor/llvm/dist/lib/Target/ARM/Thumb2SizeReduction.cpp vendor/llvm/dist/lib/Target/CellSPU/CMakeLists.txt vendor/llvm/dist/lib/Target/CellSPU/README.txt vendor/llvm/dist/lib/Target/CellSPU/SPUAsmPrinter.cpp vendor/llvm/dist/lib/Target/CellSPU/SPUHazardRecognizers.cpp vendor/llvm/dist/lib/Target/CellSPU/SPUHazardRecognizers.h vendor/llvm/dist/lib/Target/CellSPU/SPUISelLowering.cpp vendor/llvm/dist/lib/Target/CellSPU/SPUISelLowering.h vendor/llvm/dist/lib/Target/CellSPU/SPUInstrInfo.cpp vendor/llvm/dist/lib/Target/CellSPU/SPUInstrInfo.td vendor/llvm/dist/lib/Target/CellSPU/SPURegisterInfo.cpp vendor/llvm/dist/lib/Target/CellSPU/SPURegisterInfo.h vendor/llvm/dist/lib/Target/CellSPU/SPUTargetMachine.cpp vendor/llvm/dist/lib/Target/CppBackend/CPPBackend.cpp vendor/llvm/dist/lib/Target/CppBackend/CPPTargetMachine.h vendor/llvm/dist/lib/Target/Hexagon/CMakeLists.txt vendor/llvm/dist/lib/Target/Hexagon/Hexagon.h vendor/llvm/dist/lib/Target/Hexagon/Hexagon.td vendor/llvm/dist/lib/Target/Hexagon/HexagonAsmPrinter.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonCallingConv.td vendor/llvm/dist/lib/Target/Hexagon/HexagonCallingConvLower.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonExpandPredSpillCode.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonFrameLowering.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonHardwareLoops.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonISelLowering.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonISelLowering.h vendor/llvm/dist/lib/Target/Hexagon/HexagonImmediates.td vendor/llvm/dist/lib/Target/Hexagon/HexagonInstrFormats.td vendor/llvm/dist/lib/Target/Hexagon/HexagonInstrFormatsV4.td vendor/llvm/dist/lib/Target/Hexagon/HexagonInstrInfo.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonInstrInfo.h vendor/llvm/dist/lib/Target/Hexagon/HexagonInstrInfo.td vendor/llvm/dist/lib/Target/Hexagon/HexagonInstrInfoV3.td vendor/llvm/dist/lib/Target/Hexagon/HexagonInstrInfoV4.td vendor/llvm/dist/lib/Target/Hexagon/HexagonIntrinsics.td vendor/llvm/dist/lib/Target/Hexagon/HexagonIntrinsicsDerived.td vendor/llvm/dist/lib/Target/Hexagon/HexagonMCInstLower.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonRegisterInfo.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonRegisterInfo.h vendor/llvm/dist/lib/Target/Hexagon/HexagonRegisterInfo.td vendor/llvm/dist/lib/Target/Hexagon/HexagonRemoveSZExtArgs.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonSchedule.td vendor/llvm/dist/lib/Target/Hexagon/HexagonScheduleV4.td vendor/llvm/dist/lib/Target/Hexagon/HexagonSplitTFRCondSets.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonSubtarget.cpp vendor/llvm/dist/lib/Target/Hexagon/HexagonSubtarget.h vendor/llvm/dist/lib/Target/Hexagon/HexagonTargetMachine.cpp vendor/llvm/dist/lib/Target/Hexagon/InstPrinter/HexagonInstPrinter.cpp vendor/llvm/dist/lib/Target/Hexagon/InstPrinter/HexagonInstPrinter.h vendor/llvm/dist/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h vendor/llvm/dist/lib/Target/LLVMBuild.txt vendor/llvm/dist/lib/Target/MBlaze/CMakeLists.txt vendor/llvm/dist/lib/Target/MBlaze/MBlaze.td vendor/llvm/dist/lib/Target/MBlaze/MBlazeAsmPrinter.cpp vendor/llvm/dist/lib/Target/MBlaze/MBlazeISelLowering.cpp vendor/llvm/dist/lib/Target/MBlaze/MBlazeISelLowering.h vendor/llvm/dist/lib/Target/MBlaze/MBlazeInstrInfo.cpp vendor/llvm/dist/lib/Target/MBlaze/MBlazeInstrInfo.td vendor/llvm/dist/lib/Target/MBlaze/MBlazeMCInstLower.h vendor/llvm/dist/lib/Target/MBlaze/MBlazeSchedule.td vendor/llvm/dist/lib/Target/MBlaze/MBlazeSubtarget.cpp vendor/llvm/dist/lib/Target/MBlaze/MBlazeTargetMachine.cpp vendor/llvm/dist/lib/Target/MBlaze/MCTargetDesc/MBlazeMCCodeEmitter.cpp vendor/llvm/dist/lib/Target/MBlaze/MCTargetDesc/MBlazeMCTargetDesc.h vendor/llvm/dist/lib/Target/MSP430/CMakeLists.txt vendor/llvm/dist/lib/Target/MSP430/MSP430AsmPrinter.cpp vendor/llvm/dist/lib/Target/MSP430/MSP430ISelLowering.cpp vendor/llvm/dist/lib/Target/MSP430/MSP430ISelLowering.h vendor/llvm/dist/lib/Target/MSP430/MSP430InstrInfo.cpp vendor/llvm/dist/lib/Target/MSP430/MSP430InstrInfo.h vendor/llvm/dist/lib/Target/MSP430/MSP430InstrInfo.td vendor/llvm/dist/lib/Target/MSP430/MSP430MCInstLower.h vendor/llvm/dist/lib/Target/MSP430/MSP430RegisterInfo.cpp vendor/llvm/dist/lib/Target/MSP430/MSP430RegisterInfo.h vendor/llvm/dist/lib/Target/MSP430/MSP430RegisterInfo.td vendor/llvm/dist/lib/Target/MSP430/MSP430TargetMachine.cpp vendor/llvm/dist/lib/Target/Mips/AsmParser/CMakeLists.txt vendor/llvm/dist/lib/Target/Mips/CMakeLists.txt vendor/llvm/dist/lib/Target/Mips/Disassembler/MipsDisassembler.cpp vendor/llvm/dist/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp vendor/llvm/dist/lib/Target/Mips/InstPrinter/MipsInstPrinter.h vendor/llvm/dist/lib/Target/Mips/MCTargetDesc/Makefile vendor/llvm/dist/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp vendor/llvm/dist/lib/Target/Mips/MCTargetDesc/MipsBaseInfo.h vendor/llvm/dist/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp vendor/llvm/dist/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h vendor/llvm/dist/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp vendor/llvm/dist/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h vendor/llvm/dist/lib/Target/Mips/Mips.h vendor/llvm/dist/lib/Target/Mips/Mips.td vendor/llvm/dist/lib/Target/Mips/Mips64InstrInfo.td vendor/llvm/dist/lib/Target/Mips/MipsAsmPrinter.cpp vendor/llvm/dist/lib/Target/Mips/MipsCallingConv.td vendor/llvm/dist/lib/Target/Mips/MipsCodeEmitter.cpp vendor/llvm/dist/lib/Target/Mips/MipsCondMov.td vendor/llvm/dist/lib/Target/Mips/MipsDelaySlotFiller.cpp vendor/llvm/dist/lib/Target/Mips/MipsFrameLowering.cpp vendor/llvm/dist/lib/Target/Mips/MipsFrameLowering.h vendor/llvm/dist/lib/Target/Mips/MipsISelDAGToDAG.cpp vendor/llvm/dist/lib/Target/Mips/MipsISelLowering.cpp vendor/llvm/dist/lib/Target/Mips/MipsISelLowering.h vendor/llvm/dist/lib/Target/Mips/MipsInstrFPU.td vendor/llvm/dist/lib/Target/Mips/MipsInstrFormats.td vendor/llvm/dist/lib/Target/Mips/MipsInstrInfo.cpp vendor/llvm/dist/lib/Target/Mips/MipsInstrInfo.h vendor/llvm/dist/lib/Target/Mips/MipsInstrInfo.td vendor/llvm/dist/lib/Target/Mips/MipsJITInfo.cpp vendor/llvm/dist/lib/Target/Mips/MipsJITInfo.h vendor/llvm/dist/lib/Target/Mips/MipsMCInstLower.cpp vendor/llvm/dist/lib/Target/Mips/MipsMCInstLower.h vendor/llvm/dist/lib/Target/Mips/MipsMachineFunction.cpp vendor/llvm/dist/lib/Target/Mips/MipsMachineFunction.h vendor/llvm/dist/lib/Target/Mips/MipsRegisterInfo.cpp vendor/llvm/dist/lib/Target/Mips/MipsRegisterInfo.h vendor/llvm/dist/lib/Target/Mips/MipsRegisterInfo.td vendor/llvm/dist/lib/Target/Mips/MipsSubtarget.cpp vendor/llvm/dist/lib/Target/Mips/MipsSubtarget.h vendor/llvm/dist/lib/Target/Mips/MipsTargetMachine.cpp vendor/llvm/dist/lib/Target/Mips/MipsTargetMachine.h vendor/llvm/dist/lib/Target/PowerPC/CMakeLists.txt vendor/llvm/dist/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp vendor/llvm/dist/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.h vendor/llvm/dist/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp vendor/llvm/dist/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.h vendor/llvm/dist/lib/Target/PowerPC/PPC.h vendor/llvm/dist/lib/Target/PowerPC/PPC.td vendor/llvm/dist/lib/Target/PowerPC/PPCAsmPrinter.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCBranchSelector.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCFrameLowering.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCISelDAGToDAG.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCISelLowering.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCISelLowering.h vendor/llvm/dist/lib/Target/PowerPC/PPCInstr64Bit.td vendor/llvm/dist/lib/Target/PowerPC/PPCInstrAltivec.td vendor/llvm/dist/lib/Target/PowerPC/PPCInstrFormats.td vendor/llvm/dist/lib/Target/PowerPC/PPCInstrInfo.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCInstrInfo.h vendor/llvm/dist/lib/Target/PowerPC/PPCInstrInfo.td vendor/llvm/dist/lib/Target/PowerPC/PPCJITInfo.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCMCInstLower.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCRegisterInfo.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCRegisterInfo.h vendor/llvm/dist/lib/Target/PowerPC/PPCRegisterInfo.td vendor/llvm/dist/lib/Target/PowerPC/PPCSchedule.td vendor/llvm/dist/lib/Target/PowerPC/PPCSchedule440.td vendor/llvm/dist/lib/Target/PowerPC/PPCScheduleA2.td vendor/llvm/dist/lib/Target/PowerPC/PPCScheduleG3.td vendor/llvm/dist/lib/Target/PowerPC/PPCScheduleG4.td vendor/llvm/dist/lib/Target/PowerPC/PPCScheduleG4Plus.td vendor/llvm/dist/lib/Target/PowerPC/PPCScheduleG5.td vendor/llvm/dist/lib/Target/PowerPC/PPCSubtarget.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCSubtarget.h vendor/llvm/dist/lib/Target/PowerPC/PPCTargetMachine.cpp vendor/llvm/dist/lib/Target/PowerPC/README.txt vendor/llvm/dist/lib/Target/PowerPC/TargetInfo/Makefile vendor/llvm/dist/lib/Target/README.txt vendor/llvm/dist/lib/Target/Sparc/CMakeLists.txt vendor/llvm/dist/lib/Target/Sparc/DelaySlotFiller.cpp vendor/llvm/dist/lib/Target/Sparc/SparcAsmPrinter.cpp vendor/llvm/dist/lib/Target/Sparc/SparcFrameLowering.h vendor/llvm/dist/lib/Target/Sparc/SparcISelLowering.cpp vendor/llvm/dist/lib/Target/Sparc/SparcISelLowering.h vendor/llvm/dist/lib/Target/Sparc/SparcInstrInfo.cpp vendor/llvm/dist/lib/Target/Sparc/SparcRegisterInfo.cpp vendor/llvm/dist/lib/Target/Sparc/SparcTargetMachine.cpp vendor/llvm/dist/lib/Target/Sparc/SparcTargetMachine.h vendor/llvm/dist/lib/Target/TargetData.cpp vendor/llvm/dist/lib/Target/TargetInstrInfo.cpp vendor/llvm/dist/lib/Target/TargetLibraryInfo.cpp vendor/llvm/dist/lib/Target/TargetLoweringObjectFile.cpp vendor/llvm/dist/lib/Target/TargetMachine.cpp vendor/llvm/dist/lib/Target/TargetRegisterInfo.cpp vendor/llvm/dist/lib/Target/X86/AsmParser/X86AsmParser.cpp vendor/llvm/dist/lib/Target/X86/CMakeLists.txt vendor/llvm/dist/lib/Target/X86/Disassembler/X86Disassembler.cpp vendor/llvm/dist/lib/Target/X86/Disassembler/X86Disassembler.h vendor/llvm/dist/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c vendor/llvm/dist/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h vendor/llvm/dist/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h vendor/llvm/dist/lib/Target/X86/InstPrinter/X86InstComments.cpp vendor/llvm/dist/lib/Target/X86/MCTargetDesc/X86BaseInfo.h vendor/llvm/dist/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp vendor/llvm/dist/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp vendor/llvm/dist/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h vendor/llvm/dist/lib/Target/X86/Utils/X86ShuffleDecode.cpp vendor/llvm/dist/lib/Target/X86/Utils/X86ShuffleDecode.h vendor/llvm/dist/lib/Target/X86/X86.h vendor/llvm/dist/lib/Target/X86/X86.td vendor/llvm/dist/lib/Target/X86/X86AsmPrinter.cpp vendor/llvm/dist/lib/Target/X86/X86AsmPrinter.h vendor/llvm/dist/lib/Target/X86/X86COFFMachineModuleInfo.cpp vendor/llvm/dist/lib/Target/X86/X86COFFMachineModuleInfo.h vendor/llvm/dist/lib/Target/X86/X86CallingConv.td vendor/llvm/dist/lib/Target/X86/X86CodeEmitter.cpp vendor/llvm/dist/lib/Target/X86/X86FastISel.cpp vendor/llvm/dist/lib/Target/X86/X86FloatingPoint.cpp vendor/llvm/dist/lib/Target/X86/X86FrameLowering.cpp vendor/llvm/dist/lib/Target/X86/X86FrameLowering.h vendor/llvm/dist/lib/Target/X86/X86ISelDAGToDAG.cpp vendor/llvm/dist/lib/Target/X86/X86ISelLowering.cpp vendor/llvm/dist/lib/Target/X86/X86ISelLowering.h vendor/llvm/dist/lib/Target/X86/X86InstrArithmetic.td vendor/llvm/dist/lib/Target/X86/X86InstrBuilder.h vendor/llvm/dist/lib/Target/X86/X86InstrCompiler.td vendor/llvm/dist/lib/Target/X86/X86InstrControl.td vendor/llvm/dist/lib/Target/X86/X86InstrExtension.td vendor/llvm/dist/lib/Target/X86/X86InstrFMA.td vendor/llvm/dist/lib/Target/X86/X86InstrFPStack.td vendor/llvm/dist/lib/Target/X86/X86InstrFormats.td vendor/llvm/dist/lib/Target/X86/X86InstrFragmentsSIMD.td vendor/llvm/dist/lib/Target/X86/X86InstrInfo.cpp vendor/llvm/dist/lib/Target/X86/X86InstrInfo.h vendor/llvm/dist/lib/Target/X86/X86InstrInfo.td vendor/llvm/dist/lib/Target/X86/X86InstrMMX.td vendor/llvm/dist/lib/Target/X86/X86InstrSSE.td vendor/llvm/dist/lib/Target/X86/X86InstrSystem.td vendor/llvm/dist/lib/Target/X86/X86InstrVMX.td vendor/llvm/dist/lib/Target/X86/X86InstrXOP.td vendor/llvm/dist/lib/Target/X86/X86JITInfo.h vendor/llvm/dist/lib/Target/X86/X86MCInstLower.cpp vendor/llvm/dist/lib/Target/X86/X86MCInstLower.h vendor/llvm/dist/lib/Target/X86/X86MachineFunctionInfo.h vendor/llvm/dist/lib/Target/X86/X86RegisterInfo.cpp vendor/llvm/dist/lib/Target/X86/X86RegisterInfo.h vendor/llvm/dist/lib/Target/X86/X86RegisterInfo.td vendor/llvm/dist/lib/Target/X86/X86Relocations.h vendor/llvm/dist/lib/Target/X86/X86Schedule.td vendor/llvm/dist/lib/Target/X86/X86ScheduleAtom.td vendor/llvm/dist/lib/Target/X86/X86SelectionDAGInfo.cpp vendor/llvm/dist/lib/Target/X86/X86Subtarget.cpp vendor/llvm/dist/lib/Target/X86/X86Subtarget.h vendor/llvm/dist/lib/Target/X86/X86TargetMachine.cpp vendor/llvm/dist/lib/Target/X86/X86TargetObjectFile.cpp vendor/llvm/dist/lib/Target/X86/X86TargetObjectFile.h vendor/llvm/dist/lib/Target/X86/X86VZeroUpper.cpp vendor/llvm/dist/lib/Target/XCore/CMakeLists.txt vendor/llvm/dist/lib/Target/XCore/XCoreAsmPrinter.cpp vendor/llvm/dist/lib/Target/XCore/XCoreFrameLowering.cpp vendor/llvm/dist/lib/Target/XCore/XCoreFrameLowering.h vendor/llvm/dist/lib/Target/XCore/XCoreISelLowering.cpp vendor/llvm/dist/lib/Target/XCore/XCoreISelLowering.h vendor/llvm/dist/lib/Target/XCore/XCoreInstrInfo.td vendor/llvm/dist/lib/Target/XCore/XCoreRegisterInfo.cpp vendor/llvm/dist/lib/Target/XCore/XCoreRegisterInfo.h vendor/llvm/dist/lib/Target/XCore/XCoreTargetMachine.cpp vendor/llvm/dist/lib/Transforms/IPO/ArgumentPromotion.cpp vendor/llvm/dist/lib/Transforms/IPO/CMakeLists.txt vendor/llvm/dist/lib/Transforms/IPO/DeadArgumentElimination.cpp vendor/llvm/dist/lib/Transforms/IPO/ExtractGV.cpp vendor/llvm/dist/lib/Transforms/IPO/GlobalDCE.cpp vendor/llvm/dist/lib/Transforms/IPO/GlobalOpt.cpp vendor/llvm/dist/lib/Transforms/IPO/Inliner.cpp vendor/llvm/dist/lib/Transforms/IPO/LoopExtractor.cpp vendor/llvm/dist/lib/Transforms/IPO/MergeFunctions.cpp vendor/llvm/dist/lib/Transforms/IPO/PartialInlining.cpp vendor/llvm/dist/lib/Transforms/IPO/StripSymbols.cpp vendor/llvm/dist/lib/Transforms/InstCombine/CMakeLists.txt vendor/llvm/dist/lib/Transforms/InstCombine/InstCombine.h vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineAddSub.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineCalls.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineCasts.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineCompares.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineSelect.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineShifts.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstructionCombining.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/AddressSanitizer.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/CMakeLists.txt vendor/llvm/dist/lib/Transforms/Instrumentation/GCOVProfiling.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/Instrumentation.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/PathProfiling.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/ThreadSanitizer.cpp vendor/llvm/dist/lib/Transforms/Scalar/ADCE.cpp vendor/llvm/dist/lib/Transforms/Scalar/CMakeLists.txt vendor/llvm/dist/lib/Transforms/Scalar/CodeGenPrepare.cpp vendor/llvm/dist/lib/Transforms/Scalar/DeadStoreElimination.cpp vendor/llvm/dist/lib/Transforms/Scalar/EarlyCSE.cpp vendor/llvm/dist/lib/Transforms/Scalar/GVN.cpp vendor/llvm/dist/lib/Transforms/Scalar/GlobalMerge.cpp vendor/llvm/dist/lib/Transforms/Scalar/IndVarSimplify.cpp vendor/llvm/dist/lib/Transforms/Scalar/JumpThreading.cpp vendor/llvm/dist/lib/Transforms/Scalar/LICM.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopDeletion.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopIdiomRecognize.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopInstSimplify.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopRotation.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopStrengthReduce.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopUnswitch.cpp vendor/llvm/dist/lib/Transforms/Scalar/LowerAtomic.cpp vendor/llvm/dist/lib/Transforms/Scalar/MemCpyOptimizer.cpp vendor/llvm/dist/lib/Transforms/Scalar/ObjCARC.cpp vendor/llvm/dist/lib/Transforms/Scalar/Reassociate.cpp vendor/llvm/dist/lib/Transforms/Scalar/Reg2Mem.cpp vendor/llvm/dist/lib/Transforms/Scalar/SCCP.cpp vendor/llvm/dist/lib/Transforms/Scalar/Scalar.cpp vendor/llvm/dist/lib/Transforms/Scalar/ScalarReplAggregates.cpp vendor/llvm/dist/lib/Transforms/Scalar/SimplifyCFGPass.cpp vendor/llvm/dist/lib/Transforms/Scalar/SimplifyLibCalls.cpp vendor/llvm/dist/lib/Transforms/Scalar/Sink.cpp vendor/llvm/dist/lib/Transforms/Scalar/TailRecursionElimination.cpp vendor/llvm/dist/lib/Transforms/Utils/BasicBlockUtils.cpp vendor/llvm/dist/lib/Transforms/Utils/BreakCriticalEdges.cpp vendor/llvm/dist/lib/Transforms/Utils/BuildLibCalls.cpp vendor/llvm/dist/lib/Transforms/Utils/CMakeLists.txt vendor/llvm/dist/lib/Transforms/Utils/CloneFunction.cpp vendor/llvm/dist/lib/Transforms/Utils/CloneModule.cpp vendor/llvm/dist/lib/Transforms/Utils/CodeExtractor.cpp vendor/llvm/dist/lib/Transforms/Utils/InlineFunction.cpp vendor/llvm/dist/lib/Transforms/Utils/Local.cpp vendor/llvm/dist/lib/Transforms/Utils/LoopUnroll.cpp vendor/llvm/dist/lib/Transforms/Utils/LoopUnrollRuntime.cpp vendor/llvm/dist/lib/Transforms/Utils/LowerExpectIntrinsic.cpp vendor/llvm/dist/lib/Transforms/Utils/LowerSwitch.cpp vendor/llvm/dist/lib/Transforms/Utils/ModuleUtils.cpp vendor/llvm/dist/lib/Transforms/Utils/PromoteMemoryToRegister.cpp vendor/llvm/dist/lib/Transforms/Utils/SSAUpdater.cpp vendor/llvm/dist/lib/Transforms/Utils/SimplifyCFG.cpp vendor/llvm/dist/lib/Transforms/Utils/SimplifyIndVar.cpp vendor/llvm/dist/lib/Transforms/Vectorize/BBVectorize.cpp vendor/llvm/dist/lib/Transforms/Vectorize/CMakeLists.txt vendor/llvm/dist/lib/VMCore/AsmWriter.cpp vendor/llvm/dist/lib/VMCore/Attributes.cpp vendor/llvm/dist/lib/VMCore/AutoUpgrade.cpp vendor/llvm/dist/lib/VMCore/CMakeLists.txt vendor/llvm/dist/lib/VMCore/ConstantFold.cpp vendor/llvm/dist/lib/VMCore/Constants.cpp vendor/llvm/dist/lib/VMCore/Core.cpp vendor/llvm/dist/lib/VMCore/DebugLoc.cpp vendor/llvm/dist/lib/VMCore/Dominators.cpp vendor/llvm/dist/lib/VMCore/Function.cpp vendor/llvm/dist/lib/VMCore/GCOV.cpp vendor/llvm/dist/lib/VMCore/Globals.cpp vendor/llvm/dist/lib/VMCore/IRBuilder.cpp vendor/llvm/dist/lib/VMCore/Instruction.cpp vendor/llvm/dist/lib/VMCore/Instructions.cpp vendor/llvm/dist/lib/VMCore/Metadata.cpp vendor/llvm/dist/lib/VMCore/Module.cpp vendor/llvm/dist/lib/VMCore/PassManager.cpp vendor/llvm/dist/lib/VMCore/Type.cpp vendor/llvm/dist/lib/VMCore/Value.cpp vendor/llvm/dist/lib/VMCore/ValueTypes.cpp vendor/llvm/dist/lib/VMCore/Verifier.cpp vendor/llvm/dist/projects/CMakeLists.txt vendor/llvm/dist/projects/sample/Makefile.llvm.config.in vendor/llvm/dist/projects/sample/Makefile.llvm.rules vendor/llvm/dist/projects/sample/autoconf/config.guess vendor/llvm/dist/projects/sample/autoconf/config.sub vendor/llvm/dist/projects/sample/autoconf/configure.ac vendor/llvm/dist/projects/sample/autoconf/m4/config_makefile.m4 vendor/llvm/dist/projects/sample/autoconf/m4/func_isinf.m4 vendor/llvm/dist/projects/sample/autoconf/m4/huge_val.m4 vendor/llvm/dist/projects/sample/autoconf/m4/link_options.m4 vendor/llvm/dist/projects/sample/autoconf/m4/rand48.m4 vendor/llvm/dist/projects/sample/autoconf/m4/visibility_inlines_hidden.m4 vendor/llvm/dist/projects/sample/configure vendor/llvm/dist/runtime/libprofile/CommonProfiling.c vendor/llvm/dist/runtime/libprofile/GCDAProfiling.c vendor/llvm/dist/test/Analysis/BasicAA/2003-02-26-AccessSizeTest.ll vendor/llvm/dist/test/Analysis/BasicAA/2003-04-22-GEPProblem.ll vendor/llvm/dist/test/Analysis/BasicAA/2003-09-19-LocalArgument.ll vendor/llvm/dist/test/Analysis/BasicAA/2003-11-04-SimpleCases.ll vendor/llvm/dist/test/Analysis/BasicAA/2003-12-11-ConstExprGEP.ll vendor/llvm/dist/test/Analysis/BasicAA/2004-07-28-MustAliasbug.ll vendor/llvm/dist/test/Analysis/BasicAA/2006-03-03-BadArraySubscript.ll vendor/llvm/dist/test/Analysis/BasicAA/2007-01-13-BasePointerBadNoAlias.ll vendor/llvm/dist/test/Analysis/BasicAA/2007-08-01-NoAliasAndCalls.ll vendor/llvm/dist/test/Analysis/BasicAA/2007-08-01-NoAliasAndGEP.ll vendor/llvm/dist/test/Analysis/BasicAA/2007-08-05-GetOverloadedModRef.ll vendor/llvm/dist/test/Analysis/BasicAA/2007-10-24-ArgumentsGlobals.ll vendor/llvm/dist/test/Analysis/BasicAA/2008-04-15-Byval.ll vendor/llvm/dist/test/Analysis/BasicAA/2008-11-23-NoaliasRet.ll vendor/llvm/dist/test/Analysis/BasicAA/2009-03-04-GEPNoalias.ll vendor/llvm/dist/test/Analysis/BasicAA/2009-10-13-GEP-BaseNoAlias.ll vendor/llvm/dist/test/Analysis/BasicAA/2010-09-15-GEP-SignedArithmetic.ll vendor/llvm/dist/test/Analysis/BasicAA/args-rets-allocas-loads.ll vendor/llvm/dist/test/Analysis/BasicAA/byval.ll vendor/llvm/dist/test/Analysis/BasicAA/cas.ll vendor/llvm/dist/test/Analysis/BasicAA/constant-over-index.ll vendor/llvm/dist/test/Analysis/BasicAA/dag.ll vendor/llvm/dist/test/Analysis/BasicAA/empty.ll vendor/llvm/dist/test/Analysis/BasicAA/full-store-partial-alias.ll vendor/llvm/dist/test/Analysis/BasicAA/gcsetest.ll vendor/llvm/dist/test/Analysis/BasicAA/gep-alias.ll vendor/llvm/dist/test/Analysis/BasicAA/getmodrefinfo-cs-cs.ll vendor/llvm/dist/test/Analysis/BasicAA/must-and-partial.ll vendor/llvm/dist/test/Analysis/BasicAA/no-escape-call.ll vendor/llvm/dist/test/Analysis/BasicAA/nocapture.ll vendor/llvm/dist/test/Analysis/BasicAA/phi-aa.ll vendor/llvm/dist/test/Analysis/BasicAA/phi-and-select.ll vendor/llvm/dist/test/Analysis/BasicAA/pure-const-dce.ll vendor/llvm/dist/test/Analysis/BasicAA/tailcall-modref.ll vendor/llvm/dist/test/Analysis/CallGraph/2008-09-09-DirectCall.ll vendor/llvm/dist/test/Analysis/CallGraph/2008-09-09-UsedByGlobal.ll vendor/llvm/dist/test/Analysis/CallGraph/no-intrinsics.ll vendor/llvm/dist/test/Analysis/Dominators/2006-10-02-BreakCritEdges.ll vendor/llvm/dist/test/Analysis/GlobalsModRef/2008-09-03-ReadGlobals.ll vendor/llvm/dist/test/Analysis/GlobalsModRef/aliastest.ll vendor/llvm/dist/test/Analysis/GlobalsModRef/chaining-analysis.ll vendor/llvm/dist/test/Analysis/GlobalsModRef/indirect-global.ll vendor/llvm/dist/test/Analysis/GlobalsModRef/modreftest.ll vendor/llvm/dist/test/Analysis/GlobalsModRef/purecse.ll vendor/llvm/dist/test/Analysis/LoopInfo/2003-05-15-NestingProblem.ll vendor/llvm/dist/test/Analysis/RegionInfo/block_sort.ll vendor/llvm/dist/test/Analysis/RegionInfo/cond_loop.ll vendor/llvm/dist/test/Analysis/RegionInfo/condition_complicated.ll vendor/llvm/dist/test/Analysis/RegionInfo/condition_complicated_2.ll vendor/llvm/dist/test/Analysis/RegionInfo/condition_forward_edge.ll vendor/llvm/dist/test/Analysis/RegionInfo/condition_same_exit.ll vendor/llvm/dist/test/Analysis/RegionInfo/condition_simple.ll vendor/llvm/dist/test/Analysis/RegionInfo/exit_in_condition.ll vendor/llvm/dist/test/Analysis/RegionInfo/infinite_loop.ll vendor/llvm/dist/test/Analysis/RegionInfo/infinite_loop_2.ll vendor/llvm/dist/test/Analysis/RegionInfo/infinite_loop_3.ll vendor/llvm/dist/test/Analysis/RegionInfo/infinite_loop_4.ll vendor/llvm/dist/test/Analysis/RegionInfo/loop_with_condition.ll vendor/llvm/dist/test/Analysis/RegionInfo/loops_1.ll vendor/llvm/dist/test/Analysis/RegionInfo/loops_2.ll vendor/llvm/dist/test/Analysis/RegionInfo/mix_1.ll vendor/llvm/dist/test/Analysis/RegionInfo/multiple_exiting_edge.ll vendor/llvm/dist/test/Analysis/RegionInfo/nested_loops.ll vendor/llvm/dist/test/Analysis/RegionInfo/next.ll vendor/llvm/dist/test/Analysis/RegionInfo/paper.ll vendor/llvm/dist/test/Analysis/RegionInfo/two_loops_same_header.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2007-07-15-NegativeStride.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2007-08-06-Unsigned.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2007-09-27-LargeStepping.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-02-11-ReversedCondition.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-05-25-NegativeStepToZero.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-07-12-UnneededSelect1.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-07-12-UnneededSelect2.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-07-19-WrappingIV.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-11-18-LessThanOrEqual.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-11-18-Stride1.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-11-18-Stride2.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-12-08-FiniteSGE.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-12-14-StrideAndSigned.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2008-12-15-DontUseSDiv.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2009-01-02-SignedNegativeStride.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2009-04-22-TruncCast.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/2009-05-09-PointerEdgeCount.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/SolveQuadraticEquation.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/and-xor.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/avoid-smax-0.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/div-overflow.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/scev-aa.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/sext-inreg.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/sext-iv-1.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/smax.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/trip-count.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/trip-count2.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/trip-count3.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/trip-count4.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/trip-count5.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/trip-count6.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/trip-count7.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/trip-count8.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/xor-and.ll vendor/llvm/dist/test/Assembler/2003-04-15-ConstantInitAssertion.ll vendor/llvm/dist/test/Assembler/2003-05-21-MalformedShiftCrash.ll vendor/llvm/dist/test/Assembler/2003-05-21-MalformedStructCrash.ll vendor/llvm/dist/test/Assembler/2003-11-12-ConstantExprCast.ll vendor/llvm/dist/test/Assembler/2003-11-24-SymbolTableCrash.ll vendor/llvm/dist/test/Assembler/2004-01-11-getelementptrfolding.ll vendor/llvm/dist/test/Assembler/2004-03-30-UnclosedFunctionCrash.ll vendor/llvm/dist/test/Assembler/2004-11-28-InvalidTypeCrash.ll vendor/llvm/dist/test/Assembler/2006-09-28-CrashOnInvalid.ll vendor/llvm/dist/test/Assembler/2007-01-02-Undefined-Arg-Type.ll vendor/llvm/dist/test/Assembler/2007-01-16-CrashOnBadCast.ll vendor/llvm/dist/test/Assembler/2007-01-16-CrashOnBadCast2.ll vendor/llvm/dist/test/Assembler/2007-03-18-InvalidNumberedVar.ll vendor/llvm/dist/test/Assembler/2007-03-19-NegValue.ll vendor/llvm/dist/test/Assembler/2007-04-20-AlignedLoad.ll vendor/llvm/dist/test/Assembler/2007-04-20-AlignedStore.ll vendor/llvm/dist/test/Assembler/2007-04-25-AssemblerFoldExternWeak.ll vendor/llvm/dist/test/Assembler/2007-08-06-AliasInvalid.ll vendor/llvm/dist/test/Assembler/2007-09-29-GC.ll vendor/llvm/dist/test/Assembler/2007-12-11-AddressSpaces.ll vendor/llvm/dist/test/Assembler/2008-02-18-IntPointerCrash.ll vendor/llvm/dist/test/Assembler/2008-09-02-FunctionNotes2.ll vendor/llvm/dist/test/Assembler/ConstantExprFold.ll vendor/llvm/dist/test/Assembler/extractvalue-invalid-idx.ll vendor/llvm/dist/test/Assembler/getelementptr_struct.ll vendor/llvm/dist/test/Assembler/insertvalue-invalid-idx.ll vendor/llvm/dist/test/Assembler/invalid_cast.ll vendor/llvm/dist/test/Assembler/invalid_cast2.ll vendor/llvm/dist/test/Bindings/Ocaml/vmcore.ml vendor/llvm/dist/test/Bitcode/null-type.ll vendor/llvm/dist/test/CMakeLists.txt vendor/llvm/dist/test/CodeGen/ARM/2007-03-13-InstrSched.ll vendor/llvm/dist/test/CodeGen/ARM/2007-04-03-PEIBug.ll vendor/llvm/dist/test/CodeGen/ARM/2007-05-23-BadPreIndexedStore.ll vendor/llvm/dist/test/CodeGen/ARM/2008-02-04-LocalRegAllocBug.ll vendor/llvm/dist/test/CodeGen/ARM/2008-02-29-RegAllocLocal.ll vendor/llvm/dist/test/CodeGen/ARM/2009-04-06-AsmModifier.ll vendor/llvm/dist/test/CodeGen/ARM/2010-05-17-FastAllocCrash.ll vendor/llvm/dist/test/CodeGen/ARM/2011-12-14-machine-sink.ll vendor/llvm/dist/test/CodeGen/ARM/2012-01-24-RegSequenceLiveRange.ll vendor/llvm/dist/test/CodeGen/ARM/addrmode.ll vendor/llvm/dist/test/CodeGen/ARM/aliases.ll vendor/llvm/dist/test/CodeGen/ARM/arm-modifier.ll vendor/llvm/dist/test/CodeGen/ARM/call_nolink.ll vendor/llvm/dist/test/CodeGen/ARM/crash-greedy.ll vendor/llvm/dist/test/CodeGen/ARM/cse-libcalls.ll vendor/llvm/dist/test/CodeGen/ARM/debug-info-branch-folding.ll vendor/llvm/dist/test/CodeGen/ARM/divmod.ll vendor/llvm/dist/test/CodeGen/ARM/fabss.ll vendor/llvm/dist/test/CodeGen/ARM/fast-isel-call.ll vendor/llvm/dist/test/CodeGen/ARM/fast-isel-intrinsic.ll vendor/llvm/dist/test/CodeGen/ARM/fast-isel.ll vendor/llvm/dist/test/CodeGen/ARM/fcopysign.ll vendor/llvm/dist/test/CodeGen/ARM/fmuls.ll vendor/llvm/dist/test/CodeGen/ARM/fparith.ll vendor/llvm/dist/test/CodeGen/ARM/fusedMAC.ll vendor/llvm/dist/test/CodeGen/ARM/iabs.ll vendor/llvm/dist/test/CodeGen/ARM/ldrd.ll vendor/llvm/dist/test/CodeGen/ARM/lsr-scale-addr-mode.ll vendor/llvm/dist/test/CodeGen/ARM/movt-movw-global.ll vendor/llvm/dist/test/CodeGen/ARM/neon_div.ll vendor/llvm/dist/test/CodeGen/ARM/opt-shuff-tstore.ll vendor/llvm/dist/test/CodeGen/ARM/select.ll vendor/llvm/dist/test/CodeGen/ARM/str_pre-2.ll vendor/llvm/dist/test/CodeGen/ARM/str_pre.ll vendor/llvm/dist/test/CodeGen/ARM/sub.ll vendor/llvm/dist/test/CodeGen/ARM/thread_pointer.ll vendor/llvm/dist/test/CodeGen/ARM/thumb2-it-block.ll vendor/llvm/dist/test/CodeGen/ARM/tls1.ll vendor/llvm/dist/test/CodeGen/ARM/tls3.ll vendor/llvm/dist/test/CodeGen/ARM/vcnt.ll vendor/llvm/dist/test/CodeGen/ARM/vector-extend-narrow.ll vendor/llvm/dist/test/CodeGen/ARM/vfp.ll vendor/llvm/dist/test/CodeGen/ARM/vlddup.ll vendor/llvm/dist/test/CodeGen/ARM/vmul.ll vendor/llvm/dist/test/CodeGen/ARM/vst3.ll vendor/llvm/dist/test/CodeGen/CPP/2007-06-16-Funcname.ll vendor/llvm/dist/test/CodeGen/CellSPU/fcmp32.ll vendor/llvm/dist/test/CodeGen/CellSPU/fneg-fabs.ll vendor/llvm/dist/test/CodeGen/CellSPU/icmp16.ll vendor/llvm/dist/test/CodeGen/CellSPU/icmp32.ll vendor/llvm/dist/test/CodeGen/CellSPU/icmp8.ll vendor/llvm/dist/test/CodeGen/CellSPU/shift_ops.ll vendor/llvm/dist/test/CodeGen/CellSPU/stores.ll vendor/llvm/dist/test/CodeGen/CellSPU/trunc.ll vendor/llvm/dist/test/CodeGen/Generic/2006-09-02-LocalAllocCrash.ll vendor/llvm/dist/test/CodeGen/Generic/asm-large-immediate.ll vendor/llvm/dist/test/CodeGen/Generic/edge-bundles-blockIDs.ll vendor/llvm/dist/test/CodeGen/Hexagon/args.ll vendor/llvm/dist/test/CodeGen/Hexagon/combine.ll vendor/llvm/dist/test/CodeGen/Hexagon/double.ll vendor/llvm/dist/test/CodeGen/Hexagon/float.ll vendor/llvm/dist/test/CodeGen/Hexagon/frame.ll vendor/llvm/dist/test/CodeGen/Hexagon/mpy.ll vendor/llvm/dist/test/CodeGen/Hexagon/static.ll vendor/llvm/dist/test/CodeGen/Hexagon/struct_args.ll vendor/llvm/dist/test/CodeGen/Hexagon/struct_args_large.ll vendor/llvm/dist/test/CodeGen/Hexagon/vaddh.ll vendor/llvm/dist/test/CodeGen/MSP430/2009-12-21-FrameAddr.ll vendor/llvm/dist/test/CodeGen/MSP430/Inst8rr.ll vendor/llvm/dist/test/CodeGen/Mips/2008-07-23-fpcmp.ll vendor/llvm/dist/test/CodeGen/Mips/2008-07-29-icmp.ll vendor/llvm/dist/test/CodeGen/Mips/2010-07-20-Switch.ll vendor/llvm/dist/test/CodeGen/Mips/alloca.ll vendor/llvm/dist/test/CodeGen/Mips/analyzebranch.ll vendor/llvm/dist/test/CodeGen/Mips/atomic.ll vendor/llvm/dist/test/CodeGen/Mips/cmov.ll vendor/llvm/dist/test/CodeGen/Mips/cprestore.ll vendor/llvm/dist/test/CodeGen/Mips/eh.ll vendor/llvm/dist/test/CodeGen/Mips/fabs.ll vendor/llvm/dist/test/CodeGen/Mips/fp-indexed-ls.ll vendor/llvm/dist/test/CodeGen/Mips/global-pointer-reg.ll vendor/llvm/dist/test/CodeGen/Mips/gprestore.ll vendor/llvm/dist/test/CodeGen/Mips/inlineasmmemop.ll vendor/llvm/dist/test/CodeGen/Mips/internalfunc.ll vendor/llvm/dist/test/CodeGen/Mips/largeimmprinting.ll vendor/llvm/dist/test/CodeGen/Mips/mips64-fp-indexed-ls.ll vendor/llvm/dist/test/CodeGen/Mips/o32_cc_byval.ll vendor/llvm/dist/test/CodeGen/Mips/o32_cc_vararg.ll vendor/llvm/dist/test/CodeGen/Mips/swzero.ll vendor/llvm/dist/test/CodeGen/Mips/tls.ll vendor/llvm/dist/test/CodeGen/Mips/unalignedload.ll vendor/llvm/dist/test/CodeGen/Mips/zeroreg.ll vendor/llvm/dist/test/CodeGen/PowerPC/2005-09-02-LegalizeDuplicatesCalls.ll vendor/llvm/dist/test/CodeGen/PowerPC/2006-01-11-darwin-fp-argument.ll vendor/llvm/dist/test/CodeGen/PowerPC/2006-04-05-splat-ish.ll vendor/llvm/dist/test/CodeGen/PowerPC/2007-04-24-InlineAsm-I-Modifier.ll vendor/llvm/dist/test/CodeGen/PowerPC/2007-04-30-InlineAsmEarlyClobber.ll vendor/llvm/dist/test/CodeGen/PowerPC/2007-05-22-tailmerge-3.ll vendor/llvm/dist/test/CodeGen/PowerPC/2007-05-30-dagcombine-miscomp.ll vendor/llvm/dist/test/CodeGen/PowerPC/2007-10-21-LocalRegAllocAssert.ll vendor/llvm/dist/test/CodeGen/PowerPC/2007-10-21-LocalRegAllocAssert2.ll vendor/llvm/dist/test/CodeGen/PowerPC/2008-02-09-LocalRegAllocAssert.ll vendor/llvm/dist/test/CodeGen/PowerPC/2009-08-17-inline-asm-addr-mode-breakage.ll vendor/llvm/dist/test/CodeGen/PowerPC/2010-03-09-indirect-call.ll vendor/llvm/dist/test/CodeGen/PowerPC/2011-12-05-NoSpillDupCR.ll vendor/llvm/dist/test/CodeGen/PowerPC/Frames-leaf.ll vendor/llvm/dist/test/CodeGen/PowerPC/Frames-small.ll vendor/llvm/dist/test/CodeGen/PowerPC/LargeAbsoluteAddr.ll vendor/llvm/dist/test/CodeGen/PowerPC/a2-fp-basic.ll vendor/llvm/dist/test/CodeGen/PowerPC/and-imm.ll vendor/llvm/dist/test/CodeGen/PowerPC/big-endian-actual-args.ll vendor/llvm/dist/test/CodeGen/PowerPC/big-endian-call-result.ll vendor/llvm/dist/test/CodeGen/PowerPC/branch-opt.ll vendor/llvm/dist/test/CodeGen/PowerPC/calls.ll vendor/llvm/dist/test/CodeGen/PowerPC/compare-simm.ll vendor/llvm/dist/test/CodeGen/PowerPC/constants.ll vendor/llvm/dist/test/CodeGen/PowerPC/darwin-labels.ll vendor/llvm/dist/test/CodeGen/PowerPC/fabs.ll vendor/llvm/dist/test/CodeGen/PowerPC/fma.ll vendor/llvm/dist/test/CodeGen/PowerPC/fnabs.ll vendor/llvm/dist/test/CodeGen/PowerPC/fsqrt.ll vendor/llvm/dist/test/CodeGen/PowerPC/iabs.ll vendor/llvm/dist/test/CodeGen/PowerPC/ispositive.ll vendor/llvm/dist/test/CodeGen/PowerPC/long-compare.ll vendor/llvm/dist/test/CodeGen/PowerPC/lsr-postinc-pos.ll vendor/llvm/dist/test/CodeGen/PowerPC/mem_update.ll vendor/llvm/dist/test/CodeGen/PowerPC/no-dead-strip.ll vendor/llvm/dist/test/CodeGen/PowerPC/ppc440-fp-basic.ll vendor/llvm/dist/test/CodeGen/PowerPC/retaddr.ll vendor/llvm/dist/test/CodeGen/PowerPC/rlwimi-commute.ll vendor/llvm/dist/test/CodeGen/PowerPC/rlwimi3.ll vendor/llvm/dist/test/CodeGen/PowerPC/seteq-0.ll vendor/llvm/dist/test/CodeGen/PowerPC/small-arguments.ll vendor/llvm/dist/test/CodeGen/PowerPC/stack-protector.ll vendor/llvm/dist/test/CodeGen/PowerPC/trampoline.ll vendor/llvm/dist/test/CodeGen/PowerPC/vec_buildvector_loadstore.ll vendor/llvm/dist/test/CodeGen/SPARC/private.ll vendor/llvm/dist/test/CodeGen/Thumb/asmprinter-bug.ll vendor/llvm/dist/test/CodeGen/Thumb/frame_thumb.ll vendor/llvm/dist/test/CodeGen/Thumb/iabs.ll vendor/llvm/dist/test/CodeGen/Thumb2/2010-01-06-TailDuplicateLabels.ll vendor/llvm/dist/test/CodeGen/Thumb2/constant-islands.ll vendor/llvm/dist/test/CodeGen/Thumb2/large-call.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-cmn.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-cmp.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-cmp2.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-jtb.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-ldr_post.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-ldr_pre.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-rev16.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-ror.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-tbb.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-teq.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-teq2.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-tst.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-tst2.ll vendor/llvm/dist/test/CodeGen/Thumb2/thumb2-uxt_rot.ll vendor/llvm/dist/test/CodeGen/Thumb2/tls1.ll vendor/llvm/dist/test/CodeGen/X86/2003-08-03-CallArgLiveRanges.ll vendor/llvm/dist/test/CodeGen/X86/2003-11-03-GlobalBool.ll vendor/llvm/dist/test/CodeGen/X86/2004-02-13-FrameReturnAddress.ll vendor/llvm/dist/test/CodeGen/X86/2004-03-30-Select-Max.ll vendor/llvm/dist/test/CodeGen/X86/2006-03-01-InstrSchedBug.ll vendor/llvm/dist/test/CodeGen/X86/2006-03-02-InstrSchedBug.ll vendor/llvm/dist/test/CodeGen/X86/2006-04-27-ISelFoldingBug.ll vendor/llvm/dist/test/CodeGen/X86/2006-05-01-SchedCausingSpills.ll vendor/llvm/dist/test/CodeGen/X86/2006-05-02-InstrSched1.ll vendor/llvm/dist/test/CodeGen/X86/2006-05-02-InstrSched2.ll vendor/llvm/dist/test/CodeGen/X86/2006-05-08-InstrSched.ll vendor/llvm/dist/test/CodeGen/X86/2006-05-11-InstrSched.ll vendor/llvm/dist/test/CodeGen/X86/2006-07-31-SingleRegClass.ll vendor/llvm/dist/test/CodeGen/X86/2006-08-21-ExtraMovInst.ll vendor/llvm/dist/test/CodeGen/X86/2006-11-12-CSRetCC.ll vendor/llvm/dist/test/CodeGen/X86/2006-11-17-IllegalMove.ll vendor/llvm/dist/test/CodeGen/X86/2007-01-13-StackPtrIndex.ll vendor/llvm/dist/test/CodeGen/X86/2007-03-24-InlineAsmPModifier.ll vendor/llvm/dist/test/CodeGen/X86/2007-03-24-InlineAsmVectorOp.ll vendor/llvm/dist/test/CodeGen/X86/2007-04-27-InlineAsm-IntMemInput.ll vendor/llvm/dist/test/CodeGen/X86/2007-05-07-InvokeSRet.ll vendor/llvm/dist/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll vendor/llvm/dist/test/CodeGen/X86/2007-09-05-InvalidAsm.ll vendor/llvm/dist/test/CodeGen/X86/2007-11-04-rip-immediate-constant.ll vendor/llvm/dist/test/CodeGen/X86/2007-12-18-LoadCSEBug.ll vendor/llvm/dist/test/CodeGen/X86/2008-01-08-SchedulerCrash.ll vendor/llvm/dist/test/CodeGen/X86/2008-01-16-FPStackifierAssert.ll vendor/llvm/dist/test/CodeGen/X86/2008-02-18-TailMergingBug.ll vendor/llvm/dist/test/CodeGen/X86/2008-02-20-InlineAsmClobber.ll vendor/llvm/dist/test/CodeGen/X86/2008-02-22-LocalRegAllocBug.ll vendor/llvm/dist/test/CodeGen/X86/2008-03-23-DarwinAsmComments.ll vendor/llvm/dist/test/CodeGen/X86/2008-04-16-ReMatBug.ll vendor/llvm/dist/test/CodeGen/X86/2008-04-17-CoalescerBug.ll vendor/llvm/dist/test/CodeGen/X86/2008-04-28-CoalescerBug.ll vendor/llvm/dist/test/CodeGen/X86/2008-05-28-LocalRegAllocBug.ll vendor/llvm/dist/test/CodeGen/X86/2008-08-06-CmpStride.ll vendor/llvm/dist/test/CodeGen/X86/2008-08-31-EH_RETURN32.ll vendor/llvm/dist/test/CodeGen/X86/2008-09-17-inline-asm-1.ll vendor/llvm/dist/test/CodeGen/X86/2008-09-18-inline-asm-2.ll vendor/llvm/dist/test/CodeGen/X86/2008-10-24-FlippedCompare.ll vendor/llvm/dist/test/CodeGen/X86/2008-10-27-CoalescerBug.ll vendor/llvm/dist/test/CodeGen/X86/2008-12-23-crazy-address.ll vendor/llvm/dist/test/CodeGen/X86/2009-01-31-BigShift2.ll vendor/llvm/dist/test/CodeGen/X86/2009-02-25-CommuteBug.ll vendor/llvm/dist/test/CodeGen/X86/2009-02-26-MachineLICMBug.ll vendor/llvm/dist/test/CodeGen/X86/2009-03-12-CPAlignBug.ll vendor/llvm/dist/test/CodeGen/X86/2009-03-23-MultiUseSched.ll vendor/llvm/dist/test/CodeGen/X86/2009-04-16-SpillerUnfold.ll vendor/llvm/dist/test/CodeGen/X86/2009-04-21-NoReloadImpDef.ll vendor/llvm/dist/test/CodeGen/X86/2009-04-24.ll vendor/llvm/dist/test/CodeGen/X86/2009-04-29-IndirectDestOperands.ll vendor/llvm/dist/test/CodeGen/X86/2009-05-30-ISelBug.ll vendor/llvm/dist/test/CodeGen/X86/20090313-signext.ll vendor/llvm/dist/test/CodeGen/X86/2010-01-19-OptExtBug.ll vendor/llvm/dist/test/CodeGen/X86/2010-05-06-LocalInlineAsmClobber.ll vendor/llvm/dist/test/CodeGen/X86/2010-05-12-FastAllocKills.ll vendor/llvm/dist/test/CodeGen/X86/2010-06-15-FastAllocEarlyCLobber.ll vendor/llvm/dist/test/CodeGen/X86/2011-04-13-SchedCmpJmp.ll vendor/llvm/dist/test/CodeGen/X86/2011-06-03-x87chain.ll vendor/llvm/dist/test/CodeGen/X86/2011-06-12-FastAllocSpill.ll vendor/llvm/dist/test/CodeGen/X86/2011-09-18-sse2cmp.ll vendor/llvm/dist/test/CodeGen/X86/2011-09-21-setcc-bug.ll vendor/llvm/dist/test/CodeGen/X86/2011-10-11-srl.ll vendor/llvm/dist/test/CodeGen/X86/2011-12-15-vec_shift.ll vendor/llvm/dist/test/CodeGen/X86/2012-02-20-MachineCPBug.ll vendor/llvm/dist/test/CodeGen/X86/2012-03-26-PostRALICMBug.ll vendor/llvm/dist/test/CodeGen/X86/2012-04-26-sdglue.ll vendor/llvm/dist/test/CodeGen/X86/4char-promote.ll vendor/llvm/dist/test/CodeGen/X86/MachineSink-PHIUse.ll vendor/llvm/dist/test/CodeGen/X86/add.ll vendor/llvm/dist/test/CodeGen/X86/addr-label-difference.ll vendor/llvm/dist/test/CodeGen/X86/aligned-comm.ll vendor/llvm/dist/test/CodeGen/X86/alignment-2.ll vendor/llvm/dist/test/CodeGen/X86/alloca-align-rounding-32.ll vendor/llvm/dist/test/CodeGen/X86/alloca-align-rounding.ll vendor/llvm/dist/test/CodeGen/X86/andimm8.ll vendor/llvm/dist/test/CodeGen/X86/atom-lea-sp.ll vendor/llvm/dist/test/CodeGen/X86/atom-sched.ll vendor/llvm/dist/test/CodeGen/X86/atomic_op.ll vendor/llvm/dist/test/CodeGen/X86/avx-blend.ll vendor/llvm/dist/test/CodeGen/X86/avx-intrinsics-x86.ll vendor/llvm/dist/test/CodeGen/X86/avx-minmax.ll vendor/llvm/dist/test/CodeGen/X86/avx-shuffle-x86_32.ll vendor/llvm/dist/test/CodeGen/X86/avx-shuffle.ll vendor/llvm/dist/test/CodeGen/X86/avx-vbroadcast.ll vendor/llvm/dist/test/CodeGen/X86/avx2-intrinsics-x86.ll vendor/llvm/dist/test/CodeGen/X86/avx2-vbroadcast.ll vendor/llvm/dist/test/CodeGen/X86/basic-promote-integers.ll vendor/llvm/dist/test/CodeGen/X86/bigstructret.ll vendor/llvm/dist/test/CodeGen/X86/blend-msb.ll vendor/llvm/dist/test/CodeGen/X86/block-placement.ll vendor/llvm/dist/test/CodeGen/X86/br-fold.ll vendor/llvm/dist/test/CodeGen/X86/break-anti-dependencies.ll vendor/llvm/dist/test/CodeGen/X86/break-sse-dep.ll vendor/llvm/dist/test/CodeGen/X86/call-imm.ll vendor/llvm/dist/test/CodeGen/X86/cfstring.ll vendor/llvm/dist/test/CodeGen/X86/cmov.ll vendor/llvm/dist/test/CodeGen/X86/cmp.ll vendor/llvm/dist/test/CodeGen/X86/coalesce-esp.ll vendor/llvm/dist/test/CodeGen/X86/coalescer-commute2.ll vendor/llvm/dist/test/CodeGen/X86/constant-pool-sharing.ll vendor/llvm/dist/test/CodeGen/X86/convert-2-addr-3-addr-inc64.ll vendor/llvm/dist/test/CodeGen/X86/crash.ll vendor/llvm/dist/test/CodeGen/X86/ctpop-combine.ll vendor/llvm/dist/test/CodeGen/X86/dagcombine-cse.ll vendor/llvm/dist/test/CodeGen/X86/dbg-merge-loc-entry.ll vendor/llvm/dist/test/CodeGen/X86/dbg-value-range.ll vendor/llvm/dist/test/CodeGen/X86/divide-by-constant.ll vendor/llvm/dist/test/CodeGen/X86/epilogue.ll vendor/llvm/dist/test/CodeGen/X86/extractps.ll vendor/llvm/dist/test/CodeGen/X86/fabs.ll vendor/llvm/dist/test/CodeGen/X86/fast-cc-merge-stack-adj.ll vendor/llvm/dist/test/CodeGen/X86/fast-isel-constpool.ll vendor/llvm/dist/test/CodeGen/X86/fast-isel-gv.ll vendor/llvm/dist/test/CodeGen/X86/fast-isel-mem.ll vendor/llvm/dist/test/CodeGen/X86/fast-isel-x86.ll vendor/llvm/dist/test/CodeGen/X86/fast-isel.ll vendor/llvm/dist/test/CodeGen/X86/fastcc-byval.ll vendor/llvm/dist/test/CodeGen/X86/fma.ll vendor/llvm/dist/test/CodeGen/X86/fma4-intrinsics-x86_64.ll vendor/llvm/dist/test/CodeGen/X86/fold-load.ll vendor/llvm/dist/test/CodeGen/X86/fold-pcmpeqd-1.ll vendor/llvm/dist/test/CodeGen/X86/fp-immediate-shorten.ll vendor/llvm/dist/test/CodeGen/X86/fp-in-intregs.ll vendor/llvm/dist/test/CodeGen/X86/fp-stack-compare.ll vendor/llvm/dist/test/CodeGen/X86/fp-stack-ret.ll vendor/llvm/dist/test/CodeGen/X86/fp_load_fold.ll vendor/llvm/dist/test/CodeGen/X86/full-lsr.ll vendor/llvm/dist/test/CodeGen/X86/gather-addresses.ll vendor/llvm/dist/test/CodeGen/X86/h-register-addressing-32.ll vendor/llvm/dist/test/CodeGen/X86/h-register-addressing-64.ll vendor/llvm/dist/test/CodeGen/X86/h-registers-1.ll vendor/llvm/dist/test/CodeGen/X86/hoist-invariant-load.ll vendor/llvm/dist/test/CodeGen/X86/iabs.ll vendor/llvm/dist/test/CodeGen/X86/illegal-vector-args-return.ll vendor/llvm/dist/test/CodeGen/X86/inline-asm-error.ll vendor/llvm/dist/test/CodeGen/X86/inline-asm-modifier-n.ll vendor/llvm/dist/test/CodeGen/X86/inline-asm.ll vendor/llvm/dist/test/CodeGen/X86/isel-sink2.ll vendor/llvm/dist/test/CodeGen/X86/ispositive.ll vendor/llvm/dist/test/CodeGen/X86/jump_sign.ll vendor/llvm/dist/test/CodeGen/X86/label-redefinition.ll vendor/llvm/dist/test/CodeGen/X86/lea-2.ll vendor/llvm/dist/test/CodeGen/X86/liveness-local-regalloc.ll vendor/llvm/dist/test/CodeGen/X86/loop-blocks.ll vendor/llvm/dist/test/CodeGen/X86/lsr-loop-exit-cond.ll vendor/llvm/dist/test/CodeGen/X86/lsr-reuse-trunc.ll vendor/llvm/dist/test/CodeGen/X86/lsr-static-addr.ll vendor/llvm/dist/test/CodeGen/X86/machine-cse.ll vendor/llvm/dist/test/CodeGen/X86/mem-promote-integers.ll vendor/llvm/dist/test/CodeGen/X86/memcmp.ll vendor/llvm/dist/test/CodeGen/X86/mmx-punpckhdq.ll vendor/llvm/dist/test/CodeGen/X86/movgs.ll vendor/llvm/dist/test/CodeGen/X86/multiple-loop-post-inc.ll vendor/llvm/dist/test/CodeGen/X86/opt-shuff-tstore.ll vendor/llvm/dist/test/CodeGen/X86/overlap-shift.ll vendor/llvm/dist/test/CodeGen/X86/peep-vector-extract-insert.ll vendor/llvm/dist/test/CodeGen/X86/phi-immediate-factoring.ll vendor/llvm/dist/test/CodeGen/X86/phys-reg-local-regalloc.ll vendor/llvm/dist/test/CodeGen/X86/phys_subreg_coalesce-3.ll vendor/llvm/dist/test/CodeGen/X86/pmul.ll vendor/llvm/dist/test/CodeGen/X86/pointer-vector.ll vendor/llvm/dist/test/CodeGen/X86/pr11415.ll vendor/llvm/dist/test/CodeGen/X86/pr2656.ll vendor/llvm/dist/test/CodeGen/X86/pr3522.ll vendor/llvm/dist/test/CodeGen/X86/promote-trunc.ll vendor/llvm/dist/test/CodeGen/X86/rd-mod-wr-eflags.ll vendor/llvm/dist/test/CodeGen/X86/regpressure.ll vendor/llvm/dist/test/CodeGen/X86/remat-scalar-zero.ll vendor/llvm/dist/test/CodeGen/X86/rotate.ll vendor/llvm/dist/test/CodeGen/X86/rounding-ops.ll vendor/llvm/dist/test/CodeGen/X86/segmented-stacks-dynamic.ll vendor/llvm/dist/test/CodeGen/X86/select.ll vendor/llvm/dist/test/CodeGen/X86/shift-and.ll vendor/llvm/dist/test/CodeGen/X86/shift-coalesce.ll vendor/llvm/dist/test/CodeGen/X86/shift-double.ll vendor/llvm/dist/test/CodeGen/X86/shift-folding.ll vendor/llvm/dist/test/CodeGen/X86/shl_elim.ll vendor/llvm/dist/test/CodeGen/X86/sincos.ll vendor/llvm/dist/test/CodeGen/X86/sink-hoist.ll vendor/llvm/dist/test/CodeGen/X86/splat-scalar-load.ll vendor/llvm/dist/test/CodeGen/X86/sse-align-12.ll vendor/llvm/dist/test/CodeGen/X86/sse-domains.ll vendor/llvm/dist/test/CodeGen/X86/sse-minmax.ll vendor/llvm/dist/test/CodeGen/X86/sse3.ll vendor/llvm/dist/test/CodeGen/X86/sse41-blend.ll vendor/llvm/dist/test/CodeGen/X86/sse41.ll vendor/llvm/dist/test/CodeGen/X86/sse_reload_fold.ll vendor/llvm/dist/test/CodeGen/X86/stack-align.ll vendor/llvm/dist/test/CodeGen/X86/store_op_load_fold2.ll vendor/llvm/dist/test/CodeGen/X86/subreg-to-reg-1.ll vendor/llvm/dist/test/CodeGen/X86/subreg-to-reg-4.ll vendor/llvm/dist/test/CodeGen/X86/tailcall-largecode.ll vendor/llvm/dist/test/CodeGen/X86/tailcallbyval.ll vendor/llvm/dist/test/CodeGen/X86/thiscall-struct-return.ll vendor/llvm/dist/test/CodeGen/X86/tls-pic.ll vendor/llvm/dist/test/CodeGen/X86/tls-pie.ll vendor/llvm/dist/test/CodeGen/X86/trap.ll vendor/llvm/dist/test/CodeGen/X86/trunc-ext-ld-st.ll vendor/llvm/dist/test/CodeGen/X86/twoaddr-coalesce-2.ll vendor/llvm/dist/test/CodeGen/X86/twoaddr-pass-sink.ll vendor/llvm/dist/test/CodeGen/X86/uint_to_fp.ll vendor/llvm/dist/test/CodeGen/X86/umul-with-carry.ll vendor/llvm/dist/test/CodeGen/X86/v-binop-widen2.ll vendor/llvm/dist/test/CodeGen/X86/vec_call.ll vendor/llvm/dist/test/CodeGen/X86/vec_compare-2.ll vendor/llvm/dist/test/CodeGen/X86/vec_compare.ll vendor/llvm/dist/test/CodeGen/X86/vec_ins_extract-1.ll vendor/llvm/dist/test/CodeGen/X86/vec_insert-6.ll vendor/llvm/dist/test/CodeGen/X86/vec_set-3.ll vendor/llvm/dist/test/CodeGen/X86/vec_set-9.ll vendor/llvm/dist/test/CodeGen/X86/vec_shuffle-16.ll vendor/llvm/dist/test/CodeGen/X86/vec_shuffle-19.ll vendor/llvm/dist/test/CodeGen/X86/vec_shuffle-27.ll vendor/llvm/dist/test/CodeGen/X86/vec_shuffle-35.ll vendor/llvm/dist/test/CodeGen/X86/vec_shuffle-36.ll vendor/llvm/dist/test/CodeGen/X86/vec_shuffle-37.ll vendor/llvm/dist/test/CodeGen/X86/vec_shuffle-38.ll vendor/llvm/dist/test/CodeGen/X86/vec_shuffle-39.ll vendor/llvm/dist/test/CodeGen/X86/vec_splat-2.ll vendor/llvm/dist/test/CodeGen/X86/vec_splat-3.ll vendor/llvm/dist/test/CodeGen/X86/vec_splat-4.ll vendor/llvm/dist/test/CodeGen/X86/vec_splat.ll vendor/llvm/dist/test/CodeGen/X86/vec_ss_load_fold.ll vendor/llvm/dist/test/CodeGen/X86/vshift-1.ll vendor/llvm/dist/test/CodeGen/X86/vshift-2.ll vendor/llvm/dist/test/CodeGen/X86/vshift-3.ll vendor/llvm/dist/test/CodeGen/X86/vshift-5.ll vendor/llvm/dist/test/CodeGen/X86/widen_arith-3.ll vendor/llvm/dist/test/CodeGen/X86/widen_cast-1.ll vendor/llvm/dist/test/CodeGen/X86/widen_cast-2.ll vendor/llvm/dist/test/CodeGen/X86/widen_cast-5.ll vendor/llvm/dist/test/CodeGen/X86/widen_conv-4.ll vendor/llvm/dist/test/CodeGen/X86/widen_extract-1.ll vendor/llvm/dist/test/CodeGen/X86/widen_load-0.ll vendor/llvm/dist/test/CodeGen/X86/win64_alloca_dynalloca.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-arg.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-dead-stack-adjust.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-1.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-10.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-11.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-2.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-3.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-4.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-5.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-6.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-7.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-8.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-pic-9.ll vendor/llvm/dist/test/CodeGen/X86/xop-intrinsics-x86_64.ll vendor/llvm/dist/test/CodeGen/X86/xor.ll vendor/llvm/dist/test/DebugInfo/lit.local.cfg vendor/llvm/dist/test/DebugInfo/printdbginfo2.ll vendor/llvm/dist/test/Feature/globalredefinition3.ll vendor/llvm/dist/test/Feature/intrinsics.ll vendor/llvm/dist/test/Feature/load_module.ll vendor/llvm/dist/test/Feature/packed_struct.ll vendor/llvm/dist/test/Feature/vector-cast-constant-exprs.ll vendor/llvm/dist/test/Instrumentation/AddressSanitizer/test64.ll vendor/llvm/dist/test/Integer/packed_struct_bt.ll vendor/llvm/dist/test/Linker/2003-01-30-LinkerRename.ll vendor/llvm/dist/test/Linker/2003-01-30-LinkerTypeRename.ll vendor/llvm/dist/test/Linker/2003-04-23-LinkOnceLost.ll vendor/llvm/dist/test/Linker/2003-04-26-NullPtrLinkProblem.ll vendor/llvm/dist/test/Linker/2003-05-15-TypeProblem.ll vendor/llvm/dist/test/Linker/2003-05-31-LinkerRename.ll vendor/llvm/dist/test/Linker/2003-06-02-TypeResolveProblem.ll vendor/llvm/dist/test/Linker/2003-06-02-TypeResolveProblem2.ll vendor/llvm/dist/test/Linker/2003-08-20-OpaqueTypeResolve.ll vendor/llvm/dist/test/Linker/2003-08-23-GlobalVarLinking.ll vendor/llvm/dist/test/Linker/2003-08-24-InheritPtrSize.ll vendor/llvm/dist/test/Linker/2004-12-03-DisagreeingType.ll vendor/llvm/dist/test/Linker/2005-02-12-ConstantGlobals-2.ll vendor/llvm/dist/test/Linker/2005-02-12-ConstantGlobals.ll vendor/llvm/dist/test/Linker/2005-12-06-AppendingZeroLengthArrays.ll vendor/llvm/dist/test/Linker/2006-06-15-GlobalVarAlignment.ll vendor/llvm/dist/test/Linker/2008-03-07-DroppedSection_a.ll vendor/llvm/dist/test/Linker/2008-03-07-DroppedSection_b.ll vendor/llvm/dist/test/Linker/2008-06-13-LinkOnceRedefinition.ll vendor/llvm/dist/test/Linker/2008-06-26-AddressSpace.ll vendor/llvm/dist/test/Linker/AppendingLinkage.ll vendor/llvm/dist/test/Linker/AppendingLinkage2.ll vendor/llvm/dist/test/Linker/ConstantGlobals1.ll vendor/llvm/dist/test/Linker/ConstantGlobals2.ll vendor/llvm/dist/test/Linker/ConstantGlobals3.ll vendor/llvm/dist/test/Linker/PR8300.ll vendor/llvm/dist/test/Linker/basiclink.ll vendor/llvm/dist/test/Linker/link-global-to-func.ll vendor/llvm/dist/test/Linker/link-messages.ll vendor/llvm/dist/test/Linker/module-flags-4-a.ll vendor/llvm/dist/test/Linker/module-flags-5-a.ll vendor/llvm/dist/test/Linker/module-flags-6-a.ll vendor/llvm/dist/test/Linker/multiple-merged-structs.ll vendor/llvm/dist/test/Linker/redefinition.ll vendor/llvm/dist/test/Linker/weakextern.ll vendor/llvm/dist/test/MC/ARM/arm_fixups.s vendor/llvm/dist/test/MC/ARM/arm_instructions.s vendor/llvm/dist/test/MC/ARM/basic-arm-instructions.s vendor/llvm/dist/test/MC/ARM/basic-thumb-instructions.s vendor/llvm/dist/test/MC/ARM/basic-thumb2-instructions.s vendor/llvm/dist/test/MC/ARM/diagnostics.s vendor/llvm/dist/test/MC/ARM/elf-reloc-01.ll vendor/llvm/dist/test/MC/ARM/elf-reloc-condcall.s vendor/llvm/dist/test/MC/ARM/neon-bitwise-encoding.s vendor/llvm/dist/test/MC/ARM/neon-sub-encoding.s vendor/llvm/dist/test/MC/ARM/neont2-absdiff-encoding.s vendor/llvm/dist/test/MC/ARM/neont2-dup-encoding.s vendor/llvm/dist/test/MC/ARM/neont2-shiftaccum-encoding.s vendor/llvm/dist/test/MC/ARM/simple-fp-encoding.s vendor/llvm/dist/test/MC/ARM/thumb-diagnostics.s vendor/llvm/dist/test/MC/ARM/thumb.s vendor/llvm/dist/test/MC/ARM/thumb2-diagnostics.s vendor/llvm/dist/test/MC/ARM/thumb2-mclass.s vendor/llvm/dist/test/MC/ARM/vfp4.s vendor/llvm/dist/test/MC/ARM/vpush-vpop.s vendor/llvm/dist/test/MC/AsmParser/macro-args.s vendor/llvm/dist/test/MC/AsmParser/macros-parsing.s vendor/llvm/dist/test/MC/AsmParser/macros.s vendor/llvm/dist/test/MC/COFF/seh.s vendor/llvm/dist/test/MC/Disassembler/ARM/arm-tests.txt vendor/llvm/dist/test/MC/Disassembler/ARM/basic-arm-instructions.txt vendor/llvm/dist/test/MC/Disassembler/ARM/fp-encoding.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-BFI-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-Bcc-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-CPS2p-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-CPS3p-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-DMB-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-DSB-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-IT-CBNZ-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-IT-CC15.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-IT-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-LDC-form-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-LDM-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-LDRB_POST-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-LDRD_PRE-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-LDR_POST-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-LDR_PRE-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-LDRrs-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-MCR-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-MOVTi16-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-MOVr-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-MOVs-LSL-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-MOVs-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-MRRC2-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-MSRi-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-RFEorLDMIA-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-SBFX-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-SMLAD-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-SRS-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-STMIA_UPD-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-SXTB-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-UMAAL-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-VLD1DUPq8_UPD-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-VLD3DUPd32_UPD-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-VLDMSDB_UPD-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-VQADD-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-VST1d8Twb_register-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-VST2b32_UPD-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2Bcc-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2LDRBT-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2LDREXD-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2LDRSHi12-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2LDRSHi8-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2PUSH-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2STRD_PRE-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2STREXB-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2STREXD-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/invalid-t2STR_POST-thumb.txt vendor/llvm/dist/test/MC/Disassembler/ARM/ldrd-armv4.txt vendor/llvm/dist/test/MC/Disassembler/ARM/neon-tests.txt vendor/llvm/dist/test/MC/Disassembler/ARM/neon.txt vendor/llvm/dist/test/MC/Disassembler/ARM/neont2.txt vendor/llvm/dist/test/MC/Disassembler/ARM/thumb-tests.txt vendor/llvm/dist/test/MC/Disassembler/ARM/thumb1.txt vendor/llvm/dist/test/MC/Disassembler/ARM/thumb2.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-ADC-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-ADDREXT3-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-AI1cmp-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-LDR-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-LDRD-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-LSL-regform.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-MRRC2-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-MRS-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-MUL-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-RSC-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-SHADD16-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-SSAT-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-STRBrs-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-UQADD8-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictable-swp-arm.txt vendor/llvm/dist/test/MC/Disassembler/ARM/unpredictables-thumb.txt vendor/llvm/dist/test/MC/Disassembler/Mips/mips32.txt vendor/llvm/dist/test/MC/Disassembler/Mips/mips32_le.txt vendor/llvm/dist/test/MC/Disassembler/Mips/mips32r2.txt vendor/llvm/dist/test/MC/Disassembler/Mips/mips32r2_le.txt vendor/llvm/dist/test/MC/Disassembler/Mips/mips64.txt vendor/llvm/dist/test/MC/Disassembler/Mips/mips64_le.txt vendor/llvm/dist/test/MC/Disassembler/Mips/mips64r2.txt vendor/llvm/dist/test/MC/Disassembler/Mips/mips64r2_le.txt vendor/llvm/dist/test/MC/Disassembler/X86/enhanced.txt vendor/llvm/dist/test/MC/Disassembler/X86/intel-syntax.txt vendor/llvm/dist/test/MC/Disassembler/X86/invalid-VEX-vvvv.txt vendor/llvm/dist/test/MC/Disassembler/X86/invalid-cmp-imm.txt vendor/llvm/dist/test/MC/Disassembler/X86/simple-tests.txt vendor/llvm/dist/test/MC/Disassembler/X86/truncated-input.txt vendor/llvm/dist/test/MC/Disassembler/X86/x86-32.txt vendor/llvm/dist/test/MC/Disassembler/X86/x86-64.txt vendor/llvm/dist/test/MC/Mips/elf-bigendian.ll vendor/llvm/dist/test/MC/Mips/elf_basic.s vendor/llvm/dist/test/MC/Mips/sym-offset.ll vendor/llvm/dist/test/MC/X86/intel-syntax.s vendor/llvm/dist/test/MC/X86/x86-32-avx.s vendor/llvm/dist/test/MC/X86/x86-32-coverage.s vendor/llvm/dist/test/MC/X86/x86_64-avx-encoding.s vendor/llvm/dist/test/Makefile vendor/llvm/dist/test/Object/Inputs/trivial-object-test.coff-i386 vendor/llvm/dist/test/Object/nm-trivial-object.test vendor/llvm/dist/test/Object/objdump-file-header.test vendor/llvm/dist/test/Object/objdump-relocations.test vendor/llvm/dist/test/Object/objdump-section-content.test vendor/llvm/dist/test/Object/objdump-symbol-table.test vendor/llvm/dist/test/Other/2003-02-19-LoopInfoNestingBug.ll vendor/llvm/dist/test/Other/2008-10-15-MissingSpace.ll vendor/llvm/dist/test/Other/close-stderr.ll vendor/llvm/dist/test/Other/constant-fold-gep.ll vendor/llvm/dist/test/Other/invalid-commandline-option.ll vendor/llvm/dist/test/Other/lint.ll vendor/llvm/dist/test/Scripts/elf-dump vendor/llvm/dist/test/TableGen/DefmInherit.td vendor/llvm/dist/test/TableGen/ForeachLoop.td vendor/llvm/dist/test/TableGen/LazyChange.td vendor/llvm/dist/test/TableGen/ListOfList.td vendor/llvm/dist/test/TableGen/MultiClass.td vendor/llvm/dist/test/TableGen/MultiClassInherit.td vendor/llvm/dist/test/TableGen/SetTheory.td vendor/llvm/dist/test/TableGen/Slice.td vendor/llvm/dist/test/TableGen/TargetInstrSpec.td vendor/llvm/dist/test/TableGen/cast.td vendor/llvm/dist/test/TableGen/foreach.td vendor/llvm/dist/test/TableGen/lisp.td vendor/llvm/dist/test/TableGen/subst.td vendor/llvm/dist/test/Transforms/ArgumentPromotion/2008-07-02-array-indexing.ll vendor/llvm/dist/test/Transforms/ArgumentPromotion/byval-2.ll vendor/llvm/dist/test/Transforms/ArgumentPromotion/control-flow.ll vendor/llvm/dist/test/Transforms/ArgumentPromotion/control-flow2.ll vendor/llvm/dist/test/Transforms/BBVectorize/simple-sel.ll vendor/llvm/dist/test/Transforms/BBVectorize/simple.ll vendor/llvm/dist/test/Transforms/CodeGenPrepare/basic.ll vendor/llvm/dist/test/Transforms/ConstProp/2002-05-03-NotOperator.ll vendor/llvm/dist/test/Transforms/ConstProp/2005-01-28-SetCCGEP.ll vendor/llvm/dist/test/Transforms/ConstProp/2006-11-30-vector-cast.ll vendor/llvm/dist/test/Transforms/ConstProp/2006-12-01-TruncBoolBug.ll vendor/llvm/dist/test/Transforms/ConstProp/2006-12-01-bool-casts.ll vendor/llvm/dist/test/Transforms/ConstProp/2007-02-23-sdiv.ll vendor/llvm/dist/test/Transforms/ConstProp/2007-11-23-cttz.ll vendor/llvm/dist/test/Transforms/ConstProp/div-zero.ll vendor/llvm/dist/test/Transforms/CorrelatedValuePropagation/range.ll vendor/llvm/dist/test/Transforms/DeadArgElim/2007-02-07-FuncRename.ll vendor/llvm/dist/test/Transforms/DeadArgElim/2007-10-18-VarargsReturn.ll vendor/llvm/dist/test/Transforms/DeadArgElim/canon.ll vendor/llvm/dist/test/Transforms/DeadArgElim/keepalive.ll vendor/llvm/dist/test/Transforms/DeadStoreElimination/simple.ll vendor/llvm/dist/test/Transforms/FunctionAttrs/2009-01-02-LocalStores.ll vendor/llvm/dist/test/Transforms/GVN/2007-07-25-InfiniteLoop.ll vendor/llvm/dist/test/Transforms/GVN/2007-07-31-NoDomInherit.ll vendor/llvm/dist/test/Transforms/GVN/2007-07-31-RedundantPhi.ll vendor/llvm/dist/test/Transforms/GVN/2008-07-02-Unreachable.ll vendor/llvm/dist/test/Transforms/GVN/basic.ll vendor/llvm/dist/test/Transforms/GVN/calls-readonly.ll vendor/llvm/dist/test/Transforms/GVN/load-constant-mem.ll vendor/llvm/dist/test/Transforms/GVN/local-pre.ll vendor/llvm/dist/test/Transforms/GVN/nonescaping-malloc.ll vendor/llvm/dist/test/Transforms/GVN/pre-basic-add.ll vendor/llvm/dist/test/Transforms/GVN/rle-must-alias.ll vendor/llvm/dist/test/Transforms/GVN/rle-semidominated.ll vendor/llvm/dist/test/Transforms/GlobalOpt/2008-01-13-OutOfRangeSROA.ll vendor/llvm/dist/test/Transforms/GlobalOpt/2008-01-29-VolatileGlobal.ll vendor/llvm/dist/test/Transforms/GlobalOpt/2008-04-26-SROA-Global-Align.ll vendor/llvm/dist/test/Transforms/GlobalOpt/2009-01-13-phi-user.ll vendor/llvm/dist/test/Transforms/GlobalOpt/2009-03-05-dbg.ll vendor/llvm/dist/test/Transforms/GlobalOpt/2009-03-07-PromotePtrToBool.ll vendor/llvm/dist/test/Transforms/GlobalOpt/2009-11-16-BrokenPerformHeapAllocSRoA.ll vendor/llvm/dist/test/Transforms/GlobalOpt/constantexpr-dangle.ll vendor/llvm/dist/test/Transforms/GlobalOpt/deadglobal.ll vendor/llvm/dist/test/Transforms/GlobalOpt/globalsra-unknown-index.ll vendor/llvm/dist/test/Transforms/GlobalOpt/heap-sra-phi.ll vendor/llvm/dist/test/Transforms/GlobalOpt/integer-bool.ll vendor/llvm/dist/test/Transforms/GlobalOpt/memcpy.ll vendor/llvm/dist/test/Transforms/GlobalOpt/storepointer-compare.ll vendor/llvm/dist/test/Transforms/GlobalOpt/unnamed-addr.ll vendor/llvm/dist/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll vendor/llvm/dist/test/Transforms/IPConstantProp/return-argument.ll vendor/llvm/dist/test/Transforms/IPConstantProp/return-constant.ll vendor/llvm/dist/test/Transforms/IPConstantProp/return-constants.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/2005-02-26-ExitValueCompute.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/2006-03-31-NegativeStride.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/2007-01-06-TripCount.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/2009-04-14-shorten_iv_vars.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/2009-04-15-shorten-iv-vars-2.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/eliminate-max.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/lftr-reuse.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/loop_evaluate10.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/loop_evaluate9.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/loop_evaluate_3.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/loop_evaluate_4.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/loop_evaluate_5.ll vendor/llvm/dist/test/Transforms/IndVarSimplify/shrunk-constant.ll vendor/llvm/dist/test/Transforms/Inline/2007-04-15-InlineEH.ll vendor/llvm/dist/test/Transforms/Inline/casts.ll vendor/llvm/dist/test/Transforms/Inline/delete-call.ll vendor/llvm/dist/test/Transforms/Inline/externally_available.ll vendor/llvm/dist/test/Transforms/Inline/inline-invoke-tail.ll vendor/llvm/dist/test/Transforms/Inline/inline_constprop.ll vendor/llvm/dist/test/Transforms/Inline/inline_prune.ll vendor/llvm/dist/test/Transforms/Inline/invoke_test-1.ll vendor/llvm/dist/test/Transforms/InstCombine/2004-08-10-BoolSetCC.ll vendor/llvm/dist/test/Transforms/InstCombine/2004-09-20-BadLoadCombine.ll vendor/llvm/dist/test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.ll vendor/llvm/dist/test/Transforms/InstCombine/2005-03-04-ShiftOverflow.ll vendor/llvm/dist/test/Transforms/InstCombine/2005-06-16-SetCCOrSetCCMiscompile.ll vendor/llvm/dist/test/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll vendor/llvm/dist/test/Transforms/InstCombine/2006-12-15-Range-Test.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-01-13-ExtCompareMiscompile.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-01-14-FcmpSelf.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-01-27-AndICmp.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-02-01-LoadSinkAlloca.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-03-13-CompareMerge.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-03-21-SignedRangeTest.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-03-25-BadShiftMask.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-03-26-BadShiftMask.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-05-18-CastFoldBug.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-06-06-AshrSignBit.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-06-21-DivCompareMiscomp.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-10-28-stacksave.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-11-15-CompareMiscomp.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-12-10-ConstFoldCompare.ll vendor/llvm/dist/test/Transforms/InstCombine/2007-12-18-AddSelCmpSub.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-01-29-AddICmp.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-02-16-SDivOverflow.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-02-16-SDivOverflow2.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-03-13-IntToPtr.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-04-28-VolatileStore.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-04-29-VolatileLoadDontMerge.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-04-29-VolatileLoadMerge.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-05-08-LiveStoreDelete.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-05-18-FoldIntToPtr.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-05-23-CompareFold.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-05-31-AddBool.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-05-31-Bools.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-06-08-ICmpPHI.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-06-13-InfiniteLoopStore.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-06-13-ReadOnlyCallStore.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-06-21-CompareMiscomp.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-06-24-StackRestore.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-07-08-ShiftOneAndOne.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-07-08-SubAnd.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-07-08-VolatileLoadMerge.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-07-09-SubAndError.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-07-10-CastSextBool.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-07-13-DivZero.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-07-16-sse2_storel_dq.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-09-29-FoldingOr.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-10-11-DivCompareFold.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-11-01-SRemDemandedBits.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-11-08-FCmp.ll vendor/llvm/dist/test/Transforms/InstCombine/2008-12-17-SRemNegConstVec.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-01-08-AlignAlloca.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-01-16-PointerAddrSpace.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-01-19-fmod-constant-float-specials.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-01-31-Pressure.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-02-20-InstCombine-SROA.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-02-21-LoadCST.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-04-07-MulPromoteToI96.ll vendor/llvm/dist/test/Transforms/InstCombine/2009-06-11-StoreAddrSpace.ll vendor/llvm/dist/test/Transforms/InstCombine/2010-11-01-lshr-mask.ll vendor/llvm/dist/test/Transforms/InstCombine/2011-06-13-nsw-alloca.ll vendor/llvm/dist/test/Transforms/InstCombine/CPP_min_max.ll vendor/llvm/dist/test/Transforms/InstCombine/JavaCompare.ll vendor/llvm/dist/test/Transforms/InstCombine/add-shrink.ll vendor/llvm/dist/test/Transforms/InstCombine/add-sitofp.ll vendor/llvm/dist/test/Transforms/InstCombine/addnegneg.ll vendor/llvm/dist/test/Transforms/InstCombine/adjust-for-sminmax.ll vendor/llvm/dist/test/Transforms/InstCombine/align-2d-gep.ll vendor/llvm/dist/test/Transforms/InstCombine/alloca.ll vendor/llvm/dist/test/Transforms/InstCombine/and-fcmp.ll vendor/llvm/dist/test/Transforms/InstCombine/and-not-or.ll vendor/llvm/dist/test/Transforms/InstCombine/and-or-and.ll vendor/llvm/dist/test/Transforms/InstCombine/and-or-not.ll vendor/llvm/dist/test/Transforms/InstCombine/and-or.ll vendor/llvm/dist/test/Transforms/InstCombine/apint-and-or-and.ll vendor/llvm/dist/test/Transforms/InstCombine/apint-and1.ll vendor/llvm/dist/test/Transforms/InstCombine/apint-and2.ll vendor/llvm/dist/test/Transforms/InstCombine/apint-shift-simplify.ll vendor/llvm/dist/test/Transforms/InstCombine/apint-shift.ll vendor/llvm/dist/test/Transforms/InstCombine/apint-sub.ll vendor/llvm/dist/test/Transforms/InstCombine/apint-xor1.ll vendor/llvm/dist/test/Transforms/InstCombine/apint-xor2.ll vendor/llvm/dist/test/Transforms/InstCombine/badmalloc.ll vendor/llvm/dist/test/Transforms/InstCombine/bit-checks.ll vendor/llvm/dist/test/Transforms/InstCombine/bitcount.ll vendor/llvm/dist/test/Transforms/InstCombine/bittest.ll vendor/llvm/dist/test/Transforms/InstCombine/bswap.ll vendor/llvm/dist/test/Transforms/InstCombine/cast.ll vendor/llvm/dist/test/Transforms/InstCombine/crash.ll vendor/llvm/dist/test/Transforms/InstCombine/dce-iterate.ll vendor/llvm/dist/test/Transforms/InstCombine/deadcode.ll vendor/llvm/dist/test/Transforms/InstCombine/enforce-known-alignment.ll vendor/llvm/dist/test/Transforms/InstCombine/fp-ret-bitcast.ll vendor/llvm/dist/test/Transforms/InstCombine/icmp.ll vendor/llvm/dist/test/Transforms/InstCombine/known_align.ll vendor/llvm/dist/test/Transforms/InstCombine/loadstore-alignment.ll vendor/llvm/dist/test/Transforms/InstCombine/malloc-free-delete.ll vendor/llvm/dist/test/Transforms/InstCombine/memcpy-to-load.ll vendor/llvm/dist/test/Transforms/InstCombine/memmove.ll vendor/llvm/dist/test/Transforms/InstCombine/memset.ll vendor/llvm/dist/test/Transforms/InstCombine/mul.ll vendor/llvm/dist/test/Transforms/InstCombine/multi-use-or.ll vendor/llvm/dist/test/Transforms/InstCombine/narrow.ll vendor/llvm/dist/test/Transforms/InstCombine/objsize.ll vendor/llvm/dist/test/Transforms/InstCombine/odr-linkage.ll vendor/llvm/dist/test/Transforms/InstCombine/or-to-xor.ll vendor/llvm/dist/test/Transforms/InstCombine/phi-merge-gep.ll vendor/llvm/dist/test/Transforms/InstCombine/phi.ll vendor/llvm/dist/test/Transforms/InstCombine/pr2645-0.ll vendor/llvm/dist/test/Transforms/InstCombine/select-crash.ll vendor/llvm/dist/test/Transforms/InstCombine/select-load-call.ll vendor/llvm/dist/test/Transforms/InstCombine/setcc-strength-reduce.ll vendor/llvm/dist/test/Transforms/InstCombine/shift.ll vendor/llvm/dist/test/Transforms/InstCombine/shufflemask-undef.ll vendor/llvm/dist/test/Transforms/InstCombine/shufflevec-constant.ll vendor/llvm/dist/test/Transforms/InstCombine/signed-comparison.ll vendor/llvm/dist/test/Transforms/InstCombine/srem-simplify-bug.ll vendor/llvm/dist/test/Transforms/InstCombine/stack-overalign.ll vendor/llvm/dist/test/Transforms/InstCombine/stacksaverestore.ll vendor/llvm/dist/test/Transforms/InstCombine/trunc.ll vendor/llvm/dist/test/Transforms/InstCombine/udiv-simplify-bug-0.ll vendor/llvm/dist/test/Transforms/InstCombine/urem-simplify-bug.ll vendor/llvm/dist/test/Transforms/InstCombine/vec_demanded_elts.ll vendor/llvm/dist/test/Transforms/InstCombine/vec_insertelt.ll vendor/llvm/dist/test/Transforms/InstCombine/vec_narrow.ll vendor/llvm/dist/test/Transforms/InstCombine/vector-srem.ll vendor/llvm/dist/test/Transforms/InstCombine/volatile_store.ll vendor/llvm/dist/test/Transforms/InstCombine/xor.ll vendor/llvm/dist/test/Transforms/InstCombine/zeroext-and-reduce.ll vendor/llvm/dist/test/Transforms/InstCombine/zext-bool-add-sub.ll vendor/llvm/dist/test/Transforms/InstCombine/zext-fold.ll vendor/llvm/dist/test/Transforms/JumpThreading/2008-11-27-EntryMunge.ll vendor/llvm/dist/test/Transforms/JumpThreading/compare.ll vendor/llvm/dist/test/Transforms/JumpThreading/no-irreducible-loops.ll vendor/llvm/dist/test/Transforms/LCSSA/2006-06-03-IncorrectIDFPhis.ll vendor/llvm/dist/test/Transforms/LCSSA/2006-06-12-MultipleExitsSameBlock.ll vendor/llvm/dist/test/Transforms/LCSSA/basictest.ll vendor/llvm/dist/test/Transforms/LCSSA/unreachable-use.ll vendor/llvm/dist/test/Transforms/LCSSA/unused-phis.ll vendor/llvm/dist/test/Transforms/LICM/2003-02-27-PreheaderProblem.ll vendor/llvm/dist/test/Transforms/LICM/2007-05-22-VolatileSink.ll vendor/llvm/dist/test/Transforms/LICM/hoist-invariant-load.ll vendor/llvm/dist/test/Transforms/LICM/speculate.ll vendor/llvm/dist/test/Transforms/LoopRotate/PhiRename-1.ll vendor/llvm/dist/test/Transforms/LoopSimplify/indirectbr.ll vendor/llvm/dist/test/Transforms/LoopSimplify/merge-exits.ll vendor/llvm/dist/test/Transforms/LoopSimplify/preserve-scev.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/dont-hoist-simple-loop-constants.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/dont_reverse.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/invariant_value_first.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/invariant_value_first_arg.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/pr2570.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/use_postinc_value_outside_loop.ll vendor/llvm/dist/test/Transforms/LoopStrengthReduce/var_stride_used_by_compare.ll vendor/llvm/dist/test/Transforms/LoopUnswitch/2008-11-03-Invariant.ll vendor/llvm/dist/test/Transforms/LoopUnswitch/2011-11-18-SimpleSwitch.ll vendor/llvm/dist/test/Transforms/LoopUnswitch/2011-11-18-TwoSwitches-Threshold.ll vendor/llvm/dist/test/Transforms/LoopUnswitch/2011-11-18-TwoSwitches.ll vendor/llvm/dist/test/Transforms/LowerSwitch/feature.ll vendor/llvm/dist/test/Transforms/MemCpyOpt/2008-02-24-MultipleUseofSRet.ll vendor/llvm/dist/test/Transforms/MemCpyOpt/2008-03-13-ReturnSlotBitcast.ll vendor/llvm/dist/test/Transforms/MemCpyOpt/memcpy.ll vendor/llvm/dist/test/Transforms/MemCpyOpt/sret.ll vendor/llvm/dist/test/Transforms/MergeFunc/fold-weak.ll vendor/llvm/dist/test/Transforms/MergeFunc/phi-speculation1.ll vendor/llvm/dist/test/Transforms/MergeFunc/phi-speculation2.ll vendor/llvm/dist/test/Transforms/MergeFunc/vector.ll vendor/llvm/dist/test/Transforms/ObjCARC/basic.ll vendor/llvm/dist/test/Transforms/ObjCARC/contract-storestrong.ll vendor/llvm/dist/test/Transforms/ObjCARC/contract-testcases.ll vendor/llvm/dist/test/Transforms/PhaseOrdering/basic.ll vendor/llvm/dist/test/Transforms/PruneEH/simplenoreturntest.ll vendor/llvm/dist/test/Transforms/Reassociate/2005-09-01-ArrayOutOfBounds.ll vendor/llvm/dist/test/Transforms/Reassociate/crash.ll vendor/llvm/dist/test/Transforms/Reassociate/mulfactor.ll vendor/llvm/dist/test/Transforms/Reassociate/shifttest.ll vendor/llvm/dist/test/Transforms/SCCP/2004-12-10-UndefBranchBug.ll vendor/llvm/dist/test/Transforms/SCCP/2006-12-19-UndefBug.ll vendor/llvm/dist/test/Transforms/SCCP/2008-04-22-multiple-ret-sccp.ll vendor/llvm/dist/test/Transforms/SCCP/2008-05-23-UndefCallFold.ll vendor/llvm/dist/test/Transforms/SCCP/2009-01-14-IPSCCP-Invoke.ll vendor/llvm/dist/test/Transforms/SCCP/apint-array.ll vendor/llvm/dist/test/Transforms/SCCP/apint-basictest4.ll vendor/llvm/dist/test/Transforms/SCCP/apint-ipsccp1.ll vendor/llvm/dist/test/Transforms/SCCP/apint-ipsccp2.ll vendor/llvm/dist/test/Transforms/SCCP/logical-nuke.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2003-09-12-IncorrectPromote.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2003-10-29-ArrayProblem.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2008-01-29-PromoteBug.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2008-06-22-LargeArray.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2008-08-22-out-of-range-array-promote.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2009-02-02-ScalarPromoteOutOfRange.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2009-02-05-LoadFCA.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2009-03-04-MemCpyAlign.ll vendor/llvm/dist/test/Transforms/ScalarRepl/2011-06-08-VectorExtractValue.ll vendor/llvm/dist/test/Transforms/ScalarRepl/crash.ll vendor/llvm/dist/test/Transforms/ScalarRepl/memcpy-from-global.ll vendor/llvm/dist/test/Transforms/ScalarRepl/memset-aggregate-byte-leader.ll vendor/llvm/dist/test/Transforms/ScalarRepl/memset-aggregate.ll vendor/llvm/dist/test/Transforms/ScalarRepl/not-a-vector.ll vendor/llvm/dist/test/Transforms/ScalarRepl/union-fp-int.ll vendor/llvm/dist/test/Transforms/ScalarRepl/union-pointer.ll vendor/llvm/dist/test/Transforms/ScalarRepl/vector_memcpy.ll vendor/llvm/dist/test/Transforms/ScalarRepl/volatile.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2002-05-05-EmptyBlockMerge.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2003-08-17-BranchFold.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2003-08-17-BranchFoldOrdering.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2008-01-02-hoist-fp-add.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2008-05-16-PHIBlockMerge.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/2008-07-13-InfLoopMiscompile.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/BrUnwind.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/DeadSetCC.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/UncondBranchToReturn.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/branch-fold.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/branch-phi-thread.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/duplicate-phis.ll vendor/llvm/dist/test/Transforms/SimplifyCFG/switch_thread.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/2007-04-06-strchr-miscompile.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/2009-02-12-StrTo.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/2009-05-30-memcmp-byte.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/FFS.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/FPrintF.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/FPuts.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/MemCpy.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/SPrintF.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/StrCat.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/StrLen.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/StrNCat.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/StrNCpy.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/ToAscii.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/abs.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/exp2.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/memmove.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/memset-64.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/memset.ll vendor/llvm/dist/test/Transforms/SimplifyLibCalls/pow2.ll vendor/llvm/dist/test/Transforms/Sink/basic.ll vendor/llvm/dist/test/Transforms/TailCallElim/ackermann.ll vendor/llvm/dist/test/Transforms/TailCallElim/dont-tce-tail-marked-call.ll vendor/llvm/dist/test/Transforms/TailCallElim/dup_tail.ll vendor/llvm/dist/test/Transforms/TailCallElim/trivial_codegen_tailcall.ll vendor/llvm/dist/test/Transforms/TailDup/2008-06-11-AvoidDupLoopHeader.ll vendor/llvm/dist/test/Verifier/2002-04-13-RetTypes.ll vendor/llvm/dist/test/Verifier/2002-11-05-GetelementptrPointers.ll vendor/llvm/dist/test/Verifier/2006-07-11-StoreStruct.ll vendor/llvm/dist/test/Verifier/2006-10-15-AddrLabel.ll vendor/llvm/dist/test/Verifier/2006-12-12-IntrinsicDefine.ll vendor/llvm/dist/test/Verifier/2008-03-01-AllocaSized.ll vendor/llvm/dist/test/Verifier/2008-08-22-MemCpyAlignment.ll vendor/llvm/dist/test/Verifier/2008-11-15-RetVoid.ll vendor/llvm/dist/test/Verifier/2010-08-07-PointerIntrinsic.ll vendor/llvm/dist/test/Verifier/AmbiguousPhi.ll vendor/llvm/dist/test/Verifier/PhiGrouping.ll vendor/llvm/dist/test/Verifier/SelfReferential.ll vendor/llvm/dist/test/Verifier/aliasing-chain.ll vendor/llvm/dist/test/Verifier/cttz-undef-arg.ll vendor/llvm/dist/test/Verifier/fpmath.ll vendor/llvm/dist/test/Verifier/range-1.ll vendor/llvm/dist/test/Verifier/range-2.ll vendor/llvm/dist/test/YAMLParser/spec-05-02-utf8.data vendor/llvm/dist/test/YAMLParser/spec-05-10.data vendor/llvm/dist/test/YAMLParser/spec-05-12.data vendor/llvm/dist/test/YAMLParser/spec-05-15.data vendor/llvm/dist/test/YAMLParser/spec-07-03.data vendor/llvm/dist/test/YAMLParser/spec-07-05.data vendor/llvm/dist/test/YAMLParser/spec-08-04.data vendor/llvm/dist/test/YAMLParser/spec-08-06.data vendor/llvm/dist/test/YAMLParser/spec-09-02.data vendor/llvm/dist/test/YAMLParser/spec-09-14.data vendor/llvm/dist/test/YAMLParser/spec-09-21.data vendor/llvm/dist/test/YAMLParser/spec-10-08.data vendor/llvm/dist/test/lit.cfg vendor/llvm/dist/test/lit.site.cfg.in vendor/llvm/dist/tools/CMakeLists.txt vendor/llvm/dist/tools/LLVMBuild.txt vendor/llvm/dist/tools/Makefile vendor/llvm/dist/tools/bugpoint/BugDriver.cpp vendor/llvm/dist/tools/bugpoint/ExtractFunction.cpp vendor/llvm/dist/tools/bugpoint/ToolRunner.cpp vendor/llvm/dist/tools/gold/gold-plugin.cpp vendor/llvm/dist/tools/llc/llc.cpp vendor/llvm/dist/tools/lli/lli.cpp vendor/llvm/dist/tools/llvm-ar/llvm-ar.cpp vendor/llvm/dist/tools/llvm-config/Makefile vendor/llvm/dist/tools/llvm-config/llvm-config.cpp vendor/llvm/dist/tools/llvm-diff/DiffConsumer.cpp vendor/llvm/dist/tools/llvm-diff/DiffConsumer.h vendor/llvm/dist/tools/llvm-diff/DifferenceEngine.cpp vendor/llvm/dist/tools/llvm-diff/DifferenceEngine.h vendor/llvm/dist/tools/llvm-diff/llvm-diff.cpp vendor/llvm/dist/tools/llvm-dis/llvm-dis.cpp vendor/llvm/dist/tools/llvm-dwarfdump/llvm-dwarfdump.cpp vendor/llvm/dist/tools/llvm-mc/llvm-mc.cpp vendor/llvm/dist/tools/llvm-nm/llvm-nm.cpp vendor/llvm/dist/tools/llvm-objdump/MachODump.cpp vendor/llvm/dist/tools/llvm-objdump/llvm-objdump.cpp vendor/llvm/dist/tools/llvm-prof/llvm-prof.cpp vendor/llvm/dist/tools/llvm-ranlib/llvm-ranlib.cpp vendor/llvm/dist/tools/llvm-rtdyld/llvm-rtdyld.cpp vendor/llvm/dist/tools/llvm-shlib/Makefile vendor/llvm/dist/tools/llvm-stress/llvm-stress.cpp vendor/llvm/dist/tools/lto/LTOCodeGenerator.cpp vendor/llvm/dist/tools/lto/LTOCodeGenerator.h vendor/llvm/dist/tools/lto/LTOModule.cpp vendor/llvm/dist/tools/lto/LTOModule.h vendor/llvm/dist/tools/macho-dump/macho-dump.cpp vendor/llvm/dist/tools/opt/opt.cpp vendor/llvm/dist/unittests/ADT/APIntTest.cpp vendor/llvm/dist/unittests/ADT/BitVectorTest.cpp vendor/llvm/dist/unittests/ADT/DenseMapTest.cpp vendor/llvm/dist/unittests/ADT/HashingTest.cpp vendor/llvm/dist/unittests/ADT/SmallVectorTest.cpp vendor/llvm/dist/unittests/ADT/SparseSetTest.cpp vendor/llvm/dist/unittests/ADT/StringMapTest.cpp vendor/llvm/dist/unittests/ADT/StringRefTest.cpp vendor/llvm/dist/unittests/ADT/TripleTest.cpp vendor/llvm/dist/unittests/Analysis/Makefile vendor/llvm/dist/unittests/Bitcode/Makefile vendor/llvm/dist/unittests/CMakeLists.txt vendor/llvm/dist/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp vendor/llvm/dist/unittests/ExecutionEngine/JIT/JITEventListenerTestCommon.h vendor/llvm/dist/unittests/ExecutionEngine/JIT/JITTest.cpp vendor/llvm/dist/unittests/ExecutionEngine/JIT/Makefile vendor/llvm/dist/unittests/ExecutionEngine/Makefile vendor/llvm/dist/unittests/Support/BlockFrequencyTest.cpp vendor/llvm/dist/unittests/Support/CommandLineTest.cpp vendor/llvm/dist/unittests/Support/ConstantRangeTest.cpp vendor/llvm/dist/unittests/Support/Path.cpp vendor/llvm/dist/unittests/Support/YAMLParserTest.cpp vendor/llvm/dist/unittests/Transforms/Utils/Cloning.cpp vendor/llvm/dist/unittests/Transforms/Utils/Local.cpp vendor/llvm/dist/unittests/Transforms/Utils/Makefile vendor/llvm/dist/unittests/VMCore/InstructionsTest.cpp vendor/llvm/dist/unittests/VMCore/Makefile vendor/llvm/dist/unittests/VMCore/PassManagerTest.cpp vendor/llvm/dist/utils/GetRepositoryPath vendor/llvm/dist/utils/GetSourceVersion vendor/llvm/dist/utils/Makefile vendor/llvm/dist/utils/TableGen/AsmMatcherEmitter.cpp vendor/llvm/dist/utils/TableGen/AsmWriterEmitter.cpp vendor/llvm/dist/utils/TableGen/CMakeLists.txt vendor/llvm/dist/utils/TableGen/CallingConvEmitter.cpp vendor/llvm/dist/utils/TableGen/CodeEmitterGen.cpp vendor/llvm/dist/utils/TableGen/CodeGenDAGPatterns.cpp vendor/llvm/dist/utils/TableGen/CodeGenInstruction.cpp vendor/llvm/dist/utils/TableGen/CodeGenInstruction.h vendor/llvm/dist/utils/TableGen/CodeGenIntrinsics.h vendor/llvm/dist/utils/TableGen/CodeGenRegisters.cpp vendor/llvm/dist/utils/TableGen/CodeGenRegisters.h vendor/llvm/dist/utils/TableGen/CodeGenTarget.cpp vendor/llvm/dist/utils/TableGen/CodeGenTarget.h vendor/llvm/dist/utils/TableGen/DAGISelEmitter.cpp vendor/llvm/dist/utils/TableGen/DAGISelMatcher.h vendor/llvm/dist/utils/TableGen/DAGISelMatcherEmitter.cpp vendor/llvm/dist/utils/TableGen/DAGISelMatcherGen.cpp vendor/llvm/dist/utils/TableGen/DFAPacketizerEmitter.cpp vendor/llvm/dist/utils/TableGen/DisassemblerEmitter.cpp vendor/llvm/dist/utils/TableGen/EDEmitter.cpp vendor/llvm/dist/utils/TableGen/FastISelEmitter.cpp vendor/llvm/dist/utils/TableGen/FixedLenDecoderEmitter.cpp vendor/llvm/dist/utils/TableGen/InstrInfoEmitter.cpp vendor/llvm/dist/utils/TableGen/IntrinsicEmitter.cpp vendor/llvm/dist/utils/TableGen/PseudoLoweringEmitter.cpp vendor/llvm/dist/utils/TableGen/RegisterInfoEmitter.cpp vendor/llvm/dist/utils/TableGen/SequenceToOffsetTable.h vendor/llvm/dist/utils/TableGen/SetTheory.cpp vendor/llvm/dist/utils/TableGen/StringToOffsetTable.h vendor/llvm/dist/utils/TableGen/SubtargetEmitter.cpp vendor/llvm/dist/utils/TableGen/TableGen.cpp vendor/llvm/dist/utils/TableGen/X86DisassemblerShared.h vendor/llvm/dist/utils/TableGen/X86DisassemblerTables.cpp vendor/llvm/dist/utils/TableGen/X86DisassemblerTables.h vendor/llvm/dist/utils/TableGen/X86RecognizableInstr.cpp vendor/llvm/dist/utils/TableGen/X86RecognizableInstr.h vendor/llvm/dist/utils/UpdateCMakeLists.pl vendor/llvm/dist/utils/buildit/build_llvm vendor/llvm/dist/utils/findmisopt vendor/llvm/dist/utils/lit/lit/TestRunner.py vendor/llvm/dist/utils/llvm-build/llvmbuild/main.py vendor/llvm/dist/utils/llvm-lit/llvm-lit.in vendor/llvm/dist/utils/llvm.grm vendor/llvm/dist/utils/release/test-release.sh vendor/llvm/dist/utils/test_debuginfo.pl vendor/llvm/dist/utils/unittest/CMakeLists.txt vendor/llvm/dist/utils/unittest/googletest/gtest.cc vendor/llvm/dist/utils/unittest/googletest/include/gtest/internal/gtest-internal-inl.h vendor/llvm/dist/utils/unittest/googletest/include/gtest/internal/gtest-internal.h vendor/llvm/dist/utils/vim/llvm.vim Modified: vendor/llvm/dist/.gitignore ============================================================================== --- vendor/llvm/dist/.gitignore Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/.gitignore Wed Aug 15 19:34:23 2012 (r239310) @@ -40,3 +40,7 @@ projects/* tools/clang # LLDB, which is tracked independently. tools/lldb +# lld, which is tracked independently. +tools/lld +# Sphinx build tree, if building in-source dir. +docs/_build Modified: vendor/llvm/dist/CMakeLists.txt ============================================================================== --- vendor/llvm/dist/CMakeLists.txt Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/CMakeLists.txt Wed Aug 15 19:34:23 2012 (r239310) @@ -11,11 +11,14 @@ set(CMAKE_MODULE_PATH ) set(LLVM_VERSION_MAJOR 3) -set(LLVM_VERSION_MINOR 1) +set(LLVM_VERSION_MINOR 2) set(PACKAGE_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}svn") -set_property(GLOBAL PROPERTY USE_FOLDERS ON) +option(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON) +if ( LLVM_USE_FOLDERS ) + set_property(GLOBAL PROPERTY USE_FOLDERS ON) +endif() include(VersionFromVCS) @@ -78,8 +81,8 @@ set(LLVM_ALL_TARGETS Mips MBlaze MSP430 + NVPTX PowerPC - PTX Sparc X86 XCore @@ -96,6 +99,9 @@ else( MSVC ) CACHE STRING "Semicolon-separated list of targets to build, or \"all\".") endif( MSVC ) +set(LLVM_EXPERIMENTAL_TARGETS_TO_BUILD "" + CACHE STRING "Semicolon-separated list of experimental targets to build.") + option(BUILD_SHARED_LIBS "Build all libraries as shared libraries instead of static" OFF) @@ -133,6 +139,11 @@ foreach(c ${LLVM_TARGETS_TO_BUILD}) endif() endforeach(c) +set(LLVM_TARGETS_TO_BUILD + ${LLVM_TARGETS_TO_BUILD} + ${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD} + ) + set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm) include(AddLLVMDefinitions) @@ -398,6 +409,8 @@ add_subdirectory(utils/count) add_subdirectory(utils/not) add_subdirectory(utils/llvm-lit) add_subdirectory(utils/yaml-bench) +add_subdirectory(utils/obj2yaml) +add_subdirectory(utils/yaml2obj) add_subdirectory(projects) @@ -422,6 +435,20 @@ if( LLVM_INCLUDE_TESTS ) # Windows. add_subdirectory(utils/KillTheDoctor) endif() + + # Add a global check rule now that all subdirectories have been traversed + # and we know the total set of lit testsuites. + get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES) + get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS) + get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS) + get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) + add_lit_target(check-all + "Running all regression tests" + ${LLVM_LIT_TESTSUITES} + PARAMS ${LLVM_LIT_PARAMS} + DEPENDS ${LLVM_LIT_DEPENDS} + ARGS ${LLVM_LIT_EXTRA_ARGS} + ) endif() add_subdirectory(cmake/modules) Added: vendor/llvm/dist/CODE_OWNERS.TXT ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/llvm/dist/CODE_OWNERS.TXT Wed Aug 15 19:34:23 2012 (r239310) @@ -0,0 +1,51 @@ +This file is a list of the people responsible for ensuring that patches for a +particular part of LLVM are reviewed, either by themself or by someone else. +They are also the gatekeepers for their part of LLVM, with the final word on +what goes in or not. + +The list is sorted by surname and formatted to allow easy grepping and +beautification by scripts. The fields are: name (N), email (E), web-address +(W), PGP key ID and fingerprint (P), description (D), and snail-mail address +(S). + +N: Evan Cheng +E: evan.cheng@apple.com +D: Code generator and all targets + +N: Greg Clayton +D: LLDB + +N: Peter Collingbourne +D: libclc + +N: Doug Gregor +D: Clang Frontend Libraries + +N: Tobias Grosser +D: Polly + +N: Howard Hinnant +D: libc++ + +N: Anton Korobeynikov +E: asl@math.spbu.ru +D: Exception handling, debug information, and Windows codegen + +N: Ted Kremenek +D: Clang Static Analyzer + +N: Chris Lattner +E: sabre@nondot.org +W: http://nondot.org/~sabre/ +D: Everything not covered by someone else + +N: John McCall +E: rjmccall@apple.com +D: Clang LLVM IR generation + +N: Jakob Olesen +D: Register allocators and TableGen + +N: Duncan Sands +E: baldrick@free.fr +D: DragonEgg Modified: vendor/llvm/dist/CREDITS.TXT ============================================================================== --- vendor/llvm/dist/CREDITS.TXT Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/CREDITS.TXT Wed Aug 15 19:34:23 2012 (r239310) @@ -22,6 +22,10 @@ D: GVNPRE pass, TargetData refactoring, N: Henrik Bach D: MingW Win32 API portability layer +N: Aaron Ballman +E: aaron@aaronballman.com +D: __declspec attributes, Windows support, general bug fixing + N: Nate Begeman E: natebegeman@mac.com D: PowerPC backend developer @@ -342,6 +346,10 @@ W: http://vladimir_prus.blogspot.com E: ghost@cs.msu.su D: Made inst_iterator behave like a proper iterator, LowerConstantExprs pass +N: Kalle Raiskila +E: kalle.rasikila@nokia.com +D: Some bugfixes to CellSPU + N: Xerxes Ranby E: xerxes@zafena.se D: Cmake dependency chain and various bug fixes Modified: vendor/llvm/dist/Makefile.common ============================================================================== --- vendor/llvm/dist/Makefile.common Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/Makefile.common Wed Aug 15 19:34:23 2012 (r239310) @@ -30,8 +30,7 @@ # # 4. Source - If specified, this sets the source code filenames. If this # is not set, it defaults to be all of the .cpp, .c, .y, and .l files -# in the current directory. Also, if you want to build files in addition -# to the local files, you can use the ExtraSource variable +# in the current directory. # # 5. SourceDir - If specified, this specifies a directory that the source files # are in, if they are not in the current directory. This should include a Modified: vendor/llvm/dist/Makefile.config.in ============================================================================== --- vendor/llvm/dist/Makefile.config.in Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/Makefile.config.in Wed Aug 15 19:34:23 2012 (r239310) @@ -112,6 +112,8 @@ HOST_OS=@HOST_OS@ # Target operating system for which LLVM will compile for. TARGET_OS=@TARGET_OS@ +# Host hardware architecture +HOST_ARCH=@HOST_ARCH@ # Target hardware architecture ARCH=@ARCH@ TARGET_NATIVE_ARCH := $(ARCH) @@ -189,8 +191,6 @@ GAS := @GAS@ POD2HTML := @POD2HTML@ POD2MAN := @POD2MAN@ PDFROFF := @PDFROFF@ -RUNTEST := @RUNTEST@ -TCLSH := @TCLSH@ ZIP := @ZIP@ HAVE_PTHREAD := @HAVE_PTHREAD@ @@ -218,6 +218,12 @@ RDYNAMIC := @RDYNAMIC@ #ENABLE_LIBCPP = 0 ENABLE_LIBCPP = @ENABLE_LIBCPP@ +# When ENABLE_CXX11 is enabled, LLVM uses c++11 mode by default to build. +ENABLE_CXX11 = @ENABLE_CXX11@ + +# When ENABLE_WERROR is enabled, we'll pass -Werror on the command line +ENABLE_WERROR = @ENABLE_WERROR@ + # When ENABLE_OPTIMIZED is enabled, LLVM code is optimized and output is put # into the "Release" directories. Otherwise, LLVM code is not optimized and # output is put in the "Debug" directories. @@ -344,6 +350,10 @@ LLVM_HAS_POLLY = @LLVM_HAS_POLLY@ # bfd ld / gold --version-script=file HAVE_LINK_VERSION_SCRIPT = @HAVE_LINK_VERSION_SCRIPT@ +# Flags to control using libxml2 +LIBXML2_LIBS := @LIBXML2_LIBS@ +LIBXML2_INC := @LIBXML2_INC@ + # Flags to control building support for Intel JIT Events API USE_INTEL_JITEVENTS := @USE_INTEL_JITEVENTS@ INTEL_JITEVENTS_INCDIR := @INTEL_JITEVENTS_INCDIR@ Modified: vendor/llvm/dist/Makefile.rules ============================================================================== --- vendor/llvm/dist/Makefile.rules Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/Makefile.rules Wed Aug 15 19:34:23 2012 (r239310) @@ -317,6 +317,15 @@ ifeq ($(ENABLE_LIBCPP),1) LD.Flags += -stdlib=libc++ endif +ifeq ($(ENABLE_CXX11),1) + CXX.Flags += -std=c++11 +endif + +ifeq ($(ENABLE_WERROR),1) + CXX.Flags += -Werror + C.Flags += -Werror +endif + ifeq ($(ENABLE_PROFILING),1) BuildMode := $(BuildMode)+Profile CXX.Flags := $(filter-out -fomit-frame-pointer,$(CXX.Flags)) -pg -g @@ -538,9 +547,6 @@ ifeq ($(LLVM_CROSS_COMPILING),1) else LLVM_CONFIG := $(LLVMToolDir)/llvm-config$(EXEEXT) endif -ifndef LLVMLD -LLVMLD := $(LLVMToolDir)/llvm-ld$(EXEEXT) -endif ifndef LLVMDIS LLVMDIS := $(LLVMToolDir)/llvm-dis$(EXEEXT) endif @@ -556,6 +562,9 @@ endif ifndef LBUGPOINT LBUGPOINT := $(LLVMToolDir)/bugpoint$(EXEEXT) endif +ifndef LLVMLINK +LLVMLINK := $(LLVMToolDir)/llvm-link$(EXEEXT) +endif #-------------------------------------------------------------------- # Adjust to user's request @@ -1134,14 +1143,14 @@ $(warning Modules require LLVM capable c else Module := $(LibDir)/$(MODULE_NAME).bc -LinkModule := $(LLVMLD) -r +LinkModule := $(LLVMLINK) ifdef EXPORTED_SYMBOL_FILE LinkModule += -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE) endif -$(Module): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(LLVMLD) +$(Module): $(BUILT_SOURCES) $(ObjectsBC) $(LibDir)/.dir $(LLVMLINK) $(Echo) Building $(BuildMode) Bytecode Module $(notdir $@) $(Verb) $(LinkModule) -o $@ $(ObjectsBC) @@ -1276,9 +1285,9 @@ else all-local:: $(LibName.BCA) ifdef EXPORTED_SYMBOL_FILE -BCLinkLib = $(LLVMLD) -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE) +BCLinkLib = $(LLVMLINK) -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE) -$(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir $(LLVMLD) \ +$(LibName.BCA): $(ObjectsBC) $(LibDir)/.dir $(LLVMLINK) \ $(LLVMToolDir)/llvm-ar $(Echo) Building $(BuildMode) Bytecode Archive $(notdir $@) \ "(internalize)" @@ -1964,20 +1973,9 @@ check:: $(EchoCmd) No test directory ; \ fi +# An alias dating from when both lit and DejaGNU test runners were used. check-lit:: check -check-dg:: - $(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \ - if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \ - $(EchoCmd) Running test suite ; \ - $(MAKE) -C $(PROJ_OBJ_ROOT)/test check-local-dg ; \ - else \ - $(EchoCmd) No Makefile in test directory ; \ - fi ; \ - else \ - $(EchoCmd) No test directory ; \ - fi - check-all:: $(Verb) if test -d "$(PROJ_OBJ_ROOT)/test" ; then \ if test -f "$(PROJ_OBJ_ROOT)/test/Makefile" ; then \ Modified: vendor/llvm/dist/README.txt ============================================================================== --- vendor/llvm/dist/README.txt Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/README.txt Wed Aug 15 19:34:23 2012 (r239310) @@ -1,4 +1,3 @@ - Low Level Virtual Machine (LLVM) ================================ Modified: vendor/llvm/dist/autoconf/config.guess ============================================================================== --- vendor/llvm/dist/autoconf/config.guess Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/autoconf/config.guess Wed Aug 15 19:34:23 2012 (r239310) @@ -206,6 +206,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; Modified: vendor/llvm/dist/autoconf/configure.ac ============================================================================== --- vendor/llvm/dist/autoconf/configure.ac Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/autoconf/configure.ac Wed Aug 15 19:34:23 2012 (r239310) @@ -31,9 +31,9 @@ dnl=== dnl===-----------------------------------------------------------------------=== dnl Initialize autoconf and define the package name, version number and dnl address for reporting bugs. -AC_INIT([LLVM],[3.1],[http://llvm.org/bugs/]) +AC_INIT([LLVM],[3.2svn],[http://llvm.org/bugs/]) AC_DEFINE([LLVM_VERSION_MAJOR], [3], [Major version of the LLVM API]) -AC_DEFINE([LLVM_VERSION_MINOR], [1], [Minor version of the LLVM API]) +AC_DEFINE([LLVM_VERSION_MINOR], [2], [Minor version of the LLVM API]) dnl Provide a copyright substitution and ensure the copyright notice is included dnl in the output of --version option of the generated configure script. @@ -369,7 +369,7 @@ AC_CACHE_CHECK([target architecture],[ll msp430-*) llvm_cv_target_arch="MSP430" ;; hexagon-*) llvm_cv_target_arch="Hexagon" ;; mblaze-*) llvm_cv_target_arch="MBlaze" ;; - ptx-*) llvm_cv_target_arch="PTX" ;; + nvptx-*) llvm_cv_target_arch="NVPTX" ;; *) llvm_cv_target_arch="Unknown" ;; esac]) @@ -387,6 +387,30 @@ esac dnl Define a substitution, ARCH, for the target architecture AC_SUBST(ARCH,$llvm_cv_target_arch) +dnl Determine what our host architecture. +dnl This will allow MCJIT regress tests runs only for supported +dnl platforms. +case $host in + i?86-*) host_arch="x86" ;; + amd64-* | x86_64-*) host_arch="x86_64" ;; + sparc*-*) host_arch="Sparc" ;; + powerpc*-*) host_arch="PowerPC" ;; + arm*-*) host_arch="ARM" ;; + mips-*) host_arch="Mips" ;; + mipsel-*) host_arch="Mips" ;; + xcore-*) host_arch="XCore" ;; + msp430-*) host_arch="MSP430" ;; + hexagon-*) host_arch="Hexagon" ;; + mblaze-*) host_arch="MBlaze" ;; + *) host_arch="Unknown" ;; +esac + +if test "$host_arch" = "Unknown" ; then + AC_MSG_WARN([Configuring LLVM for an unknown host archicture]) +fi + +AC_SUBST(HOST_ARCH,$host_arch) + dnl Check for the endianness of the target AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little])) @@ -439,6 +463,18 @@ case "$enableval" in *) AC_MSG_ERROR([Invalid setting for --enable-libcpp. Use "yes" or "no"]) ;; esac +dnl --enable-cxx11 : check whether or not to use -std=c++11 on the command line +AC_ARG_ENABLE(cxx11, + AS_HELP_STRING([--enable-cxx11], + [Use c++11 if available (default is NO)]),, + enableval=default) +case "$enableval" in + yes) AC_SUBST(ENABLE_CXX11,[1]) ;; + no) AC_SUBST(ENABLE_CXX11,[0]) ;; + default) AC_SUBST(ENABLE_CXX11,[0]);; + *) AC_MSG_ERROR([Invalid setting for --enable-cxx11. Use "yes" or "no"]) ;; +esac + dnl --enable-optimized : check whether they want to do an optimized build: AC_ARG_ENABLE(optimized, AS_HELP_STRING( --enable-optimized,[Compile with optimizations enabled (default is NO)]),,enableval=$optimize) @@ -466,6 +502,16 @@ else AC_SUBST(DISABLE_ASSERTIONS,[[DISABLE_ASSERTIONS=1]]) fi +dnl --enable-werror : check whether we want Werror on by default +AC_ARG_ENABLE(werror,AS_HELP_STRING( + --enable-werror,[Compile with -Werror enabled (default is NO)]),, enableval="no") +case "$enableval" in + yes) AC_SUBST(ENABLE_WERROR,[1]) ;; + no) AC_SUBST(ENABLE_WERROR,[0]) ;; + default) AC_SUBST(ENABLE_WERROR,[0]);; + *) AC_MSG_ERROR([Invalid setting for --enable-werror. Use "yes" or "no"]) ;; +esac + dnl --enable-expensive-checks : check whether they want to turn on expensive debug checks: AC_ARG_ENABLE(expensive-checks,AS_HELP_STRING( --enable-expensive-checks,[Compile with expensive debug checks enabled (default is NO)]),, enableval="no") @@ -516,7 +562,7 @@ else MSP430) AC_SUBST(TARGET_HAS_JIT,0) ;; Hexagon) AC_SUBST(TARGET_HAS_JIT,0) ;; MBlaze) AC_SUBST(TARGET_HAS_JIT,0) ;; - PTX) AC_SUBST(TARGET_HAS_JIT,0) ;; + NVPTX) AC_SUBST(TARGET_HAS_JIT,0) ;; *) AC_SUBST(TARGET_HAS_JIT,0) ;; esac fi @@ -621,20 +667,20 @@ case "$enableval" in *) AC_MSG_ERROR([Invalid setting for --enable-timestamps. Use "yes" or "no"]) ;; esac AC_DEFINE_UNQUOTED([ENABLE_TIMESTAMPS],$ENABLE_TIMESTAMPS, - [Define if timestamp information (e.g., __DATE___) is allowed]) + [Define if timestamp information (e.g., __DATE__) is allowed]) dnl Allow specific targets to be specified for building (or not) TARGETS_TO_BUILD="" AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets], [Build specific host targets: all or target1,target2,... Valid targets are: host, x86, x86_64, sparc, powerpc, arm, mips, spu, hexagon, - xcore, msp430, ptx, and cpp (default=all)]),, + xcore, msp430, nvptx, and cpp (default=all)]),, enableval=all) if test "$enableval" = host-only ; then enableval=host fi case "$enableval" in - all) TARGETS_TO_BUILD="X86 Sparc PowerPC ARM Mips CellSPU XCore MSP430 CppBackend MBlaze PTX Hexagon" ;; + all) TARGETS_TO_BUILD="X86 Sparc PowerPC ARM Mips CellSPU XCore MSP430 CppBackend MBlaze NVPTX Hexagon" ;; *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do case "$a_target" in x86) TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;; @@ -650,7 +696,7 @@ case "$enableval" in cpp) TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;; hexagon) TARGETS_TO_BUILD="Hexagon $TARGETS_TO_BUILD" ;; mblaze) TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;; - ptx) TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;; + nvptx) TARGETS_TO_BUILD="NVPTX $TARGETS_TO_BUILD" ;; host) case "$llvm_cv_target_arch" in x86) TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;; x86_64) TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;; @@ -663,7 +709,7 @@ case "$enableval" in XCore) TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;; MSP430) TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;; Hexagon) TARGETS_TO_BUILD="Hexagon $TARGETS_TO_BUILD" ;; - PTX) TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;; + NVPTX) TARGETS_TO_BUILD="NVPTX $TARGETS_TO_BUILD" ;; *) AC_MSG_ERROR([Can not set target to build]) ;; esac ;; *) AC_MSG_ERROR([Unrecognized target $a_target]) ;; @@ -671,6 +717,17 @@ case "$enableval" in done ;; esac + +AC_ARG_ENABLE([experimental-targets],AS_HELP_STRING([--enable-experimental-targets], + [Build experimental host targets: disable or target1,target2,... + (default=disable)]),, + enableval=disable) + +if test ${enableval} != "disable" +then + TARGETS_TO_BUILD="$enableval $TARGETS_TO_BUILD" +fi + AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD) dnl Determine whether we are building LLVM support for the native architecture. @@ -1024,11 +1081,7 @@ AC_PATH_PROG(CAT, [cat]) AC_PATH_PROG(DOXYGEN, [doxygen]) AC_PATH_PROG(GROFF, [groff]) AC_PATH_PROG(GZIPBIN, [gzip]) -AC_PATH_PROG(POD2HTML, [pod2html]) -AC_PATH_PROG(POD2MAN, [pod2man]) AC_PATH_PROG(PDFROFF, [pdfroff]) -AC_PATH_PROG(RUNTEST, [runtest]) -DJ_AC_PATH_TCLSH AC_PATH_PROG(ZIP, [zip]) AC_PATH_PROGS(OCAMLC, [ocamlc]) AC_PATH_PROGS(OCAMLOPT, [ocamlopt]) @@ -1260,6 +1313,23 @@ AC_ARG_WITH(intel-jitevents, AC_DEFINE_UNQUOTED([LLVM_USE_INTEL_JITEVENTS],$USE_INTEL_JITEVENTS, [Define if we have the Intel JIT API runtime support library]) +dnl Check for libxml2 +dnl Right now we're just checking for the existence, we could also check for a +dnl particular version via --version on xml2-config +AC_CHECK_PROGS(XML2CONFIG, xml2-config) + +AC_MSG_CHECKING(for libxml2 includes) +if test "x$XML2CONFIG" = "x"; then + AC_MSG_RESULT(xml2-config not found) +else + LIBXML2_INC=`$XML2CONFIG --cflags` + AC_MSG_RESULT($LIBXML2_INC) + AC_CHECK_LIB(xml2, xmlReadFile,[AC_DEFINE([CLANG_HAVE_LIBXML],1,[Define if we have libxml2]) + LIBXML2_LIBS="-lxml2"]) +fi +AC_SUBST(LIBXML2_LIBS) +AC_SUBST(LIBXML2_INC) + dnl===-----------------------------------------------------------------------=== dnl=== dnl=== SECTION 6: Check for header files @@ -1342,7 +1412,7 @@ AC_CHECK_FUNCS([powf fmodf strtof round AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ]) AC_CHECK_FUNCS([isatty mkdtemp mkstemp ]) AC_CHECK_FUNCS([mktemp posix_spawn pread realpath sbrk setrlimit strdup ]) -AC_CHECK_FUNCS([strerror strerror_r setenv ]) +AC_CHECK_FUNCS([strerror strerror_r setenv arc4random ]) AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ]) AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev]) AC_C_PRINTF_A @@ -1518,6 +1588,8 @@ AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_M [Installation directory for man pages]) AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME", [Time at which LLVM was configured]) +AC_DEFINE_UNQUOTED(LLVM_HOSTTRIPLE, "$host", + [Host triple LLVM will be executed on]) AC_DEFINE_UNQUOTED(LLVM_DEFAULT_TARGET_TRIPLE, "$target", [Target triple LLVM will generate code for by default]) Modified: vendor/llvm/dist/autoconf/ltmain.sh ============================================================================== --- vendor/llvm/dist/autoconf/ltmain.sh Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/autoconf/ltmain.sh Wed Aug 15 19:34:23 2012 (r239310) @@ -1560,7 +1560,7 @@ EOF # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; @@ -1580,7 +1580,7 @@ EOF esac elif test "X$arg" = "X-lc_r"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | -*-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -3464,7 +3464,7 @@ EOF *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) Modified: vendor/llvm/dist/autoconf/m4/func_isinf.m4 ============================================================================== --- vendor/llvm/dist/autoconf/m4/func_isinf.m4 Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/autoconf/m4/func_isinf.m4 Wed Aug 15 19:34:23 2012 (r239310) @@ -1,5 +1,5 @@ # -# This function determins if the the isinf function isavailable on this +# This function determins if the isinf function isavailable on this # platform. # AC_DEFUN([AC_FUNC_ISINF],[ Modified: vendor/llvm/dist/autoconf/m4/huge_val.m4 ============================================================================== --- vendor/llvm/dist/autoconf/m4/huge_val.m4 Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/autoconf/m4/huge_val.m4 Wed Aug 15 19:34:23 2012 (r239310) @@ -1,5 +1,5 @@ # -# This function determins if the the HUGE_VAL macro is compilable with the +# This function determins if the HUGE_VAL macro is compilable with the # -pedantic switch or not. XCode < 2.4.1 doesn't get it right. # AC_DEFUN([AC_HUGE_VAL_CHECK],[ Modified: vendor/llvm/dist/autoconf/m4/libtool.m4 ============================================================================== --- vendor/llvm/dist/autoconf/m4/libtool.m4 Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/autoconf/m4/libtool.m4 Wed Aug 15 19:34:23 2012 (r239310) @@ -176,7 +176,7 @@ old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in - openbsd*) + openbsd* | bitrig*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) @@ -729,7 +729,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [d lt_cv_sys_max_cmd_len=8192; ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + netbsd* | freebsd* | openbsd* | darwin* | dragonfly* | bitrig*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -1631,7 +1631,7 @@ nto-qnx*) shlibpath_overrides_runpath=yes ;; -openbsd*) +openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no @@ -3382,7 +3382,7 @@ case $host_os in # C++ shared libraries are fairly broken _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; - openbsd*) + openbsd* | bitrig*) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' @@ -6003,7 +6003,7 @@ _LT_EOF _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; - openbsd*) + openbsd* | bitrig*) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then Modified: vendor/llvm/dist/autoconf/m4/rand48.m4 ============================================================================== --- vendor/llvm/dist/autoconf/m4/rand48.m4 Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/autoconf/m4/rand48.m4 Wed Aug 15 19:34:23 2012 (r239310) @@ -1,5 +1,5 @@ # -# This function determins if the the srand48,drand48,lrand48 functions are +# This function determins if the srand48,drand48,lrand48 functions are # available on this platform. # AC_DEFUN([AC_FUNC_RAND48],[ Modified: vendor/llvm/dist/bindings/ocaml/bitreader/llvm_bitreader.mli ============================================================================== --- vendor/llvm/dist/bindings/ocaml/bitreader/llvm_bitreader.mli Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/bindings/ocaml/bitreader/llvm_bitreader.mli Wed Aug 15 19:34:23 2012 (r239310) @@ -23,7 +23,6 @@ val get_module : Llvm.llcontext -> Llvm. (** [parse_bitcode context mb] parses the bitcode for a new module [m] from the memory buffer [mb] in the context [context]. Returns [m] if successful, or - raises [Error msg] otherwise, where [msg] is a description of the error - encountered. See the function [llvm::ParseBitcodeFile]. *) + raises [Error msg] otherwise, where [msg] is a description of the error + encountered. See the function [llvm::ParseBitcodeFile]. *) val parse_bitcode : Llvm.llcontext -> Llvm.llmemorybuffer -> Llvm.llmodule - Modified: vendor/llvm/dist/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c ============================================================================== --- vendor/llvm/dist/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/bindings/ocaml/transforms/scalar/scalar_opts_ocaml.c Wed Aug 15 19:34:23 2012 (r239310) @@ -57,7 +57,7 @@ CAMLprim value llvm_add_scalar_repl_aggr /* [ int -> unit */ CAMLprim value llvm_add_scalar_repl_aggregation_with_threshold(value threshold, - LLVMPassManagerRef PM) { + LLVMPassManagerRef PM) { LLVMAddScalarReplAggregatesPassWithThreshold(PM, Int_val(threshold)); return Val_unit; } Modified: vendor/llvm/dist/cmake/config-ix.cmake ============================================================================== --- vendor/llvm/dist/cmake/config-ix.cmake Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/cmake/config-ix.cmake Wed Aug 15 19:34:23 2012 (r239310) @@ -91,6 +91,7 @@ if( NOT PURE_WINDOWS ) endif() # function checks +check_symbol_exists(arc4random "stdlib.h" HAVE_ARC4RANDOM) check_symbol_exists(getpagesize unistd.h HAVE_GETPAGESIZE) check_symbol_exists(getrusage sys/resource.h HAVE_GETRUSAGE) check_symbol_exists(setrlimit sys/resource.h HAVE_SETRLIMIT) @@ -240,6 +241,7 @@ llvm_find_program(fdp) llvm_find_program(dot) llvm_find_program(dotty) llvm_find_program(xdot.py) +llvm_find_program(Graphviz) if( LLVM_ENABLE_FFI ) find_path(FFI_INCLUDE_PATH ffi.h PATHS ${FFI_INCLUDE_DIR}) @@ -293,6 +295,7 @@ get_host_triple(LLVM_HOST_TRIPLE) # By default, we target the host, but this can be overridden at CMake # invocation time. set(LLVM_DEFAULT_TARGET_TRIPLE "${LLVM_HOST_TRIPLE}") +set(LLVM_HOSTTRIPLE "${LLVM_HOST_TRIPLE}") set(TARGET_TRIPLE "${LLVM_DEFAULT_TARGET_TRIPLE}") # Determine the native architecture. Modified: vendor/llvm/dist/cmake/modules/AddLLVM.cmake ============================================================================== --- vendor/llvm/dist/cmake/modules/AddLLVM.cmake Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/cmake/modules/AddLLVM.cmake Wed Aug 15 19:34:23 2012 (r239310) @@ -1,3 +1,4 @@ +include(LLVMParseArguments) include(LLVMProcessSources) include(LLVM-Config) @@ -65,8 +66,8 @@ ${name} ignored.") set_target_properties( ${name} PROPERTIES EXCLUDE_FROM_ALL ON) else() install(TARGETS ${name} - LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} - ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) + LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} + ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) endif() endif() @@ -82,7 +83,6 @@ macro(add_llvm_executable name) add_executable(${name} ${ALL_FILES}) endif() set(EXCLUDE_FROM_ALL OFF) - target_link_libraries( ${name} ${LLVM_USED_LIBS} ) llvm_config( ${name} ${LLVM_LINK_COMPONENTS} ) if( LLVM_COMMON_DEPENDS ) add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) @@ -130,3 +130,165 @@ macro(add_llvm_target target_name) add_llvm_library(LLVM${target_name} ${ARGN} ${TABLEGEN_OUTPUT}) set( CURRENT_LLVM_TARGET LLVM${target_name} ) endmacro(add_llvm_target) + +# Add external project that may want to be built as part of llvm such as Clang, +# lld, and Polly. This adds two options. One for the source directory of the +# project, which defaults to ${CMAKE_CURRENT_SOURCE_DIR}/${name}. Another to +# enable or disable building it with everthing else. +macro(add_llvm_external_project name) + string(TOUPPER ${name} nameUPPER) + set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}" + CACHE PATH "Path to ${name} source directory") + if (NOT ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR} STREQUAL "" + AND EXISTS ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}/CMakeLists.txt) + option(LLVM_EXTERNAL_${nameUPPER}_BUILD + "Whether to build ${name} as part of LLVM" ON) + if (LLVM_EXTERNAL_${nameUPPER}_BUILD) + add_subdirectory(${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR} ${name}) + endif() + endif() +endmacro(add_llvm_external_project) + +# Generic support for adding a unittest. +function(add_unittest test_suite test_name) + if (CMAKE_BUILD_TYPE) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}) + else() + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() + if( NOT LLVM_BUILD_TESTS ) + set(EXCLUDE_FROM_ALL ON) + endif() + + add_llvm_executable(${test_name} ${ARGN}) + target_link_libraries(${test_name} + gtest + gtest_main + LLVMSupport # gtest needs it for raw_ostream. + ) + + add_dependencies(${test_suite} ${test_name}) + get_target_property(test_suite_folder ${test_suite} FOLDER) + if (NOT ${test_suite_folder} STREQUAL "NOTFOUND") + set_property(TARGET ${test_name} PROPERTY FOLDER "${test_suite_folder}") + endif () + + # Visual Studio 2012 only supports up to 8 template parameters in + # std::tr1::tuple by default, but gtest requires 10 + if (MSVC AND MSVC_VERSION EQUAL 1700) + set_property(TARGET ${test_name} APPEND PROPERTY COMPILE_DEFINITIONS _VARIADIC_MAX=10) + endif () + + include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include) + set_property(TARGET ${test_name} APPEND PROPERTY COMPILE_DEFINITIONS GTEST_HAS_RTTI=0) + if (NOT LLVM_ENABLE_THREADS) + set_property(TARGET ${test_name} APPEND PROPERTY COMPILE_DEFINITIONS GTEST_HAS_PTHREAD=0) + endif () + + get_property(target_compile_flags TARGET ${test_name} PROPERTY COMPILE_FLAGS) + if (LLVM_COMPILER_IS_GCC_COMPATIBLE) + set(target_compile_flags "${target_compile_flags} -fno-rtti") + elseif (MSVC) + set(target_compile_flags "${target_compile_flags} /GR-") + endif () + + if (SUPPORTS_NO_VARIADIC_MACROS_FLAG) + set(target_compile_flags "${target_compile_flags} -Wno-variadic-macros") + endif () + set_property(TARGET ${test_name} PROPERTY COMPILE_FLAGS "${target_compile_flags}") +endfunction() + +# This function provides an automatic way to 'configure'-like generate a file +# based on a set of common and custom variables, specifically targetting the +# variables needed for the 'lit.site.cfg' files. This function bundles the +# common variables that any Lit instance is likely to need, and custom +# variables can be passed in. +function(configure_lit_site_cfg input output) + foreach(c ${LLVM_TARGETS_TO_BUILD}) + set(TARGETS_BUILT "${TARGETS_BUILT} ${c}") + endforeach(c) + set(TARGETS_TO_BUILD ${TARGETS_BUILT}) + + set(SHLIBEXT "${LTDL_SHLIB_EXT}") + set(SHLIBDIR "${LLVM_BINARY_DIR}/lib/${CMAKE_CFG_INTDIR}") + + if(BUILD_SHARED_LIBS) + set(LLVM_SHARED_LIBS_ENABLED "1") + else() + set(LLVM_SHARED_LIBS_ENABLED "0") + endif(BUILD_SHARED_LIBS) + + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(SHLIBPATH_VAR "DYLD_LIBRARY_PATH") + else() # Default for all other unix like systems. + # CMake hardcodes the library locaction using rpath. + # Therefore LD_LIBRARY_PATH is not required to run binaries in the + # build dir. We pass it anyways. + set(SHLIBPATH_VAR "LD_LIBRARY_PATH") + endif() + + # Configuration-time: See Unit/lit.site.cfg.in + set(LLVM_BUILD_MODE "%(build_mode)s") + + set(LLVM_SOURCE_DIR ${LLVM_MAIN_SRC_DIR}) + set(LLVM_BINARY_DIR ${LLVM_BINARY_DIR}) + set(LLVM_TOOLS_DIR "${LLVM_TOOLS_BINARY_DIR}/%(build_config)s") + set(LLVM_LIBS_DIR "${LLVM_BINARY_DIR}/lib/%(build_config)s") + set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE}) + set(ENABLE_SHARED ${LLVM_SHARED_LIBS_ENABLED}) + set(SHLIBPATH_VAR ${SHLIBPATH_VAR}) + + if(LLVM_ENABLE_ASSERTIONS AND NOT MSVC_IDE) + set(ENABLE_ASSERTIONS "1") + else() + set(ENABLE_ASSERTIONS "0") + endif() + + set(HOST_OS ${CMAKE_HOST_SYSTEM_NAME}) + set(HOST_ARCH ${CMAKE_HOST_SYSTEM_PROCESSOR}) + + configure_file(${input} ${output} @ONLY) +endfunction() + +# A raw function to create a lit target. This is used to implement the testuite +# management functions. +function(add_lit_target target comment) + parse_arguments(ARG "PARAMS;DEPENDS;ARGS" "" ${ARGN}) + set(LIT_ARGS "${ARG_ARGS} ${LLVM_LIT_ARGS}") + separate_arguments(LIT_ARGS) + set(LIT_COMMAND + ${PYTHON_EXECUTABLE} + ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py + --param build_config=${CMAKE_CFG_INTDIR} + --param build_mode=${RUNTIME_BUILD_MODE} + ${LIT_ARGS} + ) + foreach(param ${ARG_PARAMS}) + list(APPEND LIT_COMMAND --param ${param}) + endforeach() + add_custom_target(${target} + COMMAND ${LIT_COMMAND} ${ARG_DEFAULT_ARGS} + COMMENT "${comment}" + ) + add_dependencies(${target} ${ARG_DEPENDS}) +endfunction() + +# A function to add a set of lit test suites to be driven through 'check-*' targets. +function(add_lit_testsuite target comment) + parse_arguments(ARG "PARAMS;DEPENDS;ARGS" "" ${ARGN}) + + # Register the testsuites, params and depends for the global check rule. + set_property(GLOBAL APPEND PROPERTY LLVM_LIT_TESTSUITES ${ARG_DEFAULT_ARGS}) + set_property(GLOBAL APPEND PROPERTY LLVM_LIT_PARAMS ${ARG_PARAMS}) + set_property(GLOBAL APPEND PROPERTY LLVM_LIT_DEPENDS ${ARG_DEPENDS}) + set_property(GLOBAL APPEND PROPERTY LLVM_LIT_EXTRA_ARGS ${ARG_ARGS}) + + # Produce a specific suffixed check rule. + add_lit_target(${target} ${comment} + ${ARG_DEFAULT_ARGS} + PARAMS ${ARG_PARAMS} + DEPENDS ${ARG_DEPENDS} + ARGS ${ARG_ARGS} + ) +endfunction() Modified: vendor/llvm/dist/cmake/modules/HandleLLVMOptions.cmake ============================================================================== --- vendor/llvm/dist/cmake/modules/HandleLLVMOptions.cmake Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/cmake/modules/HandleLLVMOptions.cmake Wed Aug 15 19:34:23 2012 (r239310) @@ -105,8 +105,9 @@ if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT if( LLVM_BUILD_32_BITS ) message(STATUS "Building 32 bits executables and libraries.") add_llvm_definitions( -m32 ) - list(APPEND CMAKE_EXE_LINKER_FLAGS -m32) - list(APPEND CMAKE_SHARED_LINKER_FLAGS -m32) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -m32") endif( LLVM_BUILD_32_BITS ) endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 ) @@ -150,8 +151,11 @@ if( MSVC ) -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS + # Disabled warnings. + -wd4065 # Suppress 'switch statement contains 'default' but no 'case' labels' -wd4146 # Suppress 'unary minus operator applied to unsigned type, result still unsigned' -wd4180 # Suppress 'qualifier applied to function type has no meaning; ignored' + -wd4181 # Suppress 'qualifier applied to reference type; ignored' -wd4224 # Suppress 'nonstandard extension used : formal parameter 'identifier' was previously defined as a type' -wd4244 # Suppress ''argument' : conversion from 'type1' to 'type2', possible loss of data' -wd4267 # Suppress ''var' : conversion from 'size_t' to 'type', possible loss of data' @@ -165,14 +169,18 @@ if( MSVC ) -wd4624 # Suppress ''derived class' : destructor could not be generated because a base class destructor is inaccessible' -wd4715 # Suppress ''function' : not all control paths return a value' -wd4800 # Suppress ''type' : forcing value to bool 'true' or 'false' (performance warning)' - -wd4065 # Suppress 'switch statement contains 'default' but no 'case' labels' - -wd4181 # Suppress 'qualifier applied to reference type; ignored' - -w14062 # Promote "enumerator in switch of enum is not handled" to level 1 warning. + + # Promoted warnings. + -w14062 # Promote 'enumerator in switch of enum is not handled' to level 1 warning. + + # Promoted warnings to errors. + -we4238 # Promote 'nonstandard extension used : class rvalue used as lvalue' to error. + -we4239 # Promote 'nonstandard extension used : 'token' : conversion from 'type' to 'type'' to error. ) # Enable warnings if (LLVM_ENABLE_WARNINGS) - add_llvm_definitions( /W4 /Wall ) + add_llvm_definitions( /W4 ) if (LLVM_ENABLE_PEDANTIC) # No MSVC equivalent available endif (LLVM_ENABLE_PEDANTIC) Modified: vendor/llvm/dist/cmake/modules/LLVMConfig.cmake.in ============================================================================== --- vendor/llvm/dist/cmake/modules/LLVMConfig.cmake.in Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/cmake/modules/LLVMConfig.cmake.in Wed Aug 15 19:34:23 2012 (r239310) @@ -31,7 +31,7 @@ set(HAVE_LIBPTHREAD @HAVE_LIBPTHREAD@) set(LLVM_ON_UNIX @LLVM_ON_UNIX@) set(LLVM_ON_WIN32 @LLVM_ON_WIN32@) -set(LLVM_INSTALL_PREFIX @LLVM_INSTALL_PREFIX@) +set(LLVM_INSTALL_PREFIX "@LLVM_INSTALL_PREFIX@") set(LLVM_INCLUDE_DIRS ${LLVM_INSTALL_PREFIX}/include) set(LLVM_LIBRARY_DIRS ${LLVM_INSTALL_PREFIX}/lib) set(LLVM_DEFINITIONS "-D__STDC_LIMIT_MACROS" "-D__STDC_CONSTANT_MACROS") Modified: vendor/llvm/dist/cmake/modules/LLVMProcessSources.cmake ============================================================================== --- vendor/llvm/dist/cmake/modules/LLVMProcessSources.cmake Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/cmake/modules/LLVMProcessSources.cmake Wed Aug 15 19:34:23 2012 (r239310) @@ -29,7 +29,7 @@ endmacro(add_td_sources) macro(add_header_files srcs) - file(GLOB hds *.h *.def) + file(GLOB hds *.h) if( hds ) set_source_files_properties(${hds} PROPERTIES HEADER_FILE_ONLY ON) list(APPEND ${srcs} ${hds}) @@ -50,6 +50,7 @@ function(llvm_process_sources OUT_VAR) endforeach(s) if( MSVC_IDE ) # This adds .td and .h files to the Visual Studio solution: + # FIXME: Shall we handle *.def here? add_td_sources(sources) add_header_files(sources) endif() @@ -81,10 +82,13 @@ function(llvm_check_source_file_list) file(GLOB globbed *.cpp) foreach(g ${globbed}) get_filename_component(fn ${g} NAME) - list(FIND listed ${fn} idx) + list(FIND LLVM_OPTIONAL_SOURCES ${fn} idx) if( idx LESS 0 ) - message(SEND_ERROR "Found unknown source file ${g} + list(FIND listed ${fn} idx) + if( idx LESS 0 ) + message(SEND_ERROR "Found unknown source file ${g} Please update ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt\n") + endif() endif() endforeach() endfunction(llvm_check_source_file_list) Modified: vendor/llvm/dist/cmake/modules/TableGen.cmake ============================================================================== --- vendor/llvm/dist/cmake/modules/TableGen.cmake Wed Aug 15 18:37:01 2012 (r239309) +++ vendor/llvm/dist/cmake/modules/TableGen.cmake Wed Aug 15 19:34:23 2012 (r239310) @@ -50,7 +50,9 @@ function(add_public_tablegen_target targ if( TABLEGEN_OUTPUT ) add_custom_target(${target} DEPENDS ${TABLEGEN_OUTPUT}) - add_dependencies(${target} ${LLVM_COMMON_DEPENDS}) + if (LLVM_COMMON_DEPENDS) + add_dependencies(${target} ${LLVM_COMMON_DEPENDS}) + endif () set_target_properties(${target} PROPERTIES FOLDER "Tablegenning") endif( TABLEGEN_OUTPUT ) endfunction() Modified: vendor/llvm/dist/configure ============================================================================== --- vendor/llvm/dist/configure Wed Aug 15 18:37:01 2012 (r239309) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 19:59:14 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 72486106564A; Wed, 15 Aug 2012 19:59:14 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 440358FC08; Wed, 15 Aug 2012 19:59:14 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FJxE2a004397; Wed, 15 Aug 2012 19:59:14 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FJxEHC004396; Wed, 15 Aug 2012 19:59:14 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201208151959.q7FJxEHC004396@svn.freebsd.org> From: Dimitry Andric Date: Wed, 15 Aug 2012 19:59:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239311 - vendor/llvm/llvm-trunk-r161861 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 19:59:14 -0000 Author: dim Date: Wed Aug 15 19:59:13 2012 New Revision: 239311 URL: http://svn.freebsd.org/changeset/base/239311 Log: Tag llvm trunk r161861. Added: vendor/llvm/llvm-trunk-r161861/ - copied from r239310, vendor/llvm/dist/ From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 20:01:28 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CF7811065674; Wed, 15 Aug 2012 20:01:28 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AFBB38FC15; Wed, 15 Aug 2012 20:01:28 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FK1SOO004775; Wed, 15 Aug 2012 20:01:28 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FK1SUv004772; Wed, 15 Aug 2012 20:01:28 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208152001.q7FK1SUv004772@svn.freebsd.org> From: Adrian Chadd Date: Wed, 15 Aug 2012 20:01:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239312 - head/sys/net80211 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 20:01:28 -0000 Author: adrian Date: Wed Aug 15 20:01:28 2012 New Revision: 239312 URL: http://svn.freebsd.org/changeset/base/239312 Log: Don't call the node iteration function inside the node table / node iterate lock. This causes LORs and deadlocks as some code paths will have the com lock held when calling ieee80211_iterate_nodes(). Here, the comlock isn't held during the node table and node iteration locks; and the callback isn't called with any (extra) lock held. PR: kern/170098 Submitted by: moonlightakkiy@yahoo.ca MFC after: 4 weeks Modified: head/sys/net80211/ieee80211_node.c head/sys/net80211/ieee80211_node.h Modified: head/sys/net80211/ieee80211_node.c ============================================================================== --- head/sys/net80211/ieee80211_node.c Wed Aug 15 19:59:13 2012 (r239311) +++ head/sys/net80211/ieee80211_node.c Wed Aug 15 20:01:28 2012 (r239312) @@ -2156,30 +2156,124 @@ ieee80211_node_timeout(void *arg) ieee80211_node_timeout, ic); } -void -ieee80211_iterate_nodes(struct ieee80211_node_table *nt, - ieee80211_iter_func *f, void *arg) +/* + * Iterate over the node table and return an array of ref'ed nodes. + * + * This is separated out from calling the actual node function so that + * no LORs will occur. + * + * If there are too many nodes (ie, the number of nodes doesn't fit + * within 'max_aid' entries) then the node references will be freed + * and an error will be returned. + * + * The responsibility of allocating and freeing "ni_arr" is up to + * the caller. + */ +int +ieee80211_iterate_nt(struct ieee80211_node_table *nt, + struct ieee80211_node **ni_arr, uint16_t max_aid) { - struct ieee80211_node *ni; u_int gen; + int i, j, ret; + struct ieee80211_node *ni; IEEE80211_NODE_ITERATE_LOCK(nt); - gen = ++nt->nt_scangen; -restart: IEEE80211_NODE_LOCK(nt); + + gen = ++nt->nt_scangen; + i = ret = 0; + + /* + * We simply assume here that since the node + * scan generation doesn't change (as + * we are holding both the node table and + * node table iteration locks), we can simply + * assign it to the node here. + */ TAILQ_FOREACH(ni, &nt->nt_node, ni_list) { - if (ni->ni_scangen != gen) { - ni->ni_scangen = gen; - (void) ieee80211_ref_node(ni); - IEEE80211_NODE_UNLOCK(nt); - (*f)(arg, ni); - ieee80211_free_node(ni); - goto restart; + if (i >= max_aid) { + ret = E2BIG; + if_printf(nt->nt_ic->ic_ifp, + "Node array overflow: max=%u", max_aid); + break; } + ni_arr[i] = ieee80211_ref_node(ni); + ni_arr[i]->ni_scangen = gen; + i++; } - IEEE80211_NODE_UNLOCK(nt); + /* + * It's safe to unlock here. + * + * If we're successful, the list is returned. + * If we're unsuccessful, the list is ignored + * and we remove our references. + * + * This avoids any potential LOR with + * ieee80211_free_node(). + */ + IEEE80211_NODE_UNLOCK(nt); IEEE80211_NODE_ITERATE_UNLOCK(nt); + + /* + * If ret is non-zero, we hit some kind of error. + * Rather than walking some nodes, we'll walk none + * of them. + */ + if (ret) { + for (j = 0; j < i; j++) { + /* ieee80211_free_node() locks by itself */ + ieee80211_free_node(ni_arr[j]); + } + } + + return (ret); +} + +/* + * Just a wrapper, so we don't have to change every ieee80211_iterate_nodes() + * reference in the source. + * + * Note that this fetches 'max_aid' from the first VAP, rather than finding + * the largest max_aid from all VAPs. + */ +void +ieee80211_iterate_nodes(struct ieee80211_node_table *nt, + ieee80211_iter_func *f, void *arg) +{ + struct ieee80211_node **ni_arr; + unsigned long size; + int i; + uint16_t max_aid; + + max_aid = TAILQ_FIRST(&nt->nt_ic->ic_vaps)->iv_max_aid; + size = max_aid * sizeof(struct ieee80211_node *); + ni_arr = (struct ieee80211_node **) malloc(size, M_80211_NODE, + M_NOWAIT | M_ZERO); + if (ni_arr == NULL) + return; + + /* + * If this fails, the node table won't have any + * valid entries - ieee80211_iterate_nt() frees + * the references to them. So don't try walking + * the table; just skip to the end and free the + * temporary memory. + */ + if (!ieee80211_iterate_nt(nt, ni_arr, max_aid)) + goto done; + + for (i = 0; i < max_aid; i++) { + if (ni_arr[i] == NULL) /* end of the list */ + break; + + (*f)(arg, ni_arr[i]); + /* ieee80211_free_node() locks by itself */ + ieee80211_free_node(ni_arr[i]); + } + +done: + free(ni_arr, M_80211_NODE); } void Modified: head/sys/net80211/ieee80211_node.h ============================================================================== --- head/sys/net80211/ieee80211_node.h Wed Aug 15 19:59:13 2012 (r239311) +++ head/sys/net80211/ieee80211_node.h Wed Aug 15 20:01:28 2012 (r239312) @@ -438,6 +438,8 @@ int ieee80211_node_delucastkey(struct ie void ieee80211_node_timeout(void *arg); typedef void ieee80211_iter_func(void *, struct ieee80211_node *); +int ieee80211_iterate_nt(struct ieee80211_node_table *, + struct ieee80211_node **, uint16_t); void ieee80211_iterate_nodes(struct ieee80211_node_table *, ieee80211_iter_func *, void *); From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 20:02:57 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4DF61065673; Wed, 15 Aug 2012 20:02:57 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 97CA78FC14; Wed, 15 Aug 2012 20:02:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FK2vCC005025; Wed, 15 Aug 2012 20:02:57 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FK2vPB005019; Wed, 15 Aug 2012 20:02:57 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201208152002.q7FK2vPB005019@svn.freebsd.org> From: Dimitry Andric Date: Wed, 15 Aug 2012 20:02:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239313 - in vendor/clang/dist: . bindings/python/clang bindings/python/tests/cindex bindings/python/tests/cindex/INPUTS bindings/xml docs docs/tools examples examples/PrintFunctionName... X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 20:02:57 -0000 Author: dim Date: Wed Aug 15 20:02:54 2012 New Revision: 239313 URL: http://svn.freebsd.org/changeset/base/239313 Log: Vendor import of clang trunk r161861: http://llvm.org/svn/llvm-project/cfe/trunk@161861 Added: vendor/clang/dist/bindings/python/clang/enumerations.py vendor/clang/dist/bindings/python/tests/cindex/INPUTS/compile_commands.json vendor/clang/dist/bindings/python/tests/cindex/test_cdb.py vendor/clang/dist/bindings/python/tests/cindex/test_token_kind.py vendor/clang/dist/bindings/python/tests/cindex/test_tokens.py vendor/clang/dist/bindings/xml/ vendor/clang/dist/bindings/xml/comment-xml-schema.rng (contents, props changed) vendor/clang/dist/docs/ClangPlugins.html vendor/clang/dist/docs/ClangTools.html vendor/clang/dist/docs/HowToSetupToolingForLLVM.html vendor/clang/dist/docs/IntroductionToTheClangAST.html vendor/clang/dist/docs/JSONCompilationDatabase.html vendor/clang/dist/docs/LibTooling.html vendor/clang/dist/docs/RAVFrontendAction.html vendor/clang/dist/docs/ThreadSanitizer.html vendor/clang/dist/docs/Tooling.html vendor/clang/dist/include/clang-c/CXCompilationDatabase.h vendor/clang/dist/include/clang-c/CXString.h vendor/clang/dist/include/clang-c/Platform.h vendor/clang/dist/include/clang/AST/Comment.h vendor/clang/dist/include/clang/AST/CommentBriefParser.h vendor/clang/dist/include/clang/AST/CommentCommandTraits.h vendor/clang/dist/include/clang/AST/CommentDiagnostic.h vendor/clang/dist/include/clang/AST/CommentLexer.h vendor/clang/dist/include/clang/AST/CommentParser.h vendor/clang/dist/include/clang/AST/CommentSema.h vendor/clang/dist/include/clang/AST/CommentVisitor.h vendor/clang/dist/include/clang/AST/RawCommentList.h vendor/clang/dist/include/clang/ASTMatchers/ vendor/clang/dist/include/clang/ASTMatchers/ASTMatchFinder.h vendor/clang/dist/include/clang/ASTMatchers/ASTMatchers.h vendor/clang/dist/include/clang/ASTMatchers/ASTMatchersInternal.h vendor/clang/dist/include/clang/ASTMatchers/ASTMatchersMacros.h vendor/clang/dist/include/clang/Basic/BuiltinsMips.def vendor/clang/dist/include/clang/Basic/BuiltinsNVPTX.def vendor/clang/dist/include/clang/Basic/CommentNodes.td vendor/clang/dist/include/clang/Basic/DiagnosticCommentKinds.td vendor/clang/dist/include/clang/Basic/ObjCRuntime.h vendor/clang/dist/include/clang/Sema/CodeCompleteOptions.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h vendor/clang/dist/include/clang/Tooling/ArgumentsAdjusters.h vendor/clang/dist/include/clang/Tooling/CommandLineClangTool.h vendor/clang/dist/include/clang/Tooling/Refactoring.h vendor/clang/dist/include/clang/Tooling/RefactoringCallbacks.h vendor/clang/dist/lib/AST/Comment.cpp vendor/clang/dist/lib/AST/CommentBriefParser.cpp vendor/clang/dist/lib/AST/CommentCommandTraits.cpp vendor/clang/dist/lib/AST/CommentDumper.cpp vendor/clang/dist/lib/AST/CommentLexer.cpp vendor/clang/dist/lib/AST/CommentParser.cpp vendor/clang/dist/lib/AST/CommentSema.cpp vendor/clang/dist/lib/AST/RawCommentList.cpp vendor/clang/dist/lib/ASTMatchers/ vendor/clang/dist/lib/ASTMatchers/ASTMatchFinder.cpp vendor/clang/dist/lib/ASTMatchers/ASTMatchersInternal.cpp vendor/clang/dist/lib/ASTMatchers/CMakeLists.txt vendor/clang/dist/lib/ASTMatchers/Makefile vendor/clang/dist/lib/Basic/ConvertUTFWrapper.cpp vendor/clang/dist/lib/Basic/ObjCRuntime.cpp vendor/clang/dist/lib/Headers/ammintrin.h vendor/clang/dist/lib/Headers/fmaintrin.h vendor/clang/dist/lib/Headers/xopintrin.h vendor/clang/dist/lib/Rewrite/InclusionRewriter.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/DynamicTypePropagation.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/ExprInspectionChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/TraversalChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/APSIntType.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/CallEvent.cpp vendor/clang/dist/lib/Tooling/ArgumentsAdjusters.cpp vendor/clang/dist/lib/Tooling/CommandLineClangTool.cpp vendor/clang/dist/lib/Tooling/CustomCompilationDatabase.h vendor/clang/dist/lib/Tooling/Refactoring.cpp vendor/clang/dist/lib/Tooling/RefactoringCallbacks.cpp vendor/clang/dist/test/ARCMT/objcmt-boxing.m vendor/clang/dist/test/ARCMT/objcmt-boxing.m.result vendor/clang/dist/test/ARCMT/objcmt-subscripting-literals-in-arc.m vendor/clang/dist/test/ARCMT/objcmt-subscripting-literals-in-arc.m.result vendor/clang/dist/test/ARCMT/objcmt-subscripting-unavailable.m vendor/clang/dist/test/ARCMT/objcmt-subscripting-unavailable.m.result vendor/clang/dist/test/ARCMT/verify.m vendor/clang/dist/test/Analysis/PR12905.c vendor/clang/dist/test/Analysis/additive-folding.cpp vendor/clang/dist/test/Analysis/blocks-no-inline.c vendor/clang/dist/test/Analysis/comparison-implicit-casts.cpp vendor/clang/dist/test/Analysis/ctor-inlining.mm vendor/clang/dist/test/Analysis/cxx-for-range-cfg.cpp vendor/clang/dist/test/Analysis/cxx-method-names.cpp vendor/clang/dist/test/Analysis/cxx11-crashes.cpp vendor/clang/dist/test/Analysis/diagnostics/ vendor/clang/dist/test/Analysis/diagnostics/undef-value-callee.h vendor/clang/dist/test/Analysis/diagnostics/undef-value-caller.c vendor/clang/dist/test/Analysis/engine/ vendor/clang/dist/test/Analysis/engine/replay-without-inlining.c vendor/clang/dist/test/Analysis/inline.cpp vendor/clang/dist/test/Analysis/inlining/ vendor/clang/dist/test/Analysis/inlining/DynDispatchBifurcate.m vendor/clang/dist/test/Analysis/inlining/InlineObjCClassMethod.m vendor/clang/dist/test/Analysis/inlining/InlineObjCInstanceMethod.h vendor/clang/dist/test/Analysis/inlining/InlineObjCInstanceMethod.m vendor/clang/dist/test/Analysis/inlining/ObjCDynTypePopagation.m vendor/clang/dist/test/Analysis/inlining/ObjCImproperDynamictallyDetectableCast.m vendor/clang/dist/test/Analysis/inlining/RetainCountExamples.m vendor/clang/dist/test/Analysis/inlining/path-notes.c vendor/clang/dist/test/Analysis/ivars.m vendor/clang/dist/test/Analysis/method-call-path-notes.cpp vendor/clang/dist/test/Analysis/misc-ps-arm.m vendor/clang/dist/test/Analysis/nonnull.m vendor/clang/dist/test/Analysis/objc-boxing.m vendor/clang/dist/test/Analysis/objc-for.m vendor/clang/dist/test/Analysis/objc-subscript.m vendor/clang/dist/test/Analysis/region-store.c vendor/clang/dist/test/Analysis/svalbuilder-logic.c vendor/clang/dist/test/Analysis/templates.cpp vendor/clang/dist/test/Analysis/test-variably-modified-types.c vendor/clang/dist/test/Analysis/traversal-algorithm.mm vendor/clang/dist/test/Analysis/uninit-sometimes.cpp vendor/clang/dist/test/CXX/basic/basic.lookup/basic.lookup.classref/p1-cxx11.cpp vendor/clang/dist/test/CXX/basic/basic.lookup/basic.lookup.classref/p4-cxx11.cpp vendor/clang/dist/test/CXX/class.access/class.friend/p9-cxx0x.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.delete/ vendor/clang/dist/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.delete/p4.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3-0x.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp vendor/clang/dist/test/CXX/expr/expr.prim/expr.prim.lambda/blocks-irgen.mm vendor/clang/dist/test/CXX/expr/p10-0x.cpp vendor/clang/dist/test/CXX/special/class.conv/class.conv.ctor/p1.cpp vendor/clang/dist/test/CXX/special/class.copy/p23-cxx11.cpp vendor/clang/dist/test/CXX/temp/temp.names/p3-0x.cpp vendor/clang/dist/test/CodeCompletion/auto.cpp vendor/clang/dist/test/CodeCompletion/documentation.cpp vendor/clang/dist/test/CodeCompletion/objc-expr.m vendor/clang/dist/test/CodeGen/alloca.c vendor/clang/dist/test/CodeGen/attr-coldhot.c vendor/clang/dist/test/CodeGen/bounds-checking.c vendor/clang/dist/test/CodeGen/branch-target-layout.c vendor/clang/dist/test/CodeGen/builtins-mips-args.c vendor/clang/dist/test/CodeGen/builtins-mips.c vendor/clang/dist/test/CodeGen/builtins-nvptx.c vendor/clang/dist/test/CodeGen/debug-info-gline-tables-only.c vendor/clang/dist/test/CodeGen/debug-info-gline-tables-only2.c vendor/clang/dist/test/CodeGen/debug-info-vla.c vendor/clang/dist/test/CodeGen/fma-builtins.c vendor/clang/dist/test/CodeGen/forceinline.c vendor/clang/dist/test/CodeGen/fp-contract.c vendor/clang/dist/test/CodeGen/mips-byval-arg.c vendor/clang/dist/test/CodeGen/mips-vector-arg.c vendor/clang/dist/test/CodeGen/mips-vector-return.c vendor/clang/dist/test/CodeGen/ms-inline-asm.c vendor/clang/dist/test/CodeGen/nobuiltin.c vendor/clang/dist/test/CodeGen/nvptx-cc.c vendor/clang/dist/test/CodeGen/nvptx-inlineasm.c vendor/clang/dist/test/CodeGen/pclmul-builtins.c vendor/clang/dist/test/CodeGen/pr13168.c vendor/clang/dist/test/CodeGen/rdrand-builtins.c vendor/clang/dist/test/CodeGen/regparm-struct.c vendor/clang/dist/test/CodeGen/sse4a-builtins.c vendor/clang/dist/test/CodeGen/tls-model.c vendor/clang/dist/test/CodeGen/vector-alignment.c vendor/clang/dist/test/CodeGen/xop-builtins.c vendor/clang/dist/test/CodeGenCUDA/address-spaces.cu vendor/clang/dist/test/CodeGenCXX/cxx0x-initializer-constructors.cpp vendor/clang/dist/test/CodeGenCXX/cxx11-initializer-aggregate.cpp vendor/clang/dist/test/CodeGenCXX/cxx11-vtable-key-function.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-determinism.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-enum-class.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-flex-member.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-gline-tables-only.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-globalinit.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-rvalue-ref.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-template-array.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-template-quals.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-union.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-user-def.cpp vendor/clang/dist/test/CodeGenCXX/destructor-exception-spec.cpp vendor/clang/dist/test/CodeGenCXX/global-block-literal-helpers.cpp vendor/clang/dist/test/CodeGenCXX/mangle-ms-abi-examples.cpp vendor/clang/dist/test/CodeGenCXX/mangle-ms-back-references-pr13207.cpp vendor/clang/dist/test/CodeGenCXX/mangle-ms-back-references.cpp vendor/clang/dist/test/CodeGenCXX/mangle-ms-cxx11.cpp vendor/clang/dist/test/CodeGenCXX/mangle-ms-return-qualifiers.cpp vendor/clang/dist/test/CodeGenCXX/mangle-ms-templates.cpp vendor/clang/dist/test/CodeGenCXX/member-data-pointers.cpp vendor/clang/dist/test/CodeGenCXX/microsoft-abi-array-cookies.cpp vendor/clang/dist/test/CodeGenCXX/microsoft-abi-constructors.cpp vendor/clang/dist/test/CodeGenCXX/microsoft-abi-methods.cpp vendor/clang/dist/test/CodeGenCXX/microsoft-abi-static-initializers.cpp vendor/clang/dist/test/CodeGenCXX/ms_wide_predefined_expr.cpp vendor/clang/dist/test/CodeGenCXX/pr13396.cpp vendor/clang/dist/test/CodeGenCXX/throw-expression-cleanup.cpp vendor/clang/dist/test/CodeGenObjC/boxing.m vendor/clang/dist/test/CodeGenObjC/encode-test-6.m vendor/clang/dist/test/CodeGenObjC/getter-property-mismatch.m vendor/clang/dist/test/CodeGenObjC/getter-property-type-mismatch.m vendor/clang/dist/test/CodeGenObjC/layout-bitfield-crash.m vendor/clang/dist/test/CodeGenObjC/objfw.m vendor/clang/dist/test/CodeGenOpenCL/kernel-arg-info.cl vendor/clang/dist/test/CodeGenOpenCL/kernel-attributes.cl vendor/clang/dist/test/Driver/Inputs/basic_android_tree/ vendor/clang/dist/test/Driver/Inputs/basic_android_tree/usr/ vendor/clang/dist/test/Driver/Inputs/basic_android_tree/usr/lib/ vendor/clang/dist/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_dynamic.o vendor/clang/dist/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_so.o vendor/clang/dist/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_static.o vendor/clang/dist/test/Driver/Inputs/basic_android_tree/usr/lib/crtend_android.o vendor/clang/dist/test/Driver/Inputs/basic_android_tree/usr/lib/crtend_so.o vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/lib/mips-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/lib/mips-linux-gnu/.keep vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/lib/mipsel-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/lib/mipsel-linux-gnu/.keep vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/mips-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/mips-linux-gnu/.keep vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/mipsel-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/mipsel-linux-gnu/.keep vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/include/mips-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/include/mips-linux-gnu/.keep vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/include/mipsel-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/include/mipsel-linux-gnu/.keep vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mips-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mips-linux-gnu/4.5/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mips-linux-gnu/4.5/64/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mips-linux-gnu/4.5/64/crtbegin.o vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mips-linux-gnu/4.5/crtbegin.o vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mips-linux-gnu/4.5/n32/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mips-linux-gnu/4.5/n32/crtbegin.o vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mipsel-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mipsel-linux-gnu/4.5/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mipsel-linux-gnu/4.5/64/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mipsel-linux-gnu/4.5/64/crtbegin.o vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mipsel-linux-gnu/4.5/crtbegin.o vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mipsel-linux-gnu/4.5/n32/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/mipsel-linux-gnu/4.5/n32/crtbegin.o vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/mips-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/mips-linux-gnu/.keep vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/mipsel-linux-gnu/ vendor/clang/dist/test/Driver/Inputs/debian_multiarch_tree/usr/lib/mipsel-linux-gnu/.keep vendor/clang/dist/test/Driver/Inputs/montavista_i686_tree/ vendor/clang/dist/test/Driver/Inputs/montavista_i686_tree/usr/ vendor/clang/dist/test/Driver/Inputs/montavista_i686_tree/usr/lib/ vendor/clang/dist/test/Driver/Inputs/montavista_i686_tree/usr/lib/gcc/ vendor/clang/dist/test/Driver/Inputs/montavista_i686_tree/usr/lib/gcc/i686-montavista-linux/ vendor/clang/dist/test/Driver/Inputs/montavista_i686_tree/usr/lib/gcc/i686-montavista-linux/4.2.0/ vendor/clang/dist/test/Driver/Inputs/montavista_i686_tree/usr/lib/gcc/i686-montavista-linux/4.2.0/crtbegin.o vendor/clang/dist/test/Driver/Inputs/montavista_i686_tree/usr/lib/gcc/i686-montavista-linux/4.2.0/libgcc.a vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/.keep vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/arm-linux-gnueabi/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/arm-linux-gnueabi/.keep vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/arm-linux-gnueabihf/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/lib/arm-linux-gnueabihf/.keep vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/.keep vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/arm-linux-gnueabi/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/arm-linux-gnueabi/.keep vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/arm-linux-gnueabihf/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/include/arm-linux-gnueabihf/.keep vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/.keep vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabi/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabi/crt1.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabi/crti.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabi/crtn.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabihf/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabihf/crt1.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabihf/crti.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/arm-linux-gnueabihf/crtn.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabi/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabi/4.6.1/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabi/4.6.1/crtbegin.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabi/4.6.1/crtend.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabihf/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/ vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/crtbegin.o vendor/clang/dist/test/Driver/Inputs/ubuntu_12.04_LTS_multiarch_tree/usr/lib/gcc/arm-linux-gnueabihf/4.6.3/crtend.o vendor/clang/dist/test/Driver/asan-ld.c vendor/clang/dist/test/Driver/bounds-checking.c vendor/clang/dist/test/Driver/ccc-as-cpp.c vendor/clang/dist/test/Driver/clang_f_opts.h vendor/clang/dist/test/Driver/constructors.c vendor/clang/dist/test/Driver/crash-report.c vendor/clang/dist/test/Driver/debug-unsupported.c vendor/clang/dist/test/Driver/fpack-struct.c vendor/clang/dist/test/Driver/mips-features.c vendor/clang/dist/test/Driver/montavista-gcc-toolchain.c vendor/clang/dist/test/Driver/msvc_forward.c vendor/clang/dist/test/Driver/nodefaultlib.c vendor/clang/dist/test/Driver/target-triple-deployment.c vendor/clang/dist/test/Driver/warning-options.cpp vendor/clang/dist/test/Driver/warning-options_pedantic.cpp vendor/clang/dist/test/FixIt/fixit-autoreleasepool.m vendor/clang/dist/test/FixIt/fixit-include.c vendor/clang/dist/test/FixIt/fixit-include.h vendor/clang/dist/test/FixIt/fixit-interface-as-param.m vendor/clang/dist/test/FixIt/fixit-objc-message-comma-separator.m vendor/clang/dist/test/FixIt/fixit-unicode.c vendor/clang/dist/test/FixIt/format-no-fixit.m vendor/clang/dist/test/FixIt/format.m vendor/clang/dist/test/FixIt/messages.cpp vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/ vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/libs/ vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/libs/boost/ vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/libs/boost/all.h vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/libs/boost/warn.h vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/libs/mylib/ vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/libs/mylib/all.h vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/libs/mylib/warn.h vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/src/ vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/src/all.h vendor/clang/dist/test/Frontend/Inputs/SystemHeaderPrefix/src/warn.h vendor/clang/dist/test/Frontend/Inputs/rewrite-includes1.h vendor/clang/dist/test/Frontend/Inputs/rewrite-includes2.h vendor/clang/dist/test/Frontend/Inputs/rewrite-includes3.h vendor/clang/dist/test/Frontend/Inputs/rewrite-includes4.h vendor/clang/dist/test/Frontend/Inputs/rewrite-includes5.h vendor/clang/dist/test/Frontend/Inputs/rewrite-includes6.h vendor/clang/dist/test/Frontend/Inputs/rewrite-includes7.h vendor/clang/dist/test/Frontend/rewrite-includes-missing.c vendor/clang/dist/test/Frontend/rewrite-includes.c vendor/clang/dist/test/Frontend/system-header-prefix.c vendor/clang/dist/test/Frontend/verify-directive.h vendor/clang/dist/test/Frontend/verify-fatal.c vendor/clang/dist/test/Frontend/verify.c vendor/clang/dist/test/Frontend/verify2.c vendor/clang/dist/test/Frontend/verify2.h vendor/clang/dist/test/Headers/ms-null-ms-header-vs-stddef.cpp vendor/clang/dist/test/Index/Inputs/CommentXML/ vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-01.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-02.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-03.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-04.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-05.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-06.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-07.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-08.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-09.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-10.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-11.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/invalid-function-12.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-class-01.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-class-02.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-class-03.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-class-04.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-enum-01.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-01.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-02.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-03.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-04.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-05.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-06.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-07.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-08.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-09.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-function-10.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-namespace-01.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-other-01.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-typedef-01.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-typedef-02.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/CommentXML/valid-variable-01.xml (contents, props changed) vendor/clang/dist/test/Index/Inputs/annotate-comments-preprocessor.h vendor/clang/dist/test/Index/annotate-comments-preprocessor.c vendor/clang/dist/test/Index/annotate-comments-unterminated.c vendor/clang/dist/test/Index/annotate-comments.cpp vendor/clang/dist/test/Index/availability.c vendor/clang/dist/test/Index/boxed-exprs.h vendor/clang/dist/test/Index/boxed-exprs.m vendor/clang/dist/test/Index/comment-xml-schema.c vendor/clang/dist/test/Index/compile_commands.json vendor/clang/dist/test/Index/complete-documentation.cpp vendor/clang/dist/test/Index/complete-lambdas.mm vendor/clang/dist/test/Index/create-tu-fail.c vendor/clang/dist/test/Index/cursor-dynamic-call.mm vendor/clang/dist/test/Index/index-kernel-invocation.cpp vendor/clang/dist/test/Index/index-many-call-ops.cpp vendor/clang/dist/test/Index/index-refs.m vendor/clang/dist/test/Lexer/wchar-signedness.c vendor/clang/dist/test/Misc/ast-dump-wchar.cpp vendor/clang/dist/test/Misc/diag-template-diffing-color.cpp vendor/clang/dist/test/Misc/diag-template-diffing.cpp vendor/clang/dist/test/Misc/diag-trailing-null-bytes.cpp vendor/clang/dist/test/Misc/serialized-diags-frontend.c vendor/clang/dist/test/Misc/warning-flags-enabled.c vendor/clang/dist/test/Misc/warning-flags-tree.c vendor/clang/dist/test/Modules/Inputs/import-decl.h vendor/clang/dist/test/Modules/import-decl.cpp vendor/clang/dist/test/PCH/Inputs/__va_list_tag.h vendor/clang/dist/test/PCH/__va_list_tag.c vendor/clang/dist/test/PCH/badpch-dir.h.gch/ vendor/clang/dist/test/PCH/badpch-dir.h.gch/.keep vendor/clang/dist/test/PCH/badpch-empty.h.gch vendor/clang/dist/test/PCH/badpch.c vendor/clang/dist/test/PCH/chain-staticvar-instantiation.cpp vendor/clang/dist/test/PCH/empty-with-headers.c vendor/clang/dist/test/PCH/format-strings.c vendor/clang/dist/test/PCH/pch__VA_ARGS__.c vendor/clang/dist/test/PCH/pch__VA_ARGS__.h vendor/clang/dist/test/PCH/remap-file-from-pch.cpp vendor/clang/dist/test/PCH/remap-file-from-pch.cpp.h vendor/clang/dist/test/PCH/remap-file-from-pch.cpp.remap.h vendor/clang/dist/test/Parser/completely-empty-header-file.h vendor/clang/dist/test/Parser/cxx-extra-semi.cpp vendor/clang/dist/test/Parser/empty-translation-unit.c vendor/clang/dist/test/Parser/missing-selector-name.mm vendor/clang/dist/test/Parser/objc-boxing.m vendor/clang/dist/test/Parser/objc-diag-width.mm vendor/clang/dist/test/Parser/objc-recover.mm vendor/clang/dist/test/Preprocessor/disabled-cond-diags2.c vendor/clang/dist/test/Preprocessor/macro_paste_identifier_error.c vendor/clang/dist/test/Rewriter/objc-modern-StretAPI.mm vendor/clang/dist/test/Rewriter/objc-modern-boxing.mm vendor/clang/dist/test/Rewriter/objc-modern-getclass-proto.mm vendor/clang/dist/test/Rewriter/rewrite-modern-atautoreleasepool.mm vendor/clang/dist/test/Rewriter/rewrite-modern-block-consts.mm vendor/clang/dist/test/Rewriter/rewrite-modern-captured-nested-bvar.mm vendor/clang/dist/test/Rewriter/rewrite-modern-default-property-synthesis.mm vendor/clang/dist/test/Rewriter/rewrite-modern-ivar-access.mm vendor/clang/dist/test/Rewriter/rewrite-modern-private-ivars.mm vendor/clang/dist/test/Rewriter/rewrite-modern-struct-ivar-1.mm vendor/clang/dist/test/Sema/Inputs/format-unused-system-args.h vendor/clang/dist/test/Sema/alloc_size.c vendor/clang/dist/test/Sema/attr-coldhot.c vendor/clang/dist/test/Sema/attr-tls_model.c vendor/clang/dist/test/Sema/format-strings-enum-fixed-type.cpp vendor/clang/dist/test/Sema/format-strings-enum.c vendor/clang/dist/test/Sema/ms_wide_predefined_expr.cpp vendor/clang/dist/test/Sema/pragma-pack-6.c vendor/clang/dist/test/Sema/tls.c vendor/clang/dist/test/Sema/warn-documentation-almost-trailing.c vendor/clang/dist/test/Sema/warn-documentation-fixits.cpp vendor/clang/dist/test/Sema/warn-documentation.cpp vendor/clang/dist/test/Sema/warn-documentation.m vendor/clang/dist/test/Sema/warn-outof-range-assign-enum.c vendor/clang/dist/test/Sema/warn-self-assign-field.mm vendor/clang/dist/test/SemaCXX/MicrosoftCompatibilityNoExceptions.cpp vendor/clang/dist/test/SemaCXX/anonymous-union-cxx11.cpp vendor/clang/dist/test/SemaCXX/attr-visibility.cpp vendor/clang/dist/test/SemaCXX/constexpr-many-arguments.cpp vendor/clang/dist/test/SemaCXX/long-virtual-inheritance-chain.cpp vendor/clang/dist/test/SemaCXX/no-rtti.cpp vendor/clang/dist/test/SemaCXX/offsetof-0x.cpp vendor/clang/dist/test/SemaCXX/pr13353.cpp vendor/clang/dist/test/SemaCXX/pr13394-crash-on-invalid.cpp vendor/clang/dist/test/SemaCXX/printf-block.cpp vendor/clang/dist/test/SemaCXX/printf-cstr.cpp vendor/clang/dist/test/SemaCXX/switch-implicit-fallthrough-cxx98.cpp vendor/clang/dist/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp vendor/clang/dist/test/SemaCXX/switch-implicit-fallthrough.cpp vendor/clang/dist/test/SemaCXX/warn-loop-analysis.cpp vendor/clang/dist/test/SemaCXX/warn-static-function-inheader.cpp vendor/clang/dist/test/SemaCXX/warn-static-function-inheader.h vendor/clang/dist/test/SemaCXX/warn-unique-enum.cpp vendor/clang/dist/test/SemaCXX/warn-unused-private-field.cpp vendor/clang/dist/test/SemaObjC/arc-dict-bridged-cast.m vendor/clang/dist/test/SemaObjC/boxing-illegal-types.m vendor/clang/dist/test/SemaObjC/dealloc.m vendor/clang/dist/test/SemaObjC/delay-parsing-cfunctions.m vendor/clang/dist/test/SemaObjC/format-strings-system.h vendor/clang/dist/test/SemaObjC/getter-setter-defined-in-category-of-parent.m vendor/clang/dist/test/SemaObjC/iboutlet.m vendor/clang/dist/test/SemaObjC/mismatched-undefined-method.m vendor/clang/dist/test/SemaObjC/no-ivar-in-interface-block.m vendor/clang/dist/test/SemaObjC/nowarn-superclass-method-mismatch.m vendor/clang/dist/test/SemaObjC/objc-literal-comparison.m vendor/clang/dist/test/SemaObjC/tentative-property-decl.m vendor/clang/dist/test/SemaObjC/warn-direct-ivar-access.m vendor/clang/dist/test/SemaObjC/warn-isa-ref.m vendor/clang/dist/test/SemaObjC/warn-protocol-method-deprecated.m vendor/clang/dist/test/SemaObjC/warn-retain-block-property.m vendor/clang/dist/test/SemaObjCXX/boxing-illegal-types.mm vendor/clang/dist/test/SemaObjCXX/crash.mm vendor/clang/dist/test/SemaObjCXX/delay-parsing-cfunctions.mm vendor/clang/dist/test/SemaObjCXX/delay-parsing-cplusfuncs.mm vendor/clang/dist/test/SemaObjCXX/delay-parsing-func-tryblock.mm vendor/clang/dist/test/SemaObjCXX/foreach.mm vendor/clang/dist/test/SemaObjCXX/warn-missing-super.mm vendor/clang/dist/test/SemaOpenCL/storageclass.cl vendor/clang/dist/test/SemaOpenCL/warn-missing-prototypes.cl vendor/clang/dist/test/SemaTemplate/instantiation-depth-defarg.cpp vendor/clang/dist/test/SemaTemplate/instantiation-depth-subst-2.cpp vendor/clang/dist/test/SemaTemplate/instantiation-depth-subst.cpp vendor/clang/dist/test/Tooling/Inputs/ vendor/clang/dist/test/Tooling/Inputs/lit.local.cfg vendor/clang/dist/test/Tooling/Inputs/pch-fail.h vendor/clang/dist/test/Tooling/Inputs/pch.cpp vendor/clang/dist/test/Tooling/Inputs/pch.h vendor/clang/dist/test/Tooling/auto-detect-from-source-parent-of-cwd.cpp vendor/clang/dist/test/Tooling/auto-detect-from-source-parent.cpp vendor/clang/dist/test/Tooling/auto-detect-from-source.cpp vendor/clang/dist/test/Tooling/clang-check-ast-dump.cpp vendor/clang/dist/test/Tooling/clang-check-autodetect-dir.cpp vendor/clang/dist/test/Tooling/clang-check-builtin-headers.cpp vendor/clang/dist/test/Tooling/clang-check-chdir.cpp vendor/clang/dist/test/Tooling/multi-jobs.cpp vendor/clang/dist/test/Tooling/pch.cpp vendor/clang/dist/tools/diag-build/ vendor/clang/dist/tools/diag-build/diag-build.sh (contents, props changed) vendor/clang/dist/tools/diagtool/DiagnosticNames.cpp vendor/clang/dist/tools/diagtool/DiagnosticNames.h vendor/clang/dist/tools/diagtool/ShowEnabledWarnings.cpp vendor/clang/dist/tools/diagtool/TreeView.cpp vendor/clang/dist/tools/libclang/CXComment.cpp vendor/clang/dist/tools/libclang/CXComment.h vendor/clang/dist/tools/libclang/CXCompilationDatabase.cpp vendor/clang/dist/tools/libclang/RecursiveASTVisitor.h vendor/clang/dist/tools/scan-build/scan-build.1 vendor/clang/dist/unittests/AST/ vendor/clang/dist/unittests/AST/CMakeLists.txt vendor/clang/dist/unittests/AST/CommentLexer.cpp vendor/clang/dist/unittests/AST/CommentParser.cpp vendor/clang/dist/unittests/AST/Makefile vendor/clang/dist/unittests/ASTMatchers/ vendor/clang/dist/unittests/ASTMatchers/ASTMatchersTest.cpp vendor/clang/dist/unittests/ASTMatchers/ASTMatchersTest.h vendor/clang/dist/unittests/ASTMatchers/CMakeLists.txt vendor/clang/dist/unittests/ASTMatchers/Makefile vendor/clang/dist/unittests/Basic/CMakeLists.txt vendor/clang/dist/unittests/Frontend/CMakeLists.txt vendor/clang/dist/unittests/Lex/CMakeLists.txt vendor/clang/dist/unittests/Tooling/CMakeLists.txt vendor/clang/dist/unittests/Tooling/CommentHandlerTest.cpp vendor/clang/dist/unittests/Tooling/RecursiveASTVisitorTest.cpp vendor/clang/dist/unittests/Tooling/RefactoringCallbacksTest.cpp vendor/clang/dist/unittests/Tooling/RefactoringTest.cpp vendor/clang/dist/unittests/Tooling/RewriterTest.cpp vendor/clang/dist/unittests/Tooling/RewriterTestContext.h vendor/clang/dist/unittests/Tooling/TestVisitor.h vendor/clang/dist/utils/TableGen/TableGenBackends.h vendor/clang/dist/utils/analyzer/SumTimerInfo.py vendor/clang/dist/utils/analyzer/reducer.pl (contents, props changed) vendor/clang/dist/www/analyzer/faq.html vendor/clang/dist/www/analyzer/images/example_custom_assert.png (contents, props changed) vendor/clang/dist/www/analyzer/images/example_null_pointer.png (contents, props changed) vendor/clang/dist/www/analyzer/images/example_use_assert.png (contents, props changed) Deleted: vendor/clang/dist/include/clang/Basic/BuiltinsPTX.def vendor/clang/dist/include/clang/Driver/ObjCRuntime.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h vendor/clang/dist/lib/Driver/CC1Options.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/IteratorsChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/ObjCMessage.cpp vendor/clang/dist/test/Analysis/additive-folding.c vendor/clang/dist/test/Analysis/iterators.cpp vendor/clang/dist/test/CodeGen/2002-05-24-Alloca.c vendor/clang/dist/test/CodeGen/builtins-ptx.c vendor/clang/dist/test/CodeGen/ptx-cc.c vendor/clang/dist/test/CodeGenCXX/member-init-ctor.cpp vendor/clang/dist/test/CodeGenCXX/member-pointer-type-convert.cpp vendor/clang/dist/test/CodeGenCXX/virt-call-offsets.cpp vendor/clang/dist/test/Misc/wnull-character.cpp vendor/clang/dist/test/SemaObjC/arc-retain-block-property.m vendor/clang/dist/test/SemaObjC/id-isa-ref.m vendor/clang/dist/utils/TableGen/ClangASTNodesEmitter.h vendor/clang/dist/utils/TableGen/ClangAttrEmitter.h vendor/clang/dist/utils/TableGen/ClangDiagnosticsEmitter.h vendor/clang/dist/utils/TableGen/ClangSACheckersEmitter.h vendor/clang/dist/utils/TableGen/NeonEmitter.h vendor/clang/dist/utils/TableGen/OptParserEmitter.h Modified: vendor/clang/dist/.gitignore vendor/clang/dist/CMakeLists.txt vendor/clang/dist/bindings/python/clang/cindex.py vendor/clang/dist/bindings/python/tests/cindex/test_cursor.py vendor/clang/dist/bindings/python/tests/cindex/test_location.py vendor/clang/dist/bindings/python/tests/cindex/test_translation_unit.py vendor/clang/dist/bindings/python/tests/cindex/test_type.py vendor/clang/dist/bindings/python/tests/cindex/util.py vendor/clang/dist/docs/AddressSanitizer.html vendor/clang/dist/docs/AutomaticReferenceCounting.html vendor/clang/dist/docs/InternalsManual.html vendor/clang/dist/docs/LanguageExtensions.html vendor/clang/dist/docs/ObjectiveCLiterals.html vendor/clang/dist/docs/ReleaseNotes.html vendor/clang/dist/docs/UsersManual.html vendor/clang/dist/docs/tools/clang.pod vendor/clang/dist/examples/CMakeLists.txt vendor/clang/dist/examples/PrintFunctionNames/CMakeLists.txt vendor/clang/dist/examples/analyzer-plugin/CMakeLists.txt vendor/clang/dist/examples/clang-interpreter/CMakeLists.txt vendor/clang/dist/include/clang-c/Index.h vendor/clang/dist/include/clang/AST/ASTContext.h vendor/clang/dist/include/clang/AST/ASTImporter.h vendor/clang/dist/include/clang/AST/ASTVector.h vendor/clang/dist/include/clang/AST/Attr.h vendor/clang/dist/include/clang/AST/BaseSubobject.h vendor/clang/dist/include/clang/AST/CMakeLists.txt vendor/clang/dist/include/clang/AST/CXXInheritance.h vendor/clang/dist/include/clang/AST/Decl.h vendor/clang/dist/include/clang/AST/DeclBase.h vendor/clang/dist/include/clang/AST/DeclCXX.h vendor/clang/dist/include/clang/AST/DeclContextInternals.h vendor/clang/dist/include/clang/AST/DeclFriend.h vendor/clang/dist/include/clang/AST/DeclObjC.h vendor/clang/dist/include/clang/AST/DeclTemplate.h vendor/clang/dist/include/clang/AST/DeclarationName.h vendor/clang/dist/include/clang/AST/EvaluatedExprVisitor.h vendor/clang/dist/include/clang/AST/Expr.h vendor/clang/dist/include/clang/AST/ExprCXX.h vendor/clang/dist/include/clang/AST/ExprObjC.h vendor/clang/dist/include/clang/AST/ExternalASTSource.h vendor/clang/dist/include/clang/AST/Makefile vendor/clang/dist/include/clang/AST/Mangle.h vendor/clang/dist/include/clang/AST/NSAPI.h vendor/clang/dist/include/clang/AST/NestedNameSpecifier.h vendor/clang/dist/include/clang/AST/OperationKinds.h vendor/clang/dist/include/clang/AST/RecordLayout.h vendor/clang/dist/include/clang/AST/RecursiveASTVisitor.h vendor/clang/dist/include/clang/AST/Redeclarable.h vendor/clang/dist/include/clang/AST/Stmt.h vendor/clang/dist/include/clang/AST/StmtObjC.h vendor/clang/dist/include/clang/AST/TemplateBase.h vendor/clang/dist/include/clang/AST/Type.h vendor/clang/dist/include/clang/AST/TypeLoc.h vendor/clang/dist/include/clang/Analysis/Analyses/FormatString.h vendor/clang/dist/include/clang/Analysis/Analyses/ThreadSafety.h vendor/clang/dist/include/clang/Analysis/Analyses/UninitializedValues.h vendor/clang/dist/include/clang/Analysis/AnalysisContext.h vendor/clang/dist/include/clang/Analysis/CFG.h vendor/clang/dist/include/clang/Analysis/CallGraph.h vendor/clang/dist/include/clang/Analysis/ProgramPoint.h vendor/clang/dist/include/clang/Analysis/Visitors/CFGRecStmtDeclVisitor.h vendor/clang/dist/include/clang/Basic/ABI.h vendor/clang/dist/include/clang/Basic/AddressSpaces.h vendor/clang/dist/include/clang/Basic/AllDiagnostics.h vendor/clang/dist/include/clang/Basic/Attr.td vendor/clang/dist/include/clang/Basic/AttrKinds.h vendor/clang/dist/include/clang/Basic/Builtins.def vendor/clang/dist/include/clang/Basic/Builtins.h vendor/clang/dist/include/clang/Basic/BuiltinsHexagon.def vendor/clang/dist/include/clang/Basic/BuiltinsX86.def vendor/clang/dist/include/clang/Basic/CMakeLists.txt vendor/clang/dist/include/clang/Basic/ConvertUTF.h vendor/clang/dist/include/clang/Basic/Diagnostic.h vendor/clang/dist/include/clang/Basic/Diagnostic.td vendor/clang/dist/include/clang/Basic/DiagnosticCommonKinds.td vendor/clang/dist/include/clang/Basic/DiagnosticDriverKinds.td vendor/clang/dist/include/clang/Basic/DiagnosticFrontendKinds.td vendor/clang/dist/include/clang/Basic/DiagnosticGroups.td vendor/clang/dist/include/clang/Basic/DiagnosticIDs.h vendor/clang/dist/include/clang/Basic/DiagnosticLexKinds.td vendor/clang/dist/include/clang/Basic/DiagnosticParseKinds.td vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td vendor/clang/dist/include/clang/Basic/DiagnosticSerializationKinds.td vendor/clang/dist/include/clang/Basic/ExceptionSpecificationType.h vendor/clang/dist/include/clang/Basic/ExpressionTraits.h vendor/clang/dist/include/clang/Basic/FileManager.h vendor/clang/dist/include/clang/Basic/FileSystemOptions.h vendor/clang/dist/include/clang/Basic/FileSystemStatCache.h vendor/clang/dist/include/clang/Basic/IdentifierTable.h vendor/clang/dist/include/clang/Basic/LLVM.h vendor/clang/dist/include/clang/Basic/Lambda.h vendor/clang/dist/include/clang/Basic/LangOptions.def vendor/clang/dist/include/clang/Basic/LangOptions.h vendor/clang/dist/include/clang/Basic/Linkage.h vendor/clang/dist/include/clang/Basic/MacroBuilder.h vendor/clang/dist/include/clang/Basic/Makefile vendor/clang/dist/include/clang/Basic/Module.h vendor/clang/dist/include/clang/Basic/OnDiskHashTable.h vendor/clang/dist/include/clang/Basic/OpenCL.h vendor/clang/dist/include/clang/Basic/OperatorKinds.h vendor/clang/dist/include/clang/Basic/PartialDiagnostic.h vendor/clang/dist/include/clang/Basic/PrettyStackTrace.h vendor/clang/dist/include/clang/Basic/SourceLocation.h vendor/clang/dist/include/clang/Basic/SourceManager.h vendor/clang/dist/include/clang/Basic/SourceManagerInternals.h vendor/clang/dist/include/clang/Basic/Specifiers.h vendor/clang/dist/include/clang/Basic/StmtNodes.td vendor/clang/dist/include/clang/Basic/TargetBuiltins.h vendor/clang/dist/include/clang/Basic/TargetInfo.h vendor/clang/dist/include/clang/Basic/TargetOptions.h vendor/clang/dist/include/clang/Basic/TemplateKinds.h vendor/clang/dist/include/clang/Basic/TokenKinds.def vendor/clang/dist/include/clang/Basic/TokenKinds.h vendor/clang/dist/include/clang/Basic/TypeTraits.h vendor/clang/dist/include/clang/Basic/Version.h vendor/clang/dist/include/clang/Basic/VersionTuple.h vendor/clang/dist/include/clang/Basic/Visibility.h vendor/clang/dist/include/clang/Basic/arm_neon.td vendor/clang/dist/include/clang/Driver/Arg.h vendor/clang/dist/include/clang/Driver/ArgList.h vendor/clang/dist/include/clang/Driver/CC1Options.h vendor/clang/dist/include/clang/Driver/CC1Options.td vendor/clang/dist/include/clang/Driver/CMakeLists.txt vendor/clang/dist/include/clang/Driver/Compilation.h vendor/clang/dist/include/clang/Driver/Driver.h vendor/clang/dist/include/clang/Driver/Makefile vendor/clang/dist/include/clang/Driver/OptParser.td vendor/clang/dist/include/clang/Driver/OptTable.h vendor/clang/dist/include/clang/Driver/Option.h vendor/clang/dist/include/clang/Driver/Options.td vendor/clang/dist/include/clang/Driver/ToolChain.h vendor/clang/dist/include/clang/Driver/Types.def vendor/clang/dist/include/clang/Driver/Types.h vendor/clang/dist/include/clang/Frontend/ASTConsumers.h vendor/clang/dist/include/clang/Frontend/ASTUnit.h vendor/clang/dist/include/clang/Frontend/Analyses.def vendor/clang/dist/include/clang/Frontend/AnalyzerOptions.h vendor/clang/dist/include/clang/Frontend/CodeGenOptions.h vendor/clang/dist/include/clang/Frontend/CompilerInstance.h vendor/clang/dist/include/clang/Frontend/CompilerInvocation.h vendor/clang/dist/include/clang/Frontend/DiagnosticOptions.h vendor/clang/dist/include/clang/Frontend/DiagnosticRenderer.h vendor/clang/dist/include/clang/Frontend/FrontendAction.h vendor/clang/dist/include/clang/Frontend/FrontendActions.h vendor/clang/dist/include/clang/Frontend/FrontendOptions.h vendor/clang/dist/include/clang/Frontend/HeaderSearchOptions.h vendor/clang/dist/include/clang/Frontend/LangStandards.def vendor/clang/dist/include/clang/Frontend/PreprocessorOutputOptions.h vendor/clang/dist/include/clang/Frontend/TextDiagnostic.h vendor/clang/dist/include/clang/Frontend/TextDiagnosticPrinter.h vendor/clang/dist/include/clang/Frontend/VerifyDiagnosticConsumer.h vendor/clang/dist/include/clang/Lex/CodeCompletionHandler.h vendor/clang/dist/include/clang/Lex/DirectoryLookup.h vendor/clang/dist/include/clang/Lex/HeaderMap.h vendor/clang/dist/include/clang/Lex/HeaderSearch.h vendor/clang/dist/include/clang/Lex/Lexer.h vendor/clang/dist/include/clang/Lex/LiteralSupport.h vendor/clang/dist/include/clang/Lex/MacroInfo.h vendor/clang/dist/include/clang/Lex/ModuleMap.h vendor/clang/dist/include/clang/Lex/MultipleIncludeOpt.h vendor/clang/dist/include/clang/Lex/PPCallbacks.h vendor/clang/dist/include/clang/Lex/Pragma.h vendor/clang/dist/include/clang/Lex/PreprocessingRecord.h vendor/clang/dist/include/clang/Lex/Preprocessor.h vendor/clang/dist/include/clang/Lex/PreprocessorLexer.h vendor/clang/dist/include/clang/Lex/Token.h vendor/clang/dist/include/clang/Parse/Parser.h vendor/clang/dist/include/clang/Rewrite/FrontendActions.h vendor/clang/dist/include/clang/Rewrite/Rewriter.h vendor/clang/dist/include/clang/Rewrite/Rewriters.h vendor/clang/dist/include/clang/Rewrite/TokenRewriter.h vendor/clang/dist/include/clang/Sema/AttributeList.h vendor/clang/dist/include/clang/Sema/CodeCompleteConsumer.h vendor/clang/dist/include/clang/Sema/DeclSpec.h vendor/clang/dist/include/clang/Sema/DelayedDiagnostic.h vendor/clang/dist/include/clang/Sema/Designator.h vendor/clang/dist/include/clang/Sema/Initialization.h vendor/clang/dist/include/clang/Sema/Overload.h vendor/clang/dist/include/clang/Sema/ParsedTemplate.h vendor/clang/dist/include/clang/Sema/Scope.h vendor/clang/dist/include/clang/Sema/ScopeInfo.h vendor/clang/dist/include/clang/Sema/Sema.h vendor/clang/dist/include/clang/Sema/Template.h vendor/clang/dist/include/clang/Sema/TemplateDeduction.h vendor/clang/dist/include/clang/Sema/Weak.h vendor/clang/dist/include/clang/Serialization/ASTBitCodes.h vendor/clang/dist/include/clang/Serialization/ASTReader.h vendor/clang/dist/include/clang/Serialization/ASTWriter.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitor.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/Checker.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/CheckerManager.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/FunctionSummary.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h vendor/clang/dist/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h vendor/clang/dist/include/clang/Tooling/CompilationDatabase.h vendor/clang/dist/include/clang/Tooling/Tooling.h vendor/clang/dist/lib/ARCMigrate/ARCMT.cpp vendor/clang/dist/lib/ARCMigrate/CMakeLists.txt vendor/clang/dist/lib/ARCMigrate/FileRemapper.cpp vendor/clang/dist/lib/ARCMigrate/Internals.h vendor/clang/dist/lib/ARCMigrate/ObjCMT.cpp vendor/clang/dist/lib/ARCMigrate/TransAPIUses.cpp vendor/clang/dist/lib/ARCMigrate/TransARCAssign.cpp vendor/clang/dist/lib/ARCMigrate/TransAutoreleasePool.cpp vendor/clang/dist/lib/ARCMigrate/TransBlockObjCVariable.cpp vendor/clang/dist/lib/ARCMigrate/TransEmptyStatementsAndDealloc.cpp vendor/clang/dist/lib/ARCMigrate/TransGCAttrs.cpp vendor/clang/dist/lib/ARCMigrate/TransGCCalls.cpp vendor/clang/dist/lib/ARCMigrate/TransProperties.cpp vendor/clang/dist/lib/ARCMigrate/TransRetainReleaseDealloc.cpp vendor/clang/dist/lib/ARCMigrate/TransUnbridgedCasts.cpp vendor/clang/dist/lib/ARCMigrate/TransUnusedInitDelegate.cpp vendor/clang/dist/lib/ARCMigrate/TransZeroOutPropsInDealloc.cpp vendor/clang/dist/lib/ARCMigrate/TransformActions.cpp vendor/clang/dist/lib/ARCMigrate/Transforms.cpp vendor/clang/dist/lib/ARCMigrate/Transforms.h vendor/clang/dist/lib/AST/APValue.cpp vendor/clang/dist/lib/AST/ASTContext.cpp vendor/clang/dist/lib/AST/ASTDiagnostic.cpp vendor/clang/dist/lib/AST/ASTImporter.cpp vendor/clang/dist/lib/AST/CMakeLists.txt vendor/clang/dist/lib/AST/CXXABI.h vendor/clang/dist/lib/AST/CXXInheritance.cpp vendor/clang/dist/lib/AST/Decl.cpp vendor/clang/dist/lib/AST/DeclBase.cpp vendor/clang/dist/lib/AST/DeclCXX.cpp vendor/clang/dist/lib/AST/DeclFriend.cpp vendor/clang/dist/lib/AST/DeclObjC.cpp vendor/clang/dist/lib/AST/DeclPrinter.cpp vendor/clang/dist/lib/AST/DeclTemplate.cpp vendor/clang/dist/lib/AST/DeclarationName.cpp vendor/clang/dist/lib/AST/DumpXML.cpp vendor/clang/dist/lib/AST/Expr.cpp vendor/clang/dist/lib/AST/ExprCXX.cpp vendor/clang/dist/lib/AST/ExprClassification.cpp vendor/clang/dist/lib/AST/ExprConstant.cpp vendor/clang/dist/lib/AST/ItaniumCXXABI.cpp vendor/clang/dist/lib/AST/ItaniumMangle.cpp vendor/clang/dist/lib/AST/LambdaMangleContext.cpp vendor/clang/dist/lib/AST/Mangle.cpp vendor/clang/dist/lib/AST/MicrosoftCXXABI.cpp vendor/clang/dist/lib/AST/MicrosoftMangle.cpp vendor/clang/dist/lib/AST/NSAPI.cpp vendor/clang/dist/lib/AST/ParentMap.cpp vendor/clang/dist/lib/AST/RecordLayout.cpp vendor/clang/dist/lib/AST/RecordLayoutBuilder.cpp vendor/clang/dist/lib/AST/Stmt.cpp vendor/clang/dist/lib/AST/StmtDumper.cpp vendor/clang/dist/lib/AST/StmtPrinter.cpp vendor/clang/dist/lib/AST/StmtProfile.cpp vendor/clang/dist/lib/AST/TemplateBase.cpp vendor/clang/dist/lib/AST/Type.cpp vendor/clang/dist/lib/AST/TypeLoc.cpp vendor/clang/dist/lib/AST/TypePrinter.cpp vendor/clang/dist/lib/AST/VTTBuilder.cpp vendor/clang/dist/lib/AST/VTableBuilder.cpp vendor/clang/dist/lib/Analysis/AnalysisDeclContext.cpp vendor/clang/dist/lib/Analysis/CFG.cpp vendor/clang/dist/lib/Analysis/CMakeLists.txt vendor/clang/dist/lib/Analysis/CallGraph.cpp vendor/clang/dist/lib/Analysis/CocoaConventions.cpp vendor/clang/dist/lib/Analysis/FormatString.cpp vendor/clang/dist/lib/Analysis/LiveVariables.cpp vendor/clang/dist/lib/Analysis/PrintfFormatString.cpp vendor/clang/dist/lib/Analysis/ProgramPoint.cpp vendor/clang/dist/lib/Analysis/PseudoConstantAnalysis.cpp vendor/clang/dist/lib/Analysis/ScanfFormatString.cpp vendor/clang/dist/lib/Analysis/ThreadSafety.cpp vendor/clang/dist/lib/Analysis/UninitializedValues.cpp vendor/clang/dist/lib/Basic/CMakeLists.txt vendor/clang/dist/lib/Basic/ConvertUTF.c vendor/clang/dist/lib/Basic/Diagnostic.cpp vendor/clang/dist/lib/Basic/DiagnosticIDs.cpp vendor/clang/dist/lib/Basic/FileManager.cpp vendor/clang/dist/lib/Basic/IdentifierTable.cpp vendor/clang/dist/lib/Basic/SourceManager.cpp vendor/clang/dist/lib/Basic/TargetInfo.cpp vendor/clang/dist/lib/Basic/Targets.cpp vendor/clang/dist/lib/Basic/Version.cpp vendor/clang/dist/lib/Basic/VersionTuple.cpp vendor/clang/dist/lib/CMakeLists.txt vendor/clang/dist/lib/CodeGen/ABIInfo.h vendor/clang/dist/lib/CodeGen/BackendUtil.cpp vendor/clang/dist/lib/CodeGen/CGBlocks.cpp vendor/clang/dist/lib/CodeGen/CGBuilder.h vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp vendor/clang/dist/lib/CodeGen/CGCXX.cpp vendor/clang/dist/lib/CodeGen/CGCXXABI.cpp vendor/clang/dist/lib/CodeGen/CGCXXABI.h vendor/clang/dist/lib/CodeGen/CGCall.cpp vendor/clang/dist/lib/CodeGen/CGClass.cpp vendor/clang/dist/lib/CodeGen/CGCleanup.cpp vendor/clang/dist/lib/CodeGen/CGCleanup.h vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp vendor/clang/dist/lib/CodeGen/CGDebugInfo.h vendor/clang/dist/lib/CodeGen/CGDecl.cpp vendor/clang/dist/lib/CodeGen/CGDeclCXX.cpp vendor/clang/dist/lib/CodeGen/CGException.cpp vendor/clang/dist/lib/CodeGen/CGExpr.cpp vendor/clang/dist/lib/CodeGen/CGExprAgg.cpp vendor/clang/dist/lib/CodeGen/CGExprCXX.cpp vendor/clang/dist/lib/CodeGen/CGExprConstant.cpp vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp vendor/clang/dist/lib/CodeGen/CGObjC.cpp vendor/clang/dist/lib/CodeGen/CGObjCGNU.cpp vendor/clang/dist/lib/CodeGen/CGObjCMac.cpp vendor/clang/dist/lib/CodeGen/CGObjCRuntime.cpp vendor/clang/dist/lib/CodeGen/CGObjCRuntime.h vendor/clang/dist/lib/CodeGen/CGRTTI.cpp vendor/clang/dist/lib/CodeGen/CGRecordLayout.h vendor/clang/dist/lib/CodeGen/CGRecordLayoutBuilder.cpp vendor/clang/dist/lib/CodeGen/CGStmt.cpp vendor/clang/dist/lib/CodeGen/CGVTables.cpp vendor/clang/dist/lib/CodeGen/CGValue.h vendor/clang/dist/lib/CodeGen/CMakeLists.txt vendor/clang/dist/lib/CodeGen/CodeGenFunction.cpp vendor/clang/dist/lib/CodeGen/CodeGenFunction.h vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp vendor/clang/dist/lib/CodeGen/CodeGenModule.h vendor/clang/dist/lib/CodeGen/CodeGenTBAA.cpp vendor/clang/dist/lib/CodeGen/CodeGenTBAA.h vendor/clang/dist/lib/CodeGen/CodeGenTypes.cpp vendor/clang/dist/lib/CodeGen/CodeGenTypes.h vendor/clang/dist/lib/CodeGen/ItaniumCXXABI.cpp vendor/clang/dist/lib/CodeGen/MicrosoftCXXABI.cpp vendor/clang/dist/lib/CodeGen/TargetInfo.cpp vendor/clang/dist/lib/Driver/ArgList.cpp vendor/clang/dist/lib/Driver/CMakeLists.txt vendor/clang/dist/lib/Driver/Compilation.cpp vendor/clang/dist/lib/Driver/Driver.cpp vendor/clang/dist/lib/Driver/OptTable.cpp vendor/clang/dist/lib/Driver/ToolChain.cpp vendor/clang/dist/lib/Driver/ToolChains.cpp vendor/clang/dist/lib/Driver/ToolChains.h vendor/clang/dist/lib/Driver/Tools.cpp vendor/clang/dist/lib/Driver/Tools.h vendor/clang/dist/lib/Driver/Types.cpp vendor/clang/dist/lib/Edit/CMakeLists.txt vendor/clang/dist/lib/Edit/Commit.cpp vendor/clang/dist/lib/Edit/EditedSource.cpp vendor/clang/dist/lib/Edit/RewriteObjCFoundationAPI.cpp vendor/clang/dist/lib/Frontend/ASTConsumers.cpp vendor/clang/dist/lib/Frontend/ASTUnit.cpp vendor/clang/dist/lib/Frontend/CMakeLists.txt vendor/clang/dist/lib/Frontend/CompilerInstance.cpp vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp vendor/clang/dist/lib/Frontend/CreateInvocationFromCommandLine.cpp vendor/clang/dist/lib/Frontend/DiagnosticRenderer.cpp vendor/clang/dist/lib/Frontend/FrontendAction.cpp vendor/clang/dist/lib/Frontend/FrontendActions.cpp vendor/clang/dist/lib/Frontend/InitHeaderSearch.cpp vendor/clang/dist/lib/Frontend/InitPreprocessor.cpp vendor/clang/dist/lib/Frontend/LayoutOverrideSource.cpp vendor/clang/dist/lib/Frontend/PrintPreprocessedOutput.cpp vendor/clang/dist/lib/Frontend/SerializedDiagnosticPrinter.cpp vendor/clang/dist/lib/Frontend/TextDiagnostic.cpp vendor/clang/dist/lib/Frontend/TextDiagnosticPrinter.cpp vendor/clang/dist/lib/Frontend/VerifyDiagnosticConsumer.cpp vendor/clang/dist/lib/Frontend/Warnings.cpp vendor/clang/dist/lib/FrontendTool/CMakeLists.txt vendor/clang/dist/lib/FrontendTool/ExecuteCompilerInvocation.cpp vendor/clang/dist/lib/Headers/CMakeLists.txt vendor/clang/dist/lib/Headers/avx2intrin.h vendor/clang/dist/lib/Headers/bmiintrin.h vendor/clang/dist/lib/Headers/emmintrin.h vendor/clang/dist/lib/Headers/float.h vendor/clang/dist/lib/Headers/immintrin.h vendor/clang/dist/lib/Headers/stddef.h vendor/clang/dist/lib/Headers/wmmintrin.h vendor/clang/dist/lib/Headers/x86intrin.h vendor/clang/dist/lib/Lex/CMakeLists.txt vendor/clang/dist/lib/Lex/HeaderSearch.cpp vendor/clang/dist/lib/Lex/Lexer.cpp vendor/clang/dist/lib/Lex/LiteralSupport.cpp vendor/clang/dist/lib/Lex/PPDirectives.cpp vendor/clang/dist/lib/Lex/PPLexerChange.cpp vendor/clang/dist/lib/Lex/PPMacroExpansion.cpp vendor/clang/dist/lib/Lex/Pragma.cpp vendor/clang/dist/lib/Lex/PreprocessingRecord.cpp vendor/clang/dist/lib/Lex/Preprocessor.cpp vendor/clang/dist/lib/Lex/PreprocessorLexer.cpp vendor/clang/dist/lib/Lex/TokenConcatenation.cpp vendor/clang/dist/lib/Lex/TokenLexer.cpp vendor/clang/dist/lib/Makefile vendor/clang/dist/lib/Parse/CMakeLists.txt vendor/clang/dist/lib/Parse/ParseAST.cpp vendor/clang/dist/lib/Parse/ParseCXXInlineMethods.cpp vendor/clang/dist/lib/Parse/ParseDecl.cpp vendor/clang/dist/lib/Parse/ParseDeclCXX.cpp vendor/clang/dist/lib/Parse/ParseExpr.cpp vendor/clang/dist/lib/Parse/ParseExprCXX.cpp vendor/clang/dist/lib/Parse/ParseObjc.cpp vendor/clang/dist/lib/Parse/ParsePragma.h vendor/clang/dist/lib/Parse/ParseStmt.cpp vendor/clang/dist/lib/Parse/ParseTemplate.cpp vendor/clang/dist/lib/Parse/ParseTentative.cpp vendor/clang/dist/lib/Parse/Parser.cpp vendor/clang/dist/lib/Parse/RAIIObjectsForParser.h vendor/clang/dist/lib/Rewrite/CMakeLists.txt vendor/clang/dist/lib/Rewrite/FrontendActions.cpp vendor/clang/dist/lib/Rewrite/HTMLRewrite.cpp vendor/clang/dist/lib/Rewrite/RewriteModernObjC.cpp vendor/clang/dist/lib/Rewrite/RewriteObjC.cpp vendor/clang/dist/lib/Rewrite/Rewriter.cpp vendor/clang/dist/lib/Sema/AnalysisBasedWarnings.cpp vendor/clang/dist/lib/Sema/AttributeList.cpp vendor/clang/dist/lib/Sema/CMakeLists.txt vendor/clang/dist/lib/Sema/CodeCompleteConsumer.cpp vendor/clang/dist/lib/Sema/DeclSpec.cpp vendor/clang/dist/lib/Sema/Sema.cpp vendor/clang/dist/lib/Sema/SemaAccess.cpp vendor/clang/dist/lib/Sema/SemaCXXScopeSpec.cpp vendor/clang/dist/lib/Sema/SemaCast.cpp vendor/clang/dist/lib/Sema/SemaChecking.cpp vendor/clang/dist/lib/Sema/SemaCodeComplete.cpp vendor/clang/dist/lib/Sema/SemaDecl.cpp vendor/clang/dist/lib/Sema/SemaDeclAttr.cpp vendor/clang/dist/lib/Sema/SemaDeclCXX.cpp vendor/clang/dist/lib/Sema/SemaDeclObjC.cpp vendor/clang/dist/lib/Sema/SemaExceptionSpec.cpp vendor/clang/dist/lib/Sema/SemaExpr.cpp vendor/clang/dist/lib/Sema/SemaExprCXX.cpp vendor/clang/dist/lib/Sema/SemaExprMember.cpp vendor/clang/dist/lib/Sema/SemaExprObjC.cpp vendor/clang/dist/lib/Sema/SemaFixItUtils.cpp vendor/clang/dist/lib/Sema/SemaInit.cpp vendor/clang/dist/lib/Sema/SemaLambda.cpp vendor/clang/dist/lib/Sema/SemaLookup.cpp vendor/clang/dist/lib/Sema/SemaObjCProperty.cpp vendor/clang/dist/lib/Sema/SemaOverload.cpp vendor/clang/dist/lib/Sema/SemaPseudoObject.cpp vendor/clang/dist/lib/Sema/SemaStmt.cpp vendor/clang/dist/lib/Sema/SemaStmtAttr.cpp vendor/clang/dist/lib/Sema/SemaTemplate.cpp vendor/clang/dist/lib/Sema/SemaTemplateDeduction.cpp vendor/clang/dist/lib/Sema/SemaTemplateInstantiate.cpp vendor/clang/dist/lib/Sema/SemaTemplateInstantiateDecl.cpp vendor/clang/dist/lib/Sema/SemaTemplateVariadic.cpp vendor/clang/dist/lib/Sema/SemaType.cpp vendor/clang/dist/lib/Sema/TargetAttributesSema.cpp vendor/clang/dist/lib/Sema/TreeTransform.h vendor/clang/dist/lib/Serialization/ASTCommon.h vendor/clang/dist/lib/Serialization/ASTReader.cpp vendor/clang/dist/lib/Serialization/ASTReaderDecl.cpp vendor/clang/dist/lib/Serialization/ASTReaderStmt.cpp vendor/clang/dist/lib/Serialization/ASTWriter.cpp vendor/clang/dist/lib/Serialization/ASTWriterDecl.cpp vendor/clang/dist/lib/Serialization/ASTWriterStmt.cpp vendor/clang/dist/lib/Serialization/CMakeLists.txt vendor/clang/dist/lib/StaticAnalyzer/Checkers/AttrNonNullChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/CMakeLists.txt vendor/clang/dist/lib/StaticAnalyzer/Checkers/CStringChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/Checkers.td vendor/clang/dist/lib/StaticAnalyzer/Checkers/DereferenceChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/DivZeroChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/GenericTaintChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/IdempotentOperationChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/MallocChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/MallocSizeofChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/ObjCAtSyncChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/ObjCContainersChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/ObjCUnusedIVarsChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/ReturnUndefChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/StreamChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/UndefBranchChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/UndefCapturedBlockVarChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/UndefResultChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/UndefinedArraySubscriptChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/UndefinedAssignmentChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/VLASizeChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/AnalysisManager.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/BasicConstraintManager.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/BasicValueFactory.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/BugReporter.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/CMakeLists.txt vendor/clang/dist/lib/StaticAnalyzer/Core/CheckerManager.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/CoreEngine.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/Environment.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/ExplodedGraph.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/ExprEngine.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/ExprEngineC.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/ExprEngineObjC.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/MemRegion.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/PathDiagnostic.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/ProgramState.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/RegionStore.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/SValBuilder.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/SVals.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/SimpleConstraintManager.h vendor/clang/dist/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/Store.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/SymbolManager.cpp vendor/clang/dist/lib/StaticAnalyzer/Core/TextPathDiagnostics.cpp vendor/clang/dist/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp vendor/clang/dist/lib/StaticAnalyzer/Frontend/CMakeLists.txt vendor/clang/dist/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp vendor/clang/dist/lib/Tooling/CMakeLists.txt vendor/clang/dist/lib/Tooling/CompilationDatabase.cpp vendor/clang/dist/lib/Tooling/Tooling.cpp vendor/clang/dist/runtime/compiler-rt/Makefile vendor/clang/dist/test/ARCMT/Common.h vendor/clang/dist/test/ARCMT/autoreleases.m vendor/clang/dist/test/ARCMT/autoreleases.m.result vendor/clang/dist/test/ARCMT/checking.m vendor/clang/dist/test/ARCMT/cxx-rewrite.mm.result vendor/clang/dist/test/ARCMT/dispatch.m vendor/clang/dist/test/ARCMT/dispatch.m.result vendor/clang/dist/test/ARCMT/nonobjc-to-objc-cast-2.m vendor/clang/dist/test/ARCMT/nonobjc-to-objc-cast.m vendor/clang/dist/test/ARCMT/nonobjc-to-objc-cast.m.result vendor/clang/dist/test/ARCMT/objcmt-numeric-literals.m vendor/clang/dist/test/ARCMT/objcmt-numeric-literals.m.result vendor/clang/dist/test/ARCMT/objcmt-subscripting-literals.m vendor/clang/dist/test/ARCMT/objcmt-subscripting-literals.m.result vendor/clang/dist/test/ARCMT/releases-driver.m vendor/clang/dist/test/ARCMT/releases-driver.m.result vendor/clang/dist/test/ARCMT/releases.m vendor/clang/dist/test/ARCMT/releases.m.result vendor/clang/dist/test/ASTMerge/function.c vendor/clang/dist/test/Analysis/MissingDealloc.m vendor/clang/dist/test/Analysis/NoReturn.m vendor/clang/dist/test/Analysis/additive-folding-range-constraints.c vendor/clang/dist/test/Analysis/array-struct-region.c vendor/clang/dist/test/Analysis/auto-obj-dtors-cfg-output.cpp vendor/clang/dist/test/Analysis/base-init.cpp vendor/clang/dist/test/Analysis/blocks.m vendor/clang/dist/test/Analysis/bstring.c vendor/clang/dist/test/Analysis/casts.c vendor/clang/dist/test/Analysis/constant-folding.c vendor/clang/dist/test/Analysis/coverage.c vendor/clang/dist/test/Analysis/cstring-syntax.c vendor/clang/dist/test/Analysis/cxx-crashes.cpp vendor/clang/dist/test/Analysis/dead-stores.m vendor/clang/dist/test/Analysis/delegates.m vendor/clang/dist/test/Analysis/derived-to-base.cpp vendor/clang/dist/test/Analysis/domtest.c vendor/clang/dist/test/Analysis/dtor.cpp vendor/clang/dist/test/Analysis/dynamic-cast.cpp vendor/clang/dist/test/Analysis/global-region-invalidation.c vendor/clang/dist/test/Analysis/html-diags.c vendor/clang/dist/test/Analysis/initializer.cpp vendor/clang/dist/test/Analysis/initializers-cfg-output.cpp vendor/clang/dist/test/Analysis/inline-plist.c vendor/clang/dist/test/Analysis/inline-unique-reports.c vendor/clang/dist/test/Analysis/inline.c vendor/clang/dist/test/Analysis/malloc-annotations.c vendor/clang/dist/test/Analysis/malloc-plist.c vendor/clang/dist/test/Analysis/malloc-sizeof.c vendor/clang/dist/test/Analysis/malloc.c vendor/clang/dist/test/Analysis/malloc.cpp vendor/clang/dist/test/Analysis/malloc.m vendor/clang/dist/test/Analysis/malloc.mm vendor/clang/dist/test/Analysis/method-call.cpp vendor/clang/dist/test/Analysis/misc-ps-cxx0x.cpp vendor/clang/dist/test/Analysis/misc-ps-region-store.cpp vendor/clang/dist/test/Analysis/misc-ps-region-store.m vendor/clang/dist/test/Analysis/misc-ps.c vendor/clang/dist/test/Analysis/misc-ps.m vendor/clang/dist/test/Analysis/new.cpp vendor/clang/dist/test/Analysis/nullptr.cpp vendor/clang/dist/test/Analysis/operator-calls.cpp vendor/clang/dist/test/Analysis/out-of-bounds.c vendor/clang/dist/test/Analysis/outofbound-notwork.c vendor/clang/dist/test/Analysis/outofbound.c vendor/clang/dist/test/Analysis/plist-output-alternate.m vendor/clang/dist/test/Analysis/plist-output.m vendor/clang/dist/test/Analysis/ptr-arith.c vendor/clang/dist/test/Analysis/rdar-7168531.m vendor/clang/dist/test/Analysis/refcnt_naming.m vendor/clang/dist/test/Analysis/reference.cpp vendor/clang/dist/test/Analysis/retain-release-path-notes-gc.m vendor/clang/dist/test/Analysis/retain-release-path-notes.m vendor/clang/dist/test/Analysis/retain-release.m vendor/clang/dist/test/Analysis/self-init.m vendor/clang/dist/test/Analysis/stack-addr-ps.cpp vendor/clang/dist/test/Analysis/string-fail.c vendor/clang/dist/test/Analysis/string.c vendor/clang/dist/test/Analysis/system-header-simulator-objc.h vendor/clang/dist/test/Analysis/system-header-simulator.h vendor/clang/dist/test/Analysis/taint-generic.c vendor/clang/dist/test/Analysis/taint-tester.c vendor/clang/dist/test/Analysis/temp-obj-dtors-cfg-output.cpp vendor/clang/dist/test/Analysis/unused-ivars.m vendor/clang/dist/test/CMakeLists.txt vendor/clang/dist/test/CXX/basic/basic.types/p10.cpp vendor/clang/dist/test/CXX/class.access/class.friend/p1.cpp vendor/clang/dist/test/CXX/class.derived/class.virtual/p3-0x.cpp vendor/clang/dist/test/CXX/class/class.mem/p14.cpp vendor/clang/dist/test/CXX/class/class.union/p1.cpp vendor/clang/dist/test/CXX/class/p6-0x.cpp vendor/clang/dist/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp vendor/clang/dist/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3.cpp vendor/clang/dist/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5.cpp vendor/clang/dist/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp vendor/clang/dist/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.init/dcl.init.aggr/p1-0x.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp vendor/clang/dist/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p9-0x.cpp vendor/clang/dist/test/CXX/except/except.spec/p14.cpp vendor/clang/dist/test/CXX/except/except.spec/p5-pointers.cpp vendor/clang/dist/test/CXX/expr/expr.const/p2-0x.cpp vendor/clang/dist/test/CXX/expr/expr.post/expr.reinterpret.cast/p1-0x.cpp vendor/clang/dist/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.mm vendor/clang/dist/test/CXX/expr/expr.prim/expr.prim.lambda/p23.cpp vendor/clang/dist/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp vendor/clang/dist/test/CXX/expr/expr.unary/expr.unary.op/p6.cpp vendor/clang/dist/test/CXX/special/class.copy/implicit-move.cpp vendor/clang/dist/test/CXX/special/class.copy/p11.0x.copy.cpp vendor/clang/dist/test/CXX/special/class.copy/p13-0x.cpp vendor/clang/dist/test/CXX/special/class.copy/p15-inclass.cpp vendor/clang/dist/test/CXX/special/class.copy/p8-cxx11.cpp vendor/clang/dist/test/CXX/special/class.ctor/p5-0x.cpp vendor/clang/dist/test/CXX/special/class.ctor/p6-0x.cpp vendor/clang/dist/test/CXX/special/class.dtor/p5-0x.cpp vendor/clang/dist/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp vendor/clang/dist/test/CXX/temp/temp.decls/temp.friend/p1.cpp vendor/clang/dist/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp vendor/clang/dist/test/CXX/temp/temp.spec/p5.cpp vendor/clang/dist/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp vendor/clang/dist/test/CXX/temp/temp.spec/temp.expl.spec/p3.cpp vendor/clang/dist/test/CXX/temp/temp.spec/temp.explicit/p12.cpp vendor/clang/dist/test/CXX/temp/temp.spec/temp.explicit/p9-linkage.cpp vendor/clang/dist/test/CodeGen/2005-07-20-SqrtNoErrno.c vendor/clang/dist/test/CodeGen/2007-02-25-C-DotDotDot.c vendor/clang/dist/test/CodeGen/2008-01-25-ByValReadNone.c vendor/clang/dist/test/CodeGen/2008-03-05-syncPtr.c vendor/clang/dist/test/CodeGen/2008-04-08-NoExceptions.c vendor/clang/dist/test/CodeGen/2009-02-13-zerosize-union-field-ppc.c vendor/clang/dist/test/CodeGen/2009-09-24-SqrtErrno.c vendor/clang/dist/test/CodeGen/2009-10-20-GlobalDebug.c vendor/clang/dist/test/CodeGen/2010-02-10-PointerName.c vendor/clang/dist/test/CodeGen/2010-05-26-AsmSideEffect.c vendor/clang/dist/test/CodeGen/Atomics.c vendor/clang/dist/test/CodeGen/address-safety-attr.cpp vendor/clang/dist/test/CodeGen/address-space.c vendor/clang/dist/test/CodeGen/altivec.c vendor/clang/dist/test/CodeGen/annotations-builtin.c vendor/clang/dist/test/CodeGen/arm-aapcs-vfp.c vendor/clang/dist/test/CodeGen/arm-aapcs-zerolength-bitfield.c vendor/clang/dist/test/CodeGen/arm-apcs-zerolength-bitfield.c vendor/clang/dist/test/CodeGen/arm-arguments.c vendor/clang/dist/test/CodeGen/arm-asm-variable.c vendor/clang/dist/test/CodeGen/arm-asm.c vendor/clang/dist/test/CodeGen/arm-cc.c vendor/clang/dist/test/CodeGen/arm-clear.c vendor/clang/dist/test/CodeGen/arm-homogenous.c vendor/clang/dist/test/CodeGen/arm-inline-asm.c vendor/clang/dist/test/CodeGen/arm-pcs.c vendor/clang/dist/test/CodeGen/arm-vaarg-align.c vendor/clang/dist/test/CodeGen/arm-vector-align.c vendor/clang/dist/test/CodeGen/arm-vector-arguments.c vendor/clang/dist/test/CodeGen/asm.c vendor/clang/dist/test/CodeGen/asm_arm.c vendor/clang/dist/test/CodeGen/atomic_ops.c vendor/clang/dist/test/CodeGen/attributes.c vendor/clang/dist/test/CodeGen/avx-builtins.c vendor/clang/dist/test/CodeGen/avx2-builtins.c vendor/clang/dist/test/CodeGen/block-3.c vendor/clang/dist/test/CodeGen/block-byref-aggr.c vendor/clang/dist/test/CodeGen/blocks.c vendor/clang/dist/test/CodeGen/blocksignature.c vendor/clang/dist/test/CodeGen/blockwithlocalstatic.c vendor/clang/dist/test/CodeGen/bmi-builtins.c vendor/clang/dist/test/CodeGen/bool_test.c vendor/clang/dist/test/CodeGen/builtin-attributes.c vendor/clang/dist/test/CodeGen/builtins-arm.c vendor/clang/dist/test/CodeGen/builtins-ppc-altivec.c vendor/clang/dist/test/CodeGen/builtins-x86.c vendor/clang/dist/test/CodeGen/builtins.c vendor/clang/dist/test/CodeGen/capture-complex-expr-in-block.c vendor/clang/dist/test/CodeGen/catch-undef-behavior.c vendor/clang/dist/test/CodeGen/compound-literal.c vendor/clang/dist/test/CodeGen/debug-info-line2.c vendor/clang/dist/test/CodeGen/debug-info-line3.c vendor/clang/dist/test/CodeGen/debug-line-1.c vendor/clang/dist/test/CodeGen/fma4-builtins.c vendor/clang/dist/test/CodeGen/fp16-ops.c vendor/clang/dist/test/CodeGen/func-aligned.c vendor/clang/dist/test/CodeGen/func-in-block.c vendor/clang/dist/test/CodeGen/func-return-member.c vendor/clang/dist/test/CodeGen/incomplete-function-type.c vendor/clang/dist/test/CodeGen/integer-overflow.c vendor/clang/dist/test/CodeGen/libcalls.c vendor/clang/dist/test/CodeGen/mips64-class-return.cpp vendor/clang/dist/test/CodeGen/ms-declspecs.c vendor/clang/dist/test/CodeGen/no-common.c vendor/clang/dist/test/CodeGen/object-size.c vendor/clang/dist/test/CodeGen/packed-nest-unpacked.c vendor/clang/dist/test/CodeGen/powerpc_types.c vendor/clang/dist/test/CodeGen/pr12251.c vendor/clang/dist/test/CodeGen/pr5406.c vendor/clang/dist/test/CodeGen/pragma-visibility.c vendor/clang/dist/test/CodeGen/regparm-flag.c vendor/clang/dist/test/CodeGen/sse-builtins.c vendor/clang/dist/test/CodeGen/struct-init.c vendor/clang/dist/test/CodeGen/struct-matching-constraint.c vendor/clang/dist/test/CodeGen/tbaa-for-vptr.cpp vendor/clang/dist/test/CodeGen/thread-specifier.c vendor/clang/dist/test/CodeGen/varargs.c vendor/clang/dist/test/CodeGen/vla.c vendor/clang/dist/test/CodeGen/vld_dup.c vendor/clang/dist/test/CodeGen/x86_32-arguments-darwin.c vendor/clang/dist/test/CodeGenCUDA/ptx-kernels.cu vendor/clang/dist/test/CodeGenCXX/anonymous-union-member-initializer.cpp vendor/clang/dist/test/CodeGenCXX/block-in-ctor-dtor.cpp vendor/clang/dist/test/CodeGenCXX/blocks.cpp vendor/clang/dist/test/CodeGenCXX/class-layout.cpp vendor/clang/dist/test/CodeGenCXX/const-init-cxx11.cpp vendor/clang/dist/test/CodeGenCXX/constructor-init.cpp vendor/clang/dist/test/CodeGenCXX/cxx0x-delegating-ctors.cpp vendor/clang/dist/test/CodeGenCXX/cxx0x-initializer-references.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-artificial-arg.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-cxx0x.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-fwd-ref.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-nullptr.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-static-fns.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-template-limit.cpp vendor/clang/dist/test/CodeGenCXX/debug-info-template-member.cpp vendor/clang/dist/test/CodeGenCXX/debug-lambda-expressions.cpp vendor/clang/dist/test/CodeGenCXX/derived-to-base-conv.cpp vendor/clang/dist/test/CodeGenCXX/destructor-debug-info.cpp vendor/clang/dist/test/CodeGenCXX/destructors.cpp vendor/clang/dist/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp vendor/clang/dist/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp vendor/clang/dist/test/CodeGenCXX/dynamic-cast-always-null.cpp vendor/clang/dist/test/CodeGenCXX/exceptions.cpp vendor/clang/dist/test/CodeGenCXX/global-array-destruction.cpp vendor/clang/dist/test/CodeGenCXX/global-init.cpp vendor/clang/dist/test/CodeGenCXX/inline-functions.cpp vendor/clang/dist/test/CodeGenCXX/lambda-expressions.cpp vendor/clang/dist/test/CodeGenCXX/mangle-lambdas.cpp vendor/clang/dist/test/CodeGenCXX/mangle-ms.cpp vendor/clang/dist/test/CodeGenCXX/mangle-ref-qualifiers.cpp vendor/clang/dist/test/CodeGenCXX/member-function-pointers.cpp vendor/clang/dist/test/CodeGenCXX/member-init-anon-union.cpp vendor/clang/dist/test/CodeGenCXX/pointers-to-data-members.cpp vendor/clang/dist/test/CodeGenCXX/pragma-visibility.cpp vendor/clang/dist/test/CodeGenCXX/rvalue-references.cpp vendor/clang/dist/test/CodeGenCXX/template-instantiation.cpp vendor/clang/dist/test/CodeGenCXX/virt-template-vtable.cpp vendor/clang/dist/test/CodeGenCXX/virtual-destructor-calls.cpp vendor/clang/dist/test/CodeGenCXX/visibility-inlines-hidden.cpp vendor/clang/dist/test/CodeGenCXX/visibility.cpp vendor/clang/dist/test/CodeGenObjC/2008-11-12-Metadata.m vendor/clang/dist/test/CodeGenObjC/2008-11-24-ConstCFStrings.m vendor/clang/dist/test/CodeGenObjC/2010-03-17-StructRef.m vendor/clang/dist/test/CodeGenObjC/arc-blocks.m vendor/clang/dist/test/CodeGenObjC/arc.m vendor/clang/dist/test/CodeGenObjC/assign.m vendor/clang/dist/test/CodeGenObjC/autorelease.m vendor/clang/dist/test/CodeGenObjC/bitfield-1.m vendor/clang/dist/test/CodeGenObjC/bitfield-access.m vendor/clang/dist/test/CodeGenObjC/bitfield-gnu.m vendor/clang/dist/test/CodeGenObjC/bitfield_encoding.m vendor/clang/dist/test/CodeGenObjC/block-6.m vendor/clang/dist/test/CodeGenObjC/block-var-layout.m vendor/clang/dist/test/CodeGenObjC/blocks-1.m vendor/clang/dist/test/CodeGenObjC/blocks-2.m vendor/clang/dist/test/CodeGenObjC/blocks-3.m vendor/clang/dist/test/CodeGenObjC/blocks-4.m vendor/clang/dist/test/CodeGenObjC/blocks-5.m vendor/clang/dist/test/CodeGenObjC/blocks.m vendor/clang/dist/test/CodeGenObjC/builtins.m vendor/clang/dist/test/CodeGenObjC/category-class.m vendor/clang/dist/test/CodeGenObjC/class-type.m vendor/clang/dist/test/CodeGenObjC/constant-string-class.m vendor/clang/dist/test/CodeGenObjC/constant-strings.m vendor/clang/dist/test/CodeGenObjC/deadcode_strip_used_var.m vendor/clang/dist/test/CodeGenObjC/debug-info-block-helper.m vendor/clang/dist/test/CodeGenObjC/debug-info-crash.m vendor/clang/dist/test/CodeGenObjC/debug-info-static-var.m vendor/clang/dist/test/CodeGenObjC/debug-info-synthesis.m vendor/clang/dist/test/CodeGenObjC/encode-cstyle-method.m vendor/clang/dist/test/CodeGenObjC/encode-test.m vendor/clang/dist/test/CodeGenObjC/exceptions.m vendor/clang/dist/test/CodeGenObjC/fp2ret.m vendor/clang/dist/test/CodeGenObjC/fpret.m vendor/clang/dist/test/CodeGenObjC/gnu-exceptions.m vendor/clang/dist/test/CodeGenObjC/id-isa-codegen.m vendor/clang/dist/test/CodeGenObjC/image-info.m vendor/clang/dist/test/CodeGenObjC/implicit-objc_msgSend.m vendor/clang/dist/test/CodeGenObjC/interface-layout-64.m vendor/clang/dist/test/CodeGenObjC/interface.m vendor/clang/dist/test/CodeGenObjC/ivar-layout-64-bitfields.m vendor/clang/dist/test/CodeGenObjC/ivar-layout-array0-struct.m vendor/clang/dist/test/CodeGenObjC/ivar-layout-no-optimize.m vendor/clang/dist/test/CodeGenObjC/ivars.m vendor/clang/dist/test/CodeGenObjC/link-errors.m vendor/clang/dist/test/CodeGenObjC/local-static-block.m vendor/clang/dist/test/CodeGenObjC/messages-2.m vendor/clang/dist/test/CodeGenObjC/messages.m vendor/clang/dist/test/CodeGenObjC/metadata-symbols-32.m vendor/clang/dist/test/CodeGenObjC/misc-atomic-property.m vendor/clang/dist/test/CodeGenObjC/mrr-autorelease.m vendor/clang/dist/test/CodeGenObjC/nested-rethrow.m vendor/clang/dist/test/CodeGenObjC/next-objc-dispatch.m vendor/clang/dist/test/CodeGenObjC/no-category-class.m vendor/clang/dist/test/CodeGenObjC/nonlazy-msgSend.m vendor/clang/dist/test/CodeGenObjC/ns-constant-strings.m vendor/clang/dist/test/CodeGenObjC/objc-align.m vendor/clang/dist/test/CodeGenObjC/objc-assign-ivar.m vendor/clang/dist/test/CodeGenObjC/objc-gc-aggr-assign.m vendor/clang/dist/test/CodeGenObjC/objc-literal-debugger-test.m vendor/clang/dist/test/CodeGenObjC/objc-read-weak-byref.m vendor/clang/dist/test/CodeGenObjC/objc2-assign-global.m vendor/clang/dist/test/CodeGenObjC/objc2-new-gc-api-strongcast.m vendor/clang/dist/test/CodeGenObjC/objc2-no-write-barrier.m vendor/clang/dist/test/CodeGenObjC/objc2-retain-codegen.m vendor/clang/dist/test/CodeGenObjC/objc2-strong-cast-1.m vendor/clang/dist/test/CodeGenObjC/objc2-weak-assign.m vendor/clang/dist/test/CodeGenObjC/objc2-weak-block-call.m vendor/clang/dist/test/CodeGenObjC/objc2-weak-compare.m vendor/clang/dist/test/CodeGenObjC/objc2-weak-ivar-debug.m vendor/clang/dist/test/CodeGenObjC/objc2-weak-ivar.m vendor/clang/dist/test/CodeGenObjC/objc2-write-barrier-2.m vendor/clang/dist/test/CodeGenObjC/objc2-write-barrier-4.m vendor/clang/dist/test/CodeGenObjC/objc2-write-barrier-5.m vendor/clang/dist/test/CodeGenObjC/objc2-write-barrier.m vendor/clang/dist/test/CodeGenObjC/object-incr-decr-1.m vendor/clang/dist/test/CodeGenObjC/predefined-expr.m vendor/clang/dist/test/CodeGenObjC/property-complex.m vendor/clang/dist/test/CodeGenObjC/property-ref-cast-to-void.m vendor/clang/dist/test/CodeGenObjC/protocol-in-extended-class.m vendor/clang/dist/test/CodeGenObjC/protocols-lazy.m vendor/clang/dist/test/CodeGenObjC/rdr-6732143-dangling-block-reference.m vendor/clang/dist/test/CodeGenObjC/super-message-fragileabi.m vendor/clang/dist/test/CodeGenObjC/synchronized.m vendor/clang/dist/test/CodeGenObjC/terminate.m vendor/clang/dist/test/CodeGenObjC/undefined-protocol.m vendor/clang/dist/test/CodeGenObjC/variadic-sends.m vendor/clang/dist/test/CodeGenObjC/x86_64-struct-return-gc.m vendor/clang/dist/test/CodeGenObjCXX/arc.mm vendor/clang/dist/test/CodeGenObjCXX/block-in-template-inst.mm vendor/clang/dist/test/CodeGenObjCXX/block-var-layout.mm vendor/clang/dist/test/CodeGenObjCXX/blocks.mm vendor/clang/dist/test/CodeGenObjCXX/catch-id-type.mm vendor/clang/dist/test/CodeGenObjCXX/copy.mm vendor/clang/dist/test/CodeGenObjCXX/copyable-property-object.mm vendor/clang/dist/test/CodeGenObjCXX/encode.mm vendor/clang/dist/test/CodeGenObjCXX/gc.mm vendor/clang/dist/test/CodeGenObjCXX/implicit-copy-assign-operator.mm vendor/clang/dist/test/CodeGenObjCXX/implicit-copy-constructor.mm vendor/clang/dist/test/CodeGenObjCXX/lambda-expressions.mm vendor/clang/dist/test/CodeGenObjCXX/mangle-blocks.mm vendor/clang/dist/test/CodeGenObjCXX/message-reference.mm vendor/clang/dist/test/CodeGenObjCXX/nrvo.mm vendor/clang/dist/test/CodeGenObjCXX/property-derived-to-base-conv.mm vendor/clang/dist/test/CodeGenObjCXX/property-object-conditional-exp.mm vendor/clang/dist/test/CodeGenObjCXX/property-object-reference-2.mm vendor/clang/dist/test/CodeGenObjCXX/property-object-reference.mm vendor/clang/dist/test/CodeGenObjCXX/property-reference.mm vendor/clang/dist/test/CodeGenObjCXX/refence-assign-write-barrier.mm vendor/clang/dist/test/CodeGenObjCXX/selector-expr-lvalue.mm vendor/clang/dist/test/CodeGenObjCXX/write-barrier-global-assign.mm vendor/clang/dist/test/CodeGenOpenCL/ptx-calls.cl vendor/clang/dist/test/CodeGenOpenCL/ptx-kernels.cl vendor/clang/dist/test/Coverage/codegen-gnu.m vendor/clang/dist/test/Driver/altivec.cpp vendor/clang/dist/test/Driver/apple-kext-i386.cpp vendor/clang/dist/test/Driver/arc.c vendor/clang/dist/test/Driver/arclite-link.c vendor/clang/dist/test/Driver/clang-translation.c vendor/clang/dist/test/Driver/clang_f_opts.c vendor/clang/dist/test/Driver/darwin-ld.c vendor/clang/dist/test/Driver/darwin-objc-defaults.m vendor/clang/dist/test/Driver/darwin-objc-options.m vendor/clang/dist/test/Driver/debug-options-as.c vendor/clang/dist/test/Driver/debug-options.c vendor/clang/dist/test/Driver/fast-math.c vendor/clang/dist/test/Driver/flags.c vendor/clang/dist/test/Driver/freebsd.c vendor/clang/dist/test/Driver/gnu-runtime.m vendor/clang/dist/test/Driver/ios-simulator-arcruntime.c vendor/clang/dist/test/Driver/linker-opts.c vendor/clang/dist/test/Driver/linux-as.c vendor/clang/dist/test/Driver/linux-ld.c vendor/clang/dist/test/Driver/mips-as.c vendor/clang/dist/test/Driver/mips-float.c vendor/clang/dist/test/Driver/rewrite-legacy-objc.m vendor/clang/dist/test/Driver/rewrite-objc.m vendor/clang/dist/test/FixIt/fixit-cxx0x.cpp vendor/clang/dist/test/FixIt/fixit-vexing-parse.cpp vendor/clang/dist/test/FixIt/fixit.c vendor/clang/dist/test/FixIt/fixit.cpp vendor/clang/dist/test/FixIt/objc-literals.m vendor/clang/dist/test/Index/c-index-api-loadTU-test.m vendor/clang/dist/test/Index/complete-exprs.m vendor/clang/dist/test/Index/complete-method-decls.m vendor/clang/dist/test/Index/complete-properties.m vendor/clang/dist/test/Index/get-cursor.c vendor/clang/dist/test/Index/get-cursor.cpp vendor/clang/dist/test/Index/get-cursor.m vendor/clang/dist/test/Index/index-decls.m vendor/clang/dist/test/Index/overrides.m vendor/clang/dist/test/Index/pch-with-errors.c vendor/clang/dist/test/Index/print-typekind.m vendor/clang/dist/test/Index/recursive-cxx-member-calls.cpp vendor/clang/dist/test/Lexer/bcpl-escaped-newline.c vendor/clang/dist/test/Lexer/c90.c vendor/clang/dist/test/Lexer/char-literal.cpp vendor/clang/dist/test/Lexer/hexfloat.cpp vendor/clang/dist/test/Lexer/newline-eof.c vendor/clang/dist/test/Lexer/pragma-operators.cpp vendor/clang/dist/test/Misc/diag-aka-types.cpp vendor/clang/dist/test/Misc/emit-html.c vendor/clang/dist/test/Misc/integer-literal-printing.cpp vendor/clang/dist/test/Misc/show-diag-options.c vendor/clang/dist/test/Misc/tabstop.c vendor/clang/dist/test/Misc/warning-flags.c vendor/clang/dist/test/Modules/Inputs/Module.framework/Headers/Module.h vendor/clang/dist/test/Modules/Inputs/category_right.h vendor/clang/dist/test/Modules/Inputs/module.map vendor/clang/dist/test/Modules/cstd.m vendor/clang/dist/test/Modules/lookup.cpp vendor/clang/dist/test/Modules/objc-categories.m vendor/clang/dist/test/Modules/on-demand-build.m vendor/clang/dist/test/PCH/attrs.c vendor/clang/dist/test/PCH/chain-trivial.c vendor/clang/dist/test/PCH/cxx-friends.cpp vendor/clang/dist/test/PCH/cxx-friends.h vendor/clang/dist/test/PCH/cxx-member-init.cpp vendor/clang/dist/test/PCH/cxx-static_assert.cpp vendor/clang/dist/test/PCH/cxx-trailing-return.cpp vendor/clang/dist/test/PCH/cxx0x-default-delete.cpp vendor/clang/dist/test/PCH/cxx0x-delegating-ctors.cpp vendor/clang/dist/test/PCH/cxx11-constexpr.cpp vendor/clang/dist/test/PCH/cxx11-enum-template.cpp vendor/clang/dist/test/PCH/cxx11-user-defined-literals.cpp vendor/clang/dist/test/PCH/exprs.h vendor/clang/dist/test/PCH/ms-if-exists.cpp vendor/clang/dist/test/PCH/objc_methods.h vendor/clang/dist/test/PCH/objc_methods.m vendor/clang/dist/test/PCH/objc_stmts.m vendor/clang/dist/test/PCH/replaced-decl.m vendor/clang/dist/test/PCH/typo2.cpp vendor/clang/dist/test/PCH/variables.c vendor/clang/dist/test/Parser/DelayedTemplateParsing.cpp vendor/clang/dist/test/Parser/MicrosoftExtensions.c vendor/clang/dist/test/Parser/MicrosoftExtensions.cpp vendor/clang/dist/test/Parser/altivec.c vendor/clang/dist/test/Parser/c1x-alignas.c vendor/clang/dist/test/Parser/cuda-kernel-call.cu vendor/clang/dist/test/Parser/cxx-class.cpp vendor/clang/dist/test/Parser/cxx-decl.cpp vendor/clang/dist/test/Parser/cxx-template-argument.cpp vendor/clang/dist/test/Parser/cxx-throw.cpp vendor/clang/dist/test/Parser/cxx-undeclared-identifier.cpp vendor/clang/dist/test/Parser/cxx-using-declaration.cpp vendor/clang/dist/test/Parser/cxx-using-directive.cpp vendor/clang/dist/test/Parser/cxx0x-ambig.cpp vendor/clang/dist/test/Parser/cxx0x-attributes.cpp vendor/clang/dist/test/Parser/cxx0x-decl.cpp vendor/clang/dist/test/Parser/cxx0x-lambda-expressions.cpp vendor/clang/dist/test/Parser/cxx11-type-specifier.cpp vendor/clang/dist/test/Parser/declarators.c vendor/clang/dist/test/Parser/ms-inline-asm.c vendor/clang/dist/test/Parser/objc-forcollection-neg.m vendor/clang/dist/test/Parser/objc-init.m vendor/clang/dist/test/Parser/objcxx11-attributes.mm vendor/clang/dist/test/Parser/opencl-pragma.cl vendor/clang/dist/test/Parser/recovery.c vendor/clang/dist/test/Parser/recovery.cpp vendor/clang/dist/test/Preprocessor/_Pragma-location.c vendor/clang/dist/test/Preprocessor/comment_save.c vendor/clang/dist/test/Preprocessor/has_attribute.c vendor/clang/dist/test/Preprocessor/has_include.c vendor/clang/dist/test/Preprocessor/init.c vendor/clang/dist/test/Preprocessor/line-directive.c vendor/clang/dist/test/Preprocessor/macro_fn.c vendor/clang/dist/test/Preprocessor/macro_paste_c_block_comment.c vendor/clang/dist/test/Preprocessor/mmx.c vendor/clang/dist/test/Preprocessor/non_fragile_feature1.m vendor/clang/dist/test/Preprocessor/pp-record.c vendor/clang/dist/test/Preprocessor/predefined-arch-macros.c vendor/clang/dist/test/Preprocessor/predefined-macros.c vendor/clang/dist/test/Preprocessor/undef-error.c vendor/clang/dist/test/Preprocessor/warning_tests.c vendor/clang/dist/test/Rewriter/blockcast3.mm vendor/clang/dist/test/Rewriter/blockstruct.m vendor/clang/dist/test/Rewriter/crash.m vendor/clang/dist/test/Rewriter/finally.m vendor/clang/dist/test/Rewriter/func-in-impl.m vendor/clang/dist/test/Rewriter/id-test-3.m vendor/clang/dist/test/Rewriter/inner-block-helper-funcs.mm vendor/clang/dist/test/Rewriter/instancetype-test.mm vendor/clang/dist/test/Rewriter/ivar-encoding-1.m vendor/clang/dist/test/Rewriter/ivar-encoding-2.m vendor/clang/dist/test/Rewriter/metadata-test-1.m vendor/clang/dist/test/Rewriter/metadata-test-2.m vendor/clang/dist/test/Rewriter/method-encoding-1.m vendor/clang/dist/test/Rewriter/objc-bool-literal-modern-1.mm vendor/clang/dist/test/Rewriter/objc-encoding-bug-1.m vendor/clang/dist/test/Rewriter/objc-ivar-receiver-1.m vendor/clang/dist/test/Rewriter/objc-modern-container-subscript.mm vendor/clang/dist/test/Rewriter/objc-modern-property-attributes.mm vendor/clang/dist/test/Rewriter/objc-string-concat-1.m vendor/clang/dist/test/Rewriter/objc-super-test.m vendor/clang/dist/test/Rewriter/objc-synchronized-1.m vendor/clang/dist/test/Rewriter/properties.m vendor/clang/dist/test/Rewriter/property-dot-syntax.mm vendor/clang/dist/test/Rewriter/protocol-rewrite-1.m vendor/clang/dist/test/Rewriter/protocol-rewrite-2.m vendor/clang/dist/test/Rewriter/rewrite-anonymous-union.m vendor/clang/dist/test/Rewriter/rewrite-api-bug.m vendor/clang/dist/test/Rewriter/rewrite-block-argument.m vendor/clang/dist/test/Rewriter/rewrite-block-consts.mm vendor/clang/dist/test/Rewriter/rewrite-block-ivar-call.mm vendor/clang/dist/test/Rewriter/rewrite-block-literal-1.mm vendor/clang/dist/test/Rewriter/rewrite-block-literal.mm vendor/clang/dist/test/Rewriter/rewrite-block-pointer.mm vendor/clang/dist/test/Rewriter/rewrite-block-property.m vendor/clang/dist/test/Rewriter/rewrite-byref-in-nested-blocks.mm vendor/clang/dist/test/Rewriter/rewrite-byref-vars.mm vendor/clang/dist/test/Rewriter/rewrite-cast-ivar-access.mm vendor/clang/dist/test/Rewriter/rewrite-cast-to-bool.mm vendor/clang/dist/test/Rewriter/rewrite-category-property.mm vendor/clang/dist/test/Rewriter/rewrite-constructor-init.mm vendor/clang/dist/test/Rewriter/rewrite-eh.m vendor/clang/dist/test/Rewriter/rewrite-elaborated-type.mm vendor/clang/dist/test/Rewriter/rewrite-extern-c.mm vendor/clang/dist/test/Rewriter/rewrite-foreach-1.m vendor/clang/dist/test/Rewriter/rewrite-foreach-2.m vendor/clang/dist/test/Rewriter/rewrite-foreach-3.m vendor/clang/dist/test/Rewriter/rewrite-foreach-4.m vendor/clang/dist/test/Rewriter/rewrite-foreach-5.m vendor/clang/dist/test/Rewriter/rewrite-foreach-6.m vendor/clang/dist/test/Rewriter/rewrite-foreach-7.m vendor/clang/dist/test/Rewriter/rewrite-foreach-in-block.mm vendor/clang/dist/test/Rewriter/rewrite-foreach-protocol-id.m vendor/clang/dist/test/Rewriter/rewrite-forward-class.m vendor/clang/dist/test/Rewriter/rewrite-forward-class.mm vendor/clang/dist/test/Rewriter/rewrite-function-decl.mm vendor/clang/dist/test/Rewriter/rewrite-implementation.mm vendor/clang/dist/test/Rewriter/rewrite-ivar-use.m vendor/clang/dist/test/Rewriter/rewrite-local-externs-in-block.mm vendor/clang/dist/test/Rewriter/rewrite-local-static-id.mm vendor/clang/dist/test/Rewriter/rewrite-message-expr.mm vendor/clang/dist/test/Rewriter/rewrite-modern-block.mm vendor/clang/dist/test/Rewriter/rewrite-modern-extern-c-func-decl.mm vendor/clang/dist/test/Rewriter/rewrite-modern-ivars-1.mm vendor/clang/dist/test/Rewriter/rewrite-modern-struct-ivar.mm vendor/clang/dist/test/Rewriter/rewrite-modern-typeof.mm vendor/clang/dist/test/Rewriter/rewrite-nest.m vendor/clang/dist/test/Rewriter/rewrite-nested-blocks-1.mm vendor/clang/dist/test/Rewriter/rewrite-nested-blocks-2.mm vendor/clang/dist/test/Rewriter/rewrite-nested-blocks.mm vendor/clang/dist/test/Rewriter/rewrite-nested-ivar.mm vendor/clang/dist/test/Rewriter/rewrite-nested-property-in-blocks.mm vendor/clang/dist/test/Rewriter/rewrite-no-nextline.mm vendor/clang/dist/test/Rewriter/rewrite-property-attributes.mm vendor/clang/dist/test/Rewriter/rewrite-property-set-cfstring.mm vendor/clang/dist/test/Rewriter/rewrite-protocol-property.mm vendor/clang/dist/test/Rewriter/rewrite-protocol-qualified.mm vendor/clang/dist/test/Rewriter/rewrite-protocol-type-1.m vendor/clang/dist/test/Rewriter/rewrite-qualified-id.mm vendor/clang/dist/test/Rewriter/rewrite-rewritten-initializer.mm vendor/clang/dist/test/Rewriter/rewrite-static-block.mm vendor/clang/dist/test/Rewriter/rewrite-super-message.mm vendor/clang/dist/test/Rewriter/rewrite-trivial-constructor.mm vendor/clang/dist/test/Rewriter/rewrite-try-catch.m vendor/clang/dist/test/Rewriter/rewrite-typeof.mm vendor/clang/dist/test/Rewriter/rewrite-unique-block-api.mm vendor/clang/dist/test/Rewriter/rewrite-user-defined-accessors.mm vendor/clang/dist/test/Rewriter/rewrite-vararg.m vendor/clang/dist/test/Rewriter/rewrite-weak-attr.m vendor/clang/dist/test/Rewriter/static-type-protocol-1.m vendor/clang/dist/test/Rewriter/undecl-objc-h.m vendor/clang/dist/test/Rewriter/undeclared-method-1.m vendor/clang/dist/test/Rewriter/undef-field-reference-1.m vendor/clang/dist/test/Rewriter/va-method.m vendor/clang/dist/test/Rewriter/weak_byref_objects.m vendor/clang/dist/test/Sema/128bitint.c vendor/clang/dist/test/Sema/MicrosoftCompatibility.c vendor/clang/dist/test/Sema/MicrosoftExtensions.c vendor/clang/dist/test/Sema/alignas.c vendor/clang/dist/test/Sema/annotate.c vendor/clang/dist/test/Sema/array-bounds-ptr-arith.c vendor/clang/dist/test/Sema/array-init.c vendor/clang/dist/test/Sema/attr-aligned.c vendor/clang/dist/test/Sema/attr-availability-ios.c vendor/clang/dist/test/Sema/attr-availability-macosx.c vendor/clang/dist/test/Sema/attr-availability.c vendor/clang/dist/test/Sema/attr-decl-after-definition.c vendor/clang/dist/test/Sema/attr-deprecated-message.c vendor/clang/dist/test/Sema/attr-deprecated.c vendor/clang/dist/test/Sema/attr-nodebug.c vendor/clang/dist/test/Sema/attr-section.c vendor/clang/dist/test/Sema/attr-unavailable-message.c vendor/clang/dist/test/Sema/attr-visibility.c vendor/clang/dist/test/Sema/c89-2.c vendor/clang/dist/test/Sema/compare.c vendor/clang/dist/test/Sema/conditional-expr.c vendor/clang/dist/test/Sema/const-eval.c vendor/clang/dist/test/Sema/dllimport-dllexport.c vendor/clang/dist/test/Sema/exprs.c vendor/clang/dist/test/Sema/format-strings-fixit.c vendor/clang/dist/test/Sema/format-strings-scanf.c vendor/clang/dist/test/Sema/format-strings-size_t.c vendor/clang/dist/test/Sema/format-strings.c vendor/clang/dist/test/Sema/fpack-struct.c vendor/clang/dist/test/Sema/implicit-builtin-decl.c vendor/clang/dist/test/Sema/inline.c vendor/clang/dist/test/Sema/invalid-decl.c vendor/clang/dist/test/Sema/knr-def-call.c vendor/clang/dist/test/Sema/ms_class_layout.cpp vendor/clang/dist/test/Sema/switch.c vendor/clang/dist/test/Sema/thread-specifier.c vendor/clang/dist/test/Sema/typeof-use-deprecated.c vendor/clang/dist/test/Sema/uninit-variables.c vendor/clang/dist/test/Sema/unused-expr.c vendor/clang/dist/test/Sema/vector-ops.c vendor/clang/dist/test/Sema/warn-strncat-size.c vendor/clang/dist/test/SemaCXX/MicrosoftCompatibility.cpp vendor/clang/dist/test/SemaCXX/PR10243.cpp vendor/clang/dist/test/SemaCXX/abstract.cpp vendor/clang/dist/test/SemaCXX/address-of-temporary.cpp vendor/clang/dist/test/SemaCXX/alias-template.cpp vendor/clang/dist/test/SemaCXX/altivec.cpp vendor/clang/dist/test/SemaCXX/array-bound-merge.cpp vendor/clang/dist/test/SemaCXX/arrow-operator.cpp vendor/clang/dist/test/SemaCXX/attr-deprecated.cpp vendor/clang/dist/test/SemaCXX/bool.cpp vendor/clang/dist/test/SemaCXX/condition.cpp vendor/clang/dist/test/SemaCXX/conditional-expr.cpp vendor/clang/dist/test/SemaCXX/constant-expression-cxx11.cpp vendor/clang/dist/test/SemaCXX/constant-expression.cpp vendor/clang/dist/test/SemaCXX/constructor-initializer.cpp vendor/clang/dist/test/SemaCXX/conversion-function.cpp vendor/clang/dist/test/SemaCXX/conversion.cpp vendor/clang/dist/test/SemaCXX/crashes.cpp vendor/clang/dist/test/SemaCXX/cxx0x-cursory-default-delete.cpp vendor/clang/dist/test/SemaCXX/cxx0x-defaulted-functions.cpp vendor/clang/dist/test/SemaCXX/cxx0x-initializer-aggregates.cpp vendor/clang/dist/test/SemaCXX/cxx0x-initializer-constructor.cpp vendor/clang/dist/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp vendor/clang/dist/test/SemaCXX/cxx98-compat-pedantic.cpp vendor/clang/dist/test/SemaCXX/cxx98-compat.cpp vendor/clang/dist/test/SemaCXX/dcl_ambig_res.cpp vendor/clang/dist/test/SemaCXX/dcl_init_aggr.cpp vendor/clang/dist/test/SemaCXX/decl-expr-ambiguity.cpp vendor/clang/dist/test/SemaCXX/default1.cpp vendor/clang/dist/test/SemaCXX/deleted-function.cpp vendor/clang/dist/test/SemaCXX/deleted-operator.cpp vendor/clang/dist/test/SemaCXX/elaborated-type-specifier.cpp vendor/clang/dist/test/SemaCXX/enum-scoped.cpp vendor/clang/dist/test/SemaCXX/expressions.cpp vendor/clang/dist/test/SemaCXX/format-strings-0x.cpp vendor/clang/dist/test/SemaCXX/function-extern-c.cpp vendor/clang/dist/test/SemaCXX/function-redecl.cpp vendor/clang/dist/test/SemaCXX/implicit-exception-spec.cpp vendor/clang/dist/test/SemaCXX/invalid-member-expr.cpp vendor/clang/dist/test/SemaCXX/lambda-expressions.cpp vendor/clang/dist/test/SemaCXX/literal-operators.cpp vendor/clang/dist/test/SemaCXX/member-expr.cpp vendor/clang/dist/test/SemaCXX/member-init.cpp vendor/clang/dist/test/SemaCXX/member-operator-expr.cpp vendor/clang/dist/test/SemaCXX/microsoft-cxx0x.cpp vendor/clang/dist/test/SemaCXX/neon-vector-types.cpp vendor/clang/dist/test/SemaCXX/nested-name-spec.cpp vendor/clang/dist/test/SemaCXX/nullptr.cpp vendor/clang/dist/test/SemaCXX/overload-call.cpp vendor/clang/dist/test/SemaCXX/overload-member-call.cpp vendor/clang/dist/test/SemaCXX/overloaded-builtin-operators.cpp vendor/clang/dist/test/SemaCXX/qualified-id-lookup.cpp vendor/clang/dist/test/SemaCXX/reinterpret-cast.cpp vendor/clang/dist/test/SemaCXX/static-assert.cpp vendor/clang/dist/test/SemaCXX/type-traits.cpp vendor/clang/dist/test/SemaCXX/typo-correction.cpp vendor/clang/dist/test/SemaCXX/uninit-variables.cpp vendor/clang/dist/test/SemaCXX/uninitialized.cpp vendor/clang/dist/test/SemaCXX/unknown-type-name.cpp vendor/clang/dist/test/SemaCXX/unused.cpp vendor/clang/dist/test/SemaCXX/user-defined-conversions.cpp vendor/clang/dist/test/SemaCXX/virtuals.cpp vendor/clang/dist/test/SemaCXX/warn-deprecated-header.cpp vendor/clang/dist/test/SemaCXX/warn-literal-conversion.cpp vendor/clang/dist/test/SemaCXX/warn-memset-bad-sizeof.cpp vendor/clang/dist/test/SemaCXX/warn-thread-safety-analysis.cpp vendor/clang/dist/test/SemaCXX/warn-thread-safety-parsing.cpp vendor/clang/dist/test/SemaCXX/warn-unused-value.cpp vendor/clang/dist/test/SemaObjC/arc-bridged-cast.m vendor/clang/dist/test/SemaObjC/arc-cf.m vendor/clang/dist/test/SemaObjC/arc-no-runtime.m vendor/clang/dist/test/SemaObjC/arc-property-lifetime.m vendor/clang/dist/test/SemaObjC/arc-property.m vendor/clang/dist/test/SemaObjC/arc-unbridged-cast.m vendor/clang/dist/test/SemaObjC/arc.m vendor/clang/dist/test/SemaObjC/assign-rvalue-message.m vendor/clang/dist/test/SemaObjC/at-defs.m vendor/clang/dist/test/SemaObjC/attr-availability.m vendor/clang/dist/test/SemaObjC/attr-deprecated.m vendor/clang/dist/test/SemaObjC/blocks.m vendor/clang/dist/test/SemaObjC/category-1.m vendor/clang/dist/test/SemaObjC/class-bitfield.m vendor/clang/dist/test/SemaObjC/cocoa-api-usage.m vendor/clang/dist/test/SemaObjC/cocoa-api-usage.m.fixed vendor/clang/dist/test/SemaObjC/conflicting-ivar-test-1.m vendor/clang/dist/test/SemaObjC/continuation-class-err.m vendor/clang/dist/test/SemaObjC/continuation-class-property.m vendor/clang/dist/test/SemaObjC/default-synthesize-1.m vendor/clang/dist/test/SemaObjC/default-synthesize-2.m vendor/clang/dist/test/SemaObjC/direct-synthesized-ivar-access.m vendor/clang/dist/test/SemaObjC/duplicate-property-class-extension.m vendor/clang/dist/test/SemaObjC/error-implicit-property.m vendor/clang/dist/test/SemaObjC/format-strings-objc.m vendor/clang/dist/test/SemaObjC/id.m vendor/clang/dist/test/SemaObjC/interface-1.m vendor/clang/dist/test/SemaObjC/interface-layout.m vendor/clang/dist/test/SemaObjC/ivar-in-class-extension-error.m vendor/clang/dist/test/SemaObjC/method-bad-param.m vendor/clang/dist/test/SemaObjC/method-prototype-scope.m vendor/clang/dist/test/SemaObjC/narrow-property-type-in-cont-class.m vendor/clang/dist/test/SemaObjC/nsobject-attribute.m vendor/clang/dist/test/SemaObjC/objc-container-subscripting-2.m vendor/clang/dist/test/SemaObjC/objc-container-subscripting-3.m vendor/clang/dist/test/SemaObjC/objc-container-subscripting.m vendor/clang/dist/test/SemaObjC/objc-cstyle-args-in-methods.m vendor/clang/dist/test/SemaObjC/objc-dictionary-literal.m vendor/clang/dist/test/SemaObjC/objc-literal-nsnumber.m vendor/clang/dist/test/SemaObjC/objc-literal-sig.m vendor/clang/dist/test/SemaObjC/property-10.m vendor/clang/dist/test/SemaObjC/property-12.m vendor/clang/dist/test/SemaObjC/property-impl-misuse.m vendor/clang/dist/test/SemaObjC/property-ivar-mismatch.m vendor/clang/dist/test/SemaObjC/property-typecheck-1.m vendor/clang/dist/test/SemaObjC/property-user-setter.m vendor/clang/dist/test/SemaObjC/property.m vendor/clang/dist/test/SemaObjC/protocol-attribute.m vendor/clang/dist/test/SemaObjC/protocols.m vendor/clang/dist/test/SemaObjC/provisional-ivar-lookup.m vendor/clang/dist/test/SemaObjC/related-result-type-inference.m vendor/clang/dist/test/SemaObjC/sizeof-interface.m vendor/clang/dist/test/SemaObjC/special-dep-unavail-warning.m vendor/clang/dist/test/SemaObjC/unused.m vendor/clang/dist/test/SemaObjC/warn-deprecated-implementations.m vendor/clang/dist/test/SemaObjC/weak-receiver-warn.m vendor/clang/dist/test/SemaObjCXX/arc-0x.mm vendor/clang/dist/test/SemaObjCXX/arc-templates.mm vendor/clang/dist/test/SemaObjCXX/arc-type-traits.mm vendor/clang/dist/test/SemaObjCXX/arc-unbridged-cast.mm vendor/clang/dist/test/SemaObjCXX/exceptions-fragile.mm vendor/clang/dist/test/SemaObjCXX/fragile-abi-object-assign.m vendor/clang/dist/test/SemaObjCXX/instantiate-stmt.mm vendor/clang/dist/test/SemaObjCXX/message.mm vendor/clang/dist/test/SemaObjCXX/objc-container-subscripting.mm vendor/clang/dist/test/SemaObjCXX/property-synthesis-error.mm vendor/clang/dist/test/SemaObjCXX/protocol-lookup.mm vendor/clang/dist/test/SemaTemplate/alias-templates.cpp vendor/clang/dist/test/SemaTemplate/class-template-decl.cpp vendor/clang/dist/test/SemaTemplate/delegating-constructors.cpp vendor/clang/dist/test/SemaTemplate/dependent-base-classes.cpp vendor/clang/dist/test/SemaTemplate/explicit-instantiation.cpp vendor/clang/dist/test/SemaTemplate/friend-template.cpp vendor/clang/dist/test/SemaTemplate/instantiate-exception-spec-cxx11.cpp vendor/clang/dist/test/SemaTemplate/instantiate-expr-1.cpp vendor/clang/dist/test/SemaTemplate/instantiate-init.cpp vendor/clang/dist/test/SemaTemplate/instantiate-member-class.cpp vendor/clang/dist/test/SemaTemplate/instantiate-method.cpp vendor/clang/dist/test/SemaTemplate/instantiate-objc-1.mm vendor/clang/dist/test/SemaTemplate/instantiation-backtrace.cpp vendor/clang/dist/test/SemaTemplate/instantiation-depth.cpp vendor/clang/dist/test/SemaTemplate/member-template-access-expr.cpp vendor/clang/dist/test/SemaTemplate/ms-function-specialization-class-scope.cpp vendor/clang/dist/test/SemaTemplate/ms-lookup-template-base-classes.cpp vendor/clang/dist/test/SemaTemplate/overload-candidates.cpp vendor/clang/dist/test/SemaTemplate/recovery-crash.cpp vendor/clang/dist/test/SemaTemplate/typename-specifier.cpp vendor/clang/dist/test/Tooling/clang-check-args.cpp vendor/clang/dist/test/Tooling/clang-check-pwd.cpp vendor/clang/dist/test/Tooling/clang-check.cpp vendor/clang/dist/test/lit.cfg vendor/clang/dist/tools/CMakeLists.txt vendor/clang/dist/tools/Makefile vendor/clang/dist/tools/arcmt-test/CMakeLists.txt vendor/clang/dist/tools/arcmt-test/Makefile vendor/clang/dist/tools/c-arcmt-test/CMakeLists.txt vendor/clang/dist/tools/c-arcmt-test/Makefile vendor/clang/dist/tools/c-index-test/CMakeLists.txt vendor/clang/dist/tools/c-index-test/Makefile vendor/clang/dist/tools/c-index-test/c-index-test.c vendor/clang/dist/tools/clang-check/CMakeLists.txt vendor/clang/dist/tools/clang-check/ClangCheck.cpp vendor/clang/dist/tools/clang-check/Makefile vendor/clang/dist/tools/diagtool/CMakeLists.txt vendor/clang/dist/tools/diagtool/ListWarnings.cpp vendor/clang/dist/tools/diagtool/Makefile vendor/clang/dist/tools/diagtool/diagtool_main.cpp vendor/clang/dist/tools/driver/CMakeLists.txt vendor/clang/dist/tools/driver/cc1_main.cpp vendor/clang/dist/tools/driver/cc1as_main.cpp vendor/clang/dist/tools/driver/driver.cpp vendor/clang/dist/tools/libclang/CIndex.cpp vendor/clang/dist/tools/libclang/CIndexCodeCompletion.cpp vendor/clang/dist/tools/libclang/CIndexDiagnostic.cpp vendor/clang/dist/tools/libclang/CIndexUSRs.cpp vendor/clang/dist/tools/libclang/CMakeLists.txt vendor/clang/dist/tools/libclang/CXCursor.cpp vendor/clang/dist/tools/libclang/CXCursor.h vendor/clang/dist/tools/libclang/CXStoredDiagnostic.cpp vendor/clang/dist/tools/libclang/CXTranslationUnit.h vendor/clang/dist/tools/libclang/CXType.cpp vendor/clang/dist/tools/libclang/IndexBody.cpp vendor/clang/dist/tools/libclang/IndexDecl.cpp vendor/clang/dist/tools/libclang/IndexTypeSourceInfo.cpp vendor/clang/dist/tools/libclang/Indexing.cpp vendor/clang/dist/tools/libclang/IndexingContext.h vendor/clang/dist/tools/libclang/Makefile vendor/clang/dist/tools/libclang/libclang.exports vendor/clang/dist/tools/scan-build/ccc-analyzer vendor/clang/dist/tools/scan-build/scan-build vendor/clang/dist/tools/scan-build/set-xcode-analyzer vendor/clang/dist/unittests/Basic/SourceManagerTest.cpp vendor/clang/dist/unittests/CMakeLists.txt vendor/clang/dist/unittests/Frontend/FrontendActionTest.cpp vendor/clang/dist/unittests/Frontend/Makefile vendor/clang/dist/unittests/Makefile vendor/clang/dist/unittests/Tooling/CompilationDatabaseTest.cpp vendor/clang/dist/unittests/Tooling/Makefile vendor/clang/dist/unittests/Tooling/ToolingTest.cpp vendor/clang/dist/utils/TableGen/ClangASTNodesEmitter.cpp vendor/clang/dist/utils/TableGen/ClangAttrEmitter.cpp vendor/clang/dist/utils/TableGen/ClangDiagnosticsEmitter.cpp vendor/clang/dist/utils/TableGen/ClangSACheckersEmitter.cpp vendor/clang/dist/utils/TableGen/NeonEmitter.cpp vendor/clang/dist/utils/TableGen/OptParserEmitter.cpp vendor/clang/dist/utils/TableGen/TableGen.cpp vendor/clang/dist/utils/analyzer/CmpRuns.py vendor/clang/dist/utils/analyzer/SATestAdd.py vendor/clang/dist/utils/analyzer/SATestBuild.py vendor/clang/dist/utils/clang-completion-mode.el vendor/clang/dist/utils/clangVisualizers.txt vendor/clang/dist/www/analyzer/annotations.html vendor/clang/dist/www/analyzer/available_checks.html vendor/clang/dist/www/analyzer/content.css vendor/clang/dist/www/analyzer/installation.html vendor/clang/dist/www/analyzer/latest_checker.html.incl vendor/clang/dist/www/analyzer/menu.html.incl vendor/clang/dist/www/analyzer/release_notes.html vendor/clang/dist/www/builtins.py vendor/clang/dist/www/comparison.html vendor/clang/dist/www/content.css vendor/clang/dist/www/cxx_status.html vendor/clang/dist/www/diagnostics.html vendor/clang/dist/www/features.html vendor/clang/dist/www/get_started.html vendor/clang/dist/www/menu.html.incl Modified: vendor/clang/dist/.gitignore ============================================================================== --- vendor/clang/dist/.gitignore Wed Aug 15 20:01:28 2012 (r239312) +++ vendor/clang/dist/.gitignore Wed Aug 15 20:02:54 2012 (r239313) @@ -23,3 +23,9 @@ #==============================================================================# cscope.files cscope.out + +#==============================================================================# +# Directories to ignore (do not add trailing '/'s, they skip symlinks). +#==============================================================================# +# Clang extra user tools, which is tracked independently (clang-tools-extra). +tools/extra Modified: vendor/clang/dist/CMakeLists.txt ============================================================================== --- vendor/clang/dist/CMakeLists.txt Wed Aug 15 20:01:28 2012 (r239312) +++ vendor/clang/dist/CMakeLists.txt Wed Aug 15 20:02:54 2012 (r239313) @@ -53,6 +53,14 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURR set(LLVM_TABLEGEN_EXE "${PATH_TO_LLVM_BUILD}/bin/Debug/llvm-tblgen${CMAKE_EXECUTABLE_SUFFIX}") endif() + # Define the default arguments to use with 'lit', and an option for the user + # to override. + set(LIT_ARGS_DEFAULT "-sv") + if (MSVC OR XCODE) + set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar") + endif() + set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit") + set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib ) set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib ) @@ -131,6 +139,10 @@ if (APPLE) set(CMAKE_MODULE_LINKER_FLAGS "-Wl,-flat_namespace -Wl,-undefined -Wl,suppress") endif () +# libxml2 is an optional dependency, required only to run validation +# tests on XML output. +find_package(LibXml2) + configure_file( ${CLANG_SOURCE_DIR}/include/clang/Config/config.h.cmake ${CLANG_BINARY_DIR}/include/clang/Config/config.h) @@ -192,20 +204,10 @@ macro(add_clang_library name) add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) endif( LLVM_COMMON_DEPENDS ) - target_link_libraries( ${name} ${LLVM_USED_LIBS} ) llvm_config( ${name} ${LLVM_LINK_COMPONENTS} ) target_link_libraries( ${name} ${LLVM_COMMON_LIBS} ) link_system_libs( ${name} ) - add_dependencies(${name} ClangDiagnosticCommon) - if(MSVC) - get_target_property(cflag ${name} COMPILE_FLAGS) - if(NOT cflag) - set(cflag "") - endif(NOT cflag) - set(cflag "${cflag} /Za") - set_target_properties(${name} PROPERTIES COMPILE_FLAGS ${cflag}) - endif(MSVC) install(TARGETS ${name} LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} @@ -252,14 +254,14 @@ mark_as_advanced(CLANG_EXECUTABLE_VERSIO add_subdirectory(utils/TableGen) -option(CLANG_BUILD_EXAMPLES "Build CLANG example programs by default." OFF) -add_subdirectory(examples) - add_subdirectory(include) add_subdirectory(lib) add_subdirectory(tools) add_subdirectory(runtime) +option(CLANG_BUILD_EXAMPLES "Build CLANG example programs by default." OFF) +add_subdirectory(examples) + # TODO: docs. add_subdirectory(test) @@ -280,3 +282,4 @@ endif() set(BUG_REPORT_URL "http://llvm.org/bugs/" CACHE STRING "Default URL where bug reports are to be submitted.") + Modified: vendor/clang/dist/bindings/python/clang/cindex.py ============================================================================== --- vendor/clang/dist/bindings/python/clang/cindex.py Wed Aug 15 20:01:28 2012 (r239312) +++ vendor/clang/dist/bindings/python/clang/cindex.py Wed Aug 15 20:02:54 2012 (r239313) @@ -65,6 +65,8 @@ call is efficient. from ctypes import * import collections +import clang.enumerations + def get_cindex_library(): # FIXME: It's probably not the case that the library is actually found in # this location. We need a better system of identifying and loading the @@ -85,6 +87,49 @@ def get_cindex_library(): c_object_p = POINTER(c_void_p) lib = get_cindex_library() +callbacks = {} + +### Exception Classes ### + +class TranslationUnitLoadError(Exception): + """Represents an error that occurred when loading a TranslationUnit. + + This is raised in the case where a TranslationUnit could not be + instantiated due to failure in the libclang library. + + FIXME: Make libclang expose additional error information in this scenario. + """ + pass + +class TranslationUnitSaveError(Exception): + """Represents an error that occurred when saving a TranslationUnit. + + Each error has associated with it an enumerated value, accessible under + e.save_error. Consumers can compare the value with one of the ERROR_ + constants in this class. + """ + + # Indicates that an unknown error occurred. This typically indicates that + # I/O failed during save. + ERROR_UNKNOWN = 1 + + # Indicates that errors during translation prevented saving. The errors + # should be available via the TranslationUnit's diagnostics. + ERROR_TRANSLATION_ERRORS = 2 + + # Indicates that the translation unit was somehow invalid. + ERROR_INVALID_TU = 3 + + def __init__(self, enumeration, message): + assert isinstance(enumeration, int) + + if enumeration < 1 or enumeration > 3: + raise Exception("Encountered undefined TranslationUnit save error " + "constant: %d. Please file a bug to have this " + "value supported." % enumeration) + + self.save_error = enumeration + Exception.__init__(self, 'Error %d: %s' % (enumeration, message)) ### Structures and Utility Classes ### @@ -94,12 +139,12 @@ class _CXString(Structure): _fields_ = [("spelling", c_char_p), ("free", c_int)] def __del__(self): - _CXString_dispose(self) + lib.clang_disposeString(self) @staticmethod def from_result(res, fn, args): assert isinstance(res, _CXString) - return _CXString_getCString(res) + return lib.clang_getCString(res) class SourceLocation(Structure): """ @@ -111,7 +156,8 @@ class SourceLocation(Structure): def _get_instantiation(self): if self._data is None: f, l, c, o = c_object_p(), c_uint(), c_uint(), c_uint() - SourceLocation_loc(self, byref(f), byref(l), byref(c), byref(o)) + lib.clang_getInstantiationLocation(self, byref(f), byref(l), + byref(c), byref(o)) if f: f = File(f) else: @@ -125,7 +171,17 @@ class SourceLocation(Structure): Retrieve the source location associated with a given file/line/column in a particular translation unit. """ - return SourceLocation_getLocation(tu, file, line, column) + return lib.clang_getLocation(tu, file, line, column) + + @staticmethod + def from_offset(tu, file, offset): + """Retrieve a SourceLocation from a given character offset. + + tu -- TranslationUnit file belongs to + file -- File instance to obtain offset from + offset -- Integer character offset within file + """ + return lib.clang_getLocationForOffset(tu, file, offset) @property def file(self): @@ -148,7 +204,7 @@ class SourceLocation(Structure): return self._get_instantiation()[3] def __eq__(self, other): - return SourceLocation_equalLocations(self, other) + return lib.clang_equalLocations(self, other) def __ne__(self, other): return not self.__eq__(other) @@ -175,7 +231,7 @@ class SourceRange(Structure): # object. @staticmethod def from_locations(start, end): - return SourceRange_getRange(start, end) + return lib.clang_getRange(start, end) @property def start(self): @@ -183,7 +239,7 @@ class SourceRange(Structure): Return a SourceLocation representing the first character within a source range. """ - return SourceRange_start(self) + return lib.clang_getRangeStart(self) @property def end(self): @@ -191,10 +247,10 @@ class SourceRange(Structure): Return a SourceLocation representing the last character within a source range. """ - return SourceRange_end(self) + return lib.clang_getRangeEnd(self) def __eq__(self, other): - return SourceRange_equalRanges(self, other) + return lib.clang_equalRanges(self, other) def __ne__(self, other): return not self.__eq__(other) @@ -219,19 +275,19 @@ class Diagnostic(object): self.ptr = ptr def __del__(self): - _clang_disposeDiagnostic(self) + lib.clang_disposeDiagnostic(self) @property def severity(self): - return _clang_getDiagnosticSeverity(self) + return lib.clang_getDiagnosticSeverity(self) @property def location(self): - return _clang_getDiagnosticLocation(self) + return lib.clang_getDiagnosticLocation(self) @property def spelling(self): - return _clang_getDiagnosticSpelling(self) + return lib.clang_getDiagnosticSpelling(self) @property def ranges(self): @@ -240,12 +296,12 @@ class Diagnostic(object): self.diag = diag def __len__(self): - return int(_clang_getDiagnosticNumRanges(self.diag)) + return int(lib.clang_getDiagnosticNumRanges(self.diag)) def __getitem__(self, key): if (key >= len(self)): raise IndexError - return _clang_getDiagnosticRange(self.diag, key) + return lib.clang_getDiagnosticRange(self.diag, key) return RangeIterator(self) @@ -256,11 +312,12 @@ class Diagnostic(object): self.diag = diag def __len__(self): - return int(_clang_getDiagnosticNumFixIts(self.diag)) + return int(lib.clang_getDiagnosticNumFixIts(self.diag)) def __getitem__(self, key): range = SourceRange() - value = _clang_getDiagnosticFixIt(self.diag, key, byref(range)) + value = lib.clang_getDiagnosticFixIt(self.diag, key, + byref(range)) if len(value) == 0: raise IndexError @@ -271,25 +328,25 @@ class Diagnostic(object): @property def category_number(self): """The category number for this diagnostic.""" - return _clang_getDiagnosticCategory(self) + return lib.clang_getDiagnosticCategory(self) @property def category_name(self): """The string name of the category for this diagnostic.""" - return _clang_getDiagnosticCategoryName(self.category_number) + return lib.clang_getDiagnosticCategoryName(self.category_number) @property def option(self): """The command-line option that enables this diagnostic.""" - return _clang_getDiagnosticOption(self, None) + return lib.clang_getDiagnosticOption(self, None) @property def disable_option(self): """The command-line option that disables this diagnostic.""" disable = _CXString() - _clang_getDiagnosticOption(self, byref(disable)) + lib.clang_getDiagnosticOption(self, byref(disable)) - return _CXString_getCString(disable) + return lib.clang_getCString(disable) def __repr__(self): return "" % ( @@ -312,6 +369,98 @@ class FixIt(object): def __repr__(self): return "" % (self.range, self.value) +class TokenGroup(object): + """Helper class to facilitate token management. + + Tokens are allocated from libclang in chunks. They must be disposed of as a + collective group. + + One purpose of this class is for instances to represent groups of allocated + tokens. Each token in a group contains a reference back to an instance of + this class. When all tokens from a group are garbage collected, it allows + this class to be garbage collected. When this class is garbage collected, + it calls the libclang destructor which invalidates all tokens in the group. + + You should not instantiate this class outside of this module. + """ + def __init__(self, tu, memory, count): + self._tu = tu + self._memory = memory + self._count = count + + def __del__(self): + lib.clang_disposeTokens(self._tu, self._memory, self._count) + + @staticmethod + def get_tokens(tu, extent): + """Helper method to return all tokens in an extent. + + This functionality is needed multiple places in this module. We define + it here because it seems like a logical place. + """ + tokens_memory = POINTER(Token)() + tokens_count = c_uint() + + lib.clang_tokenize(tu, extent, byref(tokens_memory), + byref(tokens_count)) + + count = int(tokens_count.value) + + # If we get no tokens, no memory was allocated. Be sure not to return + # anything and potentially call a destructor on nothing. + if count < 1: + return + + tokens_array = cast(tokens_memory, POINTER(Token * count)).contents + + token_group = TokenGroup(tu, tokens_memory, tokens_count) + + for i in xrange(0, count): + token = Token() + token.int_data = tokens_array[i].int_data + token.ptr_data = tokens_array[i].ptr_data + token._tu = tu + token._group = token_group + + yield token + +class TokenKind(object): + """Describes a specific type of a Token.""" + + _value_map = {} # int -> TokenKind + + def __init__(self, value, name): + """Create a new TokenKind instance from a numeric value and a name.""" + self.value = value + self.name = name + + def __repr__(self): + return 'TokenKind.%s' % (self.name,) + + @staticmethod + def from_value(value): + """Obtain a registered TokenKind instance from its value.""" + result = TokenKind._value_map.get(value, None) + + if result is None: + raise ValueError('Unknown TokenKind: %d' % value) + + return result + + @staticmethod + def register(value, name): + """Register a new TokenKind enumeration. + + This should only be called at module load time by code within this + package. + """ + if value in TokenKind._value_map: + raise ValueError('TokenKind already registered: %d' % value) + + kind = TokenKind(value, name) + TokenKind._value_map[value] = kind + setattr(TokenKind, name, kind) + ### Cursor Kinds ### class CursorKind(object): @@ -358,39 +507,39 @@ class CursorKind(object): def is_declaration(self): """Test if this is a declaration kind.""" - return CursorKind_is_decl(self) + return lib.clang_isDeclaration(self) def is_reference(self): """Test if this is a reference kind.""" - return CursorKind_is_ref(self) + return lib.clang_isReference(self) def is_expression(self): """Test if this is an expression kind.""" - return CursorKind_is_expr(self) + return lib.clang_isExpression(self) def is_statement(self): """Test if this is a statement kind.""" - return CursorKind_is_stmt(self) + return lib.clang_isStatement(self) def is_attribute(self): """Test if this is an attribute kind.""" - return CursorKind_is_attribute(self) + return lib.clang_isAttribute(self) def is_invalid(self): """Test if this is an invalid kind.""" - return CursorKind_is_inv(self) + return lib.clang_isInvalid(self) def is_translation_unit(self): """Test if this is a translation unit kind.""" - return CursorKind_is_translation_unit(self) + return lib.clang_isTranslationUnit(self) def is_preprocessing(self): """Test if this is a preprocessing kind.""" - return CursorKind_is_preprocessing(self) + return lib.clang_isPreprocessing(self) def is_unexposed(self): """Test if this is an unexposed kind.""" - return CursorKind_is_unexposed(self) + return lib.clang_isUnexposed(self) def __repr__(self): return 'CursorKind.%s' % (self.name,) @@ -635,7 +784,7 @@ CursorKind.BINARY_OPERATOR = CursorKind( CursorKind.COMPOUND_ASSIGNMENT_OPERATOR = CursorKind(115) # The ?: ternary operator. -CursorKind.CONDITONAL_OPERATOR = CursorKind(116) +CursorKind.CONDITIONAL_OPERATOR = CursorKind(116) # An explicit cast in C (C99 6.5.4) or a C-style cast in C++ # (C++ [expr.cast]), which uses the syntax (Type)expr. @@ -887,10 +1036,15 @@ class Cursor(Structure): @staticmethod def from_location(tu, location): - return Cursor_get(tu, location) + # We store a reference to the TU in the instance so the TU won't get + # collected before the cursor. + cursor = lib.clang_getCursor(tu, location) + cursor._tu = tu + + return cursor def __eq__(self, other): - return Cursor_eq(self, other) + return lib.clang_equalCursors(self, other) def __ne__(self, other): return not self.__eq__(other) @@ -900,7 +1054,13 @@ class Cursor(Structure): Returns true if the declaration pointed at by the cursor is also a definition of that entity. """ - return Cursor_is_def(self) + return lib.clang_isCursorDefinition(self) + + def is_static_method(self): + """Returns True if the cursor refers to a C++ member function or member + function template that is declared 'static'. + """ + return lib.clang_CXXMethod_isStatic(self) def get_definition(self): """ @@ -910,7 +1070,7 @@ class Cursor(Structure): """ # TODO: Should probably check that this is either a reference or # declaration prior to issuing the lookup. - return Cursor_def(self) + return lib.clang_getCursorDefinition(self) def get_usr(self): """Return the Unified Symbol Resultion (USR) for the entity referenced @@ -921,7 +1081,7 @@ class Cursor(Structure): program. USRs can be compared across translation units to determine, e.g., when references in one translation refer to an entity defined in another translation unit.""" - return Cursor_usr(self) + return lib.clang_getCursorUSR(self) @property def kind(self): @@ -936,7 +1096,8 @@ class Cursor(Structure): # this, for consistency with clang_getCursorUSR. return None if not hasattr(self, '_spelling'): - self._spelling = Cursor_spelling(self) + self._spelling = lib.clang_getCursorSpelling(self) + return self._spelling @property @@ -949,7 +1110,8 @@ class Cursor(Structure): class template specialization. """ if not hasattr(self, '_displayname'): - self._displayname = Cursor_displayname(self) + self._displayname = lib.clang_getCursorDisplayName(self) + return self._displayname @property @@ -959,7 +1121,8 @@ class Cursor(Structure): pointed at by the cursor. """ if not hasattr(self, '_loc'): - self._loc = Cursor_loc(self) + self._loc = lib.clang_getCursorLocation(self) + return self._loc @property @@ -969,7 +1132,8 @@ class Cursor(Structure): pointed at by the cursor. """ if not hasattr(self, '_extent'): - self._extent = Cursor_extent(self) + self._extent = lib.clang_getCursorExtent(self) + return self._extent @property @@ -978,10 +1142,33 @@ class Cursor(Structure): Retrieve the Type (if any) of the entity pointed at by the cursor. """ if not hasattr(self, '_type'): - self._type = Cursor_type(self) + self._type = lib.clang_getCursorType(self) + return self._type @property + def canonical(self): + """Return the canonical Cursor corresponding to this Cursor. + + The canonical cursor is the cursor which is representative for the + underlying entity. For example, if you have multiple forward + declarations for the same class, the canonical cursor for the forward + declarations will be identical. + """ + if not hasattr(self, '_canonical'): + self._canonical = lib.clang_getCanonicalCursor(self) + + return self._canonical + + @property + def result_type(self): + """Retrieve the Type of the result for this Cursor.""" + if not hasattr(self, '_result_type'): + self._result_type = lib.clang_getResultType(self.type) + + return self._result_type + + @property def underlying_typedef_type(self): """Return the underlying type of a typedef declaration. @@ -990,7 +1177,7 @@ class Cursor(Structure): """ if not hasattr(self, '_underlying_type'): assert self.kind.is_declaration() - self._underlying_type = Cursor_underlying_type(self) + self._underlying_type = lib.clang_getTypedefDeclUnderlyingType(self) return self._underlying_type @@ -1003,15 +1190,39 @@ class Cursor(Structure): """ if not hasattr(self, '_enum_type'): assert self.kind == CursorKind.ENUM_DECL - self._enum_type = Cursor_enum_type(self) + self._enum_type = lib.clang_getEnumDeclIntegerType(self) return self._enum_type @property + def enum_value(self): + """Return the value of an enum constant.""" + if not hasattr(self, '_enum_value'): + assert self.kind == CursorKind.ENUM_CONSTANT_DECL + # Figure out the underlying type of the enum to know if it + # is a signed or unsigned quantity. + underlying_type = self.type + if underlying_type.kind == TypeKind.ENUM: + underlying_type = underlying_type.get_declaration().enum_type + if underlying_type.kind in (TypeKind.CHAR_U, + TypeKind.UCHAR, + TypeKind.CHAR16, + TypeKind.CHAR32, + TypeKind.USHORT, + TypeKind.UINT, + TypeKind.ULONG, + TypeKind.ULONGLONG, + TypeKind.UINT128): + self._enum_value = lib.clang_getEnumConstantDeclUnsignedValue(self) + else: + self._enum_value = lib.clang_getEnumConstantDeclValue(self) + return self._enum_value + + @property def objc_type_encoding(self): """Return the Objective-C type encoding as a str.""" if not hasattr(self, '_objc_type_encoding'): - self._objc_type_encoding = Cursor_objc_type_encoding(self) + self._objc_type_encoding = lib.clang_getDeclObjCTypeEncoding(self) return self._objc_type_encoding @@ -1019,10 +1230,33 @@ class Cursor(Structure): def hash(self): """Returns a hash of the cursor as an int.""" if not hasattr(self, '_hash'): - self._hash = Cursor_hash(self) + self._hash = lib.clang_hashCursor(self) return self._hash + @property + def semantic_parent(self): + """Return the semantic parent for this cursor.""" + if not hasattr(self, '_semantic_parent'): + self._semantic_parent = lib.clang_getCursorSemanticParent(self) + + return self._semantic_parent + + @property + def lexical_parent(self): + """Return the lexical parent for this cursor.""" + if not hasattr(self, '_lexical_parent'): + self._lexical_parent = lib.clang_getCursorLexicalParent(self) + + return self._lexical_parent + + @property + def translation_unit(self): + """Returns the TranslationUnit to which this Cursor belongs.""" + # If this triggers an AttributeError, the instance was not properly + # created. + return self._tu + def get_children(self): """Return an iterator for accessing the children of this cursor.""" @@ -1030,21 +1264,57 @@ class Cursor(Structure): def visitor(child, parent, children): # FIXME: Document this assertion in API. # FIXME: There should just be an isNull method. - assert child != Cursor_null() + assert child != lib.clang_getNullCursor() + + # Create reference to TU so it isn't GC'd before Cursor. + child._tu = self._tu children.append(child) return 1 # continue children = [] - Cursor_visit(self, Cursor_visit_callback(visitor), children) + lib.clang_visitChildren(self, callbacks['cursor_visit'](visitor), + children) return iter(children) + def get_tokens(self): + """Obtain Token instances formulating that compose this Cursor. + + This is a generator for Token instances. It returns all tokens which + occupy the extent this cursor occupies. + """ + return TokenGroup.get_tokens(self._tu, self.extent) + @staticmethod def from_result(res, fn, args): assert isinstance(res, Cursor) # FIXME: There should just be an isNull method. - if res == Cursor_null(): + if res == lib.clang_getNullCursor(): return None + + # Store a reference to the TU in the Python object so it won't get GC'd + # before the Cursor. + tu = None + for arg in args: + if isinstance(arg, TranslationUnit): + tu = arg + break + + if hasattr(arg, 'translation_unit'): + tu = arg.translation_unit + break + + assert tu is not None + + res._tu = tu return res + @staticmethod + def from_cursor_result(res, fn, args): + assert isinstance(res, Cursor) + if res == lib.clang_getNullCursor(): + return None + + res._tu = args[0]._tu + return res ### Type Kinds ### @@ -1082,7 +1352,7 @@ class TypeKind(object): @property def spelling(self): """Retrieve the spelling of this TypeKind.""" - return TypeKind_spelling(self.value) + return lib.clang_getTypeKindSpelling(self.value) @staticmethod def from_id(id): @@ -1093,12 +1363,6 @@ class TypeKind(object): def __repr__(self): return 'TypeKind.%s' % (self.name,) -TypeKind_spelling = lib.clang_getTypeKindSpelling -TypeKind_spelling.argtypes = [c_uint] -TypeKind_spelling.restype = _CXString -TypeKind_spelling.errcheck = _CXString.from_result - - TypeKind.INVALID = TypeKind(0) TypeKind.UNEXPOSED = TypeKind(1) TypeKind.VOID = TypeKind(2) @@ -1168,7 +1432,7 @@ class Type(Structure): def __len__(self): if self.length is None: - self.length = Type_get_num_arg_types(self.parent) + self.length = lib.clang_getNumArgTypes(self.parent) return self.length @@ -1184,7 +1448,7 @@ class Type(Structure): raise IndexError("Index greater than container length: " "%d > %d" % ( key, len(self) )) - result = Type_get_arg_type(self.parent, key) + result = lib.clang_getArgType(self.parent, key) if result.kind == TypeKind.INVALID: raise IndexError("Argument could not be retrieved.") @@ -1200,7 +1464,7 @@ class Type(Structure): If accessed on a type that is not an array, complex, or vector type, an exception will be raised. """ - result = Type_get_element_type(self) + result = lib.clang_getElementType(self) if result.kind == TypeKind.INVALID: raise Exception('Element type not available on this type.') @@ -1214,15 +1478,32 @@ class Type(Structure): If the Type is not an array or vector, this raises. """ - result = Type_get_num_elements(self) + result = lib.clang_getNumElements(self) if result < 0: raise Exception('Type does not have elements.') return result + @property + def translation_unit(self): + """The TranslationUnit to which this Type is associated.""" + # If this triggers an AttributeError, the instance was not properly + # instantiated. + return self._tu + @staticmethod def from_result(res, fn, args): assert isinstance(res, Type) + + tu = None + for arg in args: + if hasattr(arg, 'translation_unit'): + tu = arg.translation_unit + break + + assert tu is not None + res._tu = tu + return res def get_canonical(self): @@ -1235,7 +1516,7 @@ class Type(Structure): example, if 'T' is a typedef for 'int', the canonical type for 'T' would be 'int'. """ - return Type_get_canonical(self) + return lib.clang_getCanonicalType(self) def is_const_qualified(self): """Determine whether a Type has the "const" qualifier set. @@ -1243,7 +1524,7 @@ class Type(Structure): This does not look through typedefs that may have added "const" at a different level. """ - return Type_is_const_qualified(self) + return lib.clang_isConstQualifiedType(self) def is_volatile_qualified(self): """Determine whether a Type has the "volatile" qualifier set. @@ -1251,7 +1532,7 @@ class Type(Structure): This does not look through typedefs that may have added "volatile" at a different level. """ - return Type_is_volatile_qualified(self) + return lib.clang_isVolatileQualifiedType(self) def is_restrict_qualified(self): """Determine whether a Type has the "restrict" qualifier set. @@ -1259,53 +1540,53 @@ class Type(Structure): This does not look through typedefs that may have added "restrict" at a different level. """ - return Type_is_restrict_qualified(self) + return lib.clang_isRestrictQualifiedType(self) def is_function_variadic(self): """Determine whether this function Type is a variadic function type.""" assert self.kind == TypeKind.FUNCTIONPROTO - return Type_is_variadic(self) + return lib.clang_isFunctionTypeVariadic(self) def is_pod(self): """Determine whether this Type represents plain old data (POD).""" - return Type_is_pod(self) + return lib.clang_isPODType(self) def get_pointee(self): """ For pointer types, returns the type of the pointee. """ - return Type_get_pointee(self) + return lib.clang_getPointeeType(self) def get_declaration(self): """ Return the cursor for the declaration of the given type. """ - return Type_get_declaration(self) + return lib.clang_getTypeDeclaration(self) def get_result(self): """ Retrieve the result type associated with a function type. """ - return Type_get_result(self) + return lib.clang_getResultType(self) def get_array_element_type(self): """ Retrieve the type of the elements of the array type. """ - return Type_get_array_element(self) + return lib.clang_getArrayElementType(self) def get_array_size(self): """ Retrieve the size of the constant array. """ - return Type_get_array_size(self) + return lib.clang_getArraySize(self) def __eq__(self, other): if type(other) != type(self): return False - return Type_equal(self, other) + return lib.clang_equalTypes(self, other) def __ne__(self, other): return not self.__eq__(other) @@ -1333,65 +1614,6 @@ class _CXUnsavedFile(Structure): """Helper for passing unsaved file arguments.""" _fields_ = [("name", c_char_p), ("contents", c_char_p), ('length', c_ulong)] -## Diagnostic Conversion ## - -_clang_getNumDiagnostics = lib.clang_getNumDiagnostics -_clang_getNumDiagnostics.argtypes = [c_object_p] -_clang_getNumDiagnostics.restype = c_uint - -_clang_getDiagnostic = lib.clang_getDiagnostic -_clang_getDiagnostic.argtypes = [c_object_p, c_uint] -_clang_getDiagnostic.restype = c_object_p - -_clang_disposeDiagnostic = lib.clang_disposeDiagnostic -_clang_disposeDiagnostic.argtypes = [Diagnostic] - -_clang_getDiagnosticSeverity = lib.clang_getDiagnosticSeverity -_clang_getDiagnosticSeverity.argtypes = [Diagnostic] -_clang_getDiagnosticSeverity.restype = c_int - -_clang_getDiagnosticLocation = lib.clang_getDiagnosticLocation -_clang_getDiagnosticLocation.argtypes = [Diagnostic] -_clang_getDiagnosticLocation.restype = SourceLocation - -_clang_getDiagnosticSpelling = lib.clang_getDiagnosticSpelling -_clang_getDiagnosticSpelling.argtypes = [Diagnostic] -_clang_getDiagnosticSpelling.restype = _CXString -_clang_getDiagnosticSpelling.errcheck = _CXString.from_result - -_clang_getDiagnosticNumRanges = lib.clang_getDiagnosticNumRanges -_clang_getDiagnosticNumRanges.argtypes = [Diagnostic] -_clang_getDiagnosticNumRanges.restype = c_uint - -_clang_getDiagnosticRange = lib.clang_getDiagnosticRange -_clang_getDiagnosticRange.argtypes = [Diagnostic, c_uint] -_clang_getDiagnosticRange.restype = SourceRange - -_clang_getDiagnosticNumFixIts = lib.clang_getDiagnosticNumFixIts -_clang_getDiagnosticNumFixIts.argtypes = [Diagnostic] -_clang_getDiagnosticNumFixIts.restype = c_uint - -_clang_getDiagnosticFixIt = lib.clang_getDiagnosticFixIt -_clang_getDiagnosticFixIt.argtypes = [Diagnostic, c_uint, POINTER(SourceRange)] -_clang_getDiagnosticFixIt.restype = _CXString -_clang_getDiagnosticFixIt.errcheck = _CXString.from_result - -_clang_getDiagnosticCategory = lib.clang_getDiagnosticCategory -_clang_getDiagnosticCategory.argtypes = [Diagnostic] -_clang_getDiagnosticCategory.restype = c_uint - -_clang_getDiagnosticCategoryName = lib.clang_getDiagnosticCategoryName -_clang_getDiagnosticCategoryName.argtypes = [c_uint] -_clang_getDiagnosticCategoryName.restype = _CXString -_clang_getDiagnosticCategoryName.errcheck = _CXString.from_result - -_clang_getDiagnosticOption = lib.clang_getDiagnosticOption -_clang_getDiagnosticOption.argtypes = [Diagnostic, POINTER(_CXString)] -_clang_getDiagnosticOption.restype = _CXString -_clang_getDiagnosticOption.errcheck = _CXString.from_result - -### - class CompletionChunk: class Kind: def __init__(self, name): @@ -1412,16 +1634,16 @@ class CompletionChunk: @property def spelling(self): - return _clang_getCompletionChunkText(self.cs, self.key).spelling + return lib.clang_getCompletionChunkText(self.cs, self.key).spelling @property def kind(self): - res = _clang_getCompletionChunkKind(self.cs, self.key) + res = lib.clang_getCompletionChunkKind(self.cs, self.key) return completionChunkKindMap[res] @property def string(self): - res = _clang_getCompletionChunkCompletionString(self.cs, self.key) + res = lib.clang_getCompletionChunkCompletionString(self.cs, self.key) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 20:03:48 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 02EBE106567C; Wed, 15 Aug 2012 20:03:48 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C97598FC15; Wed, 15 Aug 2012 20:03:47 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FK3lJD005130; Wed, 15 Aug 2012 20:03:47 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FK3lR9005129; Wed, 15 Aug 2012 20:03:47 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201208152003.q7FK3lR9005129@svn.freebsd.org> From: Dimitry Andric Date: Wed, 15 Aug 2012 20:03:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239314 - vendor/clang/clang-trunk-r161861 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 20:03:48 -0000 Author: dim Date: Wed Aug 15 20:03:47 2012 New Revision: 239314 URL: http://svn.freebsd.org/changeset/base/239314 Log: Tag clang trunk r161861. Added: vendor/clang/clang-trunk-r161861/ - copied from r239313, vendor/clang/dist/ From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 22:12:02 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9B26D1065672; Wed, 15 Aug 2012 22:12:02 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 86F058FC14; Wed, 15 Aug 2012 22:12:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FMC2eN019235; Wed, 15 Aug 2012 22:12:02 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FMC2rk019233; Wed, 15 Aug 2012 22:12:02 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201208152212.q7FMC2rk019233@svn.freebsd.org> From: Alan Cox Date: Wed, 15 Aug 2012 22:12:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239315 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 22:12:02 -0000 Author: alc Date: Wed Aug 15 22:12:01 2012 New Revision: 239315 URL: http://svn.freebsd.org/changeset/base/239315 Log: Correct a KASSERT message. Submitted by: bde Modified: head/sys/kern/vfs_cluster.c Modified: head/sys/kern/vfs_cluster.c ============================================================================== --- head/sys/kern/vfs_cluster.c Wed Aug 15 20:03:47 2012 (r239314) +++ head/sys/kern/vfs_cluster.c Wed Aug 15 22:12:01 2012 (r239315) @@ -315,7 +315,7 @@ cluster_rbuild(vp, filesize, lbn, blkno, int i, inc, j, toff; KASSERT(size == vp->v_mount->mnt_stat.f_iosize, - ("cluster_rbuild: size %ld != filesize %jd\n", + ("cluster_rbuild: size %ld != f_iosize %jd\n", size, (intmax_t)vp->v_mount->mnt_stat.f_iosize)); /* From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 22:25:58 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6E83F106564A; Wed, 15 Aug 2012 22:25:58 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 59B7D8FC12; Wed, 15 Aug 2012 22:25:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FMPwlu020756; Wed, 15 Aug 2012 22:25:58 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FMPwDH020754; Wed, 15 Aug 2012 22:25:58 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201208152225.q7FMPwDH020754@svn.freebsd.org> From: Alan Cox Date: Wed, 15 Aug 2012 22:25:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239316 - head/sys/sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 22:25:58 -0000 Author: alc Date: Wed Aug 15 22:25:57 2012 New Revision: 239316 URL: http://svn.freebsd.org/changeset/base/239316 Log: Eliminate some unused declarations. Modified: head/sys/sys/buf.h Modified: head/sys/sys/buf.h ============================================================================== --- head/sys/sys/buf.h Wed Aug 15 22:12:01 2012 (r239315) +++ head/sys/sys/buf.h Wed Aug 15 22:25:57 2012 (r239316) @@ -466,10 +466,7 @@ extern int dirtybufthresh; extern int bdwriteskip; extern int dirtybufferflushes; extern int altbufferflushes; -extern int buf_maxio; /* nominal maximum I/O for buffer */ extern struct buf *buf; /* The buffer headers. */ -extern char *buffers; /* The buffer contents. */ -extern int bufpages; /* Number of memory pages in the buffer pool. */ extern struct buf *swbuf; /* Swap I/O buffer headers. */ extern int nswbuf; /* Number of swap I/O buffer headers. */ extern int cluster_pbuf_freecnt; /* Number of pbufs for clusters */ From owner-svn-src-all@FreeBSD.ORG Wed Aug 15 22:51:02 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 28F7F106566B; Wed, 15 Aug 2012 22:51:02 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 131058FC0C; Wed, 15 Aug 2012 22:51:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7FMp1cC023364; Wed, 15 Aug 2012 22:51:01 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7FMp1XC023362; Wed, 15 Aug 2012 22:51:01 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201208152251.q7FMp1XC023362@svn.freebsd.org> From: Alan Cox Date: Wed, 15 Aug 2012 22:51:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239317 - head/sys/mips/mips X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Aug 2012 22:51:02 -0000 Author: alc Date: Wed Aug 15 22:51:01 2012 New Revision: 239317 URL: http://svn.freebsd.org/changeset/base/239317 Log: Replace all uses of the vm page queues lock by a r/w lock that is private to this pmap. Tidy up the #include's. Remove the (now) unused #define PMAP_SHPGPERPROC. (This should have been removed in r239236.) Tested by: jchandra Modified: head/sys/mips/mips/pmap.c Modified: head/sys/mips/mips/pmap.c ============================================================================== --- head/sys/mips/mips/pmap.c Wed Aug 15 22:25:57 2012 (r239316) +++ head/sys/mips/mips/pmap.c Wed Aug 15 22:51:01 2012 (r239317) @@ -73,21 +73,28 @@ __FBSDID("$FreeBSD$"); #include #include -#include -#include -#include +#include #include +#include +#include +#include +#include +#include +#include +#ifdef SMP #include +#else +#include +#endif #include +#include + #ifdef DDB #include #endif #include #include -#include -#include -#include #include #include #include @@ -96,11 +103,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include -#include -#ifdef SMP -#include -#endif #include #include @@ -108,10 +110,6 @@ __FBSDID("$FreeBSD$"); #undef PMAP_DEBUG -#ifndef PMAP_SHPGPERPROC -#define PMAP_SHPGPERPROC 200 -#endif - #if !defined(DIAGNOSTIC) #define PMAP_INLINE __inline #else @@ -158,6 +156,17 @@ vm_offset_t kernel_vm_end = VM_MIN_KERNE static void pmap_asid_alloc(pmap_t pmap); /* + * Isolate the global pv list lock from data and other locks to prevent false + * sharing within the cache. + */ +static struct { + struct rwlock lock; + char padding[CACHE_LINE_SIZE - sizeof(struct rwlock)]; +} pvh_global __aligned(CACHE_LINE_SIZE); + +#define pvh_global_lock pvh_global.lock + +/* * Data for the pv entry allocation mechanism */ static TAILQ_HEAD(pch, pv_chunk) pv_chunks = TAILQ_HEAD_INITIALIZER(pv_chunks); @@ -590,6 +599,11 @@ again: pmap_max_asid = VMNUM_PIDS; mips_wr_entryhi(0); mips_wr_pagemask(0); + + /* + * Initialize the global pv list lock. + */ + rw_init(&pvh_global_lock, "pmap pv global"); } /* @@ -1091,9 +1105,9 @@ _pmap_allocpte(pmap_t pmap, unsigned pte if ((m = pmap_alloc_direct_page(ptepindex, VM_ALLOC_NORMAL)) == NULL) { if (flags & M_WAITOK) { PMAP_UNLOCK(pmap); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); pmap_grow_direct_page_cache(); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); } @@ -1187,19 +1201,8 @@ retry: /*************************************************** -* Pmap allocation/deallocation routines. + * Pmap allocation/deallocation routines. ***************************************************/ -/* - * Revision 1.397 - * - Merged pmap_release and pmap_release_free_page. When pmap_release is - * called only the page directory page(s) can be left in the pmap pte - * object, since all page table pages will have been freed by - * pmap_remove_pages and pmap_remove. In addition, there can only be one - * reference to the pmap and the page directory is wired, so the page(s) - * can never be busy. So all there is to do is clear the magic mappings - * from the page directory and free the page(s). - */ - /* * Release any resources held by the given physical map. @@ -1493,7 +1496,7 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv struct pv_chunk *pc; int bit, field, idx; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); PV_STAT(pv_entry_frees++); PV_STAT(pv_entry_spare++); @@ -1548,7 +1551,7 @@ get_pv_entry(pmap_t pmap, boolean_t try) vm_page_t m; int bit, field, idx; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); PV_STAT(pv_entry_allocs++); pv_entry_count++; @@ -1616,7 +1619,7 @@ pmap_pvh_remove(struct md_page *pvh, pma { pv_entry_t pv; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) { if (pmap == PV_PMAP(pv) && va == pv->pv_va) { TAILQ_REMOVE(&pvh->pv_list, pv, pv_list); @@ -1642,7 +1645,7 @@ static void pmap_remove_entry(pmap_t pmap, vm_page_t m, vm_offset_t va) { - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); pmap_pvh_free(&m->md, pmap, va); if (TAILQ_EMPTY(&m->md.pv_list)) vm_page_aflag_clear(m, PGA_WRITEABLE); @@ -1657,8 +1660,8 @@ pmap_try_insert_pv_entry(pmap_t pmap, vm { pv_entry_t pv; + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); if ((pv = get_pv_entry(pmap, TRUE)) != NULL) { pv->pv_va = va; TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); @@ -1678,7 +1681,7 @@ pmap_remove_pte(struct pmap *pmap, pt_en vm_page_t m; vm_paddr_t pa; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); oldpte = *ptq; @@ -1719,7 +1722,7 @@ pmap_remove_page(struct pmap *pmap, vm_o pd_entry_t *pde; pt_entry_t *ptq; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); pde = pmap_pde(pmap, va); if (pde == NULL || *pde == 0) @@ -1763,7 +1766,7 @@ pmap_remove(struct pmap *pmap, vm_offset if (pmap->pm_stats.resident_count == 0) return; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); /* @@ -1799,7 +1802,7 @@ pmap_remove(struct pmap *pmap, vm_offset } } out: - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -1826,7 +1829,7 @@ pmap_remove_all(vm_page_t m) KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_remove_all: page %p is not managed", m)); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); if (m->md.pv_flags & PV_TABLE_REF) vm_page_aflag_set(m, PGA_REFERENCED); @@ -1876,7 +1879,7 @@ pmap_remove_all(vm_page_t m) vm_page_aflag_clear(m, PGA_WRITEABLE); m->md.pv_flags &= ~(PV_TABLE_REF | PV_TABLE_MOD); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } /* @@ -1897,7 +1900,7 @@ pmap_protect(pmap_t pmap, vm_offset_t sv if (prot & VM_PROT_WRITE) return; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); for (; sva < eva; sva = va_next) { pt_entry_t pbits; @@ -1945,7 +1948,7 @@ pmap_protect(pmap_t pmap, vm_offset_t sv } } } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -1979,7 +1982,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, mpte = NULL; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); /* @@ -2141,7 +2144,7 @@ validate: mips_icache_sync_range(va, PAGE_SIZE); mips_dcache_wbinv_range(va, PAGE_SIZE); } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -2158,10 +2161,10 @@ void pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot) { - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); (void)pmap_enter_quick_locked(pmap, va, m, prot, NULL); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -2175,7 +2178,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_ KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva || (m->oflags & VPO_UNMANAGED) != 0, ("pmap_enter_quick_locked: managed mapping within the clean submap")); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); /* @@ -2347,11 +2350,6 @@ pmap_kenter_temporary_free(vm_paddr_t pa } /* - * Moved the code to Machine Independent - * vm_map_pmap_enter() - */ - -/* * Maps a sequence of resident pages belonging to the same object. * The sequence begins with the given page m_start. This page is * mapped at the given virtual address start. Each subsequent page is @@ -2374,14 +2372,14 @@ pmap_enter_object(pmap_t pmap, vm_offset psize = atop(end - start); mpte = NULL; m = m_start; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { mpte = pmap_enter_quick_locked(pmap, start + ptoa(diff), m, prot, mpte); m = TAILQ_NEXT(m, listq); } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); PMAP_UNLOCK(pmap); } @@ -2564,7 +2562,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_p KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_page_exists_quick: page %p is not managed", m)); rv = FALSE; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { if (PV_PMAP(pv) == pmap) { rv = TRUE; @@ -2574,7 +2572,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_p if (loops >= 16) break; } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); return (rv); } @@ -2601,7 +2599,7 @@ pmap_remove_pages(pmap_t pmap) printf("warning: pmap_remove_pages called with non-current pmap\n"); return; } - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); PMAP_LOCK(pmap); TAILQ_FOREACH_SAFE(pc, &pmap->pm_pvchunk, pc_list, npc) { allfree = 1; @@ -2661,7 +2659,7 @@ pmap_remove_pages(pmap_t pmap) } pmap_invalidate_all(pmap); PMAP_UNLOCK(pmap); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } /* @@ -2680,7 +2678,7 @@ pmap_testbit(vm_page_t m, int bit) if (m->oflags & VPO_UNMANAGED) return (rv); - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { pmap = PV_PMAP(pv); PMAP_LOCK(pmap); @@ -2706,7 +2704,7 @@ pmap_changebit(vm_page_t m, int bit, boo if (m->oflags & VPO_UNMANAGED) return; - mtx_assert(&vm_page_queue_mtx, MA_OWNED); + rw_assert(&pvh_global_lock, RA_WLOCKED); /* * Loop over all current mappings setting/clearing as appropos If * setting RO do we need to clear the VAC? @@ -2755,7 +2753,7 @@ pmap_page_wired_mappings(vm_page_t m) count = 0; if ((m->oflags & VPO_UNMANAGED) != 0) return (count); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { pmap = PV_PMAP(pv); PMAP_LOCK(pmap); @@ -2764,7 +2762,7 @@ pmap_page_wired_mappings(vm_page_t m) count++; PMAP_UNLOCK(pmap); } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); return (count); } @@ -2790,7 +2788,7 @@ pmap_remove_write(vm_page_t m) if ((m->oflags & VPO_BUSY) == 0 && (m->aflags & PGA_WRITEABLE) == 0) return; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { pmap = PV_PMAP(pv); PMAP_LOCK(pmap); @@ -2811,7 +2809,7 @@ pmap_remove_write(vm_page_t m) PMAP_UNLOCK(pmap); } vm_page_aflag_clear(m, PGA_WRITEABLE); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } /* @@ -2826,9 +2824,9 @@ pmap_ts_referenced(vm_page_t m) KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_ts_referenced: page %p is not managed", m)); if (m->md.pv_flags & PV_TABLE_REF) { - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); m->md.pv_flags &= ~PV_TABLE_REF; - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); return (1); } return (0); @@ -2857,12 +2855,12 @@ pmap_is_modified(vm_page_t m) if ((m->oflags & VPO_BUSY) == 0 && (m->aflags & PGA_WRITEABLE) == 0) return (FALSE); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); if (m->md.pv_flags & PV_TABLE_MOD) rv = TRUE; else rv = pmap_testbit(m, PTE_D); - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); return (rv); } @@ -2912,12 +2910,12 @@ pmap_clear_modify(vm_page_t m) */ if ((m->aflags & PGA_WRITEABLE) == 0) return; - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); if (m->md.pv_flags & PV_TABLE_MOD) { pmap_changebit(m, PTE_D, FALSE); m->md.pv_flags &= ~PV_TABLE_MOD; } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } /* @@ -2946,11 +2944,11 @@ pmap_clear_reference(vm_page_t m) KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_clear_reference: page %p is not managed", m)); - vm_page_lock_queues(); + rw_wlock(&pvh_global_lock); if (m->md.pv_flags & PV_TABLE_REF) { m->md.pv_flags &= ~PV_TABLE_REF; } - vm_page_unlock_queues(); + rw_wunlock(&pvh_global_lock); } /* From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 00:51:50 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A5ADD1065673; Thu, 16 Aug 2012 00:51:50 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 910B68FC12; Thu, 16 Aug 2012 00:51:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G0pomF036088; Thu, 16 Aug 2012 00:51:50 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G0poqM036086; Thu, 16 Aug 2012 00:51:50 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208160051.q7G0poqM036086@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Thu, 16 Aug 2012 00:51:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239318 - head/sys/nfs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 00:51:50 -0000 Author: gonzo Date: Thu Aug 16 00:51:50 2012 New Revision: 239318 URL: http://svn.freebsd.org/changeset/base/239318 Log: Merge somewhat modified r230399 from projects/armv6: Add timeout to wait for network controllers to appear when netbooting. USB ethernet adapter initialization usually is delayed and they're not available immidiately after autoconfiguration. So we need to wait a bit before giving up Reviewed by: stas@ Modified: head/sys/nfs/bootp_subr.c Modified: head/sys/nfs/bootp_subr.c ============================================================================== --- head/sys/nfs/bootp_subr.c Wed Aug 15 22:51:01 2012 (r239317) +++ head/sys/nfs/bootp_subr.c Thu Aug 16 00:51:50 2012 (r239318) @@ -82,6 +82,14 @@ __FBSDID("$FreeBSD$"); #define BOOTP_SETTLE_DELAY 3 #endif +/* + * Wait 10 seconds for interface appearance + * USB ethernet adapters might reqquire some time to pop up + */ +#ifndef BOOTP_IFACE_WAIT_TIMEOUT +#define BOOTP_IFACE_WAIT_TIMEOUT 10 +#endif + /* * What is the longest we will wait before re-sending a request? * Note this is also the frequency of "RPC timeout" messages. @@ -1515,6 +1523,8 @@ bootpc_init(void) #endif struct nfsv3_diskless *nd; struct thread *td; + int timeout = BOOTP_IFACE_WAIT_TIMEOUT * hz; + int delay = hz / 10; nd = &nfsv3_diskless; td = curthread; @@ -1567,6 +1577,7 @@ bootpc_init(void) allocifctx(gctx); #endif +retry: ifctx = STAILQ_FIRST(&gctx->interfaces); IFNET_RLOCK(); TAILQ_FOREACH(ifp, &V_ifnet, if_link) { @@ -1613,6 +1624,11 @@ bootpc_init(void) if (STAILQ_EMPTY(&gctx->interfaces) || STAILQ_FIRST(&gctx->interfaces)->ifp == NULL) { + if (timeout > 0) { + pause("bootpc", delay); + timeout -= delay; + goto retry; + } #ifdef BOOTP_WIRED_TO panic("%s: Could not find interface specified " "by BOOTP_WIRED_TO: " From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 00:53:24 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 098751065676; Thu, 16 Aug 2012 00:53:24 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E8DF88FC12; Thu, 16 Aug 2012 00:53:23 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G0rNoI036279; Thu, 16 Aug 2012 00:53:23 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G0rNar036277; Thu, 16 Aug 2012 00:53:23 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208160053.q7G0rNar036277@svn.freebsd.org> From: Adrian Chadd Date: Thu, 16 Aug 2012 00:53:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239319 - head/sys/net80211 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 00:53:24 -0000 Author: adrian Date: Thu Aug 16 00:53:23 2012 New Revision: 239319 URL: http://svn.freebsd.org/changeset/base/239319 Log: Fix an incorrect comparison. PR: kern/170098 Modified: head/sys/net80211/ieee80211_node.c Modified: head/sys/net80211/ieee80211_node.c ============================================================================== --- head/sys/net80211/ieee80211_node.c Thu Aug 16 00:51:50 2012 (r239318) +++ head/sys/net80211/ieee80211_node.c Thu Aug 16 00:53:23 2012 (r239319) @@ -2242,7 +2242,7 @@ ieee80211_iterate_nodes(struct ieee80211 ieee80211_iter_func *f, void *arg) { struct ieee80211_node **ni_arr; - unsigned long size; + size_t size; int i; uint16_t max_aid; @@ -2260,13 +2260,12 @@ ieee80211_iterate_nodes(struct ieee80211 * the table; just skip to the end and free the * temporary memory. */ - if (!ieee80211_iterate_nt(nt, ni_arr, max_aid)) + if (ieee80211_iterate_nt(nt, ni_arr, max_aid) != 0) goto done; for (i = 0; i < max_aid; i++) { if (ni_arr[i] == NULL) /* end of the list */ break; - (*f)(arg, ni_arr[i]); /* ieee80211_free_node() locks by itself */ ieee80211_free_node(ni_arr[i]); From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 02:35:45 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4B440106564A; Thu, 16 Aug 2012 02:35:45 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 360938FC0A; Thu, 16 Aug 2012 02:35:45 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G2ZjTq046707; Thu, 16 Aug 2012 02:35:45 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G2Zj42046704; Thu, 16 Aug 2012 02:35:45 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201208160235.q7G2Zj42046704@svn.freebsd.org> From: Warner Losh Date: Thu, 16 Aug 2012 02:35:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239320 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 02:35:45 -0000 Author: imp Date: Thu Aug 16 02:35:44 2012 New Revision: 239320 URL: http://svn.freebsd.org/changeset/base/239320 Log: Limit popcorn limit to something sane (either 2ns or 2 ticks if that's longer). PR: 156481 Submitted by: Ian Lepore Modified: head/sys/kern/kern_ntptime.c Modified: head/sys/kern/kern_ntptime.c ============================================================================== --- head/sys/kern/kern_ntptime.c Thu Aug 16 00:53:23 2012 (r239319) +++ head/sys/kern/kern_ntptime.c Thu Aug 16 02:35:44 2012 (r239320) @@ -832,8 +832,15 @@ hardpps(tsp, nsec) * discarded. otherwise, if so enabled, the time offset is * updated. We can tolerate a modest loss of data here without * much degrading time accuracy. - */ - if (u_nsec > (pps_jitter << PPS_POPCORN)) { + * + * The measurements being checked here were made with the system + * timecounter, so the popcorn threshold is not allowed to fall below + * the number of nanoseconds in two ticks of the timecounter. For a + * timecounter running faster than 1 GHz the lower bound is 2ns, just + * to avoid a nonsensical threshold of zero. + */ + if (u_nsec > lmax(pps_jitter << PPS_POPCORN, + 2 * (NANOSECOND / (long)qmin(NANOSECOND, tc_getfrequency())))) { time_status |= STA_PPSJITTER; pps_jitcnt++; } else if (time_status & STA_PPSTIME) { From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 04:41:16 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C12F2106566C; Thu, 16 Aug 2012 04:41:16 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 92EAA8FC08; Thu, 16 Aug 2012 04:41:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G4fG26059688; Thu, 16 Aug 2012 04:41:16 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G4fGEx059686; Thu, 16 Aug 2012 04:41:16 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201208160441.q7G4fGEx059686@svn.freebsd.org> From: Alan Cox Date: Thu, 16 Aug 2012 04:41:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239321 - head/sys/mips/mips X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 04:41:16 -0000 Author: alc Date: Thu Aug 16 04:41:15 2012 New Revision: 239321 URL: http://svn.freebsd.org/changeset/base/239321 Log: Eliminate an unused parameter from init_pte_prot(). Eliminate stray whitespace within init_pte_prot(). Eliminate a gratuitous variable initialization from pmap_enter(). Modified: head/sys/mips/mips/pmap.c Modified: head/sys/mips/mips/pmap.c ============================================================================== --- head/sys/mips/mips/pmap.c Thu Aug 16 02:35:44 2012 (r239320) +++ head/sys/mips/mips/pmap.c Thu Aug 16 04:41:15 2012 (r239321) @@ -196,7 +196,7 @@ static int _pmap_unwire_pte_hold(pmap_t static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags); static vm_page_t _pmap_allocpte(pmap_t pmap, unsigned ptepindex, int flags); static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t); -static pt_entry_t init_pte_prot(vm_offset_t va, vm_page_t m, vm_prot_t prot); +static pt_entry_t init_pte_prot(vm_page_t m, vm_prot_t prot); #ifdef SMP static void pmap_invalidate_page_action(void *arg); @@ -1973,7 +1973,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, pt_entry_t origpte, newpte; pv_entry_t pv; vm_page_t mpte, om; - pt_entry_t rw = 0; + pt_entry_t rw; va &= ~PAGE_MASK; KASSERT(va <= VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig")); @@ -2084,7 +2084,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, validate: if ((access & VM_PROT_WRITE) != 0) m->md.pv_flags |= PV_TABLE_MOD | PV_TABLE_REF; - rw = init_pte_prot(va, m, prot); + rw = init_pte_prot(m, prot); #ifdef PMAP_DEBUG printf("pmap_enter: va: %p -> pa: %p\n", (void *)va, (void *)pa); @@ -3297,21 +3297,21 @@ page_is_managed(vm_paddr_t pa) } static pt_entry_t -init_pte_prot(vm_offset_t va, vm_page_t m, vm_prot_t prot) +init_pte_prot(vm_page_t m, vm_prot_t prot) { pt_entry_t rw; if (!(prot & VM_PROT_WRITE)) - rw = PTE_V | PTE_RO; + rw = PTE_V | PTE_RO; else if ((m->oflags & VPO_UNMANAGED) == 0) { if ((m->md.pv_flags & PV_TABLE_MOD) != 0) - rw = PTE_V | PTE_D; + rw = PTE_V | PTE_D; else rw = PTE_V; vm_page_aflag_set(m, PGA_WRITEABLE); } else /* Needn't emulate a modified bit for unmanaged pages. */ - rw = PTE_V | PTE_D; + rw = PTE_V | PTE_D; return (rw); } From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 04:49:23 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B5171106566B; Thu, 16 Aug 2012 04:49:23 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 87D768FC0A; Thu, 16 Aug 2012 04:49:23 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G4nNss060562; Thu, 16 Aug 2012 04:49:23 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G4nN4G060561; Thu, 16 Aug 2012 04:49:23 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201208160449.q7G4nN4G060561@svn.freebsd.org> From: Warner Losh Date: Thu, 16 Aug 2012 04:49:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239322 - head/sys/arm/conf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 04:49:23 -0000 Author: imp Date: Thu Aug 16 04:49:23 2012 New Revision: 239322 URL: http://svn.freebsd.org/changeset/base/239322 Log: Remove unused hints. Deleted: head/sys/arm/conf/HL201.hints From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 04:53:30 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A4A67106566B; Thu, 16 Aug 2012 04:53:30 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 901618FC0A; Thu, 16 Aug 2012 04:53:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G4rUd7061067; Thu, 16 Aug 2012 04:53:30 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G4rUeg061066; Thu, 16 Aug 2012 04:53:30 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201208160453.q7G4rUeg061066@svn.freebsd.org> From: Warner Losh Date: Thu, 16 Aug 2012 04:53:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239323 - head/sys/arm/conf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 04:53:30 -0000 Author: imp Date: Thu Aug 16 04:53:30 2012 New Revision: 239323 URL: http://svn.freebsd.org/changeset/base/239323 Log: Hmmm, somehow this file was completely deleted, rather than just having the bogus lines being removed. Added: head/sys/arm/conf/HL201.hints (contents, props changed) Added: head/sys/arm/conf/HL201.hints ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/HL201.hints Thu Aug 16 04:53:30 2012 (r239323) @@ -0,0 +1,48 @@ +# $FreeBSD$ + +# Atmel AT45DB21D +hint.at45d.0.at="spibus0" +hint.at45d.0.cs=0 +# Area 0: 00000000 to 000041FF (RO) Bootstrap +# Area 1: 00004200 to 000083FF Environment +# Area 2: 00008400 to 00041FFF (RO) U-Boot +# Area 3: 00042000 to 00251FFF Kernel +# Area 4: 00252000 to 0083FFFF FS +# bootstrap +hint.map.0.at="flash/spi0" +hint.map.0.start=0x00000000 +hint.map.0.end=0x000041ff +hint.map.0.name="bootstrap" +hint.map.0.readonly=1 +# uboot environment +hint.map.1.at="flash/spi0" +hint.map.1.start=0x00004200 +hint.map.1.end=0x00083ff +hint.map.1.name="uboot-env" +#hint.map.1.readonly=1 +# uboot +hint.map.2.at="flash/spi0" +hint.map.2.start=0x00008400 +hint.map.2.end=0x00041fff +hint.map.2.name="uboot" +hint.map.2.readonly=1 +# kernel +hint.map.3.at="flash/spi0" +hint.map.3.start=0x00042000 +hint.map.3.end=0x00251fff +hint.map.3.name="fs" +#hint.map.3.readonly=1 +# fs +hint.map.4.at="flash/spi0" +hint.map.4.start=0x00252000 +hint.map.4.end=0x0083ffff +hint.map.4.name="fs" +#hint.map.4.readonly=1 + +# EEPROM at24c512 - 512kbit 65,536x8 memory +hint.icee.0.at="iicbus0" +hint.icee.0.addr=0xa0 +hint.icee.0.type=16 +hint.icee.0.size=65536 +hint.icee.0.rd_sz=128 +hint.icee.0.wr_sz=128 From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 05:04:00 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 74865106564A; Thu, 16 Aug 2012 05:04:00 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5EF6E8FC0C; Thu, 16 Aug 2012 05:04:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G540pK062429; Thu, 16 Aug 2012 05:04:00 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G540jP062423; Thu, 16 Aug 2012 05:04:00 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201208160504.q7G540jP062423@svn.freebsd.org> From: Warner Losh Date: Thu, 16 Aug 2012 05:04:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239324 - in head/sys/arm: at91 conf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 05:04:00 -0000 Author: imp Date: Thu Aug 16 05:03:59 2012 New Revision: 239324 URL: http://svn.freebsd.org/changeset/base/239324 Log: Preliminary Embest ATEB9200 support. Added: head/sys/arm/at91/board_eb9200.c - copied, changed from r239191, head/sys/arm/at91/board_kb920x.c head/sys/arm/at91/std.eb9200 (contents, props changed) head/sys/arm/conf/EB9200 (contents, props changed) head/sys/arm/conf/EB9200.hints (contents, props changed) Modified: head/sys/arm/at91/files.at91 Copied and modified: head/sys/arm/at91/board_eb9200.c (from r239191, head/sys/arm/at91/board_kb920x.c) ============================================================================== --- head/sys/arm/at91/board_kb920x.c Sat Aug 11 05:58:56 2012 (r239191, copy source) +++ head/sys/arm/at91/board_eb9200.c Thu Aug 16 05:03:59 2012 (r239324) @@ -38,27 +38,29 @@ BOARD_INIT long board_init(void) { - at91rm9200_set_subtype(AT91_ST_RM9200_PQFP); + at91rm9200_set_subtype(AT91_ST_RM9200_BGA); /* * Setup the serial ports. - * DBGU is the main one, although jumpers can make USART0 default. - * USART1 is IrDA, and USART3 is optional RS485. + * DBGU and USART0 are DB9 ports. + * USART2 is IrDA. */ at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */ - at91rm9200_config_uart(AT91RM9200_ID_USART0, 1, 0); /* Tx and Rx */ - at91rm9200_config_uart(AT91RM9200_ID_USART1, 2, 0); /* Tx and Rx - IRDA */ - at91rm9200_config_uart(AT91RM9200_ID_USART3, 3, /* Tx, Rx, CTS, RTS - RS485 */ - AT91_UART_CTS | AT91_UART_RTS); + at91rm9200_config_uart(AT91RM9200_ID_USART0, 1, + AT91_UART_CTS | AT91_UART_RTS | AT91_UART_DTR | AT91_UART_DSR | + AT91_UART_DCD | AT91_UART_RI); + at91rm9200_config_uart(AT91RM9200_ID_USART1, 2, 0); at91rm9200_config_mci(1); /* CFE interface */ + /* SPI interface */ /* ethernet interface */ - /* lcd interface */ /* USB host */ /* USB device (gadget) */ /* TWI */ + /* CF interface */ + /* SmartMedia Interface */ return (at91_ramsize()); } Modified: head/sys/arm/at91/files.at91 ============================================================================== --- head/sys/arm/at91/files.at91 Thu Aug 16 04:53:30 2012 (r239323) +++ head/sys/arm/at91/files.at91 Thu Aug 16 05:03:59 2012 (r239324) @@ -38,6 +38,7 @@ arm/at91/at91sam9x5.c optional at91sam9 # All the boards we support # arm/at91/board_bwct.c optional at91_board_bwct +arm/at91/board_eb9200.c optional at91_board_eb9200 arm/at91/board_ethernut5.c optional at91_board_ethernut5 arm/at91/board_hl200.c optional at91_board_hl200 arm/at91/board_hl201.c optional at91_board_hl201 Added: head/sys/arm/at91/std.eb9200 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/at91/std.eb9200 Thu Aug 16 05:03:59 2012 (r239324) @@ -0,0 +1,10 @@ +#$FreeBSD$ +include "../at91/std.at91" + +options STARTUP_PAGETABLE_ADDR=0x20800000 +makeoptions KERNPHYSADDR=0x20000000 +options KERNPHYSADDR=0x20000000 +makeoptions KERNVIRTADDR=0xc0000000 +options KERNVIRTADDR=0xc0000000 + +device at91_board_eb9200 Added: head/sys/arm/conf/EB9200 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/EB9200 Thu Aug 16 05:03:59 2012 (r239324) @@ -0,0 +1,109 @@ +# EB9200 - Custom kernel for the Embest ATEB9200 AT91RM9200 evaluation board. +# +# For more information on this file, please read the handbook section on +# Kernel Configuration Files: +# +# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html +# +# 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$ + +ident EB9200 + +include "../at91/std.eb9200" +# The AT91 platform doesn't use /boot/loader, so we have to statically wire +# hints. +hints "EB9200.hints" +makeoptions MODULES_OVERRIDE="" + +makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +options DDB +options KDB + +options SCHED_4BSD #4BSD scheduler +options INET #InterNETworking +#options INET6 #IPv6 communications protocols +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 MD_ROOT #MD is a potential root device +#options MD_ROOT_SIZE=4096 # 4MB ram disk +#options ROOTDEVNAME=\"ufs:/dev/da0s1a\" +options NFSCL #New Network Filesystem Client +options NFSD #New Network Filesystem Server +options NFSLOCKD #Network Lock Manager +options NFS_ROOT #NFS usable as /, requires NFSCL +options BOOTP_NFSROOT +options BOOTP + +#options MSDOSFS #MSDOS Filesystem +#options CD9660 #ISO 9660 Filesystem +#options PROCFS #Process filesystem (requires PSEUDOFS) +options PSEUDOFS #Pseudo-filesystem framework +#options SCSI_DELAY=5000 #Delay (in ms) before probing SCSI +#options KTRACE #ktrace(1) 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 NO_SYSCTL_DESCR +# Disable the inlining of mutex, rwlock and sx locks. These eat up a lot +# of space. +options MUTEX_NOINLINE +options RWLOCK_NOINLINE +options SX_NOINLINE +options NO_FFS_SNAPSHOT +options NO_SWAPPING +device random +device loop +device ether +device uart +device ate +device miibus +#device lxtphy + +device at91_cfata +device ata + +# Debugging for use in -current +#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 + +device md +device at91_twi # TWI: Two Wire Interface +device at91_spi # SPI: +device spibus +# MMC/SD +device at91_mci +device mmc +device mmcsd +# iic +device iic +device iicbus +device icee + +device bpf +# USB support +options USB_DEBUG # enable debug msgs +device ohci # OHCI localbus->USB interface +device usb # USB Bus (required) +device umass # Disks/Mass storage - Requires scbus and da +# SCSI peripherals +device scbus # SCSI bus (required for SCSI) +device da # Direct Access (disks) +device cd # CD +device pass # Passthrough device (direct SCSI access) + +# USB device (gadget) support +#device at91_dci # Atmel's usb device +#device usfs # emulate a flash +#device cdce # emulate an ethernet +#device usb_template # Control of the gadget Added: head/sys/arm/conf/EB9200.hints ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/conf/EB9200.hints Thu Aug 16 05:03:59 2012 (r239324) @@ -0,0 +1,6 @@ +# $FreeBSD$ + +# should likely list CF here since its address isn't fixed. +# but since it is at an external chip select, do we use that or the address +# to configure it as its bus address? Need to fix arbitrary bus mapping +# before I can list it here. From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 06:45:59 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3D5D41065673; Thu, 16 Aug 2012 06:45:59 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 285928FC0A; Thu, 16 Aug 2012 06:45:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G6jxHR073125; Thu, 16 Aug 2012 06:45:59 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G6jwbg073123; Thu, 16 Aug 2012 06:45:58 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201208160645.q7G6jwbg073123@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Thu, 16 Aug 2012 06:45:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239325 - head/sys/boot/common X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 06:45:59 -0000 Author: ae Date: Thu Aug 16 06:45:58 2012 New Revision: 239325 URL: http://svn.freebsd.org/changeset/base/239325 Log: Add comment why the code has been disabled. Requested by: rpaulo Modified: head/sys/boot/common/part.c Modified: head/sys/boot/common/part.c ============================================================================== --- head/sys/boot/common/part.c Thu Aug 16 05:03:59 2012 (r239324) +++ head/sys/boot/common/part.c Thu Aug 16 06:45:58 2012 (r239325) @@ -372,7 +372,7 @@ ptable_ebrread(struct ptable *table, voi if (buf == NULL) return (table); for (i = 0; i < MAXEBRENTRIES; i++) { -#if 0 +#if 0 /* Some BIOSes return an incorrect number of sectors */ if (offset >= table->sectors) break; #endif @@ -665,7 +665,7 @@ ptable_open(void *dev, off_t sectors, ui end = le32toh(dp[i].dp_size); if (start == 0 || end == 0) continue; -#if 0 +#if 0 /* Some BIOSes return an incorrect number of sectors */ if (start + end - 1 >= sectors) continue; /* XXX: ignore */ #endif From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 07:29:31 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 309CC106566C; Thu, 16 Aug 2012 07:29:31 +0000 (UTC) (envelope-from peter@rulingia.com) Received: from vps.rulingia.com (host-122-100-2-194.octopus.com.au [122.100.2.194]) by mx1.freebsd.org (Postfix) with ESMTP id B547B8FC16; Thu, 16 Aug 2012 07:29:29 +0000 (UTC) Received: from server.rulingia.com (c220-239-249-137.belrs5.nsw.optusnet.com.au [220.239.249.137]) by vps.rulingia.com (8.14.5/8.14.5) with ESMTP id q7G7TMLM019922 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 16 Aug 2012 17:29:23 +1000 (EST) (envelope-from peter@rulingia.com) X-Bogosity: Ham, spamicity=0.000000 Received: from server.rulingia.com (localhost.rulingia.com [127.0.0.1]) by server.rulingia.com (8.14.5/8.14.5) with ESMTP id q7G7THG7012428 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 16 Aug 2012 17:29:17 +1000 (EST) (envelope-from peter@server.rulingia.com) Received: (from peter@localhost) by server.rulingia.com (8.14.5/8.14.5/Submit) id q7G7THj4012427; Thu, 16 Aug 2012 17:29:17 +1000 (EST) (envelope-from peter) Date: Thu, 16 Aug 2012 17:29:16 +1000 From: Peter Jeremy To: Konstantin Belousov Message-ID: <20120816072916.GA12294@server.rulingia.com> References: <201208151556.q7FFuLnM076015@svn.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="DocE+STaALJfprDB" Content-Disposition: inline In-Reply-To: <201208151556.q7FFuLnM076015@svn.freebsd.org> X-PGP-Key: http://www.rulingia.com/keys/peter.pgp User-Agent: Mutt/1.5.21 (2010-09-15) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239301 - in head/sys: kern nlm sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 07:29:31 -0000 --DocE+STaALJfprDB Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 2012-Aug-15 15:56:21 +0000, Konstantin Belousov wrote: > Add a sysctl kern.pid_max, which limits the maximum pid the system is > allowed to allocate, and corresponding tunable with the same > name. Note that existing processes with higher pids are left intact. Sorry for not picking this up when you first posted the patch but I think you need to place a lower bound on max_pid to prevent the system being rendered unusable. >Modified: head/sys/kern/kern_fork.c >=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >--- head/sys/kern/kern_fork.c Wed Aug 15 15:53:27 2012 (r239300) >+++ head/sys/kern/kern_fork.c Wed Aug 15 15:56:21 2012 (r239301) >@@ -209,8 +209,8 @@ sysctl_kern_randompid(SYSCTL_HANDLER_ARG > pid =3D randompid; > error =3D sysctl_handle_int(oidp, &pid, 0, req); > if (error =3D=3D 0 && req->newptr !=3D NULL) { >- if (pid < 0 || pid > PID_MAX - 100) /* out of range */ >- pid =3D PID_MAX - 100; >+ if (pid < 0 || pid > pid_max - 100) /* out of range */ >+ pid =3D pid_max - 100; Setting max_pid to a value less than 100 will have an undesirable effect he= re. >+static int >+sysctl_kern_pid_max(SYSCTL_HANDLER_ARGS) >+{ >+ int error, pm; >+ >+ pm =3D pid_max; >+ error =3D sysctl_handle_int(oidp, &pm, 0, req); >+ if (error || !req->newptr) >+ return (error); >+ sx_xlock(&proctree_lock); >+ sx_xlock(&allproc_lock); >+ /* Only permit the values less then PID_MAX. */ >+ if (pm > PID_MAX) >+ error =3D EINVAL; >+ else >+ pid_max =3D pm; >+ sx_xunlock(&allproc_lock); >+ sx_xunlock(&proctree_lock); >+ return (error); >+} >+SYSCTL_PROC(_kern, OID_AUTO, pid_max, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_= TUN | >+ CTLFLAG_MPSAFE, 0, 0, sysctl_kern_pid_max, "I", >+ "Maximum allowed pid"); I don't see anything in this code that would prevent setting max_pid to an unusably low (as in making the system unusable) or even negative value >+ TUNABLE_INT_FETCH("kern.pid_max", &pid_max); >+ if (pid_max > PID_MAX) >+ pid_max =3D PID_MAX; > } Likewise, this needs a lower bounds check. --=20 Peter Jeremy --DocE+STaALJfprDB Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iEYEARECAAYFAlAsoUwACgkQ/opHv/APuIecLgCfb6vRgonlR0UnIf6f6pMioKiK ki8AnjX7t4aEvoCr+EChC6MRSHF31fQy =e8AG -----END PGP SIGNATURE----- --DocE+STaALJfprDB-- From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 07:43:16 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 54CB4106566C; Thu, 16 Aug 2012 07:43:16 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3F8E98FC12; Thu, 16 Aug 2012 07:43:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G7hG5a079241; Thu, 16 Aug 2012 07:43:16 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G7hGW8079239; Thu, 16 Aug 2012 07:43:16 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201208160743.q7G7hGW8079239@svn.freebsd.org> From: Alexander Motin Date: Thu, 16 Aug 2012 07:43:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239326 - head/sys/dev/sound/pci/hda X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 07:43:16 -0000 Author: mav Date: Thu Aug 16 07:43:15 2012 New Revision: 239326 URL: http://svn.freebsd.org/changeset/base/239326 Log: Fix "speaker" volume control, broken at r230451. Reported and tested by: Slawa Olhovchenkov MFC after: 1 month Modified: head/sys/dev/sound/pci/hda/hdaa.c Modified: head/sys/dev/sound/pci/hda/hdaa.c ============================================================================== --- head/sys/dev/sound/pci/hda/hdaa.c Thu Aug 16 06:45:58 2012 (r239325) +++ head/sys/dev/sound/pci/hda/hdaa.c Thu Aug 16 07:43:15 2012 (r239326) @@ -2127,11 +2127,14 @@ hdaa_audio_ctl_dev_volume(struct hdaa_pc w = hdaa_widget_get(devinfo, i); if (w == NULL || w->enable == 0) continue; - if (w->bindas < 0 && pdevinfo->index != 0) - continue; - if (w->bindas != pdevinfo->playas && - w->bindas != pdevinfo->recas) - continue; + if (w->bindas < 0) { + if (pdevinfo->index != 0) + continue; + } else { + if (w->bindas != pdevinfo->playas && + w->bindas != pdevinfo->recas) + continue; + } if (dev == SOUND_MIXER_RECLEV && w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_AUDIO_INPUT) { hdaa_audio_ctl_dest_volume(pdevinfo, dev, From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 08:29:50 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2502F106566B; Thu, 16 Aug 2012 08:29:50 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EAC958FC16; Thu, 16 Aug 2012 08:29:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7G8TnWT084390; Thu, 16 Aug 2012 08:29:49 GMT (envelope-from des@svn.freebsd.org) Received: (from des@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7G8TnRl084388; Thu, 16 Aug 2012 08:29:49 GMT (envelope-from des@svn.freebsd.org) Message-Id: <201208160829.q7G8TnRl084388@svn.freebsd.org> From: Dag-Erling Smørgrav Date: Thu, 16 Aug 2012 08:29:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239327 - head/sys/vm X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 08:29:50 -0000 Author: des Date: Thu Aug 16 08:29:49 2012 New Revision: 239327 URL: http://svn.freebsd.org/changeset/base/239327 Log: - When running out of swzone, instead of spewing an error message every tick until the situation is resolved (if ever), just print a single message when running out and another when space becomes available. - When adding more swap, warn if the total amount exceeds half the theoretical maximum we can handle. Modified: head/sys/vm/swap_pager.c Modified: head/sys/vm/swap_pager.c ============================================================================== --- head/sys/vm/swap_pager.c Thu Aug 16 07:43:15 2012 (r239326) +++ head/sys/vm/swap_pager.c Thu Aug 16 08:29:49 2012 (r239327) @@ -1804,6 +1804,7 @@ restart: static void swp_pager_meta_build(vm_object_t object, vm_pindex_t pindex, daddr_t swapblk) { + static volatile int exhausted; struct swblock *swap; struct swblock **pswap; int idx; @@ -1847,7 +1848,9 @@ retry: mtx_unlock(&swhash_mtx); VM_OBJECT_UNLOCK(object); if (uma_zone_exhausted(swap_zone)) { - printf("swap zone exhausted, increase kern.maxswzone\n"); + if (atomic_cmpset_rel_int(&exhausted, 0, 1)) + printf("swap zone exhausted, " + "increase kern.maxswzone\n"); vm_pageout_oom(VM_OOM_SWAPZ); pause("swzonex", 10); } else @@ -1856,6 +1859,9 @@ retry: goto retry; } + if (atomic_cmpset_rel_int(&exhausted, 1, 0)) + printf("swap zone ok\n"); + swap->swb_hnext = NULL; swap->swb_object = object; swap->swb_index = pindex & ~(vm_pindex_t)SWAP_META_MASK; @@ -2112,6 +2118,31 @@ done: return (error); } +/* + * Check that the total amount of swap currently configured does not + * exceed half the theoretical maximum. If it does, print a warning + * message and return -1; otherwise, return 0. + */ +static int +swapon_check_swzone(unsigned long npages) +{ + unsigned long maxpages; + + /* absolute maximum we can handle assuming 100% efficiency */ + maxpages = uma_zone_get_max(swap_zone) * SWAP_META_PAGES; + + /* recommend using no more than half that amount */ + if (npages > maxpages / 2) { + printf("warning: total configured swap (%lu pages) " + "exceeds maximum recommended amount (%lu pages).\n", + npages, maxpages); + printf("warning: increase kern.maxswzone " + "or reduce amount of swap.\n"); + return (-1); + } + return (0); +} + static void swaponsomething(struct vnode *vp, void *id, u_long nblks, sw_strategy_t *strategy, sw_close_t *close, dev_t dev) { @@ -2175,6 +2206,7 @@ swaponsomething(struct vnode *vp, void * nswapdev++; swap_pager_avail += nblks; swap_total += (vm_ooffset_t)nblks * PAGE_SIZE; + swapon_check_swzone(swap_total / PAGE_SIZE); swp_sizecheck(); mtx_unlock(&sw_dev_mtx); } From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 08:37:36 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DDC92106564A; Thu, 16 Aug 2012 08:37:35 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.zoral.com.ua (mx0.zoral.com.ua [91.193.166.200]) by mx1.freebsd.org (Postfix) with ESMTP id 741BE8FC0A; Thu, 16 Aug 2012 08:37:34 +0000 (UTC) Received: from skuns.kiev.zoral.com.ua (localhost [127.0.0.1]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id q7G8bhf2080026; Thu, 16 Aug 2012 11:37:43 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.5/8.14.5) with ESMTP id q7G8bVvP030817; Thu, 16 Aug 2012 11:37:31 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.5/8.14.5/Submit) id q7G8bVKu030816; Thu, 16 Aug 2012 11:37:31 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Thu, 16 Aug 2012 11:37:31 +0300 From: Konstantin Belousov To: Oleksandr Tymoshenko Message-ID: <20120816083731.GP5883@deviant.kiev.zoral.com.ua> References: <201208160051.q7G0poqM036086@svn.freebsd.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="iq/fWD14IMVFWBCD" Content-Disposition: inline In-Reply-To: <201208160051.q7G0poqM036086@svn.freebsd.org> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: clamav-milter 0.95.2 at skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-4.0 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on skuns.kiev.zoral.com.ua Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239318 - head/sys/nfs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 08:37:36 -0000 --iq/fWD14IMVFWBCD Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Aug 16, 2012 at 12:51:50AM +0000, Oleksandr Tymoshenko wrote: > Author: gonzo > Date: Thu Aug 16 00:51:50 2012 > New Revision: 239318 > URL: http://svn.freebsd.org/changeset/base/239318 >=20 > Log: > Merge somewhat modified r230399 from projects/armv6: > =20 > Add timeout to wait for network controllers to appear when netbooting. > =20 > USB ethernet adapter initialization usually is delayed and > they're not available immidiately after autoconfiguration. So we need > to wait a bit before giving up > =20 > Reviewed by: stas@ >=20 > Modified: > head/sys/nfs/bootp_subr.c >=20 > Modified: head/sys/nfs/bootp_subr.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/nfs/bootp_subr.c Wed Aug 15 22:51:01 2012 (r239317) > +++ head/sys/nfs/bootp_subr.c Thu Aug 16 00:51:50 2012 (r239318) > @@ -82,6 +82,14 @@ __FBSDID("$FreeBSD$"); > #define BOOTP_SETTLE_DELAY 3 > #endif > =20 > +/*=20 > + * Wait 10 seconds for interface appearance > + * USB ethernet adapters might reqquire some time to pop up s/qq/q/ > + */ > +#ifndef BOOTP_IFACE_WAIT_TIMEOUT > +#define BOOTP_IFACE_WAIT_TIMEOUT 10 > +#endif > + > /* > * What is the longest we will wait before re-sending a request? > * Note this is also the frequency of "RPC timeout" messages. > @@ -1515,6 +1523,8 @@ bootpc_init(void) > #endif > struct nfsv3_diskless *nd; > struct thread *td; > + int timeout =3D BOOTP_IFACE_WAIT_TIMEOUT * hz; > + int delay =3D hz / 10; According to style(9), initialization and declaration shall be separated. > =20 > nd =3D &nfsv3_diskless; > td =3D curthread; > @@ -1567,6 +1577,7 @@ bootpc_init(void) > allocifctx(gctx); > #endif > =20 > +retry: > ifctx =3D STAILQ_FIRST(&gctx->interfaces); > IFNET_RLOCK(); > TAILQ_FOREACH(ifp, &V_ifnet, if_link) { > @@ -1613,6 +1624,11 @@ bootpc_init(void) > =20 > if (STAILQ_EMPTY(&gctx->interfaces) || > STAILQ_FIRST(&gctx->interfaces)->ifp =3D=3D NULL) { > + if (timeout > 0) { > + pause("bootpc", delay); > + timeout -=3D delay; > + goto retry; > + } > #ifdef BOOTP_WIRED_TO > panic("%s: Could not find interface specified " > "by BOOTP_WIRED_TO: " --iq/fWD14IMVFWBCD Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (FreeBSD) iEYEARECAAYFAlAssUsACgkQC3+MBN1Mb4h3pQCgjZ3Yj2OTGDDWNEvG2IzPVhvR xBcAoI/fJ/8UozSUeLsvpu34rGEDaLl6 =0zfw -----END PGP SIGNATURE----- --iq/fWD14IMVFWBCD-- From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 13:01:57 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A11E2106568A; Thu, 16 Aug 2012 13:01:57 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8C22A8FC1A; Thu, 16 Aug 2012 13:01:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GD1v8w016873; Thu, 16 Aug 2012 13:01:57 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GD1vq0016868; Thu, 16 Aug 2012 13:01:57 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208161301.q7GD1vq0016868@svn.freebsd.org> From: Konstantin Belousov Date: Thu, 16 Aug 2012 13:01:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239328 - in head/sys: kern nlm X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 13:01:57 -0000 Author: kib Date: Thu Aug 16 13:01:56 2012 New Revision: 239328 URL: http://svn.freebsd.org/changeset/base/239328 Log: Fix grammar. Submitted by: jh MFC after: 1 week Modified: head/sys/kern/init_main.c head/sys/kern/kern_thread.c head/sys/nlm/nlm_advlock.c Modified: head/sys/kern/init_main.c ============================================================================== --- head/sys/kern/init_main.c Thu Aug 16 08:29:49 2012 (r239327) +++ head/sys/kern/init_main.c Thu Aug 16 13:01:56 2012 (r239328) @@ -476,7 +476,7 @@ proc0_init(void *dummy __unused) knlist_init_mtx(&p->p_klist, &p->p_mtx); STAILQ_INIT(&p->p_ktr); p->p_nice = NZERO; - /* pid_max cannot be greater then PID_MAX */ + /* pid_max cannot be greater than PID_MAX */ td->td_tid = PID_MAX + 1; LIST_INSERT_HEAD(TIDHASH(td->td_tid), td, td_hash); td->td_state = TDS_RUNNING; Modified: head/sys/kern/kern_thread.c ============================================================================== --- head/sys/kern/kern_thread.c Thu Aug 16 08:29:49 2012 (r239327) +++ head/sys/kern/kern_thread.c Thu Aug 16 13:01:56 2012 (r239328) @@ -271,7 +271,7 @@ threadinit(void) mtx_init(&tid_lock, "TID lock", NULL, MTX_DEF); /* - * pid_max cannot be greater then PID_MAX. + * pid_max cannot be greater than PID_MAX. * leave one number for thread0. */ tid_unrhdr = new_unrhdr(PID_MAX + 2, INT_MAX, &tid_lock); Modified: head/sys/nlm/nlm_advlock.c ============================================================================== --- head/sys/nlm/nlm_advlock.c Thu Aug 16 08:29:49 2012 (r239327) +++ head/sys/nlm/nlm_advlock.c Thu Aug 16 13:01:56 2012 (r239328) @@ -98,7 +98,7 @@ nlm_client_init(void *dummy) int i; mtx_init(&nlm_svid_lock, "NLM svid lock", NULL, MTX_DEF); - /* pid_max cannot be greater then PID_MAX */ + /* pid_max cannot be greater than PID_MAX */ nlm_svid_allocator = new_unrhdr(PID_MAX + 2, INT_MAX, &nlm_svid_lock); for (i = 0; i < NLM_SVID_HASH_SIZE; i++) LIST_INIT(&nlm_file_svids[i]); From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 13:04:22 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2D89C1065673; Thu, 16 Aug 2012 13:04:22 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 18FF28FC12; Thu, 16 Aug 2012 13:04:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GD4L3q017174; Thu, 16 Aug 2012 13:04:21 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GD4L1o017171; Thu, 16 Aug 2012 13:04:21 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208161304.q7GD4L1o017171@svn.freebsd.org> From: Konstantin Belousov Date: Thu, 16 Aug 2012 13:04:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239329 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 13:04:22 -0000 Author: kib Date: Thu Aug 16 13:04:21 2012 New Revision: 239329 URL: http://svn.freebsd.org/changeset/base/239329 Log: As a safety measure, disable lowering pid_max too much. Requested by: Peter Jeremy MFC after: 1 week Modified: head/sys/kern/kern_mib.c head/sys/kern/subr_param.c Modified: head/sys/kern/kern_mib.c ============================================================================== --- head/sys/kern/kern_mib.c Thu Aug 16 13:01:56 2012 (r239328) +++ head/sys/kern/kern_mib.c Thu Aug 16 13:04:21 2012 (r239329) @@ -510,8 +510,12 @@ sysctl_kern_pid_max(SYSCTL_HANDLER_ARGS) return (error); sx_xlock(&proctree_lock); sx_xlock(&allproc_lock); - /* Only permit the values less then PID_MAX. */ - if (pm > PID_MAX) + + /* + * Only permit the values less then PID_MAX. + * As a safety measure, do not allow to limit the pid_max too much. + */ + if (pm < 300 || pm > PID_MAX) error = EINVAL; else pid_max = pm; Modified: head/sys/kern/subr_param.c ============================================================================== --- head/sys/kern/subr_param.c Thu Aug 16 13:01:56 2012 (r239328) +++ head/sys/kern/subr_param.c Thu Aug 16 13:04:21 2012 (r239329) @@ -255,10 +255,13 @@ init_param1(void) /* * Only allow to lower the maximal pid. + * Prevent setting up a non-bootable system if pid_max is too low. */ TUNABLE_INT_FETCH("kern.pid_max", &pid_max); if (pid_max > PID_MAX) pid_max = PID_MAX; + else if (pid_max < 300) + pid_max = 300; } /* From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 15:32:17 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3A664106566B; Thu, 16 Aug 2012 15:32:17 +0000 (UTC) (envelope-from mjacob@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2511A8FC12; Thu, 16 Aug 2012 15:32:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GFWHFV033245; Thu, 16 Aug 2012 15:32:17 GMT (envelope-from mjacob@svn.freebsd.org) Received: (from mjacob@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GFWGmV033243; Thu, 16 Aug 2012 15:32:16 GMT (envelope-from mjacob@svn.freebsd.org) Message-Id: <201208161532.q7GFWGmV033243@svn.freebsd.org> From: Matt Jacob Date: Thu, 16 Aug 2012 15:32:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239330 - head/sys/dev/isp X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 15:32:17 -0000 Author: mjacob Date: Thu Aug 16 15:32:16 2012 New Revision: 239330 URL: http://svn.freebsd.org/changeset/base/239330 Log: On lun disable, complete all INOTs and ATIOs with CAM_REQ_ABORTED. Reviewed by: ken (silently), chuck MFC after: 3 weeks Modified: head/sys/dev/isp/isp_freebsd.c Modified: head/sys/dev/isp/isp_freebsd.c ============================================================================== --- head/sys/dev/isp/isp_freebsd.c Thu Aug 16 13:04:21 2012 (r239329) +++ head/sys/dev/isp/isp_freebsd.c Thu Aug 16 15:32:16 2012 (r239330) @@ -1154,10 +1154,27 @@ create_lun_state(ispsoftc_t *isp, int bu static ISP_INLINE void destroy_lun_state(ispsoftc_t *isp, tstate_t *tptr) { + union ccb *ccb; struct tslist *lhp; KASSERT((tptr->hold != 0), ("tptr is not held")); KASSERT((tptr->hold == 1), ("tptr still held (%d)", tptr->hold)); + do { + ccb = (union ccb *)SLIST_FIRST(&tptr->atios); + if (ccb) { + SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle); + ccb->ccb_h.status = CAM_REQ_ABORTED; + xpt_done(ccb); + } + } while (ccb); + do { + ccb = (union ccb *)SLIST_FIRST(&tptr->inots); + if (ccb) { + SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle); + ccb->ccb_h.status = CAM_REQ_ABORTED; + xpt_done(ccb); + } + } while (ccb); ISP_GET_PC_ADDR(isp, cam_sim_bus(xpt_path_sim(tptr->owner)), lun_hash[LUN_HASH_FUNC(xpt_path_lun_id(tptr->owner))], lhp); SLIST_REMOVE(lhp, tptr, tstate, next); ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "destroyed tstate\n"); @@ -1472,8 +1489,8 @@ done: } ccb->ccb_h.status = status; if (status == CAM_REQ_CMP) { - xpt_print(ccb->ccb_h.path, "lun now disabled for target mode\n"); destroy_lun_state(isp, tptr); + xpt_print(ccb->ccb_h.path, "lun now disabled for target mode\n"); } else { if (tptr) rls_lun_statep(isp, tptr); From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 17:17:09 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CC2A7106564A; Thu, 16 Aug 2012 17:17:09 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9D7C88FC0A; Thu, 16 Aug 2012 17:17:09 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GHH94S044326; Thu, 16 Aug 2012 17:17:09 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GHH9Un044323; Thu, 16 Aug 2012 17:17:09 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208161717.q7GHH9Un044323@svn.freebsd.org> From: John Baldwin Date: Thu, 16 Aug 2012 17:17:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239331 - head/sys/ia64/ia64 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 17:17:09 -0000 Author: jhb Date: Thu Aug 16 17:17:08 2012 New Revision: 239331 URL: http://svn.freebsd.org/changeset/base/239331 Log: Add locking for sscdisk(4) and mark it MPSAFE. Since this driver just makes calls out to the emulator, the locking is fairly simple. A global mutex protects the list of ssc disks, and each ssc disk has a mutex to protect it's bioq. Approved by: marcel Modified: head/sys/ia64/ia64/sscdisk.c Modified: head/sys/ia64/ia64/sscdisk.c ============================================================================== --- head/sys/ia64/ia64/sscdisk.c Thu Aug 16 15:32:16 2012 (r239330) +++ head/sys/ia64/ia64/sscdisk.c Thu Aug 16 17:17:08 2012 (r239331) @@ -77,13 +77,15 @@ static MALLOC_DEFINE(M_SSC, "ssc_disk", static d_strategy_t sscstrategy; static LIST_HEAD(, ssc_s) ssc_softc_list = LIST_HEAD_INITIALIZER(ssc_softc_list); +static struct mtx ssc_list_lock; +MTX_SYSINIT(ssc_list, &ssc_list_lock, "ssc list", MTX_DEF); struct ssc_s { int unit; LIST_ENTRY(ssc_s) list; struct bio_queue_head bio_queue; struct disk *disk; - struct cdev *dev; + struct mtx lock; int busy; int fd; }; @@ -94,30 +96,27 @@ static void sscstrategy(struct bio *bp) { struct ssc_s *sc; - int s; struct disk_req req; struct disk_stat stat; u_long len, va, off; sc = bp->bio_disk->d_drv1; - s = splbio(); - + mtx_lock(&sc->lock); bioq_disksort(&sc->bio_queue, bp); if (sc->busy) { - splx(s); + mtx_unlock(&sc->lock); return; } - sc->busy++; - - while (1) { + + for (;;) { bp = bioq_takefirst(&sc->bio_queue); - splx(s); if (!bp) break; + mtx_unlock(&sc->lock); va = (u_long) bp->bio_data; len = bp->bio_bcount; off = bp->bio_pblkno << DEV_BSHIFT; @@ -140,10 +139,11 @@ sscstrategy(struct bio *bp) } bp->bio_resid = 0; biodone(bp); - s = splbio(); + mtx_lock(&sc->lock); } sc->busy = 0; + mtx_unlock(&sc->lock); return; } @@ -158,17 +158,24 @@ ssccreate(int unit) if (fd == -1) return (NULL); + sc = malloc(sizeof(*sc), M_SSC, M_WAITOK | M_ZERO); + + mtx_lock(&ssc_list_lock); if (unit == -1) unit = sscunits++; /* Make sure this unit isn't already in action */ LIST_FOREACH(sc, &ssc_softc_list, list) { - if (sc->unit == unit) + if (sc->unit == unit) { + mtx_unlock(&ssc_list_lock); + free(sc, M_SSC); return (NULL); + } } - sc = malloc(sizeof(*sc), M_SSC, M_WAITOK | M_ZERO); LIST_INSERT_HEAD(&ssc_softc_list, sc, list); sc->unit = unit; + mtx_unlock(&ssc_list_lock); bioq_init(&sc->bio_queue); + mtx_init(&sc->lock, "ssc", NULL, MTX_DEF); sc->disk = disk_alloc(); sc->disk->d_drv1 = sc; @@ -180,7 +187,6 @@ ssccreate(int unit) sc->disk->d_sectorsize = DEV_BSIZE; sc->disk->d_strategy = sscstrategy; sc->disk->d_unit = sc->unit; - sc->disk->d_flags = DISKFLAG_NEEDSGIANT; disk_create(sc->disk, DISK_VERSION); sc->fd = fd; if (sc->unit == 0) From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 17:26:23 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 974871065673; Thu, 16 Aug 2012 17:26:23 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7DB138FC19; Thu, 16 Aug 2012 17:26:23 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GHQNTT045341; Thu, 16 Aug 2012 17:26:23 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GHQNGl045323; Thu, 16 Aug 2012 17:26:23 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201208161726.q7GHQNGl045323@svn.freebsd.org> From: Jung-uk Kim Date: Thu, 16 Aug 2012 17:26:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor-sys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239332 - in vendor-sys/acpica/dist: . generate/release generate/unix generate/unix/acpibin generate/unix/acpiexec generate/unix/acpihelp generate/unix/acpinames generate/unix/acpisrc g... X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 17:26:23 -0000 Author: jkim Date: Thu Aug 16 17:26:22 2012 New Revision: 239332 URL: http://svn.freebsd.org/changeset/base/239332 Log: Import ACPICA 20120816. Added: vendor-sys/acpica/dist/generate/unix/Makefile.rules (contents, props changed) vendor-sys/acpica/dist/source/compiler/new_table.txt (contents, props changed) vendor-sys/acpica/dist/source/components/utilities/utxfinit.c (contents, props changed) vendor-sys/acpica/dist/source/include/acbuffer.h (contents, props changed) vendor-sys/acpica/dist/source/include/platform/achaiku.h (contents, props changed) Deleted: vendor-sys/acpica/dist/README vendor-sys/acpica/dist/source/compiler/Makefile vendor-sys/acpica/dist/source/tools/acpibin/Makefile vendor-sys/acpica/dist/source/tools/acpiexec/Makefile vendor-sys/acpica/dist/source/tools/acpihelp/Makefile vendor-sys/acpica/dist/source/tools/acpinames/Makefile vendor-sys/acpica/dist/source/tools/acpisrc/Makefile vendor-sys/acpica/dist/source/tools/acpixtract/Makefile Modified: vendor-sys/acpica/dist/changes.txt vendor-sys/acpica/dist/generate/release/build.sh vendor-sys/acpica/dist/generate/unix/Makefile.common vendor-sys/acpica/dist/generate/unix/Makefile.config vendor-sys/acpica/dist/generate/unix/acpibin/Makefile vendor-sys/acpica/dist/generate/unix/acpiexec/Makefile vendor-sys/acpica/dist/generate/unix/acpihelp/Makefile vendor-sys/acpica/dist/generate/unix/acpinames/Makefile vendor-sys/acpica/dist/generate/unix/acpisrc/Makefile vendor-sys/acpica/dist/generate/unix/acpixtract/Makefile vendor-sys/acpica/dist/generate/unix/iasl/Makefile vendor-sys/acpica/dist/source/common/adisasm.c vendor-sys/acpica/dist/source/common/ahpredef.c vendor-sys/acpica/dist/source/common/dmtable.c vendor-sys/acpica/dist/source/common/dmtbdump.c vendor-sys/acpica/dist/source/common/dmtbinfo.c vendor-sys/acpica/dist/source/compiler/aslcompiler.h vendor-sys/acpica/dist/source/compiler/aslcompiler.y vendor-sys/acpica/dist/source/compiler/aslfold.c vendor-sys/acpica/dist/source/compiler/aslmessages.h vendor-sys/acpica/dist/source/compiler/asltree.c vendor-sys/acpica/dist/source/compiler/aslutils.c vendor-sys/acpica/dist/source/components/debugger/dbcmds.c vendor-sys/acpica/dist/source/components/debugger/dbexec.c vendor-sys/acpica/dist/source/components/disassembler/dmbuffer.c vendor-sys/acpica/dist/source/components/disassembler/dmopcode.c vendor-sys/acpica/dist/source/components/dispatcher/dswload.c vendor-sys/acpica/dist/source/components/dispatcher/dswload2.c vendor-sys/acpica/dist/source/components/events/evgpe.c vendor-sys/acpica/dist/source/components/events/evxfgpe.c vendor-sys/acpica/dist/source/components/hardware/hwesleep.c vendor-sys/acpica/dist/source/components/hardware/hwgpe.c vendor-sys/acpica/dist/source/components/hardware/hwsleep.c vendor-sys/acpica/dist/source/components/hardware/hwxfsleep.c vendor-sys/acpica/dist/source/components/namespace/nsdump.c vendor-sys/acpica/dist/source/components/utilities/utosi.c vendor-sys/acpica/dist/source/components/utilities/utxface.c vendor-sys/acpica/dist/source/components/utilities/utxferror.c vendor-sys/acpica/dist/source/include/acdisasm.h vendor-sys/acpica/dist/source/include/achware.h vendor-sys/acpica/dist/source/include/aclocal.h vendor-sys/acpica/dist/source/include/acmacros.h vendor-sys/acpica/dist/source/include/acnames.h vendor-sys/acpica/dist/source/include/acpixf.h vendor-sys/acpica/dist/source/include/actbl.h vendor-sys/acpica/dist/source/include/actbl1.h vendor-sys/acpica/dist/source/include/actbl2.h vendor-sys/acpica/dist/source/include/actbl3.h vendor-sys/acpica/dist/source/include/actypes.h vendor-sys/acpica/dist/source/include/platform/acenv.h vendor-sys/acpica/dist/source/os_specific/service_layers/osunixxf.c vendor-sys/acpica/dist/source/os_specific/service_layers/oswinxf.c vendor-sys/acpica/dist/source/tools/acpisrc/asmain.c vendor-sys/acpica/dist/source/tools/acpisrc/astable.c Modified: vendor-sys/acpica/dist/changes.txt ============================================================================== --- vendor-sys/acpica/dist/changes.txt Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/changes.txt Thu Aug 16 17:26:22 2012 (r239332) @@ -1,4 +1,97 @@ ---------------------------------------- +16 August 2012. Summary of changes for version 20120816: + +This release is available at https://www.acpica.org/downloads +The ACPI 5.0 specification is available at www.acpi.info + +1) ACPICA Kernel-resident Subsystem: + +Removed all use of the deprecated _GTS and _BFS predefined methods. The _GTS +(Going To Sleep) and _BFS (Back From Sleep) methods are essentially +deprecated and will probably be removed from the ACPI specification. Windows +does not invoke them, and reportedly never will. The final nail in the coffin +is that the ACPI specification states that these methods must be run with +interrupts off, which is not going to happen in a kernel interpreter. Note: +Linux has removed all use of the methods also. It was discovered that +invoking these functions caused failures on some machines, probably because +they were never tested since Windows does not call them. Affects two external +interfaces, AcpiEnterSleepState and AcpiLeaveSleepStatePrep. Tang Feng. +ACPICA BZ 969. + +Implemented support for complex bit-packed buffers returned from the _PLD +(Physical Location of Device) predefined method. Adds a new external +interface, AcpiDecodePldBuffer that parses the buffer into a more usable C +structure. Note: C Bitfields cannot be used for this type of predefined +structure since the memory layout of individual bitfields is not defined by +the C language. In addition, there are endian concerns where a compiler will +change the bitfield ordering based on the machine type. The new ACPICA +interface eliminates these issues, and should be called after _PLD is +executed. ACPICA BZ 954. + +Implemented a change to allow a scope change to root (via "Scope (\)") during +execution of module-level ASL code (code that is executed at table load +time.) Lin Ming. + +Added the Windows8/Server2012 string for the _OSI method. This change adds a +new _OSI string, "Windows 2012" for both Windows 8 and Windows Server 2012. + +Added header support for the new ACPI tables DBG2 (Debug Port Table Type 2) +and CSRT (Core System Resource Table). + +Added struct header support for the _FDE, _GRT, _GTM, and _SRT predefined +names. This simplifies access to the buffers returned by these predefined +names. Adds a new file, include/acbuffer.h. ACPICA BZ 956. + +GPE support: Removed an extraneous parameter from the various low-level +internal GPE functions. Tang Feng. + +Removed the linux makefiles from the unix packages. The generate/linux +makefiles are obsolete and have been removed from the unix tarball release +packages. The replacement makefiles are under generate/unix, and there is a +top-level makefile under the main acpica directory. ACPICA BZ 967, 912. + +Updates for Unix makefiles: +1) Add -D_FORTIFY_SOURCE=2 for gcc generation. Arjan van de Ven. +2) Update linker flags (move to end of command line) for AcpiExec utility. +Guan Chao. + +Split ACPICA initialization functions to new file, utxfinit.c. Split from +utxface.c to improve modularity and reduce file size. + +Example Code and Data Size: These are the sizes for the OS-independent +acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The +debug version of the code includes the debug output trace mechanism and has a +much larger code and data size. + + Previous Release: + Non-Debug Version: 93.5K Code, 25.3K Data, 118.8K Total + Debug Version: 173.7K Code, 74.0K Data, 247.7K Total + Current Release: + Non-Debug Version: 93.8K Code, 25.3K Data, 119.1K Total + Debug Version: 175.7K Code, 74.8K Data, 250.5K Total + + +2) iASL Compiler/Disassembler and Tools: + +iASL: Fixed a problem with constant folding for fixed-length constant +expressions. The constant-folding code was not being invoked for constant +expressions that allow the use of type 3/4/5 opcodes to generate constants +for expressions such as ByteConstExpr, WordConstExpr, etc. This could result +in the generation of invalid AML bytecode. ACPICA BZ 970. + +iASL: Fixed a generation issue on newer versions of Bison. Newer versions +apparently automatically emit some of the necessary externals. This change +handles these versions in order to eliminate generation warnings. + +Disassembler: Added support to decode the DBG2 and CSRT ACPI tables. + +Disassembler: Add support to decode _PLD buffers. The decoded buffer appears +within comments in the output file. + +Debugger: Fixed a regression with the "Threads" command where +AE_BAD_PARAMETER was always returned. + +---------------------------------------- 11 July 2012. Summary of changes for version 20120711: This release is available at https://www.acpica.org/downloads The ACPI 5.0 Modified: vendor-sys/acpica/dist/generate/release/build.sh ============================================================================== --- vendor-sys/acpica/dist/generate/release/build.sh Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/release/build.sh Thu Aug 16 17:26:22 2012 (r239332) @@ -278,19 +278,6 @@ generate_source_package () # # Unix/Linux-specific activities # - - # Copy Linux/UNIX utility generation makefiles - - cp generate/linux/Makefile.acpibin $TEMP_DIR/source/tools/acpibin/Makefile - cp generate/linux/Makefile.acpiexec $TEMP_DIR/source/tools/acpiexec/Makefile - cp generate/linux/Makefile.acpihelp $TEMP_DIR/source/tools/acpihelp/Makefile - cp generate/linux/Makefile.acpinames $TEMP_DIR/source/tools/acpinames/Makefile - cp generate/linux/Makefile.acpisrc $TEMP_DIR/source/tools/acpisrc/Makefile - cp generate/linux/Makefile.acpixtract $TEMP_DIR/source/tools/acpixtract/Makefile - cp generate/linux/Makefile.iasl $TEMP_DIR/source/compiler/Makefile - cp generate/linux/README.acpica-unix $TEMP_DIR/README - - # # For Unix2 case, insert the dual license header into all source files # if [ $LICENSE == Dual ]; then Modified: vendor-sys/acpica/dist/generate/unix/Makefile.common ============================================================================== --- vendor-sys/acpica/dist/generate/unix/Makefile.common Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/Makefile.common Thu Aug 16 17:26:22 2012 (r239332) @@ -7,6 +7,7 @@ # string will be treated as a 64-bit OS. Otherwise, the default is 32-bit. # HARDWARE_NAME := $(shell uname -m) +BITS=0 # # Main rule will only generate versions that are appropriate for the running @@ -15,16 +16,22 @@ HARDWARE_NAME := $(shell uname -m) all: ${PROGS} ${PROGS}: FORCE @cd $(BUILD_DIRECTORY_PATH)/$@; \ - if [ $(findstring 64,$(HARDWARE_NAME)) ]; then \ + if [ $(BITS) -eq 32 ]; then \ + echo "Forced 32-bit generation of $@"; \ + mkdir -p obj32; \ + make BITS=32; \ + echo "32-bit version of $@:"; \ + ls -al ../bin32/$@; \ + elif [ $(findstring 64,$(HARDWARE_NAME)) ]; then \ mkdir -p obj64; \ make BITS=64; \ echo "64-bit version of $@:"; \ - ls -al obj64/$@; \ + ls -al ../bin64/$@; \ else \ mkdir -p obj32; \ make BITS=32; \ echo "32-bit version of $@:"; \ - ls -al obj32/$@; \ + ls -al ../bin32/$@; \ fi; # @@ -63,6 +70,7 @@ both: 32 64 clean: FORCE @for toolname in ${PROGS}; do \ (cd $(BUILD_DIRECTORY_PATH)/$$toolname; \ + echo "Removing $$toolname"; \ pwd; \ if [ -d "obj32" ] ; then \ make BITS=32 clean; \ @@ -72,6 +80,7 @@ clean: FORCE make BITS=64 clean; \ rmdir obj64; \ fi; \ + echo ""; \ ); \ done; @@ -83,12 +92,13 @@ install: FORCE (cd $(BUILD_DIRECTORY_PATH)/$$toolname; \ pwd; \ if [ $(findstring 64,$(HARDWARE_NAME)) ]; then \ - make BITS=64 install; \ + make BITS=64 PROG=$$toolname install; \ echo "Installed 64-bit version of $$toolname"; \ else \ - make BITS=32 install; \ + make BITS=32 PROG=$$toolname install; \ echo "Installed 32-bit version of $$toolname"; \ fi; \ + echo ""; \ ); \ done; Modified: vendor-sys/acpica/dist/generate/unix/Makefile.config ============================================================================== --- vendor-sys/acpica/dist/generate/unix/Makefile.config Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/Makefile.config Thu Aug 16 17:26:22 2012 (r239332) @@ -28,22 +28,30 @@ # The _GNU_SOURCE symbol is required for many hosts. # .SUFFIXES : -PROGS = acpibin acpiexec acpihelp acpinames acpisrc acpixtract iasl -HOST = _CYGWIN -CC = gcc +PROGS = acpibin acpiexec acpihelp acpinames acpisrc acpixtract iasl +HOST = _CYGWIN +CC = gcc # # Common defines # -OBJDIR = obj$(BITS) -BINDIR = bin$(BITS) -BITSFLAG = -m$(BITS) -COMPILE = $(CC) -c $(CFLAGS) $(CWARNINGFLAGS) -o$@ $< -COPYPROG = @mkdir -p ../$(BINDIR); \ - rm -f ../$(BINDIR)/$(PROG); \ - cp --remove-destination $(PROG) ../$(BINDIR); -INSTALLDIR = /usr/bin -INSTALLPROG = cp --remove-destination $(PROG) $(INSTALLDIR) +OBJDIR = obj$(BITS) +BINDIR = bin$(BITS) +BITSFLAG = -m$(BITS) +COMPILEOBJ = $(CC) -c $(CFLAGS) $(CWARNINGFLAGS) -o$@ $< +LINKPROG = $(CC) $(OBJECTS) -o $(PROG) $(LDFLAGS) + +COPYPROG = \ + @mkdir -p ../$(BINDIR); \ + if [ -e "$(PROG).exe" ] ; then \ + mv $(PROG).exe $(PROG); \ + echo "Renamed $(PROG).exe to $(PROG)"; \ + fi; \ + cp --remove-destination $(PROG) ../$(BINDIR); \ + echo "Copied $(PROG) to ../$(BINDIR)"; + +INSTALLDIR = /usr/bin +INSTALLPROG = install -D ../$(BINDIR)/$(PROG) $(DESTDIR)$(INSTALLDIR)/$(PROG) # # Main ACPICA source directories @@ -92,6 +100,7 @@ CFLAGS += \ $(BITSFLAG) \ -D$(HOST) \ -D_GNU_SOURCE \ + -D_FORTIFY_SOURCE=2 \ -I$(ACPICA_INCLUDE) LDFLAGS += $(BITSFLAG) Added: vendor-sys/acpica/dist/generate/unix/Makefile.rules ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor-sys/acpica/dist/generate/unix/Makefile.rules Thu Aug 16 17:26:22 2012 (r239332) @@ -0,0 +1,23 @@ +# +# Common rules for generation of ACPICA utilities +# +# FINAL_PROG - Copies the utility to the local binXX directory (32/64) +# PROG - Builds the utility (links the object files) +# +# Note: $(INTERMEDIATES) and $(MISC) are used for iASL compiler only. +# + +$(FINAL_PROG) : $(PROG) + $(COPYPROG) + +$(PROG) : $(INTERMEDIATES) $(MISC) $(OBJECTS) + $(LINKPROG) + +$(OBJDIR)/%.o : %.c $(HEADERS) $(ACPICA_HEADERS) + $(COMPILEOBJ) + +clean : + rm -f $(PROG) $(PROG).exe $(OBJECTS) $(INTERMEDIATES) $(MISC) + +install : + $(INSTALLPROG) Modified: vendor-sys/acpica/dist/generate/unix/acpibin/Makefile ============================================================================== --- vendor-sys/acpica/dist/generate/unix/acpibin/Makefile Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/acpibin/Makefile Thu Aug 16 17:26:22 2012 (r239332) @@ -11,6 +11,7 @@ # compile options, and prevents pollution of the source code. # include ../Makefile.config +FINAL_PROG = ../$(BINDIR)/acpibin PROG = $(OBJDIR)/acpibin # @@ -51,17 +52,6 @@ CFLAGS+= \ -I$(ACPIBIN) # -# Rules +# Common Rules # -$(PROG) : $(OBJECTS) - $(CC) $(LDFLAGS) $(OBJECTS) -o $(PROG) - $(COPYPROG) - -$(OBJDIR)/%.o : %.c $(HEADERS) $(ACPICA_HEADERS) - $(COMPILE) - -clean : - rm -f $(PROG) $(PROG).exe $(OBJECTS) - -install : - $(INSTALLPROG) +include ../Makefile.rules Modified: vendor-sys/acpica/dist/generate/unix/acpiexec/Makefile ============================================================================== --- vendor-sys/acpica/dist/generate/unix/acpiexec/Makefile Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/acpiexec/Makefile Thu Aug 16 17:26:22 2012 (r239332) @@ -13,6 +13,7 @@ # compile options, and prevents pollution of the source code. # include ../Makefile.config +FINAL_PROG = ../$(BINDIR)/acpiexec PROG = $(OBJDIR)/acpiexec # @@ -191,12 +192,13 @@ OBJECTS = \ $(OBJDIR)/utmisc.o \ $(OBJDIR)/utmutex.o \ $(OBJDIR)/utobject.o \ + $(OBJDIR)/utosi.o \ $(OBJDIR)/utresrc.o \ $(OBJDIR)/utstate.o \ $(OBJDIR)/uttrack.o \ - $(OBJDIR)/utosi.o \ $(OBJDIR)/utxface.o \ $(OBJDIR)/utxferror.o \ + $(OBJDIR)/utxfinit.o \ $(OBJDIR)/utxfmutex.o # @@ -208,17 +210,6 @@ CFLAGS+= \ LDFLAGS += -lpthread -lrt # -# Rules +# Common Rules # -$(PROG) : $(OBJECTS) - $(CC) $(LDFLAGS) $(OBJECTS) -o $(PROG) - $(COPYPROG) - -$(OBJDIR)/%.o : %.c $(HEADERS) $(ACPICA_HEADERS) - $(COMPILE) - -clean : - rm -f $(PROG) $(PROG).exe $(OBJECTS) - -install : - $(INSTALLPROG) +include ../Makefile.rules Modified: vendor-sys/acpica/dist/generate/unix/acpihelp/Makefile ============================================================================== --- vendor-sys/acpica/dist/generate/unix/acpihelp/Makefile Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/acpihelp/Makefile Thu Aug 16 17:26:22 2012 (r239332) @@ -12,6 +12,7 @@ # compile options, and prevents pollution of the source code. # include ../Makefile.config +FINAL_PROG = ../$(BINDIR)/acpihelp PROG = $(OBJDIR)/acpihelp # @@ -43,17 +44,6 @@ CFLAGS+= \ -I$(ACPIHELP) # -# Rules +# Common Rules # -$(PROG) : $(OBJECTS) - $(CC) $(LDFLAGS) $(OBJECTS) -o $(PROG) - $(COPYPROG) - -$(OBJDIR)/%.o : %.c $(HEADERS) $(ACPICA_HEADERS) - $(COMPILE) - -clean : - rm -f $(PROG) $(PROG).exe $(OBJECTS) - -install : - $(INSTALLPROG) +include ../Makefile.rules Modified: vendor-sys/acpica/dist/generate/unix/acpinames/Makefile ============================================================================== --- vendor-sys/acpica/dist/generate/unix/acpinames/Makefile Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/acpinames/Makefile Thu Aug 16 17:26:22 2012 (r239332) @@ -13,6 +13,7 @@ # compile options, and prevents pollution of the source code. # include ../Makefile.config +FINAL_PROG = ../$(BINDIR)/acpinames PROG = $(OBJDIR)/acpinames # @@ -96,10 +97,11 @@ OBJECTS = \ $(OBJDIR)/utmisc.o \ $(OBJDIR)/utmutex.o \ $(OBJDIR)/utobject.o \ - $(OBJDIR)/utstate.o \ $(OBJDIR)/utosi.o \ + $(OBJDIR)/utstate.o \ + $(OBJDIR)/utxface.o \ $(OBJDIR)/utxferror.o \ - $(OBJDIR)/utxface.o + $(OBJDIR)/utxfinit.o # # Flags specific to acpinames utility @@ -109,17 +111,6 @@ CFLAGS+= \ -I$(ACPINAMES) # -# Rules +# Common Rules # -$(PROG) : $(OBJECTS) - $(CC) $(LDFLAGS) $(OBJECTS) -o $(PROG) - $(COPYPROG) - -$(OBJDIR)/%.o : %.c $(HEADERS) $(ACPICA_HEADERS) - $(COMPILE) - -clean : - rm -f $(PROG) $(PROG).exe $(OBJECTS) - -install : - $(INSTALLPROG) +include ../Makefile.rules Modified: vendor-sys/acpica/dist/generate/unix/acpisrc/Makefile ============================================================================== --- vendor-sys/acpica/dist/generate/unix/acpisrc/Makefile Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/acpisrc/Makefile Thu Aug 16 17:26:22 2012 (r239332) @@ -11,6 +11,7 @@ # compile options, and prevents pollution of the source code. # include ../Makefile.config +FINAL_PROG = ../$(BINDIR)/acpisrc PROG = $(OBJDIR)/acpisrc # @@ -43,17 +44,6 @@ CFLAGS+= \ -I$(ACPISRC) # -# Rules +# Common Rules # -$(PROG) : $(OBJECTS) - $(CC) $(LDFLAGS) $(OBJECTS) -o $(PROG) - $(COPYPROG) - -$(OBJDIR)/%.o : %.c $(HEADERS) $(ACPICA_HEADERS) - $(COMPILE) - -clean : - rm -f $(PROG) $(PROG).exe $(OBJECTS) - -install : - $(INSTALLPROG) +include ../Makefile.rules Modified: vendor-sys/acpica/dist/generate/unix/acpixtract/Makefile ============================================================================== --- vendor-sys/acpica/dist/generate/unix/acpixtract/Makefile Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/acpixtract/Makefile Thu Aug 16 17:26:22 2012 (r239332) @@ -11,6 +11,7 @@ # compile options, and prevents pollution of the source code. # include ../Makefile.config +FINAL_PROG = ../$(BINDIR)/acpixtract PROG = $(OBJDIR)/acpixtract # @@ -35,17 +36,6 @@ CFLAGS+= \ -DACPI_XTRACT_APP \ # -# Rules +# Common Rules # -$(PROG) : $(OBJECTS) - $(CC) $(LDFLAGS) $(OBJECTS) -o $(PROG) - $(COPYPROG) - -$(OBJDIR)/%.o : %.c $(HEADERS) $(ACPICA_HEADERS) - $(COMPILE) - -clean : - rm -f $(PROG) $(PROG).exe $(OBJECTS) - -install : - $(INSTALLPROG) +include ../Makefile.rules Modified: vendor-sys/acpica/dist/generate/unix/iasl/Makefile ============================================================================== --- vendor-sys/acpica/dist/generate/unix/iasl/Makefile Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/generate/unix/iasl/Makefile Thu Aug 16 17:26:22 2012 (r239332) @@ -11,6 +11,7 @@ # compile options, and prevents pollution of the source code. # include ../Makefile.config +FINAL_PROG = ../$(BINDIR)/iasl PROG = $(OBJDIR)/iasl # @@ -179,8 +180,8 @@ OBJECTS = \ $(OBJDIR)/utobject.o \ $(OBJDIR)/utresrc.o \ $(OBJDIR)/utstate.o \ - $(OBJDIR)/utxferror.o \ - $(OBJDIR)/utxface.o + $(OBJDIR)/utxface.o \ + $(OBJDIR)/utxferror.o INTERMEDIATES = \ $(OBJDIR)/aslcompilerlex.c \ @@ -210,11 +211,10 @@ CFLAGS+= \ -I$(OBJDIR) # -# Root rule +# Common Rules # -$(PROG) : $(INTERMEDIATES) $(MISC) $(OBJECTS) - $(CC) $(LDFLAGS) $(OBJECTS) -o $(PROG) - $(COPYPROG) +include ../Makefile.rules + # # Parser and Lexer - intermediate C files @@ -238,8 +238,9 @@ $(OBJDIR)/prparserparse.c $(OBJDIR)/prpa ${YACC} ${YFLAGS} -pPrParser -o$@ $? -# Rename headers produced by bison/yacc - +# +# Rename the headers produced by bison/yacc +# $(OBJDIR)/aslcompiler.y.h : $(OBJDIR)/aslcompilerparse.h @echo Copy intermediate file: @cp -f -v $(OBJDIR)/aslcompilerparse.h $(OBJDIR)/aslcompiler.y.h @@ -276,13 +277,3 @@ $(OBJDIR)/prparserlex.o : $(OBJDIR) $(OBJDIR)/prparserparse.o : $(OBJDIR)/prparserparse.c $(CC) -c $(CFLAGS) -Wall -Werror -o$@ $? - - -$(OBJDIR)/%.o : %.c $(HEADERS) $(ACPICA_HEADERS) - $(COMPILE) - -clean : - rm -f $(PROG) $(PROG).exe $(OBJECTS) $(INTERMEDIATES) $(MISC) - -install : - $(INSTALLPROG) Modified: vendor-sys/acpica/dist/source/common/adisasm.c ============================================================================== --- vendor-sys/acpica/dist/source/common/adisasm.c Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/source/common/adisasm.c Thu Aug 16 17:26:22 2012 (r239332) @@ -60,9 +60,13 @@ #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("adisasm") - +/* + * Older versions of Bison won't emit this external in the generated header. + * Newer versions do emit the external, so we don't need to do it. + */ +#ifndef ASLCOMPILER_ASLCOMPILERPARSE_H extern int AslCompilerdebug; - +#endif ACPI_STATUS LsDisplayNamespace ( Modified: vendor-sys/acpica/dist/source/common/ahpredef.c ============================================================================== --- vendor-sys/acpica/dist/source/common/ahpredef.c Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/source/common/ahpredef.c Thu Aug 16 17:26:22 2012 (r239332) @@ -198,7 +198,7 @@ const AH_PREDEFINED_NAME AslPredefine AH_PREDEF ("_PIC", "Interrupt Model", "Inform AML of the interrupt model in use"), AH_PREDEF ("_PIF", "Power Source Information", "Returns a Power Source information block"), AH_PREDEF ("_PIN", "Pin List", "Pin list, Resource Descriptor field"), - AH_PREDEF ("_PLD", "Physical Device Location", "Returns a device's physical location information"), + AH_PREDEF ("_PLD", "Physical Location of Device", "Returns a device's physical location information"), AH_PREDEF ("_PMC", "Power Meter Capabilities", "Returns a list of Power Meter capabilities info"), AH_PREDEF ("_PMD", "Power Metered Devices", "Returns a list of devices that are measured by the power meter device"), AH_PREDEF ("_PMM", "Power Meter Measurement", "Returns the current value of the Power Meter"), Modified: vendor-sys/acpica/dist/source/common/dmtable.c ============================================================================== --- vendor-sys/acpica/dist/source/common/dmtable.c Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/source/common/dmtable.c Thu Aug 16 17:26:22 2012 (r239332) @@ -277,22 +277,24 @@ static const char *AcpiDmGasAc ACPI_DMTABLE_DATA AcpiDmTableData[] = { {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf, "Alert Standard Format table"}, - {ACPI_SIG_BOOT, AcpiDmTableInfoBoot, NULL, NULL, TemplateBoot, "Simple Boot Flag Table"}, {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert, "Boot Error Record Table"}, {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt, NULL, NULL, TemplateBgrt, "Boot Graphics Resource Table"}, + {ACPI_SIG_BOOT, AcpiDmTableInfoBoot, NULL, NULL, TemplateBoot, "Simple Boot Flag Table"}, {ACPI_SIG_CPEP, NULL, AcpiDmDumpCpep, DtCompileCpep, TemplateCpep, "Corrected Platform Error Polling table"}, + {ACPI_SIG_CSRT, NULL, AcpiDmDumpCsrt, NULL, NULL, "Core System Resource Table"}, + {ACPI_SIG_DBG2, NULL, AcpiDmDumpDbg2, NULL, NULL, "Debug Port table type 2"}, {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp, NULL, NULL, TemplateDbgp, "Debug Port table"}, {ACPI_SIG_DMAR, NULL, AcpiDmDumpDmar, DtCompileDmar, TemplateDmar, "DMA Remapping table"}, {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt, NULL, NULL, TemplateEcdt, "Embedded Controller Boot Resources Table"}, {ACPI_SIG_EINJ, NULL, AcpiDmDumpEinj, DtCompileEinj, TemplateEinj, "Error Injection table"}, {ACPI_SIG_ERST, NULL, AcpiDmDumpErst, DtCompileErst, TemplateErst, "Error Record Serialization Table"}, - {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt, "Fixed ACPI Description Table"}, + {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt, "Fixed ACPI Description Table (FADT)"}, {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt, "Firmware Performance Data Table"}, {ACPI_SIG_GTDT, AcpiDmTableInfoGtdt, NULL, NULL, TemplateGtdt, "Generic Timer Description Table"}, {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest, "Hardware Error Source Table"}, {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet, "High Precision Event Timer table"}, {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs, "I/O Virtualization Reporting Structure"}, - {ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, DtCompileMadt, TemplateMadt, "Multiple APIC Description Table"}, + {ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, DtCompileMadt, TemplateMadt, "Multiple APIC Description Table (MADT)"}, {ACPI_SIG_MCFG, NULL, AcpiDmDumpMcfg, DtCompileMcfg, TemplateMcfg, "Memory Mapped Configuration table"}, {ACPI_SIG_MCHI, AcpiDmTableInfoMchi, NULL, NULL, TemplateMchi, "Management Controller Host Interface table"}, {ACPI_SIG_MPST, AcpiDmTableInfoMpst, AcpiDmDumpMpst, DtCompileMpst, TemplateMpst, "Memory Power State Table"}, Modified: vendor-sys/acpica/dist/source/common/dmtbdump.c ============================================================================== --- vendor-sys/acpica/dist/source/common/dmtbdump.c Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/source/common/dmtbdump.c Thu Aug 16 17:26:22 2012 (r239332) @@ -52,11 +52,79 @@ ACPI_MODULE_NAME ("dmtbdump") +/* Local prototypes */ + static void AcpiDmValidateFadtLength ( UINT32 Revision, UINT32 Length); +static void +AcpiDmDumpBuffer ( + void *Table, + UINT32 BufferOffset, + UINT32 Length, + UINT32 AbsoluteOffset, + char *Header); + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpBuffer + * + * PARAMETERS: Table - ACPI Table or subtable + * BufferOffset - Offset of buffer from Table above + * Length - Length of the buffer + * AbsoluteOffset - Offset of buffer in the main ACPI table + * Header - Name of the buffer field (printed on the + * first line only.) + * + * RETURN: None + * + * DESCRIPTION: Format the contents of an arbitrary length data buffer (in the + * disassembler output format.) + * + ******************************************************************************/ + +static void +AcpiDmDumpBuffer ( + void *Table, + UINT32 BufferOffset, + UINT32 Length, + UINT32 AbsoluteOffset, + char *Header) +{ + UINT8 *Buffer; + UINT32 i; + + + if (!Length) + { + return; + } + + Buffer = ACPI_CAST_PTR (UINT8, Table) + BufferOffset; + i = 0; + + while (i < Length) + { + if (!(i % 16)) + { + AcpiOsPrintf ("\n"); + AcpiDmLineHeader (AbsoluteOffset, + ((Length - i) > 16) ? 16 : (Length - i), Header); + Header = NULL; + } + + AcpiOsPrintf ("%.02X ", *Buffer); + i++; + Buffer++; + AbsoluteOffset++; + } + + AcpiOsPrintf ("\n"); +} + /******************************************************************************* * @@ -529,6 +597,208 @@ AcpiDmDumpCpep ( /******************************************************************************* * + * FUNCTION: AcpiDmDumpCsrt + * + * PARAMETERS: Table - A CSRT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a CSRT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpCsrt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_CSRT_GROUP *SubTable; + ACPI_CSRT_DESCRIPTOR *SubSubTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_CSRT); + UINT32 SubOffset; + UINT32 SubSubOffset; + UINT32 InfoLength; + + + /* The main table only contains the ACPI header, thus already handled */ + + /* Sub-tables (Resource Groups) */ + + SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, SubTable, + SubTable->Length, AcpiDmTableInfoCsrt0); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubOffset = sizeof (ACPI_CSRT_GROUP); + + /* Shared resource group info buffer */ + + AcpiDmDumpBuffer (SubTable, SubOffset, SubTable->InfoLength, + Offset+SubOffset, "Shared Data"); + SubOffset += SubTable->InfoLength; + + /* Sub-Sub-tables (Resource Descriptors) */ + + SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, + Offset + SubOffset); + + while ((SubOffset < SubTable->Length) && + ((Offset + SubOffset) < Table->Length)) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable, + SubSubTable->Length, AcpiDmTableInfoCsrt1); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); + + /* Resource-specific info buffer */ + + InfoLength = SubSubTable->Length - SubSubOffset; + + AcpiDmDumpBuffer (SubSubTable, SubSubOffset, InfoLength, + Offset + SubOffset + SubSubOffset, "ResourceInfo"); + SubSubOffset += InfoLength; + + /* Point to next sub-sub-table */ + + SubOffset += SubSubTable->Length; + SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable, + SubSubTable->Length); + } + + /* Point to next sub-table */ + + Offset += SubTable->Length; + SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable, + SubTable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpDbg2 + * + * PARAMETERS: Table - A DBG2 table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a DBG2. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpDbg2 ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_DBG2_DEVICE *SubTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_DBG2); + UINT32 i; + UINT32 ArrayOffset; + UINT32 AbsoluteOffset; + UINT8 *Array; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Sub-tables */ + + SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, SubTable, + SubTable->Length, AcpiDmTableInfoDbg2Device); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump the BaseAddress array */ + + for (i = 0; i < SubTable->RegisterCount; i++) + { + ArrayOffset = SubTable->BaseAddressOffset + + (sizeof (ACPI_GENERIC_ADDRESS) * i); + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) SubTable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + SubTable->Length, AcpiDmTableInfoDbg2Addr); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the AddressSize array */ + + for (i = 0; i < SubTable->RegisterCount; i++) + { + ArrayOffset = SubTable->AddressSizeOffset + + (sizeof (UINT32) * i); + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) SubTable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + SubTable->Length, AcpiDmTableInfoDbg2Size); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the Namestring (required) */ + + AcpiOsPrintf ("\n"); + ArrayOffset = SubTable->NamepathOffset; + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) SubTable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + SubTable->Length, AcpiDmTableInfoDbg2Name); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump the OemData (optional) */ + + AcpiDmDumpBuffer (SubTable, SubTable->OemDataOffset, SubTable->OemDataLength, + Offset + SubTable->OemDataOffset, "OEM Data"); + + /* Point to next sub-table */ + + Offset += SubTable->Length; + SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable, + SubTable->Length); + } +} + + +/******************************************************************************* + * * FUNCTION: AcpiDmDumpDmar * * PARAMETERS: Table - A DMAR table @@ -540,6 +810,7 @@ AcpiDmDumpCpep ( * ******************************************************************************/ + void AcpiDmDumpDmar ( ACPI_TABLE_HEADER *Table) Modified: vendor-sys/acpica/dist/source/common/dmtbinfo.c ============================================================================== --- vendor-sys/acpica/dist/source/common/dmtbinfo.c Thu Aug 16 17:17:08 2012 (r239331) +++ vendor-sys/acpica/dist/source/common/dmtbinfo.c Thu Aug 16 17:26:22 2012 (r239332) @@ -86,6 +86,7 @@ #define ACPI_BGRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f) #define ACPI_BOOT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f) #define ACPI_CPEP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_CPEP,f) +#define ACPI_DBG2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBG2,f) #define ACPI_DBGP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBGP,f) #define ACPI_DMAR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DMAR,f) #define ACPI_DRTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DRTM,f) @@ -126,6 +127,9 @@ #define ACPI_ASF3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_RMCP,f) #define ACPI_ASF4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ADDRESS,f) #define ACPI_CPEP0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f) +#define ACPI_CSRT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f) +#define ACPI_CSRT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_DESCRIPTOR,f) +#define ACPI_DBG20_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DBG2_DEVICE,f) #define ACPI_DMARS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_DEVICE_SCOPE,f) #define ACPI_DMAR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_HARDWARE_UNIT,f) #define ACPI_DMAR1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f) @@ -641,6 +645,94 @@ ACPI_DMTABLE_INFO AcpiDmTableI /******************************************************************************* * + * CSRT - Core System Resource Table + * + ******************************************************************************/ + +/* Main table consists only of the standard ACPI table header */ + +/* Resource Group subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = +{ + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (InfoLength), "InfoLength", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Resource Descriptor subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = +{ + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (Length), "Length", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (Subtype), "Subtype", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (Uid), "UID", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DBG2 - Debug Port Table 2 + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = +{ + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Debug Device Information Subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = +{ + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", 0}, + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Variable-length data for the subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = +{ + {ACPI_DMT_GAS, 0, "Base Address Register", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = +{ + {ACPI_DMT_UINT32, 0, "Address Size", 0}, + ACPI_DMT_TERMINATOR +}; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 17:27:11 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E567910657C3; Thu, 16 Aug 2012 17:27:11 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B7B718FC0C; Thu, 16 Aug 2012 17:27:11 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GHRBg1045504; Thu, 16 Aug 2012 17:27:11 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GHRBLG045503; Thu, 16 Aug 2012 17:27:11 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201208161727.q7GHRBLG045503@svn.freebsd.org> From: Jung-uk Kim Date: Thu, 16 Aug 2012 17:27:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor-sys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239333 - vendor-sys/acpica/20120816 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 17:27:12 -0000 Author: jkim Date: Thu Aug 16 17:27:11 2012 New Revision: 239333 URL: http://svn.freebsd.org/changeset/base/239333 Log: Tag ACPICA 20120816. Added: vendor-sys/acpica/20120816/ - copied from r239332, vendor-sys/acpica/dist/ From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 17:55:17 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9724F1065698; Thu, 16 Aug 2012 17:55:17 +0000 (UTC) (envelope-from rrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 826E48FC2D; Thu, 16 Aug 2012 17:55:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GHtHti048696; Thu, 16 Aug 2012 17:55:17 GMT (envelope-from rrs@svn.freebsd.org) Received: (from rrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GHtHHZ048693; Thu, 16 Aug 2012 17:55:17 GMT (envelope-from rrs@svn.freebsd.org) Message-Id: <201208161755.q7GHtHHZ048693@svn.freebsd.org> From: Randall Stewart Date: Thu, 16 Aug 2012 17:55:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239334 - head/sys/netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 17:55:17 -0000 Author: rrs Date: Thu Aug 16 17:55:16 2012 New Revision: 239334 URL: http://svn.freebsd.org/changeset/base/239334 Log: Its never a good idea to double free the same address. MFC after: 1 week (after the other commits ahead of this gets MFC'd) Modified: head/sys/netinet/in.c Modified: head/sys/netinet/in.c ============================================================================== --- head/sys/netinet/in.c Thu Aug 16 17:27:11 2012 (r239333) +++ head/sys/netinet/in.c Thu Aug 16 17:55:16 2012 (r239334) @@ -573,7 +573,7 @@ in_control(struct socket *so, u_long cmd } TAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifa_link); IF_ADDR_WUNLOCK(ifp); - ifa_free(&ia->ia_ifa); /* if_addrhead */ +/* ifa_free(&ia->ia_ifa); - Double free?? */ /* if_addrhead */ IN_IFADDR_WLOCK(); TAILQ_REMOVE(&V_in_ifaddrhead, ia, ia_link); From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 18:04:34 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 32B9F106566B; Thu, 16 Aug 2012 18:04:34 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1E04E8FC14; Thu, 16 Aug 2012 18:04:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GI4X5N049676; Thu, 16 Aug 2012 18:04:33 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GI4Xap049674; Thu, 16 Aug 2012 18:04:33 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208161804.q7GI4Xap049674@svn.freebsd.org> From: John Baldwin Date: Thu, 16 Aug 2012 18:04:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239335 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 18:04:34 -0000 Author: jhb Date: Thu Aug 16 18:04:33 2012 New Revision: 239335 URL: http://svn.freebsd.org/changeset/base/239335 Log: Remove D_NEEDGIANT from dead_devsw. biofinish() (and thus dead_strategy) does not need Giant. MFC after: 1 month Modified: head/sys/kern/kern_conf.c Modified: head/sys/kern/kern_conf.c ============================================================================== --- head/sys/kern/kern_conf.c Thu Aug 16 17:55:16 2012 (r239334) +++ head/sys/kern/kern_conf.c Thu Aug 16 18:04:33 2012 (r239335) @@ -307,7 +307,6 @@ dead_strategy(struct bio *bp) static struct cdevsw dead_cdevsw = { .d_version = D_VERSION, - .d_flags = D_NEEDGIANT, /* XXX: does dead_strategy need this ? */ .d_open = dead_open, .d_close = dead_close, .d_read = dead_read, From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 18:31:51 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 01A5D1065674; Thu, 16 Aug 2012 18:31:51 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E04B08FC1D; Thu, 16 Aug 2012 18:31:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GIVo6K052459; Thu, 16 Aug 2012 18:31:50 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GIVopI052454; Thu, 16 Aug 2012 18:31:50 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208161831.q7GIVopI052454@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 16 Aug 2012 18:31:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239336 - in head/sys/dev/cxgbe: . common X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 18:31:51 -0000 Author: np Date: Thu Aug 16 18:31:50 2012 New Revision: 239336 URL: http://svn.freebsd.org/changeset/base/239336 Log: Allow for a different handler for each type of firmware message. MFC after: 2 weeks Modified: head/sys/dev/cxgbe/adapter.h head/sys/dev/cxgbe/common/t4_msg.h head/sys/dev/cxgbe/t4_main.c head/sys/dev/cxgbe/t4_sge.c Modified: head/sys/dev/cxgbe/adapter.h ============================================================================== --- head/sys/dev/cxgbe/adapter.h Thu Aug 16 18:04:33 2012 (r239335) +++ head/sys/dev/cxgbe/adapter.h Thu Aug 16 18:31:50 2012 (r239336) @@ -510,6 +510,7 @@ struct rss_header; typedef int (*cpl_handler_t)(struct sge_iq *, const struct rss_header *, struct mbuf *); typedef int (*an_handler_t)(struct sge_iq *, const struct rsp_ctrl *); +typedef int (*fw_msg_handler_t)(struct adapter *, const __be64 *); struct adapter { SLIST_ENTRY(adapter) link; @@ -582,7 +583,8 @@ struct adapter { struct callout sfl_callout; an_handler_t an_handler __aligned(CACHE_LINE_SIZE); - cpl_handler_t cpl_handler[256]; + fw_msg_handler_t fw_msg_handler[4]; /* NUM_FW6_TYPES */ + cpl_handler_t cpl_handler[0xef]; /* NUM_CPL_CMDS */ }; #define ADAPTER_LOCK(sc) mtx_lock(&(sc)->sc_lock) @@ -741,6 +743,7 @@ void t4_os_link_changed(struct adapter * void t4_iterate(void (*)(struct adapter *, void *), void *); int t4_register_cpl_handler(struct adapter *, int, cpl_handler_t); int t4_register_an_handler(struct adapter *, an_handler_t); +int t4_register_fw_msg_handler(struct adapter *, int, fw_msg_handler_t); /* t4_sge.c */ void t4_sge_modload(void); Modified: head/sys/dev/cxgbe/common/t4_msg.h ============================================================================== --- head/sys/dev/cxgbe/common/t4_msg.h Thu Aug 16 18:04:33 2012 (r239335) +++ head/sys/dev/cxgbe/common/t4_msg.h Thu Aug 16 18:31:50 2012 (r239336) @@ -2281,6 +2281,8 @@ enum { FW6_TYPE_WR_RPL = 1, FW6_TYPE_CQE = 2, FW6_TYPE_OFLD_CONNECTION_WR_RPL = 3, + + NUM_FW6_TYPES }; struct cpl_fw6_msg_ofld_connection_wr_rpl { Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Thu Aug 16 18:04:33 2012 (r239335) +++ head/sys/dev/cxgbe/t4_main.c Thu Aug 16 18:31:50 2012 (r239336) @@ -306,6 +306,7 @@ static void cxgbe_vlan_config(void *, st static int cpl_not_handled(struct sge_iq *, const struct rss_header *, struct mbuf *); static int an_not_handled(struct sge_iq *, const struct rsp_ctrl *); +static int fw_msg_not_handled(struct adapter *, const __be64 *); static int t4_sysctls(struct adapter *); static int cxgbe_sysctls(struct port_info *); static int sysctl_int_array(SYSCTL_HANDLER_ARGS); @@ -381,6 +382,10 @@ CTASSERT(offsetof(struct sge_ofld_rxq, i CTASSERT(offsetof(struct sge_ofld_rxq, fl) == offsetof(struct sge_rxq, fl)); #endif +/* No easy way to include t4_msg.h before adapter.h so we check this way */ +CTASSERT(ARRAY_SIZE(((struct adapter *)0)->cpl_handler) == NUM_CPL_CMDS); +CTASSERT(ARRAY_SIZE(((struct adapter *)0)->fw_msg_handler) == NUM_FW6_TYPES); + static int t4_probe(device_t dev) { @@ -458,6 +463,8 @@ t4_attach(device_t dev) sc->an_handler = an_not_handled; for (i = 0; i < ARRAY_SIZE(sc->cpl_handler); i++) sc->cpl_handler[i] = cpl_not_handled; + for (i = 0; i < ARRAY_SIZE(sc->fw_msg_handler); i++) + sc->fw_msg_handler[i] = fw_msg_not_handled; t4_register_cpl_handler(sc, CPL_SET_TCB_RPL, filter_rpl); /* Prepare the adapter for operation */ @@ -2980,7 +2987,7 @@ cpl_not_handled(struct sge_iq *iq, const panic("%s: opcode 0x%02x on iq %p with payload %p", __func__, rss->opcode, iq, m); #else - log(LOG_ERR, "%s: opcode 0x%02x on iq %p with payload %p", + log(LOG_ERR, "%s: opcode 0x%02x on iq %p with payload %p\n", __func__, rss->opcode, iq, m); m_freem(m); #endif @@ -3009,7 +3016,7 @@ an_not_handled(struct sge_iq *iq, const #ifdef INVARIANTS panic("%s: async notification on iq %p (ctrl %p)", __func__, iq, ctrl); #else - log(LOG_ERR, "%s: async notification on iq %p (ctrl %p)", + log(LOG_ERR, "%s: async notification on iq %p (ctrl %p)\n", __func__, iq, ctrl); #endif return (EDOOFUS); @@ -3028,6 +3035,35 @@ t4_register_an_handler(struct adapter *s } static int +fw_msg_not_handled(struct adapter *sc, const __be64 *rpl) +{ + __be64 *r = __DECONST(__be64 *, rpl); + struct cpl_fw6_msg *cpl = member2struct(cpl_fw6_msg, data, r); + +#ifdef INVARIANTS + panic("%s: fw_msg type %d", __func__, cpl->type); +#else + log(LOG_ERR, "%s: fw_msg type %d\n", __func__, cpl->type); +#endif + return (EDOOFUS); +} + +int +t4_register_fw_msg_handler(struct adapter *sc, int type, fw_msg_handler_t h) +{ + uintptr_t *loc, new; + + if (type >= ARRAY_SIZE(sc->fw_msg_handler)) + return (EINVAL); + + new = h ? (uintptr_t)h : (uintptr_t)fw_msg_not_handled; + loc = (uintptr_t *) &sc->fw_msg_handler[type]; + atomic_store_rel_ptr(loc, new); + + return (0); +} + +static int t4_sysctls(struct adapter *sc) { struct sysctl_ctx_list *ctx; Modified: head/sys/dev/cxgbe/t4_sge.c ============================================================================== --- head/sys/dev/cxgbe/t4_sge.c Thu Aug 16 18:04:33 2012 (r239335) +++ head/sys/dev/cxgbe/t4_sge.c Thu Aug 16 18:31:50 2012 (r239336) @@ -185,7 +185,7 @@ static void write_eqflush_wr(struct sge_ static __be64 get_flit(bus_dma_segment_t *, int, int); static int handle_sge_egr_update(struct sge_iq *, const struct rss_header *, struct mbuf *); -static int handle_fw_rpl(struct sge_iq *, const struct rss_header *, +static int handle_fw_msg(struct sge_iq *, const struct rss_header *, struct mbuf *); static int sysctl_uint16(SYSCTL_HANDLER_ARGS); @@ -361,11 +361,13 @@ t4_sge_init(struct adapter *sc) sc->sge.timer_val[4] = G_TIMERVALUE4(v) / core_ticks_per_usec(sc); sc->sge.timer_val[5] = G_TIMERVALUE5(v) / core_ticks_per_usec(sc); - t4_register_cpl_handler(sc, CPL_FW4_MSG, handle_fw_rpl); - t4_register_cpl_handler(sc, CPL_FW6_MSG, handle_fw_rpl); + t4_register_cpl_handler(sc, CPL_FW4_MSG, handle_fw_msg); + t4_register_cpl_handler(sc, CPL_FW6_MSG, handle_fw_msg); t4_register_cpl_handler(sc, CPL_SGE_EGR_UPDATE, handle_sge_egr_update); t4_register_cpl_handler(sc, CPL_RX_PKT, t4_eth_rx); + t4_register_fw_msg_handler(sc, FW6_TYPE_CMD_RPL, t4_handle_fw_rpl); + return (rc); } @@ -3520,17 +3522,15 @@ handle_sge_egr_update(struct sge_iq *iq, } static int -handle_fw_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) +handle_fw_msg(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) { + struct adapter *sc = iq->adapter; const struct cpl_fw6_msg *cpl = (const void *)(rss + 1); KASSERT(m == NULL, ("%s: payload with opcode %02x", __func__, rss->opcode)); - if (cpl->type == FW6_TYPE_CMD_RPL) - t4_handle_fw_rpl(iq->adapter, cpl->data); - - return (0); + return (sc->fw_msg_handler[cpl->type](sc, &cpl->data[0])); } static int From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 19:22:35 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 71D23106568A; Thu, 16 Aug 2012 19:22:35 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5A7018FC16; Thu, 16 Aug 2012 19:22:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GJMZ1A057789; Thu, 16 Aug 2012 19:22:35 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GJMZI4057787; Thu, 16 Aug 2012 19:22:35 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <201208161922.q7GJMZI4057787@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Thu, 16 Aug 2012 19:22:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239337 - head/sys/nfs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 19:22:35 -0000 Author: gonzo Date: Thu Aug 16 19:22:34 2012 New Revision: 239337 URL: http://svn.freebsd.org/changeset/base/239337 Log: - Typo fix - style(9) fix Spotted by: kib@, Andrey Zonov Modified: head/sys/nfs/bootp_subr.c Modified: head/sys/nfs/bootp_subr.c ============================================================================== --- head/sys/nfs/bootp_subr.c Thu Aug 16 18:31:50 2012 (r239336) +++ head/sys/nfs/bootp_subr.c Thu Aug 16 19:22:34 2012 (r239337) @@ -84,7 +84,7 @@ __FBSDID("$FreeBSD$"); /* * Wait 10 seconds for interface appearance - * USB ethernet adapters might reqquire some time to pop up + * USB ethernet adapters might require some time to pop up */ #ifndef BOOTP_IFACE_WAIT_TIMEOUT #define BOOTP_IFACE_WAIT_TIMEOUT 10 @@ -1523,8 +1523,11 @@ bootpc_init(void) #endif struct nfsv3_diskless *nd; struct thread *td; - int timeout = BOOTP_IFACE_WAIT_TIMEOUT * hz; - int delay = hz / 10; + int timeout; + int delay; + + timeout = BOOTP_IFACE_WAIT_TIMEOUT * hz; + delay = hz / 10; nd = &nfsv3_diskless; td = curthread; From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 19:34:59 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7E8B3106566B; Thu, 16 Aug 2012 19:34:59 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id 4FE218FC08; Thu, 16 Aug 2012 19:34:59 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 949F2B91A; Thu, 16 Aug 2012 15:34:58 -0400 (EDT) From: John Baldwin To: Randall Stewart Date: Thu, 16 Aug 2012 15:34:41 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p17; KDE/4.5.5; amd64; ; ) References: <201208161755.q7GHtHHZ048693@svn.freebsd.org> In-Reply-To: <201208161755.q7GHtHHZ048693@svn.freebsd.org> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <201208161534.42012.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Thu, 16 Aug 2012 15:34:58 -0400 (EDT) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239334 - head/sys/netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 19:34:59 -0000 On Thursday, August 16, 2012 1:55:17 pm Randall Stewart wrote: > Author: rrs > Date: Thu Aug 16 17:55:16 2012 > New Revision: 239334 > URL: http://svn.freebsd.org/changeset/base/239334 > > Log: > Its never a good idea to double free the same > address. > > MFC after: 1 week (after the other commits ahead of this gets MFC'd) > > Modified: > head/sys/netinet/in.c > > Modified: head/sys/netinet/in.c > ============================================================================== > --- head/sys/netinet/in.c Thu Aug 16 17:27:11 2012 (r239333) > +++ head/sys/netinet/in.c Thu Aug 16 17:55:16 2012 (r239334) > @@ -573,7 +573,7 @@ in_control(struct socket *so, u_long cmd > } > TAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifa_link); > IF_ADDR_WUNLOCK(ifp); > - ifa_free(&ia->ia_ifa); /* if_addrhead */ > +/* ifa_free(&ia->ia_ifa); - Double free?? */ /* if_addrhead */ This isn't a double free. This is dropping a reference count. In this case as the comment suggests, it is removing the reference held by the per- interface if_addrhead list that it was just removed from two lines above. Later in the function when ifa_free() is invoked: LIST_REMOVE(ia, ia_hash); IN_IFADDR_WUNLOCK(); ... ifa_free(&ia->ia_ifa); /* in_ifaddrhead */ It is dropping the reference held by the in_ifaddrhead list which the ifa was removed from by the above LIST_REMOVE(). Are you seeing a panic or refcount underflow or some such? -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 20:15:29 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D3867106566B; Thu, 16 Aug 2012 20:15:29 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B4B068FC1A; Thu, 16 Aug 2012 20:15:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GKFTnK063771; Thu, 16 Aug 2012 20:15:29 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GKFTgU063766; Thu, 16 Aug 2012 20:15:29 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208162015.q7GKFTgU063766@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 16 Aug 2012 20:15:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239338 - in head/sys/dev/cxgbe: . tom X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 20:15:29 -0000 Author: np Date: Thu Aug 16 20:15:29 2012 New Revision: 239338 URL: http://svn.freebsd.org/changeset/base/239338 Log: Add a routine (t4_set_tcb_field) to update arbitrary parts of a hardware TCB. Filters are programmed by modifying the TCB too (via a different routine) and the reply to any TCB update is delivered via a CPL_SET_TCB_RPL. Figure out whether the reply is for a filter-write or something else and route it appropriately. MFC after: 2 weeks Modified: head/sys/dev/cxgbe/adapter.h head/sys/dev/cxgbe/t4_main.c head/sys/dev/cxgbe/tom/t4_cpl_io.c head/sys/dev/cxgbe/tom/t4_tom.h Modified: head/sys/dev/cxgbe/adapter.h ============================================================================== --- head/sys/dev/cxgbe/adapter.h Thu Aug 16 19:22:34 2012 (r239337) +++ head/sys/dev/cxgbe/adapter.h Thu Aug 16 20:15:29 2012 (r239338) @@ -744,6 +744,7 @@ void t4_iterate(void (*)(struct adapter int t4_register_cpl_handler(struct adapter *, int, cpl_handler_t); int t4_register_an_handler(struct adapter *, an_handler_t); int t4_register_fw_msg_handler(struct adapter *, int, fw_msg_handler_t); +int t4_filter_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *); /* t4_sge.c */ void t4_sge_modload(void); Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Thu Aug 16 19:22:34 2012 (r239337) +++ head/sys/dev/cxgbe/t4_main.c Thu Aug 16 20:15:29 2012 (r239338) @@ -346,8 +346,6 @@ static int del_filter(struct adapter *, static void clear_filter(struct filter_entry *); static int set_filter_wr(struct adapter *, int); static int del_filter_wr(struct adapter *, int); -static int filter_rpl(struct sge_iq *, const struct rss_header *, - struct mbuf *); static int get_sge_context(struct adapter *, struct t4_sge_context *); static int read_card_mem(struct adapter *, struct t4_mem_range *); #ifdef TCP_OFFLOAD @@ -465,7 +463,7 @@ t4_attach(device_t dev) sc->cpl_handler[i] = cpl_not_handled; for (i = 0; i < ARRAY_SIZE(sc->fw_msg_handler); i++) sc->fw_msg_handler[i] = fw_msg_not_handled; - t4_register_cpl_handler(sc, CPL_SET_TCB_RPL, filter_rpl); + t4_register_cpl_handler(sc, CPL_SET_TCB_RPL, t4_filter_rpl); /* Prepare the adapter for operation */ rc = -t4_prep_adapter(sc); @@ -5000,8 +4998,8 @@ del_filter_wr(struct adapter *sc, int fi return (0); } -static int -filter_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) +int +t4_filter_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) { struct adapter *sc = iq->adapter; const struct cpl_set_tcb_rpl *rpl = (const void *)(rss + 1); Modified: head/sys/dev/cxgbe/tom/t4_cpl_io.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_cpl_io.c Thu Aug 16 19:22:34 2012 (r239337) +++ head/sys/dev/cxgbe/tom/t4_cpl_io.c Thu Aug 16 20:15:29 2012 (r239338) @@ -1262,6 +1262,51 @@ do_fw4_ack(struct sge_iq *iq, const stru return (0); } +static int +do_set_tcb_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) +{ + struct adapter *sc = iq->adapter; + const struct cpl_set_tcb_rpl *cpl = (const void *)(rss + 1); + unsigned int tid = GET_TID(cpl); +#ifdef INVARIANTS + unsigned int opcode = G_CPL_OPCODE(be32toh(OPCODE_TID(cpl))); +#endif + + KASSERT(opcode == CPL_SET_TCB_RPL, + ("%s: unexpected opcode 0x%x", __func__, opcode)); + KASSERT(m == NULL, ("%s: wasn't expecting payload", __func__)); + + if (tid >= sc->tids.ftid_base && + tid < sc->tids.ftid_base + sc->tids.nftids) + return (t4_filter_rpl(iq, rss, m)); /* TCB is a filter */ + + CXGBE_UNIMPLEMENTED(__func__); +} + +void +t4_set_tcb_field(struct adapter *sc, struct toepcb *toep, uint16_t word, + uint64_t mask, uint64_t val) +{ + struct wrqe *wr; + struct cpl_set_tcb_field *req; + + wr = alloc_wrqe(sizeof(*req), toep->ctrlq); + if (wr == NULL) { + /* XXX */ + panic("%s: allocation failure.", __func__); + } + req = wrtod(wr); + + INIT_TP_WR_MIT_CPL(req, CPL_SET_TCB_FIELD, toep->tid); + req->reply_ctrl = htobe16(V_NO_REPLY(1) | + V_QUEUENO(toep->ofld_rxq->iq.abs_id)); + req->word_cookie = htobe16(V_WORD(word) | V_COOKIE(0)); + req->mask = htobe64(mask); + req->val = htobe64(val); + + t4_wrq_tx(sc, wr); +} + void t4_init_cpl_io_handlers(struct adapter *sc) { @@ -1272,5 +1317,13 @@ t4_init_cpl_io_handlers(struct adapter * t4_register_cpl_handler(sc, CPL_ABORT_RPL_RSS, do_abort_rpl); t4_register_cpl_handler(sc, CPL_RX_DATA, do_rx_data); t4_register_cpl_handler(sc, CPL_FW4_ACK, do_fw4_ack); + t4_register_cpl_handler(sc, CPL_SET_TCB_RPL, do_set_tcb_rpl); +} + +void +t4_uninit_cpl_io_handlers(struct adapter *sc) +{ + + t4_register_cpl_handler(sc, CPL_SET_TCB_RPL, t4_filter_rpl); } #endif Modified: head/sys/dev/cxgbe/tom/t4_tom.h ============================================================================== --- head/sys/dev/cxgbe/tom/t4_tom.h Thu Aug 16 19:22:34 2012 (r239337) +++ head/sys/dev/cxgbe/tom/t4_tom.h Thu Aug 16 20:15:29 2012 (r239338) @@ -236,6 +236,7 @@ void t4_offload_socket(struct toedev *, /* t4_cpl_io.c */ void t4_init_cpl_io_handlers(struct adapter *); +void t4_uninit_cpl_io_handlers(struct adapter *); void send_abort_rpl(struct adapter *, struct sge_wrq *, int , int); void send_flowc_wr(struct toepcb *, struct flowc_tx_params *); void send_reset(struct adapter *, struct toepcb *, uint32_t); @@ -244,5 +245,7 @@ void t4_rcvd(struct toedev *, struct tcp int t4_tod_output(struct toedev *, struct tcpcb *); int t4_send_fin(struct toedev *, struct tcpcb *); int t4_send_rst(struct toedev *, struct tcpcb *); +void t4_set_tcb_field(struct adapter *, struct toepcb *, uint16_t, uint64_t, + uint64_t); #endif From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 20:30:15 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 142F11065673; Thu, 16 Aug 2012 20:30:15 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 000FA8FC0A; Thu, 16 Aug 2012 20:30:14 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GKUEis065326; Thu, 16 Aug 2012 20:30:14 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GKUEqO065324; Thu, 16 Aug 2012 20:30:14 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208162030.q7GKUEqO065324@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 16 Aug 2012 20:30:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239339 - head/sys/dev/cxgbe/firmware X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 20:30:15 -0000 Author: np Date: Thu Aug 16 20:30:14 2012 New Revision: 239339 URL: http://svn.freebsd.org/changeset/base/239339 Log: Make room for DDP page pods in the default configuration profile. While here, bump up the L2 table's size to 4K entries. MFC after: 2 weeks Modified: head/sys/dev/cxgbe/firmware/t4fw_cfg.txt Modified: head/sys/dev/cxgbe/firmware/t4fw_cfg.txt ============================================================================== --- head/sys/dev/cxgbe/firmware/t4fw_cfg.txt Thu Aug 16 20:15:29 2012 (r239338) +++ head/sys/dev/cxgbe/firmware/t4fw_cfg.txt Thu Aug 16 20:30:14 2012 (r239339) @@ -20,7 +20,7 @@ filterMode = fragmentation, mpshittype, protocol, vlan, port, fcoe # TP rx and tx payload memory (% of the total EDRAM + DDR3). - tp_pmrx = 40 + tp_pmrx = 38 tp_pmtx = 60 tp_pmrx_pagesize = 64K tp_pmtx_pagesize = 64K @@ -67,7 +67,8 @@ # driver will mask off features it won't use protocol = ofld - tp_l2t = 100 + tp_l2t = 4096 + tp_ddp = 2 # TCAM has 8K cells; each region must start at a multiple of 128 cell. # Each entry in these categories takes 4 cells each. nhash will use the @@ -136,7 +137,7 @@ [fini] version = 0x1 - checksum = 0xdb5813f9 + checksum = 0x162df193 # # $FreeBSD$ # From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 20:54:53 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8603B106566B; Thu, 16 Aug 2012 20:54:53 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6D65E8FC12; Thu, 16 Aug 2012 20:54:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GKsrsk067929; Thu, 16 Aug 2012 20:54:53 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GKsrbo067915; Thu, 16 Aug 2012 20:54:53 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201208162054.q7GKsrbo067915@svn.freebsd.org> From: Jung-uk Kim Date: Thu, 16 Aug 2012 20:54:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239340 - in head: share/man/man4 sys/conf sys/contrib/dev/acpica sys/contrib/dev/acpica/common sys/contrib/dev/acpica/compiler sys/contrib/dev/acpica/components/debugger sys/contrib/de... X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 20:54:53 -0000 Author: jkim Date: Thu Aug 16 20:54:52 2012 New Revision: 239340 URL: http://svn.freebsd.org/changeset/base/239340 Log: Merge ACPICA 20120816. Added: head/sys/contrib/dev/acpica/components/utilities/utxfinit.c - copied, changed from r239333, vendor-sys/acpica/dist/source/components/utilities/utxfinit.c head/sys/contrib/dev/acpica/include/acbuffer.h - copied unchanged from r239333, vendor-sys/acpica/dist/source/include/acbuffer.h Modified: head/share/man/man4/acpi.4 head/sys/conf/files head/sys/contrib/dev/acpica/acpica_prep.sh head/sys/contrib/dev/acpica/changes.txt (contents, props changed) head/sys/contrib/dev/acpica/common/adisasm.c head/sys/contrib/dev/acpica/common/ahpredef.c head/sys/contrib/dev/acpica/common/dmtable.c head/sys/contrib/dev/acpica/common/dmtbdump.c head/sys/contrib/dev/acpica/common/dmtbinfo.c head/sys/contrib/dev/acpica/compiler/aslcompiler.h head/sys/contrib/dev/acpica/compiler/aslcompiler.y head/sys/contrib/dev/acpica/compiler/aslfold.c head/sys/contrib/dev/acpica/compiler/aslmessages.h head/sys/contrib/dev/acpica/compiler/asltree.c head/sys/contrib/dev/acpica/compiler/aslutils.c head/sys/contrib/dev/acpica/components/debugger/dbcmds.c head/sys/contrib/dev/acpica/components/debugger/dbexec.c head/sys/contrib/dev/acpica/components/disassembler/dmbuffer.c head/sys/contrib/dev/acpica/components/disassembler/dmopcode.c head/sys/contrib/dev/acpica/components/dispatcher/dswload.c head/sys/contrib/dev/acpica/components/dispatcher/dswload2.c head/sys/contrib/dev/acpica/components/events/evgpe.c head/sys/contrib/dev/acpica/components/events/evxfgpe.c head/sys/contrib/dev/acpica/components/hardware/hwesleep.c head/sys/contrib/dev/acpica/components/hardware/hwgpe.c head/sys/contrib/dev/acpica/components/hardware/hwsleep.c head/sys/contrib/dev/acpica/components/hardware/hwxfsleep.c head/sys/contrib/dev/acpica/components/namespace/nsdump.c head/sys/contrib/dev/acpica/components/utilities/utosi.c head/sys/contrib/dev/acpica/components/utilities/utxface.c head/sys/contrib/dev/acpica/components/utilities/utxferror.c head/sys/contrib/dev/acpica/include/acdisasm.h head/sys/contrib/dev/acpica/include/achware.h head/sys/contrib/dev/acpica/include/aclocal.h head/sys/contrib/dev/acpica/include/acmacros.h head/sys/contrib/dev/acpica/include/acnames.h head/sys/contrib/dev/acpica/include/acpixf.h head/sys/contrib/dev/acpica/include/actbl.h head/sys/contrib/dev/acpica/include/actbl1.h head/sys/contrib/dev/acpica/include/actbl2.h head/sys/contrib/dev/acpica/include/actbl3.h head/sys/contrib/dev/acpica/include/actypes.h head/sys/contrib/dev/acpica/include/platform/acenv.h head/sys/contrib/dev/acpica/os_specific/service_layers/osunixxf.c head/sys/dev/acpica/acpi.c head/sys/dev/acpica/acpivar.h head/sys/modules/acpi/acpi/Makefile head/sys/x86/acpica/acpi_wakeup.c head/usr.sbin/acpi/acpidb/Makefile Directory Properties: head/sys/contrib/dev/acpica/ (props changed) head/sys/contrib/dev/acpica/common/ (props changed) head/sys/contrib/dev/acpica/compiler/ (props changed) head/sys/contrib/dev/acpica/components/debugger/ (props changed) head/sys/contrib/dev/acpica/components/disassembler/ (props changed) head/sys/contrib/dev/acpica/components/dispatcher/ (props changed) head/sys/contrib/dev/acpica/components/events/ (props changed) head/sys/contrib/dev/acpica/components/hardware/ (props changed) head/sys/contrib/dev/acpica/components/namespace/ (props changed) head/sys/contrib/dev/acpica/components/utilities/ (props changed) head/sys/contrib/dev/acpica/include/ (props changed) head/sys/contrib/dev/acpica/os_specific/ (props changed) Modified: head/share/man/man4/acpi.4 ============================================================================== --- head/share/man/man4/acpi.4 Thu Aug 16 20:30:14 2012 (r239339) +++ head/share/man/man4/acpi.4 Thu Aug 16 20:54:52 2012 (r239340) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 4, 2012 +.Dd August 16, 2012 .Dt ACPI 4 .Os .Sh NAME @@ -219,14 +219,6 @@ Override any automatic quirks completely Beep the PC speaker on resume. This can help diagnose suspend/resume problems. Default is 0 (disabled). -.It Va debug.acpi.sleep_flags -Execute optional ACPI methods for suspend/resume. -If the bit 0 is set (1), it will try to execute _GTS (Going To Sleep) method -when entering suspend state. -If the bit 1 is set (2), it will try to execute _BFS (Back From Sleep) method -when leaving suspend state. -If both the bits are set (3), both the methods will be tried. -Default is 0 (disabled). .It Va hint.acpi.0.disabled Set this to 1 to disable all of ACPI. If ACPI has been disabled on your system due to a blacklist entry for your Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/conf/files Thu Aug 16 20:54:52 2012 (r239340) @@ -436,6 +436,7 @@ contrib/dev/acpica/components/utilities/ contrib/dev/acpica/components/utilities/utstate.c optional acpi contrib/dev/acpica/components/utilities/utxface.c optional acpi contrib/dev/acpica/components/utilities/utxferror.c optional acpi +contrib/dev/acpica/components/utilities/utxfinit.c optional acpi #contrib/dev/acpica/components/utilities/utxfmutex.c optional acpi contrib/ipfilter/netinet/fil.c optional ipfilter inet \ compile-with "${NORMAL_C} ${NO_WSELF_ASSIGN} -I$S/contrib/ipfilter" Modified: head/sys/contrib/dev/acpica/acpica_prep.sh ============================================================================== --- head/sys/contrib/dev/acpica/acpica_prep.sh Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/acpica_prep.sh Thu Aug 16 20:54:52 2012 (r239340) @@ -18,18 +18,20 @@ fulldirs="common compiler components inc # files to remove stripdirs="generate libraries tests tools" -stripfiles="Makefile README acintel.h aclinux.h acmsvc.h acnetbsd.h \ - acos2.h accygwin.h acefi.h acwin.h acwin64.h osunixdir.c \ - oswindir.c oswintbl.c oswinxf.c readme.txt utclib.c" +stripfiles="Makefile README accygwin.h acefi.h achaiku.h acintel.h \ + aclinux.h acmsvc.h acnetbsd.h acos2.h acwin.h acwin64.h \ + new_table.txt osunixdir.c oswindir.c oswintbl.c oswinxf.c \ + readme.txt utclib.c" # include files to canonify -src_headers="acapps.h accommon.h acconfig.h acdebug.h acdisasm.h \ - acdispat.h acevents.h acexcep.h acglobal.h achware.h acinterp.h \ - aclocal.h acmacros.h acnames.h acnamesp.h acobject.h acopcode.h \ - acoutput.h acparser.h acpi.h acpiosxf.h acpixf.h acpredef.h \ - acresrc.h acrestyp.h acstruct.h actables.h actbl.h actbl1.h \ - actbl2.h actbl3.h actypes.h acutils.h amlcode.h amlresrc.h \ - platform/acenv.h platform/acfreebsd.h platform/acgcc.h" +src_headers="acapps.h acbuffer.h accommon.h acconfig.h acdebug.h \ + acdisasm.h acdispat.h acevents.h acexcep.h acglobal.h achware.h \ + acinterp.h aclocal.h acmacros.h acnames.h acnamesp.h acobject.h \ + acopcode.h acoutput.h acparser.h acpi.h acpiosxf.h acpixf.h \ + acpredef.h acresrc.h acrestyp.h acstruct.h actables.h actbl.h \ + actbl1.h actbl2.h actbl3.h actypes.h acutils.h amlcode.h \ + amlresrc.h platform/acenv.h platform/acfreebsd.h \ + platform/acgcc.h" comp_headers="aslcompiler.h asldefine.h aslglobal.h aslmessages.h \ aslsupport.l asltypes.h dtcompiler.h dttemplate.h preprocess.h" platform_headers="acfreebsd.h acgcc.h" Modified: head/sys/contrib/dev/acpica/changes.txt ============================================================================== --- head/sys/contrib/dev/acpica/changes.txt Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/changes.txt Thu Aug 16 20:54:52 2012 (r239340) @@ -1,4 +1,97 @@ ---------------------------------------- +16 August 2012. Summary of changes for version 20120816: + +This release is available at https://www.acpica.org/downloads +The ACPI 5.0 specification is available at www.acpi.info + +1) ACPICA Kernel-resident Subsystem: + +Removed all use of the deprecated _GTS and _BFS predefined methods. The _GTS +(Going To Sleep) and _BFS (Back From Sleep) methods are essentially +deprecated and will probably be removed from the ACPI specification. Windows +does not invoke them, and reportedly never will. The final nail in the coffin +is that the ACPI specification states that these methods must be run with +interrupts off, which is not going to happen in a kernel interpreter. Note: +Linux has removed all use of the methods also. It was discovered that +invoking these functions caused failures on some machines, probably because +they were never tested since Windows does not call them. Affects two external +interfaces, AcpiEnterSleepState and AcpiLeaveSleepStatePrep. Tang Feng. +ACPICA BZ 969. + +Implemented support for complex bit-packed buffers returned from the _PLD +(Physical Location of Device) predefined method. Adds a new external +interface, AcpiDecodePldBuffer that parses the buffer into a more usable C +structure. Note: C Bitfields cannot be used for this type of predefined +structure since the memory layout of individual bitfields is not defined by +the C language. In addition, there are endian concerns where a compiler will +change the bitfield ordering based on the machine type. The new ACPICA +interface eliminates these issues, and should be called after _PLD is +executed. ACPICA BZ 954. + +Implemented a change to allow a scope change to root (via "Scope (\)") during +execution of module-level ASL code (code that is executed at table load +time.) Lin Ming. + +Added the Windows8/Server2012 string for the _OSI method. This change adds a +new _OSI string, "Windows 2012" for both Windows 8 and Windows Server 2012. + +Added header support for the new ACPI tables DBG2 (Debug Port Table Type 2) +and CSRT (Core System Resource Table). + +Added struct header support for the _FDE, _GRT, _GTM, and _SRT predefined +names. This simplifies access to the buffers returned by these predefined +names. Adds a new file, include/acbuffer.h. ACPICA BZ 956. + +GPE support: Removed an extraneous parameter from the various low-level +internal GPE functions. Tang Feng. + +Removed the linux makefiles from the unix packages. The generate/linux +makefiles are obsolete and have been removed from the unix tarball release +packages. The replacement makefiles are under generate/unix, and there is a +top-level makefile under the main acpica directory. ACPICA BZ 967, 912. + +Updates for Unix makefiles: +1) Add -D_FORTIFY_SOURCE=2 for gcc generation. Arjan van de Ven. +2) Update linker flags (move to end of command line) for AcpiExec utility. +Guan Chao. + +Split ACPICA initialization functions to new file, utxfinit.c. Split from +utxface.c to improve modularity and reduce file size. + +Example Code and Data Size: These are the sizes for the OS-independent +acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The +debug version of the code includes the debug output trace mechanism and has a +much larger code and data size. + + Previous Release: + Non-Debug Version: 93.5K Code, 25.3K Data, 118.8K Total + Debug Version: 173.7K Code, 74.0K Data, 247.7K Total + Current Release: + Non-Debug Version: 93.8K Code, 25.3K Data, 119.1K Total + Debug Version: 175.7K Code, 74.8K Data, 250.5K Total + + +2) iASL Compiler/Disassembler and Tools: + +iASL: Fixed a problem with constant folding for fixed-length constant +expressions. The constant-folding code was not being invoked for constant +expressions that allow the use of type 3/4/5 opcodes to generate constants +for expressions such as ByteConstExpr, WordConstExpr, etc. This could result +in the generation of invalid AML bytecode. ACPICA BZ 970. + +iASL: Fixed a generation issue on newer versions of Bison. Newer versions +apparently automatically emit some of the necessary externals. This change +handles these versions in order to eliminate generation warnings. + +Disassembler: Added support to decode the DBG2 and CSRT ACPI tables. + +Disassembler: Add support to decode _PLD buffers. The decoded buffer appears +within comments in the output file. + +Debugger: Fixed a regression with the "Threads" command where +AE_BAD_PARAMETER was always returned. + +---------------------------------------- 11 July 2012. Summary of changes for version 20120711: This release is available at https://www.acpica.org/downloads The ACPI 5.0 Modified: head/sys/contrib/dev/acpica/common/adisasm.c ============================================================================== --- head/sys/contrib/dev/acpica/common/adisasm.c Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/common/adisasm.c Thu Aug 16 20:54:52 2012 (r239340) @@ -60,9 +60,13 @@ #define _COMPONENT ACPI_TOOLS ACPI_MODULE_NAME ("adisasm") - +/* + * Older versions of Bison won't emit this external in the generated header. + * Newer versions do emit the external, so we don't need to do it. + */ +#ifndef ASLCOMPILER_ASLCOMPILERPARSE_H extern int AslCompilerdebug; - +#endif ACPI_STATUS LsDisplayNamespace ( Modified: head/sys/contrib/dev/acpica/common/ahpredef.c ============================================================================== --- head/sys/contrib/dev/acpica/common/ahpredef.c Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/common/ahpredef.c Thu Aug 16 20:54:52 2012 (r239340) @@ -198,7 +198,7 @@ const AH_PREDEFINED_NAME AslPredefine AH_PREDEF ("_PIC", "Interrupt Model", "Inform AML of the interrupt model in use"), AH_PREDEF ("_PIF", "Power Source Information", "Returns a Power Source information block"), AH_PREDEF ("_PIN", "Pin List", "Pin list, Resource Descriptor field"), - AH_PREDEF ("_PLD", "Physical Device Location", "Returns a device's physical location information"), + AH_PREDEF ("_PLD", "Physical Location of Device", "Returns a device's physical location information"), AH_PREDEF ("_PMC", "Power Meter Capabilities", "Returns a list of Power Meter capabilities info"), AH_PREDEF ("_PMD", "Power Metered Devices", "Returns a list of devices that are measured by the power meter device"), AH_PREDEF ("_PMM", "Power Meter Measurement", "Returns the current value of the Power Meter"), Modified: head/sys/contrib/dev/acpica/common/dmtable.c ============================================================================== --- head/sys/contrib/dev/acpica/common/dmtable.c Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/common/dmtable.c Thu Aug 16 20:54:52 2012 (r239340) @@ -277,22 +277,24 @@ static const char *AcpiDmGasAc ACPI_DMTABLE_DATA AcpiDmTableData[] = { {ACPI_SIG_ASF, NULL, AcpiDmDumpAsf, DtCompileAsf, TemplateAsf, "Alert Standard Format table"}, - {ACPI_SIG_BOOT, AcpiDmTableInfoBoot, NULL, NULL, TemplateBoot, "Simple Boot Flag Table"}, {ACPI_SIG_BERT, AcpiDmTableInfoBert, NULL, NULL, TemplateBert, "Boot Error Record Table"}, {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt, NULL, NULL, TemplateBgrt, "Boot Graphics Resource Table"}, + {ACPI_SIG_BOOT, AcpiDmTableInfoBoot, NULL, NULL, TemplateBoot, "Simple Boot Flag Table"}, {ACPI_SIG_CPEP, NULL, AcpiDmDumpCpep, DtCompileCpep, TemplateCpep, "Corrected Platform Error Polling table"}, + {ACPI_SIG_CSRT, NULL, AcpiDmDumpCsrt, NULL, NULL, "Core System Resource Table"}, + {ACPI_SIG_DBG2, NULL, AcpiDmDumpDbg2, NULL, NULL, "Debug Port table type 2"}, {ACPI_SIG_DBGP, AcpiDmTableInfoDbgp, NULL, NULL, TemplateDbgp, "Debug Port table"}, {ACPI_SIG_DMAR, NULL, AcpiDmDumpDmar, DtCompileDmar, TemplateDmar, "DMA Remapping table"}, {ACPI_SIG_ECDT, AcpiDmTableInfoEcdt, NULL, NULL, TemplateEcdt, "Embedded Controller Boot Resources Table"}, {ACPI_SIG_EINJ, NULL, AcpiDmDumpEinj, DtCompileEinj, TemplateEinj, "Error Injection table"}, {ACPI_SIG_ERST, NULL, AcpiDmDumpErst, DtCompileErst, TemplateErst, "Error Record Serialization Table"}, - {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt, "Fixed ACPI Description Table"}, + {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt, "Fixed ACPI Description Table (FADT)"}, {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt, "Firmware Performance Data Table"}, {ACPI_SIG_GTDT, AcpiDmTableInfoGtdt, NULL, NULL, TemplateGtdt, "Generic Timer Description Table"}, {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest, "Hardware Error Source Table"}, {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet, "High Precision Event Timer table"}, {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs, "I/O Virtualization Reporting Structure"}, - {ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, DtCompileMadt, TemplateMadt, "Multiple APIC Description Table"}, + {ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, DtCompileMadt, TemplateMadt, "Multiple APIC Description Table (MADT)"}, {ACPI_SIG_MCFG, NULL, AcpiDmDumpMcfg, DtCompileMcfg, TemplateMcfg, "Memory Mapped Configuration table"}, {ACPI_SIG_MCHI, AcpiDmTableInfoMchi, NULL, NULL, TemplateMchi, "Management Controller Host Interface table"}, {ACPI_SIG_MPST, AcpiDmTableInfoMpst, AcpiDmDumpMpst, DtCompileMpst, TemplateMpst, "Memory Power State Table"}, Modified: head/sys/contrib/dev/acpica/common/dmtbdump.c ============================================================================== --- head/sys/contrib/dev/acpica/common/dmtbdump.c Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/common/dmtbdump.c Thu Aug 16 20:54:52 2012 (r239340) @@ -52,11 +52,79 @@ ACPI_MODULE_NAME ("dmtbdump") +/* Local prototypes */ + static void AcpiDmValidateFadtLength ( UINT32 Revision, UINT32 Length); +static void +AcpiDmDumpBuffer ( + void *Table, + UINT32 BufferOffset, + UINT32 Length, + UINT32 AbsoluteOffset, + char *Header); + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpBuffer + * + * PARAMETERS: Table - ACPI Table or subtable + * BufferOffset - Offset of buffer from Table above + * Length - Length of the buffer + * AbsoluteOffset - Offset of buffer in the main ACPI table + * Header - Name of the buffer field (printed on the + * first line only.) + * + * RETURN: None + * + * DESCRIPTION: Format the contents of an arbitrary length data buffer (in the + * disassembler output format.) + * + ******************************************************************************/ + +static void +AcpiDmDumpBuffer ( + void *Table, + UINT32 BufferOffset, + UINT32 Length, + UINT32 AbsoluteOffset, + char *Header) +{ + UINT8 *Buffer; + UINT32 i; + + + if (!Length) + { + return; + } + + Buffer = ACPI_CAST_PTR (UINT8, Table) + BufferOffset; + i = 0; + + while (i < Length) + { + if (!(i % 16)) + { + AcpiOsPrintf ("\n"); + AcpiDmLineHeader (AbsoluteOffset, + ((Length - i) > 16) ? 16 : (Length - i), Header); + Header = NULL; + } + + AcpiOsPrintf ("%.02X ", *Buffer); + i++; + Buffer++; + AbsoluteOffset++; + } + + AcpiOsPrintf ("\n"); +} + /******************************************************************************* * @@ -529,6 +597,208 @@ AcpiDmDumpCpep ( /******************************************************************************* * + * FUNCTION: AcpiDmDumpCsrt + * + * PARAMETERS: Table - A CSRT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a CSRT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpCsrt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_CSRT_GROUP *SubTable; + ACPI_CSRT_DESCRIPTOR *SubSubTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_CSRT); + UINT32 SubOffset; + UINT32 SubSubOffset; + UINT32 InfoLength; + + + /* The main table only contains the ACPI header, thus already handled */ + + /* Sub-tables (Resource Groups) */ + + SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, SubTable, + SubTable->Length, AcpiDmTableInfoCsrt0); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubOffset = sizeof (ACPI_CSRT_GROUP); + + /* Shared resource group info buffer */ + + AcpiDmDumpBuffer (SubTable, SubOffset, SubTable->InfoLength, + Offset+SubOffset, "Shared Data"); + SubOffset += SubTable->InfoLength; + + /* Sub-Sub-tables (Resource Descriptors) */ + + SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table, + Offset + SubOffset); + + while ((SubOffset < SubTable->Length) && + ((Offset + SubOffset) < Table->Length)) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable, + SubSubTable->Length, AcpiDmTableInfoCsrt1); + if (ACPI_FAILURE (Status)) + { + return; + } + + SubSubOffset = sizeof (ACPI_CSRT_DESCRIPTOR); + + /* Resource-specific info buffer */ + + InfoLength = SubSubTable->Length - SubSubOffset; + + AcpiDmDumpBuffer (SubSubTable, SubSubOffset, InfoLength, + Offset + SubOffset + SubSubOffset, "ResourceInfo"); + SubSubOffset += InfoLength; + + /* Point to next sub-sub-table */ + + SubOffset += SubSubTable->Length; + SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable, + SubSubTable->Length); + } + + /* Point to next sub-table */ + + Offset += SubTable->Length; + SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable, + SubTable->Length); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpDbg2 + * + * PARAMETERS: Table - A DBG2 table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a DBG2. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpDbg2 ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_DBG2_DEVICE *SubTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_DBG2); + UINT32 i; + UINT32 ArrayOffset; + UINT32 AbsoluteOffset; + UINT8 *Array; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Sub-tables */ + + SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset); + while (Offset < Table->Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, SubTable, + SubTable->Length, AcpiDmTableInfoDbg2Device); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump the BaseAddress array */ + + for (i = 0; i < SubTable->RegisterCount; i++) + { + ArrayOffset = SubTable->BaseAddressOffset + + (sizeof (ACPI_GENERIC_ADDRESS) * i); + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) SubTable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + SubTable->Length, AcpiDmTableInfoDbg2Addr); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the AddressSize array */ + + for (i = 0; i < SubTable->RegisterCount; i++) + { + ArrayOffset = SubTable->AddressSizeOffset + + (sizeof (UINT32) * i); + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) SubTable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + SubTable->Length, AcpiDmTableInfoDbg2Size); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + /* Dump the Namestring (required) */ + + AcpiOsPrintf ("\n"); + ArrayOffset = SubTable->NamepathOffset; + AbsoluteOffset = Offset + ArrayOffset; + Array = (UINT8 *) SubTable + ArrayOffset; + + Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array, + SubTable->Length, AcpiDmTableInfoDbg2Name); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Dump the OemData (optional) */ + + AcpiDmDumpBuffer (SubTable, SubTable->OemDataOffset, SubTable->OemDataLength, + Offset + SubTable->OemDataOffset, "OEM Data"); + + /* Point to next sub-table */ + + Offset += SubTable->Length; + SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable, + SubTable->Length); + } +} + + +/******************************************************************************* + * * FUNCTION: AcpiDmDumpDmar * * PARAMETERS: Table - A DMAR table @@ -540,6 +810,7 @@ AcpiDmDumpCpep ( * ******************************************************************************/ + void AcpiDmDumpDmar ( ACPI_TABLE_HEADER *Table) Modified: head/sys/contrib/dev/acpica/common/dmtbinfo.c ============================================================================== --- head/sys/contrib/dev/acpica/common/dmtbinfo.c Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/common/dmtbinfo.c Thu Aug 16 20:54:52 2012 (r239340) @@ -86,6 +86,7 @@ #define ACPI_BGRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BGRT,f) #define ACPI_BOOT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_BOOT,f) #define ACPI_CPEP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_CPEP,f) +#define ACPI_DBG2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBG2,f) #define ACPI_DBGP_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DBGP,f) #define ACPI_DMAR_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DMAR,f) #define ACPI_DRTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_DRTM,f) @@ -126,6 +127,9 @@ #define ACPI_ASF3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_RMCP,f) #define ACPI_ASF4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ADDRESS,f) #define ACPI_CPEP0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f) +#define ACPI_CSRT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f) +#define ACPI_CSRT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_DESCRIPTOR,f) +#define ACPI_DBG20_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DBG2_DEVICE,f) #define ACPI_DMARS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_DEVICE_SCOPE,f) #define ACPI_DMAR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_HARDWARE_UNIT,f) #define ACPI_DMAR1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f) @@ -641,6 +645,94 @@ ACPI_DMTABLE_INFO AcpiDmTableI /******************************************************************************* * + * CSRT - Core System Resource Table + * + ******************************************************************************/ + +/* Main table consists only of the standard ACPI table header */ + +/* Resource Group subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[] = +{ + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (Length), "Length", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (VendorId), "Vendor ID", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (SubvendorId), "Subvendor ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (DeviceId), "Device ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (SubdeviceId), "Subdevice ID", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT0_OFFSET (InfoLength), "InfoLength", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Resource Descriptor subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt1[] = +{ + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (Length), "Length", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT16, ACPI_CSRT1_OFFSET (Subtype), "Subtype", 0}, + {ACPI_DMT_UINT32, ACPI_CSRT1_OFFSET (Uid), "UID", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * + * DBG2 - Debug Port Table 2 + * + ******************************************************************************/ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2[] = +{ + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoOffset), "Info Offset", 0}, + {ACPI_DMT_UINT32, ACPI_DBG2_OFFSET (InfoCount), "Info Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Debug Device Information Subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Device[] = +{ + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (Revision), "Revision", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Length), "Length", 0}, + {ACPI_DMT_UINT8, ACPI_DBG20_OFFSET (RegisterCount), "Register Count", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathLength), "Namepath Length", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (NamepathOffset), "Namepath Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataLength), "OEM Data Length", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (OemDataOffset), "OEM Data Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortType), "Port Type", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (PortSubtype), "Port Subtype", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (BaseAddressOffset), "Base Address Offset", 0}, + {ACPI_DMT_UINT16, ACPI_DBG20_OFFSET (AddressSizeOffset), "Address Size Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Variable-length data for the subtable */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Addr[] = +{ + {ACPI_DMT_GAS, 0, "Base Address Register", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Size[] = +{ + {ACPI_DMT_UINT32, 0, "Address Size", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoDbg2Name[] = +{ + {ACPI_DMT_STRING, 0, "Namepath", 0}, + ACPI_DMT_TERMINATOR +}; + + +/******************************************************************************* + * * DBGP - Debug Port * ******************************************************************************/ Modified: head/sys/contrib/dev/acpica/compiler/aslcompiler.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslcompiler.h Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/compiler/aslcompiler.h Thu Aug 16 20:54:52 2012 (r239340) @@ -594,6 +594,11 @@ TrSetNodeFlags ( UINT32 Flags); ACPI_PARSE_OBJECT * +TrSetNodeAmlLength ( + ACPI_PARSE_OBJECT *Op, + UINT32 Length); + +ACPI_PARSE_OBJECT * TrLinkPeerNodes ( UINT32 NumPeers, ...); Modified: head/sys/contrib/dev/acpica/compiler/aslcompiler.y ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslcompiler.y Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/compiler/aslcompiler.y Thu Aug 16 20:54:52 2012 (r239340) @@ -560,7 +560,7 @@ void * AslLocalAllo %type SwitchTerm %type UnloadTerm %type WhileTerm -//%type CaseTermList +/* %type CaseTermList */ /* Type 2 opcodes */ @@ -2507,30 +2507,38 @@ ConstExprTerm | PARSEOP___PATH__ {$$ = TrCreateConstantLeafNode (PARSEOP___PATH__);} ; +/* + * The NODE_COMPILE_TIME_CONST flag in the following constant expressions + * enables compile-time constant folding to reduce the Type3Opcodes/Type2IntegerOpcodes + * to simple integers. It is an error if these types of expressions cannot be + * reduced, since the AML grammar for ****ConstExpr requires a simple constant. + * Note: The required byte length of the constant is passed through to the + * constant folding code in the node AmlLength field. + */ ByteConstExpr - : Type3Opcode {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);} - | Type2IntegerOpcode {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);} + : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);} + | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 1);} | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_BYTECONST, $1);} | ByteConst {} ; WordConstExpr - : Type3Opcode {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);} - | Type2IntegerOpcode {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);} + : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);} + | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 2);} | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_WORDCONST, $1);} | WordConst {} ; DWordConstExpr - : Type3Opcode {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);} - | Type2IntegerOpcode {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);} + : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);} + | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 4);} | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_DWORDCONST, $1);} | DWordConst {} ; QWordConstExpr - : Type3Opcode {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);} - | Type2IntegerOpcode {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);} + : Type3Opcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);} + | Type2IntegerOpcode {$$ = TrSetNodeFlags ($1, NODE_COMPILE_TIME_CONST); TrSetNodeAmlLength ($1, 8);} | ConstExprTerm {$$ = TrUpdateNode (PARSEOP_QWORDCONST, $1);} | QWordConst {} ; @@ -2839,10 +2847,10 @@ ExtendedSpaceTerm FixedDmaTerm : PARSEOP_FIXEDDMA '(' {$$ = TrCreateLeafNode (PARSEOP_FIXEDDMA);} - WordConstExpr // 04: DMA RequestLines - ',' WordConstExpr // 06: DMA Channels - OptionalXferSize // 07: DMA TransferSize - OptionalNameString // 08: DescriptorName + WordConstExpr /* 04: DMA RequestLines */ + ',' WordConstExpr /* 06: DMA Channels */ + OptionalXferSize /* 07: DMA TransferSize */ + OptionalNameString /* 08: DescriptorName */ ')' {$$ = TrLinkChildren ($3,4,$4,$6,$7,$8);} | PARSEOP_FIXEDDMA '(' error ')' {$$ = AslDoError(); yyclearin;} @@ -2860,16 +2868,16 @@ FixedIOTerm GpioIntTerm : PARSEOP_GPIO_INT '(' {$$ = TrCreateLeafNode (PARSEOP_GPIO_INT);} - InterruptTypeKeyword // 04: InterruptType - ',' InterruptLevel // 06: InterruptLevel - OptionalShareType // 07: SharedType - ',' PinConfigByte // 09: PinConfig - OptionalWordConstExpr // 10: DebounceTimeout - ',' StringData // 12: ResourceSource - OptionalByteConstExpr // 13: ResourceSourceIndex - OptionalResourceType // 14: ResourceType - OptionalNameString // 15: DescriptorName - OptionalBuffer_Last // 16: VendorData + InterruptTypeKeyword /* 04: InterruptType */ + ',' InterruptLevel /* 06: InterruptLevel */ + OptionalShareType /* 07: SharedType */ + ',' PinConfigByte /* 09: PinConfig */ + OptionalWordConstExpr /* 10: DebounceTimeout */ + ',' StringData /* 12: ResourceSource */ + OptionalByteConstExpr /* 13: ResourceSourceIndex */ + OptionalResourceType /* 14: ResourceType */ + OptionalNameString /* 15: DescriptorName */ + OptionalBuffer_Last /* 16: VendorData */ ')' '{' DWordConstExpr '}' {$$ = TrLinkChildren ($3,11,$4,$6,$7,$9,$10,$12,$13,$14,$15,$16,$19);} | PARSEOP_GPIO_INT '(' @@ -2878,16 +2886,16 @@ GpioIntTerm GpioIoTerm : PARSEOP_GPIO_IO '(' {$$ = TrCreateLeafNode (PARSEOP_GPIO_IO);} - OptionalShareType_First // 04: SharedType - ',' PinConfigByte // 06: PinConfig - OptionalWordConstExpr // 07: DebounceTimeout - OptionalWordConstExpr // 08: DriveStrength - OptionalIoRestriction // 09: IoRestriction - ',' StringData // 11: ResourceSource - OptionalByteConstExpr // 12: ResourceSourceIndex - OptionalResourceType // 13: ResourceType - OptionalNameString // 14: DescriptorName - OptionalBuffer_Last // 15: VendorData + OptionalShareType_First /* 04: SharedType */ + ',' PinConfigByte /* 06: PinConfig */ + OptionalWordConstExpr /* 07: DebounceTimeout */ + OptionalWordConstExpr /* 08: DriveStrength */ + OptionalIoRestriction /* 09: IoRestriction */ + ',' StringData /* 11: ResourceSource */ + OptionalByteConstExpr /* 12: ResourceSourceIndex */ + OptionalResourceType /* 13: ResourceType */ + OptionalNameString /* 14: DescriptorName */ + OptionalBuffer_Last /* 15: VendorData */ ')' '{' DWordList '}' {$$ = TrLinkChildren ($3,11,$4,$6,$7,$8,$9,$11,$12,$13,$14,$15,$18);} | PARSEOP_GPIO_IO '(' @@ -2896,15 +2904,15 @@ GpioIoTerm I2cSerialBusTerm : PARSEOP_I2C_SERIALBUS '(' {$$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS);} - WordConstExpr // 04: SlaveAddress - OptionalSlaveMode // 05: SlaveMode - ',' DWordConstExpr // 07: ConnectionSpeed - OptionalAddressingMode // 08: AddressingMode - ',' StringData // 10: ResourceSource - OptionalByteConstExpr // 11: ResourceSourceIndex - OptionalResourceType // 12: ResourceType - OptionalNameString // 13: DescriptorName - OptionalBuffer_Last // 14: VendorData + WordConstExpr /* 04: SlaveAddress */ + OptionalSlaveMode /* 05: SlaveMode */ + ',' DWordConstExpr /* 07: ConnectionSpeed */ + OptionalAddressingMode /* 08: AddressingMode */ + ',' StringData /* 10: ResourceSource */ + OptionalByteConstExpr /* 11: ResourceSourceIndex */ + OptionalResourceType /* 12: ResourceType */ + OptionalNameString /* 13: DescriptorName */ + OptionalBuffer_Last /* 14: VendorData */ ')' {$$ = TrLinkChildren ($3,9,$4,$5,$7,$8,$10,$11,$12,$13,$14);} | PARSEOP_I2C_SERIALBUS '(' error ')' {$$ = AslDoError(); yyclearin;} @@ -3077,19 +3085,19 @@ RegisterTerm SpiSerialBusTerm : PARSEOP_SPI_SERIALBUS '(' {$$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS);} - WordConstExpr // 04: DeviceSelection - OptionalDevicePolarity // 05: DevicePolarity - OptionalWireMode // 06: WireMode - ',' ByteConstExpr // 08: DataBitLength - OptionalSlaveMode // 09: SlaveMode - ',' DWordConstExpr // 11: ConnectionSpeed - ',' ClockPolarityKeyword // 13: ClockPolarity - ',' ClockPhaseKeyword // 15: ClockPhase - ',' StringData // 17: ResourceSource - OptionalByteConstExpr // 18: ResourceSourceIndex - OptionalResourceType // 19: ResourceType - OptionalNameString // 20: DescriptorName - OptionalBuffer_Last // 21: VendorData + WordConstExpr /* 04: DeviceSelection */ + OptionalDevicePolarity /* 05: DevicePolarity */ + OptionalWireMode /* 06: WireMode */ + ',' ByteConstExpr /* 08: DataBitLength */ + OptionalSlaveMode /* 09: SlaveMode */ + ',' DWordConstExpr /* 11: ConnectionSpeed */ + ',' ClockPolarityKeyword /* 13: ClockPolarity */ + ',' ClockPhaseKeyword /* 15: ClockPhase */ + ',' StringData /* 17: ResourceSource */ + OptionalByteConstExpr /* 18: ResourceSourceIndex */ + OptionalResourceType /* 19: ResourceType */ + OptionalNameString /* 20: DescriptorName */ + OptionalBuffer_Last /* 21: VendorData */ ')' {$$ = TrLinkChildren ($3,13,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21);} | PARSEOP_SPI_SERIALBUS '(' error ')' {$$ = AslDoError(); yyclearin;} @@ -3115,20 +3123,20 @@ StartDependentFnTerm UartSerialBusTerm : PARSEOP_UART_SERIALBUS '(' {$$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS);} - DWordConstExpr // 04: ConnectionSpeed - OptionalBitsPerByte // 05: BitsPerByte - OptionalStopBits // 06: StopBits - ',' ByteConstExpr // 08: LinesInUse - OptionalEndian // 09: Endianess - OptionalParityType // 10: Parity - OptionalFlowControl // 11: FlowControl - ',' WordConstExpr // 13: Rx BufferSize - ',' WordConstExpr // 15: Tx BufferSize - ',' StringData // 17: ResourceSource - OptionalByteConstExpr // 18: ResourceSourceIndex - OptionalResourceType // 19: ResourceType - OptionalNameString // 20: DescriptorName - OptionalBuffer_Last // 21: VendorData + DWordConstExpr /* 04: ConnectionSpeed */ + OptionalBitsPerByte /* 05: BitsPerByte */ + OptionalStopBits /* 06: StopBits */ + ',' ByteConstExpr /* 08: LinesInUse */ + OptionalEndian /* 09: Endianess */ + OptionalParityType /* 10: Parity */ + OptionalFlowControl /* 11: FlowControl */ + ',' WordConstExpr /* 13: Rx BufferSize */ + ',' WordConstExpr /* 15: Tx BufferSize */ + ',' StringData /* 17: ResourceSource */ + OptionalByteConstExpr /* 18: ResourceSourceIndex */ + OptionalResourceType /* 19: ResourceType */ + OptionalNameString /* 20: DescriptorName */ + OptionalBuffer_Last /* 21: VendorData */ ')' {$$ = TrLinkChildren ($3,14,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21);} | PARSEOP_UART_SERIALBUS '(' error ')' {$$ = AslDoError(); yyclearin;} Modified: head/sys/contrib/dev/acpica/compiler/aslfold.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslfold.c Thu Aug 16 20:30:14 2012 (r239339) +++ head/sys/contrib/dev/acpica/compiler/aslfold.c Thu Aug 16 20:54:52 2012 (r239340) @@ -73,6 +73,11 @@ OpcAmlCheckForConstant ( UINT32 Level, void *Context); +static void +OpcUpdateIntegerNode ( + ACPI_PARSE_OBJECT *Op, + UINT64 Value); + /******************************************************************************* * @@ -214,14 +219,14 @@ OpcAmlCheckForConstant ( { /* * We are looking at at normal expression to see if it can be - * reduced. It can't. No error + * reduced. It can't. No error */ return (AE_TYPE); } /* * This is an expression that MUST reduce to a constant, and it - * can't be reduced. This is an error + * can't be reduced. This is an error */ if (Op->Asl.CompileFlags & NODE_IS_TARGET) { @@ -319,17 +324,17 @@ OpcAmlConstantWalk ( return AE_NO_MEMORY; } - WalkState->NextOp = NULL; - WalkState->Params = NULL; - WalkState->CallerReturnDesc = &ObjDesc; - WalkState->WalkType = WalkType; + WalkState->NextOp = NULL; + WalkState->Params = NULL; + WalkState->WalkType = WalkType; + WalkState->CallerReturnDesc = &ObjDesc; /* * Examine the entire subtree -- all nodes must be constants * or type 3/4/5 opcodes */ Status = TrWalkParseTree (Op, ASL_WALK_VISIT_DOWNWARD, - OpcAmlCheckForConstant, NULL, WalkState); + OpcAmlCheckForConstant, NULL, WalkState); /* * Did we find an entire subtree that contains all constants and type 3/4/5 @@ -369,7 +374,7 @@ OpcAmlConstantWalk ( /* Hand off the subtree to the AML interpreter */ Status = TrWalkParseTree (Op, ASL_WALK_VISIT_TWICE, - OpcAmlEvaluationWalk1, OpcAmlEvaluationWalk2, WalkState); + OpcAmlEvaluationWalk1, OpcAmlEvaluationWalk2, WalkState); Op->Common.Parent = OriginalParentOp; /* TBD: we really *should* release the RootOp node */ @@ -382,22 +387,26 @@ OpcAmlConstantWalk ( Status = AcpiDsResultPop (&ObjDesc, WalkState); } + + /* Check for error from the ACPICA core */ + + if (ACPI_FAILURE (Status)) + { + AslCoreSubsystemError (Op, Status, + "Failure during constant evaluation", FALSE); + } } if (ACPI_FAILURE (Status)) { /* We could not resolve the subtree for some reason */ - AslCoreSubsystemError (Op, Status, - "Failure during constant evaluation", FALSE); AslError (ASL_ERROR, ASL_MSG_CONSTANT_EVALUATION, Op, Op->Asl.ParseOpName); - /* Set the subtree value to ZERO anyway. Eliminates further errors */ + /* Set the subtree value to ZERO anyway. Eliminates further errors */ - Op->Asl.ParseOpcode = PARSEOP_INTEGER; - Op->Common.Value.Integer = 0; - OpcSetOptimalIntegerSize (Op); + OpcUpdateIntegerNode (Op, 0); } else { @@ -412,21 +421,20 @@ OpcAmlConstantWalk ( { case ACPI_TYPE_INTEGER: - Op->Asl.ParseOpcode = PARSEOP_INTEGER; - Op->Common.Value.Integer = ObjDesc->Integer.Value; - OpcSetOptimalIntegerSize (Op); + OpcUpdateIntegerNode (Op, ObjDesc->Integer.Value); DbgPrint (ASL_PARSE_OUTPUT, - "Constant expression reduced to (INTEGER) %8.8X%8.8X\n", - ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); + "Constant expression reduced to (%s) %8.8X%8.8X\n", + Op->Asl.ParseOpName, + ACPI_FORMAT_UINT64 (Op->Common.Value.Integer)); break; case ACPI_TYPE_STRING: - Op->Asl.ParseOpcode = PARSEOP_STRING_LITERAL; - Op->Common.AmlOpcode = AML_STRING_OP; - Op->Asl.AmlLength = ACPI_STRLEN (ObjDesc->String.Pointer) + 1; + Op->Asl.ParseOpcode = PARSEOP_STRING_LITERAL; + Op->Common.AmlOpcode = AML_STRING_OP; + Op->Asl.AmlLength = ACPI_STRLEN (ObjDesc->String.Pointer) + 1; Op->Common.Value.String = ObjDesc->String.Pointer; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 22:33:56 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C5CD6106564A; Thu, 16 Aug 2012 22:33:56 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AFFAF8FC0A; Thu, 16 Aug 2012 22:33:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GMXuRw079064; Thu, 16 Aug 2012 22:33:56 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GMXuvd079060; Thu, 16 Aug 2012 22:33:56 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208162233.q7GMXuvd079060@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 16 Aug 2012 22:33:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239341 - head/sys/dev/cxgbe X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 22:33:56 -0000 Author: np Date: Thu Aug 16 22:33:56 2012 New Revision: 239341 URL: http://svn.freebsd.org/changeset/base/239341 Log: Initialize various DDP parameters in the main cxgbe(4) driver: - Setup multiple DDP page sizes. When the driver attempts DDP it will try to combine physically contiguous pages into regions of these sizes. - Set the indicate size such that the payload carried in the indicate can be copied in the header mbuf (and the 16K rx buffer can be recycled). - Set DDP threshold to the max payload that the chip will coalesce and deliver to the driver (this is ~16K by default, which is also why the offload rx queue is backed by 16K buffers). If the chip is able to coalesce up to the max it's allowed to, it's a good sign that the peer is transmitting in bulk without any TCP PSH. MFC after: 2 weeks Modified: head/sys/dev/cxgbe/adapter.h head/sys/dev/cxgbe/t4_main.c head/sys/dev/cxgbe/t4_sge.c Modified: head/sys/dev/cxgbe/adapter.h ============================================================================== --- head/sys/dev/cxgbe/adapter.h Thu Aug 16 20:54:52 2012 (r239340) +++ head/sys/dev/cxgbe/adapter.h Thu Aug 16 22:33:56 2012 (r239341) @@ -135,6 +135,7 @@ enum { #else FL_BUF_SIZES = 3, /* cluster, jumbo9k, jumbo16k */ #endif + OFLD_BUF_SIZE = MJUM16BYTES, /* size of fl buffer for TOE rxq */ CTRL_EQ_QSIZE = 128, @@ -143,6 +144,12 @@ enum { TX_WR_FLITS = SGE_MAX_WR_LEN / 8 }; +#ifdef T4_PKT_TIMESTAMP +#define RX_COPY_THRESHOLD (MINCLSIZE - 8) +#else +#define RX_COPY_THRESHOLD MINCLSIZE +#endif + enum { /* adapter intr_type */ INTR_INTX = (1 << 0), Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Thu Aug 16 20:54:52 2012 (r239340) +++ head/sys/dev/cxgbe/t4_main.c Thu Aug 16 22:33:56 2012 (r239341) @@ -515,12 +515,16 @@ t4_attach(device_t dev) goto done; /* error message displayed already */ if (sc->flags & MASTER_PF) { + uint16_t indsz = min(RX_COPY_THRESHOLD - 1, M_INDICATESIZE); /* final tweaks to some settings */ t4_load_mtus(sc, sc->params.mtus, sc->params.a_wnd, sc->params.b_wnd); - t4_write_reg(sc, A_ULP_RX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12)); + /* 4K, 16K, 64K, 256K DDP "page sizes" */ + t4_write_reg(sc, A_ULP_RX_TDDP_PSZ, V_HPZ0(0) | V_HPZ1(2) | + V_HPZ2(4) | V_HPZ3(6)); + t4_set_reg_field(sc, A_ULP_RX_CTL, F_TDDPTAGTCB, F_TDDPTAGTCB); t4_set_reg_field(sc, A_TP_PARA_REG3, F_TUNNELCNGDROP0 | F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | F_TUNNELCNGDROP3, F_TUNNELCNGDROP0 | F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | @@ -528,7 +532,7 @@ t4_attach(device_t dev) t4_set_reg_field(sc, A_TP_PARA_REG5, V_INDICATESIZE(M_INDICATESIZE) | F_REARMDDPOFFSET | F_RESETDDPOFFSET, - V_INDICATESIZE(M_INDICATESIZE) | + V_INDICATESIZE(indsz) | F_REARMDDPOFFSET | F_RESETDDPOFFSET); } else { /* @@ -3228,10 +3232,13 @@ t4_sysctls(struct adapter *sc) sc->tt.ddp = 0; SYSCTL_ADD_INT(ctx, children, OID_AUTO, "ddp", CTLFLAG_RW, &sc->tt.ddp, 0, "DDP allowed"); - sc->tt.indsz = M_INDICATESIZE; + + sc->tt.indsz = G_INDICATESIZE(t4_read_reg(sc, A_TP_PARA_REG5)); SYSCTL_ADD_INT(ctx, children, OID_AUTO, "indsz", CTLFLAG_RW, &sc->tt.indsz, 0, "DDP max indicate size allowed"); - sc->tt.ddp_thres = 3*4096; + + sc->tt.ddp_thres = + G_RXCOALESCESIZE(t4_read_reg(sc, A_TP_PARA_REG2)); SYSCTL_ADD_INT(ctx, children, OID_AUTO, "ddp_thres", CTLFLAG_RW, &sc->tt.ddp_thres, 0, "DDP threshold"); } Modified: head/sys/dev/cxgbe/t4_sge.c ============================================================================== --- head/sys/dev/cxgbe/t4_sge.c Thu Aug 16 20:54:52 2012 (r239340) +++ head/sys/dev/cxgbe/t4_sge.c Thu Aug 16 22:33:56 2012 (r239341) @@ -627,7 +627,7 @@ t4_setup_port_queues(struct port_info *p snprintf(name, sizeof(name), "%s ofld_rxq%d-fl", device_get_nameunit(pi->dev), i); - init_fl(&ofld_rxq->fl, pi->qsize_rxq / 8, MJUM16BYTES, name); + init_fl(&ofld_rxq->fl, pi->qsize_rxq / 8, OFLD_BUF_SIZE, name); if (sc->flags & INTR_DIRECT || (sc->intr_count > 1 && pi->nofldrxq > pi->nrxq)) { @@ -1022,13 +1022,6 @@ service_iq(struct sge_iq *iq, int budget return (0); } - -#ifdef T4_PKT_TIMESTAMP -#define RX_COPY_THRESHOLD (MINCLSIZE - 8) -#else -#define RX_COPY_THRESHOLD MINCLSIZE -#endif - static struct mbuf * get_fl_payload(struct adapter *sc, struct sge_fl *fl, uint32_t len_newbuf, int *fl_bufs_used) From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 22:34:29 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9F6E710657C3; Thu, 16 Aug 2012 22:34:29 +0000 (UTC) (envelope-from rrs@lakerest.net) Received: from lakerest.net (lakerest.net [70.155.160.98]) by mx1.freebsd.org (Postfix) with ESMTP id 30F908FC0C; Thu, 16 Aug 2012 22:34:28 +0000 (UTC) Received: from [10.1.1.141] (bsd3.lakerest.net [70.155.160.101]) (authenticated bits=0) by lakerest.net (8.14.4/8.14.3) with ESMTP id q7GMXC1F090620 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Thu, 16 Aug 2012 18:33:12 -0400 (EDT) (envelope-from rrs@lakerest.net) Mime-Version: 1.0 (Apple Message framework v1278) Content-Type: text/plain; charset=windows-1252 From: Randall Stewart In-Reply-To: <201208161534.42012.jhb@freebsd.org> Date: Thu, 16 Aug 2012 18:33:12 -0400 Content-Transfer-Encoding: quoted-printable Message-Id: <896011BA-5F0C-4371-A9D2-6E96283380E0@lakerest.net> References: <201208161755.q7GHtHHZ048693@svn.freebsd.org> <201208161534.42012.jhb@freebsd.org> To: John Baldwin X-Mailer: Apple Mail (2.1278) Cc: svn-src-head@freebsd.org, Randall Stewart , svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239334 - head/sys/netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 22:34:29 -0000 On Aug 16, 2012, at 3:34 PM, John Baldwin wrote: > On Thursday, August 16, 2012 1:55:17 pm Randall Stewart wrote: >> Author: rrs >> Date: Thu Aug 16 17:55:16 2012 >> New Revision: 239334 >> URL: http://svn.freebsd.org/changeset/base/239334 >>=20 >> Log: >> Its never a good idea to double free the same >> address. >>=20 >> MFC after: 1 week (after the other commits ahead of this gets = MFC'd) >>=20 >> Modified: >> head/sys/netinet/in.c >>=20 >> Modified: head/sys/netinet/in.c >>=20 > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D >> --- head/sys/netinet/in.c Thu Aug 16 17:27:11 2012 = (r239333) >> +++ head/sys/netinet/in.c Thu Aug 16 17:55:16 2012 = (r239334) >> @@ -573,7 +573,7 @@ in_control(struct socket *so, u_long cmd >> } >> TAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifa_link); >> IF_ADDR_WUNLOCK(ifp); >> - ifa_free(&ia->ia_ifa); /* if_addrhead = */ >> +/* ifa_free(&ia->ia_ifa); - Double free?? */ /* if_addrhead = */ >=20 > This isn't a double free. This is dropping a reference count. In = this case=20 > as the comment suggests, it is removing the reference held by the per- > interface if_addrhead list that it was just removed from two lines = above. =20 > Later in the function when ifa_free() is invoked: >=20 > LIST_REMOVE(ia, ia_hash); > IN_IFADDR_WUNLOCK(); > ... > ifa_free(&ia->ia_ifa); /* in_ifaddrhead = */ >=20 > It is dropping the reference held by the in_ifaddrhead list which the = ifa > was removed from by the above LIST_REMOVE(). Are you seeing a panic = or > refcount underflow or some such? >=20 No panic, I wish I were so lucky, I had a lockup/fault at: in_gif.c line 410 (this is 9 stable) ----------------------- IN_IFADDR_RLOCK(); TAILQ_FOREACH(ia4, &V_in_ifaddrhead, ia_link) { if ((ia4->ia_ifa.ifa_ifp->if_flags & IFF_BROADCAST) =3D=3D= 0) <------fault in kernel HERE continue; if (ip->ip_src.s_addr =3D=3D = ia4->ia_broadaddr.sin_addr.s_addr) { IN_IFADDR_RUNLOCK(); return 0; } } IN_IFADDR_RUNLOCK(); ------------------------ I went through and made sure first that every reference using = V_in_ifaddrhead was properly locking, and they were. The only thing I could find is = this. From the instructions I could see in the assembly the ia4->ia_ifa.ifa_ifp was = NULL. And thus caused a deref of a NULL pointer. Hmm, it takes two days of pounding to get this by the way. We are using = a Shenick with our proxy that is adding and deleting addresses on a somewhat regular = basis while traffic is flowing ;-0 Something that not a lot of folks do obviously=85 not sure why I did not get into DDB, two CPU's faulted at the same time though.. also the HP's = that this thing was running on are not known for being kind on getting into = even DDB ;-( Be glad when we get them all replaced with iX systems ;-) R > --=20 > John Baldwin >=20 ------------------------------ Randall Stewart 803-317-4952 (cell) From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 23:52:09 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0CE46106566C; Thu, 16 Aug 2012 23:52:09 +0000 (UTC) (envelope-from obrien@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E0C6D8FC12; Thu, 16 Aug 2012 23:52:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GNq881087099; Thu, 16 Aug 2012 23:52:08 GMT (envelope-from obrien@svn.freebsd.org) Received: (from obrien@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GNq8RK087088; Thu, 16 Aug 2012 23:52:08 GMT (envelope-from obrien@svn.freebsd.org) Message-Id: <201208162352.q7GNq8RK087088@svn.freebsd.org> From: "David E. O'Brien" Date: Thu, 16 Aug 2012 23:52:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239342 - in stable/8/sys: compat/freebsd32 kern sys vm X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 23:52:09 -0000 Author: obrien Date: Thu Aug 16 23:52:08 2012 New Revision: 239342 URL: http://svn.freebsd.org/changeset/base/239342 Log: MF9: r237134 MFC r226342, r226343, r226347, r226348, r226349, r226353, r226388 When building for amd64 or ia64, add the "kern.elf32.read_exec" sysctl to enable PROT_EXECUTE for elf32 binaries when reading is allowed. The JDK 1.4.x requires the ability to execute in the heap. Modified: stable/8/sys/compat/freebsd32/freebsd32_misc.c stable/8/sys/compat/freebsd32/freebsd32_proto.h stable/8/sys/compat/freebsd32/freebsd32_syscall.h stable/8/sys/compat/freebsd32/freebsd32_syscalls.c stable/8/sys/compat/freebsd32/freebsd32_sysent.c stable/8/sys/compat/freebsd32/freebsd32_systrace_args.c stable/8/sys/compat/freebsd32/syscalls.master stable/8/sys/kern/imgact_elf.c stable/8/sys/sys/sysent.h stable/8/sys/vm/vm_unix.c Directory Properties: stable/8/ (props changed) stable/8/sys/ (props changed) stable/8/sys/compat/ (props changed) stable/8/sys/kern/ (props changed) stable/8/sys/sys/ (props changed) stable/8/sys/vm/ (props changed) Modified: stable/8/sys/compat/freebsd32/freebsd32_misc.c ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_misc.c Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/compat/freebsd32/freebsd32_misc.c Thu Aug 16 23:52:08 2012 (r239342) @@ -440,6 +440,21 @@ freebsd32_mmap_partial(struct thread *td #endif int +freebsd32_mprotect(struct thread *td, struct freebsd32_mprotect_args *uap) +{ + struct mprotect_args ap; + + ap.addr = PTRIN(uap->addr); + ap.len = uap->len; + ap.prot = uap->prot; +#if defined(__amd64__) || defined(__ia64__) + if (i386_read_exec && (ap.prot & PROT_READ) != 0) + ap.prot |= PROT_EXEC; +#endif + return (mprotect(td, &ap)); +} + +int freebsd32_mmap(struct thread *td, struct freebsd32_mmap_args *uap) { struct mmap_args ap; @@ -523,6 +538,11 @@ freebsd32_mmap(struct thread *td, struct } #endif +#if defined(__amd64__) || defined(__ia64__) + if (i386_read_exec && (prot & PROT_READ)) + prot |= PROT_EXEC; +#endif + ap.addr = (void *) addr; ap.len = len; ap.prot = prot; Modified: stable/8/sys/compat/freebsd32/freebsd32_proto.h ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_proto.h Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/compat/freebsd32/freebsd32_proto.h Thu Aug 16 23:52:08 2012 (r239342) @@ -76,6 +76,11 @@ struct freebsd32_execve_args { char argv_l_[PADL_(u_int32_t *)]; u_int32_t * argv; char argv_r_[PADR_(u_int32_t *)]; char envv_l_[PADL_(u_int32_t *)]; u_int32_t * envv; char envv_r_[PADR_(u_int32_t *)]; }; +struct freebsd32_mprotect_args { + char addr_l_[PADL_(const void *)]; const void * addr; char addr_r_[PADR_(const void *)]; + char len_l_[PADL_(size_t)]; size_t len; char len_r_[PADR_(size_t)]; + char prot_l_[PADL_(int)]; int prot; char prot_r_[PADR_(int)]; +}; struct freebsd32_setitimer_args { char which_l_[PADL_(u_int)]; u_int which; char which_r_[PADR_(u_int)]; char itv_l_[PADL_(struct itimerval32 *)]; struct itimerval32 * itv; char itv_r_[PADR_(struct itimerval32 *)]; @@ -593,6 +598,7 @@ int freebsd32_recvfrom(struct thread *, int freebsd32_sigaltstack(struct thread *, struct freebsd32_sigaltstack_args *); int freebsd32_ioctl(struct thread *, struct freebsd32_ioctl_args *); int freebsd32_execve(struct thread *, struct freebsd32_execve_args *); +int freebsd32_mprotect(struct thread *, struct freebsd32_mprotect_args *); int freebsd32_setitimer(struct thread *, struct freebsd32_setitimer_args *); int freebsd32_getitimer(struct thread *, struct freebsd32_getitimer_args *); int freebsd32_select(struct thread *, struct freebsd32_select_args *); @@ -911,6 +917,7 @@ int freebsd7_freebsd32_shmctl(struct thr #define FREEBSD32_SYS_AUE_freebsd32_sigaltstack AUE_SIGALTSTACK #define FREEBSD32_SYS_AUE_freebsd32_ioctl AUE_NULL #define FREEBSD32_SYS_AUE_freebsd32_execve AUE_EXECVE +#define FREEBSD32_SYS_AUE_freebsd32_mprotect AUE_MPROTECT #define FREEBSD32_SYS_AUE_freebsd32_setitimer AUE_SETITIMER #define FREEBSD32_SYS_AUE_freebsd32_getitimer AUE_GETITIMER #define FREEBSD32_SYS_AUE_freebsd32_select AUE_SELECT Modified: stable/8/sys/compat/freebsd32/freebsd32_syscall.h ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_syscall.h Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/compat/freebsd32/freebsd32_syscall.h Thu Aug 16 23:52:08 2012 (r239342) @@ -78,7 +78,7 @@ /* 71 is obsolete ommap */ #define FREEBSD32_SYS_vadvise 72 #define FREEBSD32_SYS_munmap 73 -#define FREEBSD32_SYS_mprotect 74 +#define FREEBSD32_SYS_freebsd32_mprotect 74 #define FREEBSD32_SYS_madvise 75 /* 76 is obsolete vhangup */ /* 77 is obsolete vlimit */ Modified: stable/8/sys/compat/freebsd32/freebsd32_syscalls.c ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_syscalls.c Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/compat/freebsd32/freebsd32_syscalls.c Thu Aug 16 23:52:08 2012 (r239342) @@ -84,7 +84,7 @@ const char *freebsd32_syscallnames[] = { "obs_ommap", /* 71 = obsolete ommap */ "vadvise", /* 72 = vadvise */ "munmap", /* 73 = munmap */ - "mprotect", /* 74 = mprotect */ + "freebsd32_mprotect", /* 74 = freebsd32_mprotect */ "madvise", /* 75 = madvise */ "obs_vhangup", /* 76 = obsolete vhangup */ "obs_vlimit", /* 77 = obsolete vlimit */ Modified: stable/8/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_sysent.c Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/compat/freebsd32/freebsd32_sysent.c Thu Aug 16 23:52:08 2012 (r239342) @@ -121,7 +121,7 @@ struct sysent freebsd32_sysent[] = { { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 }, /* 71 = obsolete ommap */ { AS(ovadvise_args), (sy_call_t *)ovadvise, AUE_O_VADVISE, NULL, 0, 0, 0 }, /* 72 = vadvise */ { AS(munmap_args), (sy_call_t *)munmap, AUE_MUNMAP, NULL, 0, 0, 0 }, /* 73 = munmap */ - { AS(mprotect_args), (sy_call_t *)mprotect, AUE_MPROTECT, NULL, 0, 0, 0 }, /* 74 = mprotect */ + { AS(freebsd32_mprotect_args), (sy_call_t *)freebsd32_mprotect, AUE_MPROTECT, NULL, 0, 0, 0 }, /* 74 = freebsd32_mprotect */ { AS(madvise_args), (sy_call_t *)madvise, AUE_MADVISE, NULL, 0, 0, 0 }, /* 75 = madvise */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 }, /* 76 = obsolete vhangup */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 }, /* 77 = obsolete vlimit */ Modified: stable/8/sys/compat/freebsd32/freebsd32_systrace_args.c ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_systrace_args.c Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/compat/freebsd32/freebsd32_systrace_args.c Thu Aug 16 23:52:08 2012 (r239342) @@ -464,9 +464,9 @@ systrace_args(int sysnum, void *params, *n_args = 2; break; } - /* mprotect */ + /* freebsd32_mprotect */ case 74: { - struct mprotect_args *p = params; + struct freebsd32_mprotect_args *p = params; uarg[0] = (intptr_t) p->addr; /* const void * */ uarg[1] = p->len; /* size_t */ iarg[2] = p->prot; /* int */ @@ -3656,7 +3656,7 @@ systrace_entry_setargdesc(int sysnum, in break; }; break; - /* mprotect */ + /* freebsd32_mprotect */ case 74: switch(ndx) { case 0: @@ -8156,7 +8156,7 @@ systrace_return_setargdesc(int sysnum, i if (ndx == 0 || ndx == 1) p = "int"; break; - /* mprotect */ + /* freebsd32_mprotect */ case 74: if (ndx == 0 || ndx == 1) p = "int"; Modified: stable/8/sys/compat/freebsd32/syscalls.master ============================================================================== --- stable/8/sys/compat/freebsd32/syscalls.master Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/compat/freebsd32/syscalls.master Thu Aug 16 23:52:08 2012 (r239342) @@ -168,7 +168,7 @@ 72 AUE_O_VADVISE NOPROTO { int ovadvise(int anom); } vadvise \ ovadvise_args int 73 AUE_MUNMAP NOPROTO { int munmap(void *addr, size_t len); } -74 AUE_MPROTECT NOPROTO { int mprotect(const void *addr, \ +74 AUE_MPROTECT STD { int freebsd32_mprotect(const void *addr, \ size_t len, int prot); } 75 AUE_MADVISE NOPROTO { int madvise(void *addr, size_t len, \ int behav); } Modified: stable/8/sys/kern/imgact_elf.c ============================================================================== --- stable/8/sys/kern/imgact_elf.c Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/kern/imgact_elf.c Thu Aug 16 23:52:08 2012 (r239342) @@ -103,6 +103,14 @@ static int elf_legacy_coredump = 0; SYSCTL_INT(_debug, OID_AUTO, __elfN(legacy_coredump), CTLFLAG_RW, &elf_legacy_coredump, 0, ""); +#if __ELF_WORD_SIZE == 32 +#if defined(__amd64__) || defined(__ia64__) +int i386_read_exec = 0; +SYSCTL_INT(_kern_elf32, OID_AUTO, read_exec, CTLFLAG_RW, &i386_read_exec, 0, + "enable execution from readable segments"); +#endif +#endif + static Elf_Brandinfo *elf_brand_list[MAX_BRANDS]; #define trunc_page_ps(va, ps) ((va) & ~(ps - 1)) @@ -1495,6 +1503,12 @@ __elfN(trans_prot)(Elf_Word flags) prot |= VM_PROT_WRITE; if (flags & PF_R) prot |= VM_PROT_READ; +#if __ELF_WORD_SIZE == 32 +#if defined(__amd64__) || defined(__ia64__) + if (i386_read_exec && (flags & PF_R)) + prot |= VM_PROT_EXECUTE; +#endif +#endif return (prot); } Modified: stable/8/sys/sys/sysent.h ============================================================================== --- stable/8/sys/sys/sysent.h Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/sys/sysent.h Thu Aug 16 23:52:08 2012 (r239342) @@ -133,6 +133,10 @@ extern struct sysentvec null_sysvec; extern struct sysent sysent[]; extern const char *syscallnames[]; +#if defined(__amd64__) || defined(__ia64__) +extern int i386_read_exec; +#endif + #define NO_SYSCALL (-1) struct module; Modified: stable/8/sys/vm/vm_unix.c ============================================================================== --- stable/8/sys/vm/vm_unix.c Thu Aug 16 22:33:56 2012 (r239341) +++ stable/8/sys/vm/vm_unix.c Thu Aug 16 23:52:08 2012 (r239342) @@ -36,6 +36,8 @@ * @(#)vm_unix.c 8.1 (Berkeley) 6/11/93 */ +#include "opt_compat.h" + /* * Traditional sbrk/grow interface to VM */ @@ -48,6 +50,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -74,7 +77,7 @@ obreak(td, uap) struct vmspace *vm = td->td_proc->p_vmspace; vm_offset_t new, old, base; rlim_t datalim, vmemlim; - int rv; + int prot, rv; int error = 0; boolean_t do_map_wirefuture; @@ -116,8 +119,15 @@ obreak(td, uap) error = ENOMEM; goto done; } + prot = VM_PROT_RW; +#ifdef COMPAT_FREEBSD32 +#if defined(__amd64__) || defined(__ia64__) + if (i386_read_exec && SV_PROC_FLAG(td->td_proc, SV_ILP32)) + prot |= VM_PROT_EXECUTE; +#endif +#endif rv = vm_map_insert(&vm->vm_map, NULL, 0, old, new, - VM_PROT_RW, VM_PROT_ALL, 0); + prot, VM_PROT_ALL, 0); if (rv != KERN_SUCCESS) { error = ENOMEM; goto done; From owner-svn-src-all@FreeBSD.ORG Thu Aug 16 23:59:30 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6B515106564A; Thu, 16 Aug 2012 23:59:30 +0000 (UTC) (envelope-from obrien@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4B9298FC15; Thu, 16 Aug 2012 23:59:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7GNxU3B088006; Thu, 16 Aug 2012 23:59:30 GMT (envelope-from obrien@svn.freebsd.org) Received: (from obrien@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7GNxUDa088001; Thu, 16 Aug 2012 23:59:30 GMT (envelope-from obrien@svn.freebsd.org) Message-Id: <201208162359.q7GNxUDa088001@svn.freebsd.org> From: "David E. O'Brien" Date: Thu, 16 Aug 2012 23:59:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239343 - stable/8/sys/compat/freebsd32 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Aug 2012 23:59:30 -0000 Author: obrien Date: Thu Aug 16 23:59:29 2012 New Revision: 239343 URL: http://svn.freebsd.org/changeset/base/239343 Log: Regen for correct file headers after committing r239342. Modified: stable/8/sys/compat/freebsd32/freebsd32_proto.h stable/8/sys/compat/freebsd32/freebsd32_syscall.h stable/8/sys/compat/freebsd32/freebsd32_syscalls.c stable/8/sys/compat/freebsd32/freebsd32_sysent.c Modified: stable/8/sys/compat/freebsd32/freebsd32_proto.h ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_proto.h Thu Aug 16 23:52:08 2012 (r239342) +++ stable/8/sys/compat/freebsd32/freebsd32_proto.h Thu Aug 16 23:59:29 2012 (r239343) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: stable/8/sys/compat/freebsd32/syscalls.master 229725 2012-01-06 19:32:39Z jhb + * created from FreeBSD: stable/8/sys/compat/freebsd32/syscalls.master 239342 2012-08-16 23:52:08Z obrien */ #ifndef _FREEBSD32_SYSPROTO_H_ Modified: stable/8/sys/compat/freebsd32/freebsd32_syscall.h ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_syscall.h Thu Aug 16 23:52:08 2012 (r239342) +++ stable/8/sys/compat/freebsd32/freebsd32_syscall.h Thu Aug 16 23:59:29 2012 (r239343) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: stable/8/sys/compat/freebsd32/syscalls.master 229725 2012-01-06 19:32:39Z jhb + * created from FreeBSD: stable/8/sys/compat/freebsd32/syscalls.master 239342 2012-08-16 23:52:08Z obrien */ #define FREEBSD32_SYS_syscall 0 Modified: stable/8/sys/compat/freebsd32/freebsd32_syscalls.c ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_syscalls.c Thu Aug 16 23:52:08 2012 (r239342) +++ stable/8/sys/compat/freebsd32/freebsd32_syscalls.c Thu Aug 16 23:59:29 2012 (r239343) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: stable/8/sys/compat/freebsd32/syscalls.master 229725 2012-01-06 19:32:39Z jhb + * created from FreeBSD: stable/8/sys/compat/freebsd32/syscalls.master 239342 2012-08-16 23:52:08Z obrien */ const char *freebsd32_syscallnames[] = { Modified: stable/8/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- stable/8/sys/compat/freebsd32/freebsd32_sysent.c Thu Aug 16 23:52:08 2012 (r239342) +++ stable/8/sys/compat/freebsd32/freebsd32_sysent.c Thu Aug 16 23:59:29 2012 (r239343) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: stable/8/sys/compat/freebsd32/syscalls.master 229725 2012-01-06 19:32:39Z jhb + * created from FreeBSD: stable/8/sys/compat/freebsd32/syscalls.master 239342 2012-08-16 23:52:08Z obrien */ #include "opt_compat.h" From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 00:49:30 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9FBF6106566B; Fri, 17 Aug 2012 00:49:30 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4DCE18FC0A; Fri, 17 Aug 2012 00:49:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H0nUJQ093204; Fri, 17 Aug 2012 00:49:30 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H0nUQc093196; Fri, 17 Aug 2012 00:49:30 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208170049.q7H0nUQc093196@svn.freebsd.org> From: Navdeep Parhar Date: Fri, 17 Aug 2012 00:49:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239344 - in head/sys: dev/cxgbe dev/cxgbe/common dev/cxgbe/tom modules/cxgbe/tom X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 00:49:30 -0000 Author: np Date: Fri Aug 17 00:49:29 2012 New Revision: 239344 URL: http://svn.freebsd.org/changeset/base/239344 Log: Support for TCP DDP (Direct Data Placement) in the T4 TOE module. Basically, this is automatic rx zero copy when feasible. TCP payload is DMA'd directly into the userspace buffer described by the uio submitted in soreceive by an application. - Works with sockets that are being handled by the TCP offload engine of a T4 chip (you need t4_tom.ko module loaded after cxgbe, and an "ifconfig +toe" on the cxgbe interface). - Does not require any modification to the application. - Not enabled by default. Use hw.t4nex..toe.ddp="1" to enable it. Added: head/sys/dev/cxgbe/tom/t4_ddp.c (contents, props changed) Modified: head/sys/dev/cxgbe/common/t4_hw.h head/sys/dev/cxgbe/common/t4_msg.h head/sys/dev/cxgbe/offload.h head/sys/dev/cxgbe/tom/t4_connect.c head/sys/dev/cxgbe/tom/t4_cpl_io.c head/sys/dev/cxgbe/tom/t4_listen.c head/sys/dev/cxgbe/tom/t4_tom.c head/sys/dev/cxgbe/tom/t4_tom.h head/sys/modules/cxgbe/tom/Makefile Modified: head/sys/dev/cxgbe/common/t4_hw.h ============================================================================== --- head/sys/dev/cxgbe/common/t4_hw.h Thu Aug 16 23:59:29 2012 (r239343) +++ head/sys/dev/cxgbe/common/t4_hw.h Fri Aug 17 00:49:29 2012 (r239344) @@ -161,10 +161,12 @@ struct pagepod { #define S_PPOD_TAG 6 #define M_PPOD_TAG 0xFFFFFF #define V_PPOD_TAG(x) ((x) << S_PPOD_TAG) +#define G_PPOD_TAG(x) (((x) >> S_PPOD_TAG) & M_PPOD_TAG) #define S_PPOD_PGSZ 30 #define M_PPOD_PGSZ 0x3 #define V_PPOD_PGSZ(x) ((x) << S_PPOD_PGSZ) +#define G_PPOD_PGSZ(x) (((x) >> S_PPOD_PGSZ) & M_PPOD_PGSZ) #define S_PPOD_TID 32 #define M_PPOD_TID 0xFFFFFF Modified: head/sys/dev/cxgbe/common/t4_msg.h ============================================================================== --- head/sys/dev/cxgbe/common/t4_msg.h Thu Aug 16 23:59:29 2012 (r239343) +++ head/sys/dev/cxgbe/common/t4_msg.h Fri Aug 17 00:49:29 2012 (r239344) @@ -792,6 +792,14 @@ struct cpl_set_tcb_field { __be64 val; }; +struct cpl_set_tcb_field_core { + union opcode_tid ot; + __be16 reply_ctrl; + __be16 word_cookie; + __be64 mask; + __be64 val; +}; + /* cpl_set_tcb_field.word_cookie fields */ #define S_WORD 0 #define M_WORD 0x1F @@ -1376,6 +1384,11 @@ struct cpl_rx_data_ack { __be32 credit_dack; }; +struct cpl_rx_data_ack_core { + union opcode_tid ot; + __be32 credit_dack; +}; + /* cpl_rx_data_ack.ack_seq fields */ #define S_RX_CREDITS 0 #define M_RX_CREDITS 0x3FFFFFF Modified: head/sys/dev/cxgbe/offload.h ============================================================================== --- head/sys/dev/cxgbe/offload.h Thu Aug 16 23:59:29 2012 (r239343) +++ head/sys/dev/cxgbe/offload.h Fri Aug 17 00:49:29 2012 (r239344) @@ -31,13 +31,16 @@ #ifndef __T4_OFFLOAD_H__ #define __T4_OFFLOAD_H__ -#define INIT_ULPTX_WR(w, wrlen, atomic, tid) do { \ - (w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_ULPTX_WR) | V_FW_WR_ATOMIC(atomic)); \ - (w)->wr.wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(wrlen, 16)) | \ +#define INIT_ULPTX_WRH(w, wrlen, atomic, tid) do { \ + (w)->wr_hi = htonl(V_FW_WR_OP(FW_ULPTX_WR) | V_FW_WR_ATOMIC(atomic)); \ + (w)->wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(wrlen, 16)) | \ V_FW_WR_FLOWID(tid)); \ - (w)->wr.wr_lo = cpu_to_be64(0); \ + (w)->wr_lo = cpu_to_be64(0); \ } while (0) +#define INIT_ULPTX_WR(w, wrlen, atomic, tid) \ + INIT_ULPTX_WRH(&((w)->wr), wrlen, atomic, tid) + #define INIT_TP_WR(w, tid) do { \ (w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_TP_WR) | \ V_FW_WR_IMMDLEN(sizeof(*w) - sizeof(w->wr))); \ Modified: head/sys/dev/cxgbe/tom/t4_connect.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_connect.c Thu Aug 16 23:59:29 2012 (r239343) +++ head/sys/dev/cxgbe/tom/t4_connect.c Fri Aug 17 00:49:29 2012 (r239344) @@ -247,10 +247,14 @@ calc_opt2a(struct socket *so) opt2 |= F_RX_COALESCE_VALID | V_RX_COALESCE(M_RX_COALESCE); opt2 |= F_RSS_QUEUE_VALID | V_RSS_QUEUE(toep->ofld_rxq->iq.abs_id); +#ifdef USE_DDP_RX_FLOW_CONTROL + if (toep->ulp_mode == ULP_MODE_TCPDDP) + opt2 |= F_RX_FC_VALID | F_RX_FC_DDP; +#endif + return (htobe32(opt2)); } - void t4_init_connect_cpl_handlers(struct adapter *sc) { @@ -320,7 +324,10 @@ t4_connect(struct toedev *tod, struct so toep->tid = atid; toep->l2te = e; - toep->ulp_mode = ULP_MODE_NONE; + if (sc->tt.ddp && (so->so_options & SO_NO_DDP) == 0) + set_tcpddp_ulp_mode(toep); + else + toep->ulp_mode = ULP_MODE_NONE; SOCKBUF_LOCK(&so->so_rcv); /* opt0 rcv_bufsiz initially, assumes its normal meaning later */ toep->rx_credits = min(select_rcv_wnd(so) >> 10, M_RCV_BUFSIZ); Modified: head/sys/dev/cxgbe/tom/t4_cpl_io.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_cpl_io.c Thu Aug 16 23:59:29 2012 (r239343) +++ head/sys/dev/cxgbe/tom/t4_cpl_io.c Fri Aug 17 00:49:29 2012 (r239344) @@ -53,6 +53,7 @@ __FBSDID("$FreeBSD$"); #include "common/common.h" #include "common/t4_msg.h" #include "common/t4_regs.h" +#include "common/t4_tcb.h" #include "tom/t4_tom_l2t.h" #include "tom/t4_tom.h" @@ -299,12 +300,14 @@ make_established(struct toepcb *toep, ui } static int -send_rx_credits(struct adapter *sc, struct toepcb *toep, uint32_t credits) +send_rx_credits(struct adapter *sc, struct toepcb *toep, int credits) { struct wrqe *wr; struct cpl_rx_data_ack *req; uint32_t dack = F_RX_DACK_CHANGE | V_RX_DACK_MODE(1); + KASSERT(credits >= 0, ("%s: %d credits", __func__, credits)); + wr = alloc_wrqe(sizeof(*req), toep->ctrlq); if (wr == NULL) return (0); @@ -323,25 +326,28 @@ t4_rcvd(struct toedev *tod, struct tcpcb struct adapter *sc = tod->tod_softc; struct inpcb *inp = tp->t_inpcb; struct socket *so = inp->inp_socket; - struct sockbuf *so_rcv = &so->so_rcv; + struct sockbuf *sb = &so->so_rcv; struct toepcb *toep = tp->t_toe; - int must_send; + int credits; INP_WLOCK_ASSERT(inp); - SOCKBUF_LOCK(so_rcv); - KASSERT(toep->enqueued >= so_rcv->sb_cc, - ("%s: so_rcv->sb_cc > enqueued", __func__)); - toep->rx_credits += toep->enqueued - so_rcv->sb_cc; - toep->enqueued = so_rcv->sb_cc; - SOCKBUF_UNLOCK(so_rcv); - - must_send = toep->rx_credits + 16384 >= tp->rcv_wnd; - if (must_send || toep->rx_credits >= 15 * 1024) { - int credits; + SOCKBUF_LOCK(sb); + KASSERT(toep->sb_cc >= sb->sb_cc, + ("%s: sb %p has more data (%d) than last time (%d).", + __func__, sb, sb->sb_cc, toep->sb_cc)); + toep->rx_credits += toep->sb_cc - sb->sb_cc; + toep->sb_cc = sb->sb_cc; + credits = toep->rx_credits; + SOCKBUF_UNLOCK(sb); + + if (credits > 0 && + (credits + 16384 >= tp->rcv_wnd || credits >= 15 * 1024)) { - credits = send_rx_credits(sc, toep, toep->rx_credits); + credits = send_rx_credits(sc, toep, credits); + SOCKBUF_LOCK(sb); toep->rx_credits -= credits; + SOCKBUF_UNLOCK(sb); tp->rcv_wnd += credits; tp->rcv_adv += credits; } @@ -537,7 +543,8 @@ t4_push_frames(struct adapter *sc, struc KASSERT(toepcb_flag(toep, TPF_FLOWC_WR_SENT), ("%s: flowc_wr not sent for tid %u.", __func__, toep->tid)); - if (toep->ulp_mode != ULP_MODE_NONE) + if (__predict_false(toep->ulp_mode != ULP_MODE_NONE && + toep->ulp_mode != ULP_MODE_TCPDDP)) CXGBE_UNIMPLEMENTED("ulp_mode"); /* @@ -765,7 +772,8 @@ do_peer_close(struct sge_iq *iq, const s struct toepcb *toep = lookup_tid(sc, tid); struct inpcb *inp = toep->inp; struct tcpcb *tp = NULL; - struct socket *so = NULL; + struct socket *so; + struct sockbuf *sb; #ifdef INVARIANTS unsigned int opcode = G_CPL_OPCODE(be32toh(OPCODE_TID(cpl))); #endif @@ -785,10 +793,35 @@ do_peer_close(struct sge_iq *iq, const s if (toepcb_flag(toep, TPF_ABORT_SHUTDOWN)) goto done; + tp->rcv_nxt++; /* FIN */ + so = inp->inp_socket; + sb = &so->so_rcv; + SOCKBUF_LOCK(sb); + if (__predict_false(toep->ddp_flags & (DDP_BUF0_ACTIVE | DDP_BUF1_ACTIVE))) { + m = m_get(M_NOWAIT, MT_DATA); + if (m == NULL) + CXGBE_UNIMPLEMENTED("mbuf alloc failure"); + + m->m_len = be32toh(cpl->rcv_nxt) - tp->rcv_nxt; + m->m_flags |= M_DDP; /* Data is already where it should be */ + m->m_data = "nothing to see here"; + tp->rcv_nxt = be32toh(cpl->rcv_nxt); + + toep->ddp_flags &= ~(DDP_BUF0_ACTIVE | DDP_BUF1_ACTIVE); + + KASSERT(toep->sb_cc >= sb->sb_cc, + ("%s: sb %p has more data (%d) than last time (%d).", + __func__, sb, sb->sb_cc, toep->sb_cc)); + toep->rx_credits += toep->sb_cc - sb->sb_cc; +#ifdef USE_DDP_RX_FLOW_CONTROL + toep->rx_credits -= m->m_len; /* adjust for F_RX_FC_DDP */ +#endif + sbappendstream_locked(sb, m); + toep->sb_cc = sb->sb_cc; + } + socantrcvmore_locked(so); /* unlocks the sockbuf */ - socantrcvmore(so); - tp->rcv_nxt++; /* FIN */ KASSERT(tp->rcv_nxt == be32toh(cpl->rcv_nxt), ("%s: rcv_nxt mismatch: %u %u", __func__, tp->rcv_nxt, be32toh(cpl->rcv_nxt))); @@ -1046,7 +1079,8 @@ do_rx_data(struct sge_iq *iq, const stru struct inpcb *inp = toep->inp; struct tcpcb *tp; struct socket *so; - struct sockbuf *so_rcv; + struct sockbuf *sb; + int len; if (__predict_false(toepcb_flag(toep, TPF_SYNQE))) { /* @@ -1064,11 +1098,12 @@ do_rx_data(struct sge_iq *iq, const stru /* strip off CPL header */ m_adj(m, sizeof(*cpl)); + len = m->m_pkthdr.len; INP_WLOCK(inp); if (inp->inp_flags & (INP_DROPPED | INP_TIMEWAIT)) { CTR4(KTR_CXGBE, "%s: tid %u, rx (%d bytes), inp_flags 0x%x", - __func__, tid, m->m_pkthdr.len, inp->inp_flags); + __func__, tid, len, inp->inp_flags); INP_WUNLOCK(inp); m_freem(m); return (0); @@ -1084,21 +1119,20 @@ do_rx_data(struct sge_iq *iq, const stru } #endif - tp->rcv_nxt += m->m_pkthdr.len; - KASSERT(tp->rcv_wnd >= m->m_pkthdr.len, - ("%s: negative window size", __func__)); - tp->rcv_wnd -= m->m_pkthdr.len; + tp->rcv_nxt += len; + KASSERT(tp->rcv_wnd >= len, ("%s: negative window size", __func__)); + tp->rcv_wnd -= len; tp->t_rcvtime = ticks; so = inp_inpcbtosocket(inp); - so_rcv = &so->so_rcv; - SOCKBUF_LOCK(so_rcv); + sb = &so->so_rcv; + SOCKBUF_LOCK(sb); - if (__predict_false(so_rcv->sb_state & SBS_CANTRCVMORE)) { + if (__predict_false(sb->sb_state & SBS_CANTRCVMORE)) { CTR3(KTR_CXGBE, "%s: tid %u, excess rx (%d bytes)", - __func__, tid, m->m_pkthdr.len); + __func__, tid, len); m_freem(m); - SOCKBUF_UNLOCK(so_rcv); + SOCKBUF_UNLOCK(sb); INP_WUNLOCK(inp); INP_INFO_WLOCK(&V_tcbinfo); @@ -1112,23 +1146,76 @@ do_rx_data(struct sge_iq *iq, const stru } /* receive buffer autosize */ - if (so_rcv->sb_flags & SB_AUTOSIZE && + if (sb->sb_flags & SB_AUTOSIZE && V_tcp_do_autorcvbuf && - so_rcv->sb_hiwat < V_tcp_autorcvbuf_max && - m->m_pkthdr.len > (sbspace(so_rcv) / 8 * 7)) { - unsigned int hiwat = so_rcv->sb_hiwat; + sb->sb_hiwat < V_tcp_autorcvbuf_max && + len > (sbspace(sb) / 8 * 7)) { + unsigned int hiwat = sb->sb_hiwat; unsigned int newsize = min(hiwat + V_tcp_autorcvbuf_inc, V_tcp_autorcvbuf_max); - if (!sbreserve_locked(so_rcv, newsize, so, NULL)) - so_rcv->sb_flags &= ~SB_AUTOSIZE; + if (!sbreserve_locked(sb, newsize, so, NULL)) + sb->sb_flags &= ~SB_AUTOSIZE; else toep->rx_credits += newsize - hiwat; } - toep->enqueued += m->m_pkthdr.len; - sbappendstream_locked(so_rcv, m); + + if (toep->ulp_mode == ULP_MODE_TCPDDP) { + int changed = !(toep->ddp_flags & DDP_ON) ^ cpl->ddp_off; + + if (changed) { + if (__predict_false(!(toep->ddp_flags & DDP_SC_REQ))) { + /* XXX: handle this if legitimate */ + panic("%s: unexpected DDP state change %d", + __func__, cpl->ddp_off); + } + toep->ddp_flags ^= DDP_ON | DDP_SC_REQ; + } + + if ((toep->ddp_flags & DDP_OK) == 0 && + time_uptime >= toep->ddp_disabled + DDP_RETRY_WAIT) { + toep->ddp_score = DDP_LOW_SCORE; + toep->ddp_flags |= DDP_OK; + CTR3(KTR_CXGBE, "%s: tid %u DDP_OK @ %u", + __func__, tid, time_uptime); + } + + if (toep->ddp_flags & DDP_ON) { + + /* + * CPL_RX_DATA with DDP on can only be an indicate. Ask + * soreceive to post a buffer or disable DDP. The + * payload that arrived in this indicate is appended to + * the socket buffer as usual. + */ + +#if 0 + CTR5(KTR_CXGBE, + "%s: tid %u (0x%x) DDP indicate (seq 0x%x, len %d)", + __func__, tid, toep->flags, be32toh(cpl->seq), len); +#endif + sb->sb_flags |= SB_DDP_INDICATE; + } else if ((toep->ddp_flags & (DDP_OK|DDP_SC_REQ)) == DDP_OK && + tp->rcv_wnd > DDP_RSVD_WIN && len >= sc->tt.ddp_thres) { + + /* + * DDP allowed but isn't on (and a request to switch it + * on isn't pending either), and conditions are ripe for + * it to work. Switch it on. + */ + + enable_ddp(sc, toep); + } + } + + KASSERT(toep->sb_cc >= sb->sb_cc, + ("%s: sb %p has more data (%d) than last time (%d).", + __func__, sb, sb->sb_cc, toep->sb_cc)); + toep->rx_credits += toep->sb_cc - sb->sb_cc; + sbappendstream_locked(sb, m); + toep->sb_cc = sb->sb_cc; sorwakeup_locked(so); - SOCKBUF_UNLOCK_ASSERT(so_rcv); + SOCKBUF_UNLOCK_ASSERT(sb); INP_WUNLOCK(inp); return (0); Added: head/sys/dev/cxgbe/tom/t4_ddp.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/dev/cxgbe/tom/t4_ddp.c Fri Aug 17 00:49:29 2012 (r239344) @@ -0,0 +1,1223 @@ +/*- + * Copyright (c) 2012 Chelsio Communications, Inc. + * All rights reserved. + * Written by: Navdeep Parhar + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_inet.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define TCPSTATES +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef TCP_OFFLOAD +#include "common/common.h" +#include "common/t4_msg.h" +#include "common/t4_regs.h" +#include "common/t4_tcb.h" +#include "tom/t4_tom.h" + +#define PPOD_SZ(n) ((n) * sizeof(struct pagepod)) +#define PPOD_SIZE (PPOD_SZ(1)) + +/* XXX: must match A_ULP_RX_TDDP_PSZ */ +static int t4_ddp_pgsz[] = {4096, 4096 << 2, 4096 << 4, 4096 << 6}; + +#if 0 +static void +t4_dump_tcb(struct adapter *sc, int tid) +{ + uint32_t tcb_base, off, i, j; + + /* Dump TCB for the tid */ + tcb_base = t4_read_reg(sc, A_TP_CMM_TCB_BASE); + t4_write_reg(sc, PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, 2), + tcb_base + tid * TCB_SIZE); + t4_read_reg(sc, PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, 2)); + off = 0; + printf("\n"); + for (i = 0; i < 4; i++) { + uint32_t buf[8]; + for (j = 0; j < 8; j++, off += 4) + buf[j] = htonl(t4_read_reg(sc, MEMWIN2_BASE + off)); + + printf("%08x %08x %08x %08x %08x %08x %08x %08x\n", + buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], + buf[7]); + } +} +#endif + +#define MAX_DDP_BUFFER_SIZE (M_TCB_RX_DDP_BUF0_LEN) +static int +alloc_ppods(struct tom_data *td, int n, struct ppod_region *pr) +{ + int ppod; + + KASSERT(n > 0, ("%s: nonsense allocation (%d)", __func__, n)); + + mtx_lock(&td->ppod_lock); + if (n > td->nppods_free) { + mtx_unlock(&td->ppod_lock); + return (-1); + } + + if (td->nppods_free_head >= n) { + td->nppods_free_head -= n; + ppod = td->nppods_free_head; + TAILQ_INSERT_HEAD(&td->ppods, pr, link); + } else { + struct ppod_region *p; + + ppod = td->nppods_free_head; + TAILQ_FOREACH(p, &td->ppods, link) { + ppod += p->used + p->free; + if (n <= p->free) { + ppod -= n; + p->free -= n; + TAILQ_INSERT_AFTER(&td->ppods, p, pr, link); + goto allocated; + } + } + + if (__predict_false(ppod != td->nppods)) { + panic("%s: ppods TAILQ (%p) corrupt." + " At %d instead of %d at the end of the queue.", + __func__, &td->ppods, ppod, td->nppods); + } + + mtx_unlock(&td->ppod_lock); + return (-1); + } + +allocated: + pr->used = n; + pr->free = 0; + td->nppods_free -= n; + mtx_unlock(&td->ppod_lock); + + return (ppod); +} + +static void +free_ppods(struct tom_data *td, struct ppod_region *pr) +{ + struct ppod_region *p; + + KASSERT(pr->used > 0, ("%s: nonsense free (%d)", __func__, pr->used)); + + mtx_lock(&td->ppod_lock); + p = TAILQ_PREV(pr, ppod_head, link); + if (p != NULL) + p->free += pr->used + pr->free; + else + td->nppods_free_head += pr->used + pr->free; + td->nppods_free += pr->used; + KASSERT(td->nppods_free <= td->nppods, + ("%s: nppods_free (%d) > nppods (%d). %d freed this time.", + __func__, td->nppods_free, td->nppods, pr->used)); + TAILQ_REMOVE(&td->ppods, pr, link); + mtx_unlock(&td->ppod_lock); +} + +static inline int +pages_to_nppods(int npages, int ddp_pgsz) +{ + int nsegs = npages * PAGE_SIZE / ddp_pgsz; + + return (howmany(nsegs, PPOD_PAGES)); +} + +static void +free_ddp_buffer(struct tom_data *td, struct ddp_buffer *db) +{ + + if (db == NULL) + return; + + if (db->pages) + free(db->pages, M_CXGBE); + + if (db->nppods > 0) + free_ppods(td, &db->ppod_region); + + free(db, M_CXGBE); +} + +void +release_ddp_resources(struct toepcb *toep) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(toep->db); i++) { + if (toep->db[i] != NULL) { + free_ddp_buffer(toep->td, toep->db[i]); + toep->db[i] = NULL; + } + } +} + +/* SET_TCB_FIELD sent as a ULP command looks like this */ +#define LEN__SET_TCB_FIELD_ULP (sizeof(struct ulp_txpkt) + \ + sizeof(struct ulptx_idata) + sizeof(struct cpl_set_tcb_field_core)) + +/* RX_DATA_ACK sent as a ULP command looks like this */ +#define LEN__RX_DATA_ACK_ULP (sizeof(struct ulp_txpkt) + \ + sizeof(struct ulptx_idata) + sizeof(struct cpl_rx_data_ack_core)) + +static inline void * +mk_set_tcb_field_ulp(struct ulp_txpkt *ulpmc, struct toepcb *toep, + uint64_t word, uint64_t mask, uint64_t val) +{ + struct ulptx_idata *ulpsc; + struct cpl_set_tcb_field_core *req; + + ulpmc->cmd_dest = htonl(V_ULPTX_CMD(ULP_TX_PKT) | V_ULP_TXPKT_DEST(0)); + ulpmc->len = htobe32(howmany(LEN__SET_TCB_FIELD_ULP, 16)); + + ulpsc = (struct ulptx_idata *)(ulpmc + 1); + ulpsc->cmd_more = htobe32(V_ULPTX_CMD(ULP_TX_SC_IMM)); + ulpsc->len = htobe32(sizeof(*req)); + + req = (struct cpl_set_tcb_field_core *)(ulpsc + 1); + OPCODE_TID(req) = htobe32(MK_OPCODE_TID(CPL_SET_TCB_FIELD, toep->tid)); + req->reply_ctrl = htobe16(V_NO_REPLY(1) | + V_QUEUENO(toep->ofld_rxq->iq.abs_id)); + req->word_cookie = htobe16(V_WORD(word) | V_COOKIE(0)); + req->mask = htobe64(mask); + req->val = htobe64(val); + + ulpsc = (struct ulptx_idata *)(req + 1); + if (LEN__SET_TCB_FIELD_ULP % 16) { + ulpsc->cmd_more = htobe32(V_ULPTX_CMD(ULP_TX_SC_NOOP)); + ulpsc->len = htobe32(0); + return (ulpsc + 1); + } + return (ulpsc); +} + +static inline void * +mk_rx_data_ack_ulp(struct ulp_txpkt *ulpmc, struct toepcb *toep) +{ + struct ulptx_idata *ulpsc; + struct cpl_rx_data_ack_core *req; + + ulpmc->cmd_dest = htonl(V_ULPTX_CMD(ULP_TX_PKT) | V_ULP_TXPKT_DEST(0)); + ulpmc->len = htobe32(howmany(LEN__RX_DATA_ACK_ULP, 16)); + + ulpsc = (struct ulptx_idata *)(ulpmc + 1); + ulpsc->cmd_more = htobe32(V_ULPTX_CMD(ULP_TX_SC_IMM)); + ulpsc->len = htobe32(sizeof(*req)); + + req = (struct cpl_rx_data_ack_core *)(ulpsc + 1); + OPCODE_TID(req) = htobe32(MK_OPCODE_TID(CPL_RX_DATA_ACK, toep->tid)); + req->credit_dack = htobe32(F_RX_MODULATE_RX); + + ulpsc = (struct ulptx_idata *)(req + 1); + if (LEN__RX_DATA_ACK_ULP % 16) { + ulpsc->cmd_more = htobe32(V_ULPTX_CMD(ULP_TX_SC_NOOP)); + ulpsc->len = htobe32(0); + return (ulpsc + 1); + } + return (ulpsc); +} + +static inline uint64_t +select_ddp_flags(struct socket *so, int flags, int db_idx) +{ + uint64_t ddp_flags = V_TF_DDP_INDICATE_OUT(0); + int waitall = flags & MSG_WAITALL; + int nb = so->so_state & SS_NBIO || flags & (MSG_DONTWAIT | MSG_NBIO); + + KASSERT(db_idx == 0 || db_idx == 1, + ("%s: bad DDP buffer index %d", __func__, db_idx)); + + if (db_idx == 0) { + ddp_flags |= V_TF_DDP_BUF0_VALID(1) | V_TF_DDP_ACTIVE_BUF(0); + if (waitall) + ddp_flags |= V_TF_DDP_PUSH_DISABLE_0(1); + else if (nb) + ddp_flags |= V_TF_DDP_BUF0_FLUSH(1); + else + ddp_flags |= V_TF_DDP_BUF0_FLUSH(0); + } else { + ddp_flags |= V_TF_DDP_BUF1_VALID(1) | V_TF_DDP_ACTIVE_BUF(1); + if (waitall) + ddp_flags |= V_TF_DDP_PUSH_DISABLE_1(1); + else if (nb) + ddp_flags |= V_TF_DDP_BUF1_FLUSH(1); + else + ddp_flags |= V_TF_DDP_BUF1_FLUSH(0); + } + + return (ddp_flags); +} + +static struct wrqe * +mk_update_tcb_for_ddp(struct adapter *sc, struct toepcb *toep, int db_idx, + int offset, uint64_t ddp_flags) +{ + struct ddp_buffer *db = toep->db[db_idx]; + struct wrqe *wr; + struct work_request_hdr *wrh; + struct ulp_txpkt *ulpmc; + int len; + + KASSERT(db_idx == 0 || db_idx == 1, + ("%s: bad DDP buffer index %d", __func__, db_idx)); + + /* + * We'll send a compound work request that has 3 SET_TCB_FIELDs and an + * RX_DATA_ACK (with RX_MODULATE to speed up delivery). + * + * The work request header is 16B and always ends at a 16B boundary. + * The ULPTX master commands that follow must all end at 16B boundaries + * too so we round up the size to 16. + */ + len = sizeof(*wrh) + 3 * roundup(LEN__SET_TCB_FIELD_ULP, 16) + + roundup(LEN__RX_DATA_ACK_ULP, 16); + + wr = alloc_wrqe(len, toep->ctrlq); + if (wr == NULL) + return (NULL); + wrh = wrtod(wr); + INIT_ULPTX_WRH(wrh, len, 1, 0); /* atomic */ + ulpmc = (struct ulp_txpkt *)(wrh + 1); + + /* Write the buffer's tag */ + ulpmc = mk_set_tcb_field_ulp(ulpmc, toep, + W_TCB_RX_DDP_BUF0_TAG + db_idx, + V_TCB_RX_DDP_BUF0_TAG(M_TCB_RX_DDP_BUF0_TAG), + V_TCB_RX_DDP_BUF0_TAG(db->tag)); + + /* Update the current offset in the DDP buffer and its total length */ + if (db_idx == 0) + ulpmc = mk_set_tcb_field_ulp(ulpmc, toep, + W_TCB_RX_DDP_BUF0_OFFSET, + V_TCB_RX_DDP_BUF0_OFFSET(M_TCB_RX_DDP_BUF0_OFFSET) | + V_TCB_RX_DDP_BUF0_LEN(M_TCB_RX_DDP_BUF0_LEN), + V_TCB_RX_DDP_BUF0_OFFSET(offset) | + V_TCB_RX_DDP_BUF0_LEN(db->len)); + else + ulpmc = mk_set_tcb_field_ulp(ulpmc, toep, + W_TCB_RX_DDP_BUF1_OFFSET, + V_TCB_RX_DDP_BUF1_OFFSET(M_TCB_RX_DDP_BUF1_OFFSET) | + V_TCB_RX_DDP_BUF1_LEN((u64)M_TCB_RX_DDP_BUF1_LEN << 32), + V_TCB_RX_DDP_BUF1_OFFSET(offset) | + V_TCB_RX_DDP_BUF1_LEN((u64)db->len << 32)); + + /* Update DDP flags */ + ulpmc = mk_set_tcb_field_ulp(ulpmc, toep, W_TCB_RX_DDP_FLAGS, + V_TF_DDP_BUF0_FLUSH(1) | V_TF_DDP_BUF1_FLUSH(1) | + V_TF_DDP_PUSH_DISABLE_0(1) | V_TF_DDP_PUSH_DISABLE_1(1) | + V_TF_DDP_BUF0_VALID(1) | V_TF_DDP_BUF1_VALID(1) | + V_TF_DDP_ACTIVE_BUF(1) | V_TF_DDP_INDICATE_OUT(1), ddp_flags); + + /* Gratuitous RX_DATA_ACK with RX_MODULATE set to speed up delivery. */ + ulpmc = mk_rx_data_ack_ulp(ulpmc, toep); + + return (wr); +} + +static void +discourage_ddp(struct toepcb *toep) +{ + + if (toep->ddp_score && --toep->ddp_score == 0) { + toep->ddp_flags &= ~DDP_OK; + toep->ddp_disabled = time_uptime; + CTR3(KTR_CXGBE, "%s: tid %u !DDP_OK @ %u", + __func__, toep->tid, time_uptime); + } +} + +static int +handle_ddp_data(struct toepcb *toep, __be32 ddp_report, __be32 rcv_nxt, int len) +{ + uint32_t report = be32toh(ddp_report); + unsigned int db_flag; + struct inpcb *inp = toep->inp; + struct tcpcb *tp; + struct socket *so; + struct sockbuf *sb; + struct mbuf *m; + + db_flag = report & F_DDP_BUF_IDX ? DDP_BUF1_ACTIVE : DDP_BUF0_ACTIVE; + + if (__predict_false(!(report & F_DDP_INV))) + CXGBE_UNIMPLEMENTED("DDP buffer still valid"); + + INP_WLOCK(inp); + so = inp_inpcbtosocket(inp); + sb = &so->so_rcv; + if (__predict_false(inp->inp_flags & (INP_DROPPED | INP_TIMEWAIT))) { + + /* + * XXX: think a bit more. + * tcpcb probably gone, but socket should still be around + * because we always wait for DDP completion in soreceive no + * matter what. Just wake it up and let it clean up. + */ + + CTR5(KTR_CXGBE, "%s: tid %u, seq 0x%x, len %d, inp_flags 0x%x", + __func__, toep->tid, be32toh(rcv_nxt), len, inp->inp_flags); + SOCKBUF_LOCK(sb); + goto wakeup; + } + + tp = intotcpcb(inp); + len += be32toh(rcv_nxt) - tp->rcv_nxt; + tp->rcv_nxt += len; + tp->t_rcvtime = ticks; +#ifndef USE_DDP_RX_FLOW_CONTROL + KASSERT(tp->rcv_wnd >= len, ("%s: negative window size", __func__)); + tp->rcv_wnd -= len; +#endif + + m = m_get(M_NOWAIT, MT_DATA); + if (m == NULL) + CXGBE_UNIMPLEMENTED("mbuf alloc failure"); + m->m_len = len; + m->m_flags |= M_DDP; /* Data is already where it should be */ + m->m_data = "nothing to see here"; + + SOCKBUF_LOCK(sb); + if (report & F_DDP_BUF_COMPLETE) + toep->ddp_score = DDP_HIGH_SCORE; + else + discourage_ddp(toep); + + KASSERT(toep->sb_cc >= sb->sb_cc, + ("%s: sb %p has more data (%d) than last time (%d).", + __func__, sb, sb->sb_cc, toep->sb_cc)); + toep->rx_credits += toep->sb_cc - sb->sb_cc; +#ifdef USE_DDP_RX_FLOW_CONTROL + toep->rx_credits -= len; /* adjust for F_RX_FC_DDP */ +#endif + sbappendstream_locked(sb, m); + toep->sb_cc = sb->sb_cc; +wakeup: + KASSERT(toep->ddp_flags & db_flag, + ("%s: DDP buffer not active. toep %p, ddp_flags 0x%x, report 0x%x", + __func__, toep, toep->ddp_flags, report)); + toep->ddp_flags &= ~db_flag; + sorwakeup_locked(so); + SOCKBUF_UNLOCK_ASSERT(sb); + + INP_WUNLOCK(inp); + return (0); +} + +#define DDP_ERR (F_DDP_PPOD_MISMATCH | F_DDP_LLIMIT_ERR | F_DDP_ULIMIT_ERR |\ + F_DDP_PPOD_PARITY_ERR | F_DDP_PADDING_ERR | F_DDP_OFFSET_ERR |\ + F_DDP_INVALID_TAG | F_DDP_COLOR_ERR | F_DDP_TID_MISMATCH |\ + F_DDP_INVALID_PPOD | F_DDP_HDRCRC_ERR | F_DDP_DATACRC_ERR) + +static int +do_rx_data_ddp(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) +{ + struct adapter *sc = iq->adapter; + const struct cpl_rx_data_ddp *cpl = (const void *)(rss + 1); + unsigned int tid = GET_TID(cpl); + uint32_t vld; + struct toepcb *toep = lookup_tid(sc, tid); + + KASSERT(m == NULL, ("%s: wasn't expecting payload", __func__)); + KASSERT(toep->tid == tid, ("%s: toep tid/atid mismatch", __func__)); + KASSERT(!toepcb_flag(toep, TPF_SYNQE), + ("%s: toep %p claims to be a synq entry", __func__, toep)); + + vld = be32toh(cpl->ddpvld); + if (__predict_false(vld & DDP_ERR)) { + panic("%s: DDP error 0x%x (tid %d, toep %p)", + __func__, vld, tid, toep); + } + + handle_ddp_data(toep, cpl->u.ddp_report, cpl->seq, be16toh(cpl->len)); + + return (0); +} + +static int +do_rx_ddp_complete(struct sge_iq *iq, const struct rss_header *rss, + struct mbuf *m) +{ + struct adapter *sc = iq->adapter; + const struct cpl_rx_ddp_complete *cpl = (const void *)(rss + 1); + unsigned int tid = GET_TID(cpl); + struct toepcb *toep = lookup_tid(sc, tid); + + KASSERT(m == NULL, ("%s: wasn't expecting payload", __func__)); + KASSERT(toep->tid == tid, ("%s: toep tid/atid mismatch", __func__)); + KASSERT(!toepcb_flag(toep, TPF_SYNQE), + ("%s: toep %p claims to be a synq entry", __func__, toep)); + + handle_ddp_data(toep, cpl->ddp_report, cpl->rcv_nxt, 0); + + return (0); +} + +void +enable_ddp(struct adapter *sc, struct toepcb *toep) +{ + + KASSERT((toep->ddp_flags & (DDP_ON | DDP_OK | DDP_SC_REQ)) == DDP_OK, + ("%s: toep %p has bad ddp_flags 0x%x", + __func__, toep, toep->ddp_flags)); + + CTR3(KTR_CXGBE, "%s: tid %u (time %u)", + __func__, toep->tid, time_uptime); + + toep->ddp_flags |= DDP_SC_REQ; + t4_set_tcb_field(sc, toep, W_TCB_RX_DDP_FLAGS, + V_TF_DDP_OFF(1) | V_TF_DDP_INDICATE_OUT(1) | + V_TF_DDP_BUF0_INDICATE(1) | V_TF_DDP_BUF1_INDICATE(1) | + V_TF_DDP_BUF0_VALID(1) | V_TF_DDP_BUF1_VALID(1), + V_TF_DDP_BUF0_INDICATE(1) | V_TF_DDP_BUF1_INDICATE(1)); + t4_set_tcb_field(sc, toep, W_TCB_T_FLAGS, + V_TF_RCV_COALESCE_ENABLE(1), 0); +} + +static inline void +disable_ddp(struct adapter *sc, struct toepcb *toep) +{ + + KASSERT((toep->ddp_flags & (DDP_ON | DDP_SC_REQ)) == DDP_ON, + ("%s: toep %p has bad ddp_flags 0x%x", + __func__, toep, toep->ddp_flags)); + + CTR3(KTR_CXGBE, "%s: tid %u (time %u)", + __func__, toep->tid, time_uptime); + + toep->ddp_flags |= DDP_SC_REQ; + t4_set_tcb_field(sc, toep, W_TCB_T_FLAGS, + V_TF_RCV_COALESCE_ENABLE(1), V_TF_RCV_COALESCE_ENABLE(1)); + t4_set_tcb_field(sc, toep, W_TCB_RX_DDP_FLAGS, V_TF_DDP_OFF(1), + V_TF_DDP_OFF(1)); +} + +static int +hold_uio(struct uio *uio, vm_page_t **ppages, int *pnpages) +{ + struct vm_map *map; + struct iovec *iov; + vm_offset_t start, end; + vm_page_t *pp; + int n; + + KASSERT(uio->uio_iovcnt == 1, + ("%s: uio_iovcnt %d", __func__, uio->uio_iovcnt)); + KASSERT(uio->uio_td->td_proc == curproc, + ("%s: uio proc (%p) is not curproc (%p)", + __func__, uio->uio_td->td_proc, curproc)); + + map = &curproc->p_vmspace->vm_map; + iov = &uio->uio_iov[0]; + start = trunc_page((uintptr_t)iov->iov_base); + end = round_page((vm_offset_t)iov->iov_base + iov->iov_len); + n = howmany(end - start, PAGE_SIZE); + + if (end - start > MAX_DDP_BUFFER_SIZE) + return (E2BIG); + + pp = malloc(n * sizeof(vm_page_t), M_CXGBE, M_NOWAIT); + if (pp == NULL) + return (ENOMEM); + + if (vm_fault_quick_hold_pages(map, (vm_offset_t)iov->iov_base, + iov->iov_len, VM_PROT_WRITE, pp, n) < 0) { + free(pp, M_CXGBE); + return (EFAULT); + } + + *ppages = pp; + *pnpages = n; + + return (0); +} + +static int +bufcmp(struct ddp_buffer *db, vm_page_t *pages, int npages, int offset, int len) +{ + int i; + + if (db == NULL || db->npages != npages || db->offset != offset || + db->len != len) + return (1); + + for (i = 0; i < npages; i++) { + if (pages[i]->phys_addr != db->pages[i]->phys_addr) + return (1); + } + + return (0); +} + +static int +calculate_hcf(int n1, int n2) +{ + int a, b, t; + + if (n1 <= n2) { + a = n1; + b = n2; + } else { + a = n2; + b = n1; + } + + while (a != 0) { + t = a; + a = b % a; + b = t; + } + + return (b); +} + +static struct ddp_buffer * +alloc_ddp_buffer(struct tom_data *td, vm_page_t *pages, int npages, int offset, + int len) +{ + int i, hcf, seglen, idx, ppod, nppods; + struct ddp_buffer *db; + + /* + * The DDP page size is unrelated to the VM page size. We combine *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 01:05:56 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B617F106566C; Fri, 17 Aug 2012 01:05:56 +0000 (UTC) (envelope-from kevlo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 989AA8FC08; Fri, 17 Aug 2012 01:05:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H15uMZ094879; Fri, 17 Aug 2012 01:05:56 GMT (envelope-from kevlo@svn.freebsd.org) Received: (from kevlo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H15uCi094877; Fri, 17 Aug 2012 01:05:56 GMT (envelope-from kevlo@svn.freebsd.org) Message-Id: <201208170105.q7H15uCi094877@svn.freebsd.org> From: Kevin Lo Date: Fri, 17 Aug 2012 01:05:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239345 - head/lib/libc/stdlib X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 01:05:56 -0000 Author: kevlo Date: Fri Aug 17 01:05:56 2012 New Revision: 239345 URL: http://svn.freebsd.org/changeset/base/239345 Log: Make 'junk' volatile so that compilers won't be tempted to optimize Reviewed by: ache MFC after: 3 days Modified: head/lib/libc/stdlib/random.c Modified: head/lib/libc/stdlib/random.c ============================================================================== --- head/lib/libc/stdlib/random.c Fri Aug 17 00:49:29 2012 (r239344) +++ head/lib/libc/stdlib/random.c Fri Aug 17 01:05:56 2012 (r239345) @@ -315,7 +315,7 @@ srandomdev() if (!done) { struct timeval tv; - unsigned long junk; + volatile unsigned long junk; gettimeofday(&tv, NULL); srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk); From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 01:49:52 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id ED6C6106564A; Fri, 17 Aug 2012 01:49:51 +0000 (UTC) (envelope-from lstewart@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BE33E8FC08; Fri, 17 Aug 2012 01:49:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H1npUT099634; Fri, 17 Aug 2012 01:49:51 GMT (envelope-from lstewart@svn.freebsd.org) Received: (from lstewart@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H1np9p099632; Fri, 17 Aug 2012 01:49:51 GMT (envelope-from lstewart@svn.freebsd.org) Message-Id: <201208170149.q7H1np9p099632@svn.freebsd.org> From: Lawrence Stewart Date: Fri, 17 Aug 2012 01:49:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239346 - head/sys/netinet/khelp X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 01:49:52 -0000 Author: lstewart Date: Fri Aug 17 01:49:51 2012 New Revision: 239346 URL: http://svn.freebsd.org/changeset/base/239346 Log: The TCP PAWS fix for kernels with fast tick rates (r231767) changed the TCP timestamp related stack variables to reference ms directly instead of ticks. The h_ertt(4) Khelp module relies on TCP timestamp information in order to calculate its enhanced RTT estimates, but was not updated as part of r231767. Consequently, h_ertt has not been calculating correct RTT estimates since r231767 was comitted, which in turn broke all delay-based congestion control algorithms because they rely on the h_ertt RTT estimates. Fix the breakage by switching h_ertt to use tcp_ts_getticks() in place of all previous uses of the ticks variable. This ensures all timestamp related variables in h_ertt use the same units as the TCP stack and therefore results in meaningful comparisons and RTT estimate calculations. Reported & tested by: Naeem Khademi (naeemk at ifi uio no) Discussed with: bz MFC after: 3 days Modified: head/sys/netinet/khelp/h_ertt.c Modified: head/sys/netinet/khelp/h_ertt.c ============================================================================== --- head/sys/netinet/khelp/h_ertt.c Fri Aug 17 01:05:56 2012 (r239345) +++ head/sys/netinet/khelp/h_ertt.c Fri Aug 17 01:49:51 2012 (r239346) @@ -151,11 +151,13 @@ marked_packet_rtt(struct txseginfo *txsi *prtt_bytes_adjust += *pmeasurenext_len; } else { if (mflag & FORCED_MEASUREMENT) { - e_t->markedpkt_rtt = ticks - *pmeasurenext + 1; + e_t->markedpkt_rtt = tcp_ts_getticks() - + *pmeasurenext + 1; e_t->bytes_tx_in_marked_rtt = e_t->bytes_tx_in_rtt + *pmeasurenext_len - *prtt_bytes_adjust; } else { - e_t->markedpkt_rtt = ticks - txsi->tx_ts + 1; + e_t->markedpkt_rtt = tcp_ts_getticks() - + txsi->tx_ts + 1; e_t->bytes_tx_in_marked_rtt = e_t->bytes_tx_in_rtt - *prtt_bytes_adjust; } @@ -349,7 +351,7 @@ ertt_packet_measurement_hook(int hhook_t */ if (!e_t->dlyack_rx || multiack || new_sacked_bytes) { /* Make an accurate new measurement. */ - e_t->rtt = ticks - txsi->tx_ts + 1; + e_t->rtt = tcp_ts_getticks() - txsi->tx_ts + 1; if (e_t->rtt < e_t->minrtt || e_t->minrtt == 0) e_t->minrtt = e_t->rtt; @@ -477,7 +479,7 @@ ertt_add_tx_segment_info_hook(int hhook_ tp->ts_offset; txsi->rx_ts = ntohl(to->to_tsecr); } else { - txsi->tx_ts = ticks; + txsi->tx_ts = tcp_ts_getticks(); txsi->rx_ts = 0; /* No received time stamp. */ } TAILQ_INSERT_TAIL(&e_t->txsegi_q, txsi, txsegi_lnk); From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 02:26:32 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A9913106566C; Fri, 17 Aug 2012 02:26:32 +0000 (UTC) (envelope-from davidxu@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 569AB8FC0C; Fri, 17 Aug 2012 02:26:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H2QWfM003543; Fri, 17 Aug 2012 02:26:32 GMT (envelope-from davidxu@svn.freebsd.org) Received: (from davidxu@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H2QV5v003521; Fri, 17 Aug 2012 02:26:31 GMT (envelope-from davidxu@svn.freebsd.org) Message-Id: <201208170226.q7H2QV5v003521@svn.freebsd.org> From: David Xu Date: Fri, 17 Aug 2012 02:26:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239347 - in head: lib/libc/gen lib/libc/sys lib/libthr/thread sys/compat/freebsd32 sys/kern sys/sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 02:26:32 -0000 Author: davidxu Date: Fri Aug 17 02:26:31 2012 New Revision: 239347 URL: http://svn.freebsd.org/changeset/base/239347 Log: Implement syscall clock_getcpuclockid2, so we can get a clock id for process, thread or others we want to support. Use the syscall to implement POSIX API clock_getcpuclock and pthread_getcpuclockid. PR: 168417 Added: head/lib/libc/gen/clock_getcpuclockid.c (contents, props changed) Modified: head/lib/libc/gen/Makefile.inc head/lib/libc/gen/Symbol.map head/lib/libc/gen/sysconf.c head/lib/libc/sys/Symbol.map head/lib/libthr/thread/thr_getcpuclockid.c head/sys/compat/freebsd32/freebsd32_syscall.h head/sys/compat/freebsd32/freebsd32_syscalls.c head/sys/compat/freebsd32/freebsd32_sysent.c head/sys/compat/freebsd32/freebsd32_systrace_args.c head/sys/compat/freebsd32/syscalls.master head/sys/kern/init_sysent.c head/sys/kern/kern_time.c head/sys/kern/syscalls.c head/sys/kern/syscalls.master head/sys/kern/systrace_args.c head/sys/sys/syscall.h head/sys/sys/syscall.mk head/sys/sys/sysproto.h head/sys/sys/time.h head/sys/sys/unistd.h Modified: head/lib/libc/gen/Makefile.inc ============================================================================== --- head/lib/libc/gen/Makefile.inc Fri Aug 17 01:49:51 2012 (r239346) +++ head/lib/libc/gen/Makefile.inc Fri Aug 17 02:26:31 2012 (r239347) @@ -8,7 +8,7 @@ SRCS+= __getosreldate.c __xuname.c \ _once_stub.c _pthread_stubs.c _rand48.c _spinlock_stub.c \ _thread_init.c \ alarm.c arc4random.c assert.c auxv.c basename.c check_utility_compat.c \ - clock.c closedir.c confstr.c \ + clock.c clock_getcpuclockid.c closedir.c confstr.c \ crypt.c ctermid.c daemon.c devname.c dirfd.c dirname.c disklabel.c \ dlfcn.c drand48.c elf_utils.c erand48.c err.c errlst.c errno.c \ exec.c fdevname.c feature_present.c fmtcheck.c fmtmsg.c fnmatch.c \ Modified: head/lib/libc/gen/Symbol.map ============================================================================== --- head/lib/libc/gen/Symbol.map Fri Aug 17 01:49:51 2012 (r239346) +++ head/lib/libc/gen/Symbol.map Fri Aug 17 02:26:31 2012 (r239347) @@ -382,6 +382,7 @@ FBSD_1.2 { }; FBSD_1.3 { + clock_getcpuclockid; dirfd; fdlopen; __FreeBSD_libc_enter_restricted_mode; Added: head/lib/libc/gen/clock_getcpuclockid.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libc/gen/clock_getcpuclockid.c Fri Aug 17 02:26:31 2012 (r239347) @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2012 David Xu . + * All rights reserved. + * + * 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 DANIEL EISCHEN 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +clockid_t +clock_getcpuclockid(pid_t pid, clockid_t *clock_id) +{ + return clock_getcpuclockid2(pid, CPUCLOCK_WHICH_PID, clock_id); +} Modified: head/lib/libc/gen/sysconf.c ============================================================================== --- head/lib/libc/gen/sysconf.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/lib/libc/gen/sysconf.c Fri Aug 17 02:26:31 2012 (r239347) @@ -359,11 +359,7 @@ yesno: return (_POSIX_CLOCK_SELECTION); #endif case _SC_CPUTIME: -#if _POSIX_CPUTIME == 0 -#error "_POSIX_CPUTIME" -#else return (_POSIX_CPUTIME); -#endif #ifdef notdef case _SC_FILE_LOCKING: /* Modified: head/lib/libc/sys/Symbol.map ============================================================================== --- head/lib/libc/sys/Symbol.map Fri Aug 17 01:49:51 2012 (r239346) +++ head/lib/libc/sys/Symbol.map Fri Aug 17 02:26:31 2012 (r239347) @@ -379,6 +379,7 @@ FBSD_1.2 { }; FBSD_1.3 { + clock_getcpuclockid2; ffclock_getcounter; ffclock_getestimate; ffclock_setestimate; @@ -490,6 +491,8 @@ FBSDprivate_1.0 { __sys_chown; _chroot; __sys_chroot; + _clock_getcpuclockid2; + __sys_clock_getcpuclockid2; _clock_getres; __sys_clock_getres; _clock_gettime; Modified: head/lib/libthr/thread/thr_getcpuclockid.c ============================================================================== --- head/lib/libthr/thread/thr_getcpuclockid.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/lib/libthr/thread/thr_getcpuclockid.c Fri Aug 17 02:26:31 2012 (r239347) @@ -39,9 +39,11 @@ __weak_reference(_pthread_getcpuclockid, int _pthread_getcpuclockid(pthread_t pthread, clockid_t *clock_id) { + if (pthread == NULL) return (EINVAL); - *clock_id = CLOCK_THREAD_CPUTIME_ID; + if (clock_getcpuclockid2(TID(pthread), CPUCLOCK_WHICH_TID, clock_id)) + return (errno); return (0); } Modified: head/sys/compat/freebsd32/freebsd32_syscall.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscall.h Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/compat/freebsd32/freebsd32_syscall.h Fri Aug 17 02:26:31 2012 (r239347) @@ -210,6 +210,7 @@ #define FREEBSD32_SYS_ffclock_getcounter 241 #define FREEBSD32_SYS_ffclock_setestimate 242 #define FREEBSD32_SYS_ffclock_getestimate 243 +#define FREEBSD32_SYS_clock_getcpuclockid2 247 #define FREEBSD32_SYS_minherit 250 #define FREEBSD32_SYS_rfork 251 #define FREEBSD32_SYS_openbsd_poll 252 Modified: head/sys/compat/freebsd32/freebsd32_syscalls.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscalls.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/compat/freebsd32/freebsd32_syscalls.c Fri Aug 17 02:26:31 2012 (r239347) @@ -257,7 +257,7 @@ const char *freebsd32_syscallnames[] = { "#244", /* 244 = nosys */ "#245", /* 245 = nosys */ "#246", /* 246 = nosys */ - "#247", /* 247 = nosys */ + "clock_getcpuclockid2", /* 247 = clock_getcpuclockid2 */ "#248", /* 248 = ntp_gettime */ "#249", /* 249 = nosys */ "minherit", /* 250 = minherit */ Modified: head/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_sysent.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/compat/freebsd32/freebsd32_sysent.c Fri Aug 17 02:26:31 2012 (r239347) @@ -294,7 +294,7 @@ struct sysent freebsd32_sysent[] = { { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 244 = nosys */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 245 = nosys */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 246 = nosys */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 247 = nosys */ + { AS(clock_getcpuclockid2_args), (sy_call_t *)sys_clock_getcpuclockid2, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 247 = clock_getcpuclockid2 */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 248 = ntp_gettime */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 249 = nosys */ { AS(minherit_args), (sy_call_t *)sys_minherit, AUE_MINHERIT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 250 = minherit */ Modified: head/sys/compat/freebsd32/freebsd32_systrace_args.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_systrace_args.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/compat/freebsd32/freebsd32_systrace_args.c Fri Aug 17 02:26:31 2012 (r239347) @@ -1224,6 +1224,15 @@ systrace_args(int sysnum, void *params, *n_args = 1; break; } + /* clock_getcpuclockid2 */ + case 247: { + struct clock_getcpuclockid2_args *p = params; + iarg[0] = p->id; /* id_t */ + iarg[1] = p->which; /* int */ + uarg[2] = (intptr_t) p->clock_id; /* clockid_t * */ + *n_args = 3; + break; + } /* minherit */ case 250: { struct minherit_args *p = params; @@ -4991,6 +5000,22 @@ systrace_entry_setargdesc(int sysnum, in break; }; break; + /* clock_getcpuclockid2 */ + case 247: + switch(ndx) { + case 0: + p = "id_t"; + break; + case 1: + p = "int"; + break; + case 2: + p = "clockid_t *"; + break; + default: + break; + }; + break; /* minherit */ case 250: switch(ndx) { @@ -8890,6 +8915,11 @@ systrace_return_setargdesc(int sysnum, i if (ndx == 0 || ndx == 1) p = "int"; break; + /* clock_getcpuclockid2 */ + case 247: + if (ndx == 0 || ndx == 1) + p = "int"; + break; /* minherit */ case 250: if (ndx == 0 || ndx == 1) Modified: head/sys/compat/freebsd32/syscalls.master ============================================================================== --- head/sys/compat/freebsd32/syscalls.master Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/compat/freebsd32/syscalls.master Fri Aug 17 02:26:31 2012 (r239347) @@ -457,7 +457,8 @@ 244 AUE_NULL UNIMPL nosys 245 AUE_NULL UNIMPL nosys 246 AUE_NULL UNIMPL nosys -247 AUE_NULL UNIMPL nosys +247 AUE_NULL NOPROTO { int clock_getcpuclockid2(id_t id,\ + int which, clockid_t *clock_id); } 248 AUE_NULL UNIMPL ntp_gettime 249 AUE_NULL UNIMPL nosys ; syscall numbers initially used in OpenBSD Modified: head/sys/kern/init_sysent.c ============================================================================== --- head/sys/kern/init_sysent.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/kern/init_sysent.c Fri Aug 17 02:26:31 2012 (r239347) @@ -281,7 +281,7 @@ struct sysent sysent[] = { { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 244 = nosys */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 245 = nosys */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 246 = nosys */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 247 = nosys */ + { AS(clock_getcpuclockid2_args), (sy_call_t *)sys_clock_getcpuclockid2, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 247 = clock_getcpuclockid2 */ { AS(ntp_gettime_args), (sy_call_t *)sys_ntp_gettime, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 248 = ntp_gettime */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 249 = nosys */ { AS(minherit_args), (sy_call_t *)sys_minherit, AUE_MINHERIT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 250 = minherit */ Modified: head/sys/kern/kern_time.c ============================================================================== --- head/sys/kern/kern_time.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/kern/kern_time.c Fri Aug 17 02:26:31 2012 (r239347) @@ -58,6 +58,12 @@ __FBSDID("$FreeBSD$"); #include #define MAX_CLOCKS (CLOCK_MONOTONIC+1) +#define CPUCLOCK_BIT 0x80000000 +#define CPUCLOCK_PROCESS_BIT 0x40000000 +#define CPUCLOCK_ID_MASK (~(CPUCLOCK_BIT|CPUCLOCK_PROCESS_BIT)) +#define MAKE_THREAD_CPUCLOCK(tid) (CPUCLOCK_BIT|(tid)) +#define MAKE_PROCESS_CPUCLOCK(pid) \ + (CPUCLOCK_BIT|CPUCLOCK_PROCESS_BIT|(pid)) static struct kclock posix_clocks[MAX_CLOCKS]; static uma_zone_t itimer_zone = NULL; @@ -165,6 +171,52 @@ settime(struct thread *td, struct timeva } #ifndef _SYS_SYSPROTO_H_ +struct clock_getcpuclockid2_args { + id_t id; + int which, + clockid_t *clock_id; +}; +#endif +/* ARGSUSED */ +int +sys_clock_getcpuclockid2(struct thread *td, struct clock_getcpuclockid2_args *uap) +{ + clockid_t clk_id; + struct proc *p; + pid_t pid; + lwpid_t tid; + int error; + + switch(uap->which) { + case CPUCLOCK_WHICH_PID: + if (uap->id != 0) { + p = pfind(uap->id); + if (p == NULL) + return (ESRCH); + error = p_cansee(td, p); + PROC_UNLOCK(p); + if (error) + return (error); + pid = uap->id; + } else { + pid = td->td_proc->p_pid; + } + clk_id = MAKE_PROCESS_CPUCLOCK(pid); + break; + case CPUCLOCK_WHICH_TID: + if (uap->id == 0) + tid = td->td_tid; + else + tid = uap->id; + clk_id = MAKE_THREAD_CPUCLOCK(tid); + break; + default: + return (EINVAL); + } + return (copyout(&clk_id, uap->clock_id, sizeof(clockid_t))); +} + +#ifndef _SYS_SYSPROTO_H_ struct clock_gettime_args { clockid_t clock_id; struct timespec *tp; @@ -184,12 +236,85 @@ sys_clock_gettime(struct thread *td, str return (error); } +static inline void +cputick2timespec(uint64_t runtime, struct timespec *ats) +{ + runtime = cputick2usec(runtime); + ats->tv_sec = runtime / 1000000; + ats->tv_nsec = runtime % 1000000 * 1000; +} + +static void +get_thread_cputime(struct thread *targettd, struct timespec *ats) +{ + uint64_t runtime, curtime, switchtime; + + if (targettd == NULL) { /* current thread */ + critical_enter(); + switchtime = PCPU_GET(switchtime); + curtime = cpu_ticks(); + runtime = curthread->td_runtime; + critical_exit(); + runtime += curtime - switchtime; + } else { + thread_lock(targettd); + runtime = targettd->td_runtime; + thread_unlock(targettd); + } + cputick2timespec(runtime, ats); +} + +static void +get_process_cputime(struct proc *targetp, struct timespec *ats) +{ + uint64_t runtime; + struct rusage ru; + + PROC_SLOCK(targetp); + rufetch(targetp, &ru); + runtime = targetp->p_rux.rux_runtime; + PROC_SUNLOCK(targetp); + cputick2timespec(runtime, ats); +} + +static int +get_cputime(struct thread *td, clockid_t clock_id, struct timespec *ats) +{ + struct proc *p, *p2; + struct thread *td2; + lwpid_t tid; + pid_t pid; + int error; + + p = td->td_proc; + if ((clock_id & CPUCLOCK_PROCESS_BIT) == 0) { + tid = clock_id & CPUCLOCK_ID_MASK; + td2 = tdfind(tid, p->p_pid); + if (td2 == NULL) + return (EINVAL); + get_thread_cputime(td2, ats); + PROC_UNLOCK(td2->td_proc); + } else { + pid = clock_id & CPUCLOCK_ID_MASK; + p2 = pfind(pid); + if (p2 == NULL) + return (EINVAL); + error = p_cansee(td, p2); + if (error) { + PROC_UNLOCK(p2); + return (EINVAL); + } + get_process_cputime(p2, ats); + PROC_UNLOCK(p2); + } + return (0); +} + int kern_clock_gettime(struct thread *td, clockid_t clock_id, struct timespec *ats) { struct timeval sys, user; struct proc *p; - uint64_t runtime, curtime, switchtime; p = td->td_proc; switch (clock_id) { @@ -232,17 +357,17 @@ kern_clock_gettime(struct thread *td, cl ats->tv_nsec = 0; break; case CLOCK_THREAD_CPUTIME_ID: - critical_enter(); - switchtime = PCPU_GET(switchtime); - curtime = cpu_ticks(); - runtime = td->td_runtime; - critical_exit(); - runtime = cputick2usec(runtime + curtime - switchtime); - ats->tv_sec = runtime / 1000000; - ats->tv_nsec = runtime % 1000000 * 1000; + get_thread_cputime(NULL, ats); + break; + case CLOCK_PROCESS_CPUTIME_ID: + PROC_LOCK(p); + get_process_cputime(p, ats); + PROC_UNLOCK(p); break; default: - return (EINVAL); + if ((int)clock_id >= 0) + return (EINVAL); + return (get_cputime(td, clock_id, ats)); } return (0); } @@ -336,12 +461,16 @@ kern_clock_getres(struct thread *td, clo ts->tv_nsec = 0; break; case CLOCK_THREAD_CPUTIME_ID: + case CLOCK_PROCESS_CPUTIME_ID: + cputime: /* sync with cputick2usec */ ts->tv_nsec = 1000000 / cpu_tickrate(); if (ts->tv_nsec == 0) ts->tv_nsec = 1000; break; default: + if ((int)clock_id < 0) + goto cputime; return (EINVAL); } return (0); Modified: head/sys/kern/syscalls.c ============================================================================== --- head/sys/kern/syscalls.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/kern/syscalls.c Fri Aug 17 02:26:31 2012 (r239347) @@ -254,7 +254,7 @@ const char *syscallnames[] = { "#244", /* 244 = nosys */ "#245", /* 245 = nosys */ "#246", /* 246 = nosys */ - "#247", /* 247 = nosys */ + "clock_getcpuclockid2", /* 247 = clock_getcpuclockid2 */ "ntp_gettime", /* 248 = ntp_gettime */ "#249", /* 249 = nosys */ "minherit", /* 250 = minherit */ Modified: head/sys/kern/syscalls.master ============================================================================== --- head/sys/kern/syscalls.master Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/kern/syscalls.master Fri Aug 17 02:26:31 2012 (r239347) @@ -464,7 +464,8 @@ 244 AUE_NULL UNIMPL nosys 245 AUE_NULL UNIMPL nosys 246 AUE_NULL UNIMPL nosys -247 AUE_NULL UNIMPL nosys +247 AUE_NULL STD { int clock_getcpuclockid2(id_t id,\ + int which, clockid_t *clock_id); } 248 AUE_NULL STD { int ntp_gettime(struct ntptimeval *ntvp); } 249 AUE_NULL UNIMPL nosys ; syscall numbers initially used in OpenBSD Modified: head/sys/kern/systrace_args.c ============================================================================== --- head/sys/kern/systrace_args.c Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/kern/systrace_args.c Fri Aug 17 02:26:31 2012 (r239347) @@ -1358,6 +1358,15 @@ systrace_args(int sysnum, void *params, *n_args = 1; break; } + /* clock_getcpuclockid2 */ + case 247: { + struct clock_getcpuclockid2_args *p = params; + iarg[0] = p->id; /* id_t */ + iarg[1] = p->which; /* int */ + uarg[2] = (intptr_t) p->clock_id; /* clockid_t * */ + *n_args = 3; + break; + } /* ntp_gettime */ case 248: { struct ntp_gettime_args *p = params; @@ -5432,6 +5441,22 @@ systrace_entry_setargdesc(int sysnum, in break; }; break; + /* clock_getcpuclockid2 */ + case 247: + switch(ndx) { + case 0: + p = "id_t"; + break; + case 1: + p = "int"; + break; + case 2: + p = "clockid_t *"; + break; + default: + break; + }; + break; /* ntp_gettime */ case 248: switch(ndx) { @@ -9464,6 +9489,11 @@ systrace_return_setargdesc(int sysnum, i if (ndx == 0 || ndx == 1) p = "int"; break; + /* clock_getcpuclockid2 */ + case 247: + if (ndx == 0 || ndx == 1) + p = "int"; + break; /* ntp_gettime */ case 248: if (ndx == 0 || ndx == 1) Modified: head/sys/sys/syscall.h ============================================================================== --- head/sys/sys/syscall.h Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/sys/syscall.h Fri Aug 17 02:26:31 2012 (r239347) @@ -219,6 +219,7 @@ #define SYS_ffclock_getcounter 241 #define SYS_ffclock_setestimate 242 #define SYS_ffclock_getestimate 243 +#define SYS_clock_getcpuclockid2 247 #define SYS_ntp_gettime 248 #define SYS_minherit 250 #define SYS_rfork 251 Modified: head/sys/sys/syscall.mk ============================================================================== --- head/sys/sys/syscall.mk Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/sys/syscall.mk Fri Aug 17 02:26:31 2012 (r239347) @@ -171,6 +171,7 @@ MIASM = \ ffclock_getcounter.o \ ffclock_setestimate.o \ ffclock_getestimate.o \ + clock_getcpuclockid2.o \ ntp_gettime.o \ minherit.o \ rfork.o \ Modified: head/sys/sys/sysproto.h ============================================================================== --- head/sys/sys/sysproto.h Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/sys/sysproto.h Fri Aug 17 02:26:31 2012 (r239347) @@ -736,6 +736,11 @@ struct ffclock_setestimate_args { struct ffclock_getestimate_args { char cest_l_[PADL_(struct ffclock_estimate *)]; struct ffclock_estimate * cest; char cest_r_[PADR_(struct ffclock_estimate *)]; }; +struct clock_getcpuclockid2_args { + char id_l_[PADL_(id_t)]; id_t id; char id_r_[PADR_(id_t)]; + char which_l_[PADL_(int)]; int which; char which_r_[PADR_(int)]; + char clock_id_l_[PADL_(clockid_t *)]; clockid_t * clock_id; char clock_id_r_[PADR_(clockid_t *)]; +}; struct ntp_gettime_args { char ntvp_l_[PADL_(struct ntptimeval *)]; struct ntptimeval * ntvp; char ntvp_r_[PADR_(struct ntptimeval *)]; }; @@ -1907,6 +1912,7 @@ int sys_nanosleep(struct thread *, struc int sys_ffclock_getcounter(struct thread *, struct ffclock_getcounter_args *); int sys_ffclock_setestimate(struct thread *, struct ffclock_setestimate_args *); int sys_ffclock_getestimate(struct thread *, struct ffclock_getestimate_args *); +int sys_clock_getcpuclockid2(struct thread *, struct clock_getcpuclockid2_args *); int sys_ntp_gettime(struct thread *, struct ntp_gettime_args *); int sys_minherit(struct thread *, struct minherit_args *); int sys_rfork(struct thread *, struct rfork_args *); @@ -2597,6 +2603,7 @@ int freebsd7_shmctl(struct thread *, str #define SYS_AUE_ffclock_getcounter AUE_NULL #define SYS_AUE_ffclock_setestimate AUE_NULL #define SYS_AUE_ffclock_getestimate AUE_NULL +#define SYS_AUE_clock_getcpuclockid2 AUE_NULL #define SYS_AUE_ntp_gettime AUE_NULL #define SYS_AUE_minherit AUE_MINHERIT #define SYS_AUE_rfork AUE_RFORK Modified: head/sys/sys/time.h ============================================================================== --- head/sys/sys/time.h Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/sys/time.h Fri Aug 17 02:26:31 2012 (r239347) @@ -266,6 +266,7 @@ struct clockinfo { #define CLOCK_MONOTONIC_FAST 12 /* FreeBSD-specific. */ #define CLOCK_SECOND 13 /* FreeBSD-specific. */ #define CLOCK_THREAD_CPUTIME_ID 14 +#define CLOCK_PROCESS_CPUTIME_ID 15 #endif #ifndef TIMER_ABSTIME @@ -273,6 +274,11 @@ struct clockinfo { #define TIMER_ABSTIME 0x1 /* absolute timer */ #endif +#if __BSD_VISIBLE +#define CPUCLOCK_WHICH_PID 0 +#define CPUCLOCK_WHICH_TID 1 +#endif + #ifdef _KERNEL /* @@ -344,6 +350,7 @@ int utimes(const char *, const struct ti #if __BSD_VISIBLE int adjtime(const struct timeval *, struct timeval *); +int clock_getcpuclockid2(id_t, int, clockid_t *); int futimes(int, const struct timeval *); int futimesat(int, const char *, const struct timeval [2]); int lutimes(const char *, const struct timeval *); Modified: head/sys/sys/unistd.h ============================================================================== --- head/sys/sys/unistd.h Fri Aug 17 01:49:51 2012 (r239346) +++ head/sys/sys/unistd.h Fri Aug 17 02:26:31 2012 (r239347) @@ -53,7 +53,7 @@ #define _POSIX_ASYNCHRONOUS_IO 0 #define _POSIX_CHOWN_RESTRICTED 1 #define _POSIX_CLOCK_SELECTION (-1) -#define _POSIX_CPUTIME (-1) +#define _POSIX_CPUTIME 200112L #define _POSIX_FSYNC 200112L #define _POSIX_IPV6 0 #define _POSIX_JOB_CONTROL 1 From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 02:27:18 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6CAE6106566B; Fri, 17 Aug 2012 02:27:18 +0000 (UTC) (envelope-from mckay@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 574E38FC12; Fri, 17 Aug 2012 02:27:18 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H2RI5Q003654; Fri, 17 Aug 2012 02:27:18 GMT (envelope-from mckay@svn.freebsd.org) Received: (from mckay@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H2RIkB003651; Fri, 17 Aug 2012 02:27:18 GMT (envelope-from mckay@svn.freebsd.org) Message-Id: <201208170227.q7H2RIkB003651@svn.freebsd.org> From: Stephen McKay Date: Fri, 17 Aug 2012 02:27:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239348 - in head: contrib/file lib/libmagic X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 02:27:18 -0000 Author: mckay Date: Fri Aug 17 02:27:17 2012 New Revision: 239348 URL: http://svn.freebsd.org/changeset/base/239348 Log: Correct a regression introduced during the import of file(1) 5.11. Magic tests containing "search" or "regex" directives were incorrectly compiled by "mkmagic" and were effectively ignored. This caused troff files (for example) to be detected as simply "ASCII text" instead of as "troff or preprocessor input, ASCII text". PR: bin/170415 Approved by: consensus on developers@ MFC after: 3 days Modified: head/contrib/file/apprentice.c head/lib/libmagic/Makefile Modified: head/contrib/file/apprentice.c ============================================================================== --- head/contrib/file/apprentice.c Fri Aug 17 02:26:31 2012 (r239347) +++ head/contrib/file/apprentice.c Fri Aug 17 02:27:17 2012 (r239348) @@ -648,7 +648,6 @@ set_test_type(struct magic *mstart, stru break; case FILE_REGEX: case FILE_SEARCH: -#ifndef COMPILE_ONLY /* Check for override */ if (mstart->str_flags & STRING_BINTEST) mstart->flag |= BINTEST; @@ -664,7 +663,6 @@ set_test_type(struct magic *mstart, stru mstart->flag |= BINTEST; else mstart->flag |= TEXTTEST; -#endif break; case FILE_DEFAULT: /* can't deduce anything; we shouldn't see this at the Modified: head/lib/libmagic/Makefile ============================================================================== --- head/lib/libmagic/Makefile Fri Aug 17 02:26:31 2012 (r239347) +++ head/lib/libmagic/Makefile Fri Aug 17 02:27:17 2012 (r239348) @@ -39,7 +39,7 @@ magic.mgc: mkmagic magic CLEANFILES+= mkmagic build-tools: mkmagic -mkmagic: apprentice.c funcs.c getline.c magic.c print.c +mkmagic: apprentice.c encoding.c funcs.c getline.c magic.c print.c ${CC} ${CFLAGS} -DCOMPILE_ONLY -DHOSTPROG ${LDFLAGS} \ -o ${.TARGET} ${.ALLSRC} From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 02:47:17 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 94406106566C; Fri, 17 Aug 2012 02:47:17 +0000 (UTC) (envelope-from davidxu@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7566A8FC0C; Fri, 17 Aug 2012 02:47:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H2lHKn005815; Fri, 17 Aug 2012 02:47:17 GMT (envelope-from davidxu@svn.freebsd.org) Received: (from davidxu@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H2lHDK005805; Fri, 17 Aug 2012 02:47:17 GMT (envelope-from davidxu@svn.freebsd.org) Message-Id: <201208170247.q7H2lHDK005805@svn.freebsd.org> From: David Xu Date: Fri, 17 Aug 2012 02:47:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239349 - in head/sys: compat/freebsd32 kern sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 02:47:17 -0000 Author: davidxu Date: Fri Aug 17 02:47:16 2012 New Revision: 239349 URL: http://svn.freebsd.org/changeset/base/239349 Log: regen. Modified: head/sys/compat/freebsd32/freebsd32_proto.h head/sys/compat/freebsd32/freebsd32_syscall.h head/sys/compat/freebsd32/freebsd32_syscalls.c head/sys/compat/freebsd32/freebsd32_sysent.c head/sys/kern/init_sysent.c head/sys/kern/syscalls.c head/sys/sys/syscall.h head/sys/sys/syscall.mk head/sys/sys/sysproto.h Modified: head/sys/compat/freebsd32/freebsd32_proto.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_proto.h Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/compat/freebsd32/freebsd32_proto.h Fri Aug 17 02:47:16 2012 (r239349) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239296 2012-08-15 15:17:56Z kib + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239347 2012-08-17 02:26:31Z davidxu */ #ifndef _FREEBSD32_SYSPROTO_H_ Modified: head/sys/compat/freebsd32/freebsd32_syscall.h ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscall.h Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/compat/freebsd32/freebsd32_syscall.h Fri Aug 17 02:47:16 2012 (r239349) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239296 2012-08-15 15:17:56Z kib + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239347 2012-08-17 02:26:31Z davidxu */ #define FREEBSD32_SYS_syscall 0 Modified: head/sys/compat/freebsd32/freebsd32_syscalls.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_syscalls.c Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/compat/freebsd32/freebsd32_syscalls.c Fri Aug 17 02:47:16 2012 (r239349) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239296 2012-08-15 15:17:56Z kib + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239347 2012-08-17 02:26:31Z davidxu */ const char *freebsd32_syscallnames[] = { Modified: head/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_sysent.c Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/compat/freebsd32/freebsd32_sysent.c Fri Aug 17 02:47:16 2012 (r239349) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239296 2012-08-15 15:17:56Z kib + * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 239347 2012-08-17 02:26:31Z davidxu */ #include "opt_compat.h" Modified: head/sys/kern/init_sysent.c ============================================================================== --- head/sys/kern/init_sysent.c Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/kern/init_sysent.c Fri Aug 17 02:47:16 2012 (r239349) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed + * created from FreeBSD: head/sys/kern/syscalls.master 239347 2012-08-17 02:26:31Z davidxu */ #include "opt_compat.h" Modified: head/sys/kern/syscalls.c ============================================================================== --- head/sys/kern/syscalls.c Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/kern/syscalls.c Fri Aug 17 02:47:16 2012 (r239349) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed + * created from FreeBSD: head/sys/kern/syscalls.master 239347 2012-08-17 02:26:31Z davidxu */ const char *syscallnames[] = { Modified: head/sys/sys/syscall.h ============================================================================== --- head/sys/sys/syscall.h Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/sys/syscall.h Fri Aug 17 02:47:16 2012 (r239349) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed + * created from FreeBSD: head/sys/kern/syscalls.master 239347 2012-08-17 02:26:31Z davidxu */ #define SYS_syscall 0 Modified: head/sys/sys/syscall.mk ============================================================================== --- head/sys/sys/syscall.mk Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/sys/syscall.mk Fri Aug 17 02:47:16 2012 (r239349) @@ -1,7 +1,7 @@ # FreeBSD system call names. # DO NOT EDIT-- this file is automatically generated. # $FreeBSD$ -# created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed +# created from FreeBSD: head/sys/kern/syscalls.master 239347 2012-08-17 02:26:31Z davidxu MIASM = \ syscall.o \ exit.o \ Modified: head/sys/sys/sysproto.h ============================================================================== --- head/sys/sys/sysproto.h Fri Aug 17 02:27:17 2012 (r239348) +++ head/sys/sys/sysproto.h Fri Aug 17 02:47:16 2012 (r239349) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed + * created from FreeBSD: head/sys/kern/syscalls.master 239347 2012-08-17 02:26:31Z davidxu */ #ifndef _SYS_SYSPROTO_H_ From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 04:44:58 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A1D551065672; Fri, 17 Aug 2012 04:44:58 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 82DBC8FC12; Fri, 17 Aug 2012 04:44:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H4iwLt018421; Fri, 17 Aug 2012 04:44:58 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H4iwrv018416; Fri, 17 Aug 2012 04:44:58 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <201208170444.q7H4iwrv018416@svn.freebsd.org> From: Rui Paulo Date: Fri, 17 Aug 2012 04:44:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239351 - in head/sys: arm/xscale/ixp425 mips/atheros mips/cavium mips/rt305x X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 04:44:58 -0000 Author: rpaulo Date: Fri Aug 17 04:44:57 2012 New Revision: 239351 URL: http://svn.freebsd.org/changeset/base/239351 Log: The GPIO drivers were initialising their mutexes with type of MTX_NETWORK_LOCK. This is wrong since these mutexes have nothing to do with networking. Modified: head/sys/arm/xscale/ixp425/cambria_gpio.c head/sys/mips/atheros/ar71xx_gpio.c head/sys/mips/cavium/octeon_gpio.c head/sys/mips/rt305x/rt305x_gpio.c Modified: head/sys/arm/xscale/ixp425/cambria_gpio.c ============================================================================== --- head/sys/arm/xscale/ixp425/cambria_gpio.c Fri Aug 17 03:10:48 2012 (r239350) +++ head/sys/arm/xscale/ixp425/cambria_gpio.c Fri Aug 17 04:44:57 2012 (r239351) @@ -435,8 +435,7 @@ cambria_gpio_attach(device_t dev) sc->sc_iot = ixp425_softc->sc_iot; sc->sc_gpio_ioh = ixp425_softc->sc_gpio_ioh; - mtx_init(&sc->sc_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, - MTX_DEF); + mtx_init(&sc->sc_mtx, device_get_nameunit(dev), NULL, MTX_DEF); for (pin = 0; pin < GPIO_PINS; pin++) { struct cambria_gpio_pin *p = &cambria_gpio_pins[pin]; Modified: head/sys/mips/atheros/ar71xx_gpio.c ============================================================================== --- head/sys/mips/atheros/ar71xx_gpio.c Fri Aug 17 03:10:48 2012 (r239350) +++ head/sys/mips/atheros/ar71xx_gpio.c Fri Aug 17 04:44:57 2012 (r239351) @@ -335,8 +335,7 @@ ar71xx_gpio_attach(device_t dev) KASSERT((device_get_unit(dev) == 0), ("ar71xx_gpio: Only one gpio module supported")); - mtx_init(&sc->gpio_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, - MTX_DEF); + mtx_init(&sc->gpio_mtx, device_get_nameunit(dev), NULL, MTX_DEF); /* Map control/status registers. */ sc->gpio_mem_rid = 0; Modified: head/sys/mips/cavium/octeon_gpio.c ============================================================================== --- head/sys/mips/cavium/octeon_gpio.c Fri Aug 17 03:10:48 2012 (r239350) +++ head/sys/mips/cavium/octeon_gpio.c Fri Aug 17 04:44:57 2012 (r239351) @@ -383,8 +383,7 @@ octeon_gpio_attach(device_t dev) KASSERT((device_get_unit(dev) == 0), ("octeon_gpio: Only one gpio module supported")); - mtx_init(&sc->gpio_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, - MTX_DEF); + mtx_init(&sc->gpio_mtx, device_get_nameunit(dev), NULL, MTX_DEF); for ( i = 0; i < OCTEON_GPIO_IRQS; i++) { if ((sc->gpio_irq_res[i] = bus_alloc_resource(dev, Modified: head/sys/mips/rt305x/rt305x_gpio.c ============================================================================== --- head/sys/mips/rt305x/rt305x_gpio.c Fri Aug 17 03:10:48 2012 (r239350) +++ head/sys/mips/rt305x/rt305x_gpio.c Fri Aug 17 04:44:57 2012 (r239351) @@ -447,8 +447,7 @@ rt305x_gpio_attach(device_t dev) KASSERT((device_get_unit(dev) == 0), ("rt305x_gpio_gpio: Only one gpio module supported")); - mtx_init(&sc->gpio_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, - MTX_DEF); + mtx_init(&sc->gpio_mtx, device_get_nameunit(dev), NULL, MTX_DEF); /* Map control/status registers. */ sc->gpio_mem_rid = 0; From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 05:02:29 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A84DC1065672; Fri, 17 Aug 2012 05:02:29 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 933C38FC08; Fri, 17 Aug 2012 05:02:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H52Tfu020264; Fri, 17 Aug 2012 05:02:29 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H52TBC020262; Fri, 17 Aug 2012 05:02:29 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201208170502.q7H52TBC020262@svn.freebsd.org> From: Alan Cox Date: Fri, 17 Aug 2012 05:02:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239352 - head/sys/mips/mips X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 05:02:29 -0000 Author: alc Date: Fri Aug 17 05:02:29 2012 New Revision: 239352 URL: http://svn.freebsd.org/changeset/base/239352 Log: Fix two problems with pmap_clear_modify(). First, pmap_clear_modify() is write protecting all mappings to the specified page, not just clearing the modified bit. Specifically, it sets PTE_RO on the PTE, which is wrong. Moreover, it is calling vm_page_dirty(), which is not the expected behavior for pmap_clear_modify(). Generally speaking, the machine-independent VM layer masks these mistakes. For example, setting PTE_RO will result in additional soft faults, but not a catastrophe. Second, pmap_clear_modify() may not clear the modified bits because it only iterates over the PV list when the page has the PV_TABLE_MOD flag set and elsewhere the pmap clears the PV_TABLE_MOD flag anytime a modified mapping is write protected or destroyed. However, the page may still have other mappings with the modified bit set. Eliminate a stale comment. Modified: head/sys/mips/mips/pmap.c Modified: head/sys/mips/mips/pmap.c ============================================================================== --- head/sys/mips/mips/pmap.c Fri Aug 17 04:44:57 2012 (r239351) +++ head/sys/mips/mips/pmap.c Fri Aug 17 05:02:29 2012 (r239352) @@ -179,7 +179,6 @@ static vm_page_t pmap_pv_reclaim(pmap_t static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va); static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va); -static __inline void pmap_changebit(vm_page_t m, int bit, boolean_t setem); static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, vm_page_t mpte); static int pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t va, @@ -2664,8 +2663,6 @@ pmap_remove_pages(pmap_t pmap) /* * pmap_testbit tests bits in pte's - * note that the testbit/changebit routines are inline, - * and a lot of things compile-time evaluate. */ static boolean_t pmap_testbit(vm_page_t m, int bit) @@ -2692,51 +2689,6 @@ pmap_testbit(vm_page_t m, int bit) } /* - * this routine is used to clear dirty bits in ptes - */ -static __inline void -pmap_changebit(vm_page_t m, int bit, boolean_t setem) -{ - pv_entry_t pv; - pmap_t pmap; - pt_entry_t *pte; - - if (m->oflags & VPO_UNMANAGED) - return; - - rw_assert(&pvh_global_lock, RA_WLOCKED); - /* - * Loop over all current mappings setting/clearing as appropos If - * setting RO do we need to clear the VAC? - */ - TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { - pmap = PV_PMAP(pv); - PMAP_LOCK(pmap); - pte = pmap_pte(pmap, pv->pv_va); - if (setem) { - *pte |= bit; - pmap_update_page(pmap, pv->pv_va, *pte); - } else { - pt_entry_t pbits = *pte; - - if (pbits & bit) { - if (bit == PTE_D) { - if (pbits & PTE_D) - vm_page_dirty(m); - *pte = (pbits & ~PTE_D) | PTE_RO; - } else { - *pte = pbits & ~bit; - } - pmap_update_page(pmap, pv->pv_va, *pte); - } - } - PMAP_UNLOCK(pmap); - } - if (!setem && bit == PTE_D) - vm_page_aflag_clear(m, PGA_WRITEABLE); -} - -/* * pmap_page_wired_mappings: * * Return the number of managed mappings to the given physical page @@ -2896,6 +2848,9 @@ pmap_is_prefaultable(pmap_t pmap, vm_off void pmap_clear_modify(vm_page_t m) { + pmap_t pmap; + pt_entry_t *pte; + pv_entry_t pv; KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_clear_modify: page %p is not managed", m)); @@ -2911,10 +2866,17 @@ pmap_clear_modify(vm_page_t m) if ((m->aflags & PGA_WRITEABLE) == 0) return; rw_wlock(&pvh_global_lock); - if (m->md.pv_flags & PV_TABLE_MOD) { - pmap_changebit(m, PTE_D, FALSE); - m->md.pv_flags &= ~PV_TABLE_MOD; + TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { + pmap = PV_PMAP(pv); + PMAP_LOCK(pmap); + pte = pmap_pte(pmap, pv->pv_va); + if (pte_test(pte, PTE_D)) { + pte_clear(pte, PTE_D); + pmap_update_page(pmap, pv->pv_va, *pte); + } + PMAP_UNLOCK(pmap); } + m->md.pv_flags &= ~PV_TABLE_MOD; rw_wunlock(&pvh_global_lock); } From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 05:51:46 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EE9F6106566C; Fri, 17 Aug 2012 05:51:46 +0000 (UTC) (envelope-from rrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D9B558FC14; Fri, 17 Aug 2012 05:51:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7H5pkN6025310; Fri, 17 Aug 2012 05:51:46 GMT (envelope-from rrs@svn.freebsd.org) Received: (from rrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7H5pkd1025308; Fri, 17 Aug 2012 05:51:46 GMT (envelope-from rrs@svn.freebsd.org) Message-Id: <201208170551.q7H5pkd1025308@svn.freebsd.org> From: Randall Stewart Date: Fri, 17 Aug 2012 05:51:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239353 - head/sys/netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 05:51:47 -0000 Author: rrs Date: Fri Aug 17 05:51:46 2012 New Revision: 239353 URL: http://svn.freebsd.org/changeset/base/239353 Log: Ok jhb, lets move the ifa_free() down to the bottom to assure that *all* tables and such are removed before we start to free. This won't protect the Hash in ip_input.c but in theory should protect any other uses that *do* use locks. MFC after: 1 week (or more) Modified: head/sys/netinet/in.c Modified: head/sys/netinet/in.c ============================================================================== --- head/sys/netinet/in.c Fri Aug 17 05:02:29 2012 (r239352) +++ head/sys/netinet/in.c Fri Aug 17 05:51:46 2012 (r239353) @@ -573,7 +573,6 @@ in_control(struct socket *so, u_long cmd } TAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifa_link); IF_ADDR_WUNLOCK(ifp); -/* ifa_free(&ia->ia_ifa); - Double free?? */ /* if_addrhead */ IN_IFADDR_WLOCK(); TAILQ_REMOVE(&V_in_ifaddrhead, ia, ia_link); @@ -597,6 +596,7 @@ in_control(struct socket *so, u_long cmd } else ifa_free(&iap->ia_ifa); + ifa_free(&ia->ia_ifa); /* if_addrhead */ ifa_free(&ia->ia_ifa); /* in_ifaddrhead */ out: if (ia != NULL) From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 14:14:26 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 513DF106564A; Fri, 17 Aug 2012 14:14:26 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3D2528FC12; Fri, 17 Aug 2012 14:14:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7HEEQuB079982; Fri, 17 Aug 2012 14:14:26 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7HEEQl5079980; Fri, 17 Aug 2012 14:14:26 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208171414.q7HEEQl5079980@svn.freebsd.org> From: John Baldwin Date: Fri, 17 Aug 2012 14:14:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239354 - head/sys/x86/x86 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 14:14:26 -0000 Author: jhb Date: Fri Aug 17 14:14:25 2012 New Revision: 239354 URL: http://svn.freebsd.org/changeset/base/239354 Log: Allow static DMA allocations that allow for enough segments to do page-sized segments for the entire allocation to use kmem_alloc_attr() to allocate KVM rather than using kmem_alloc_contig(). This avoids requiring a single physically contiguous chunk in this case. Submitted by: Peter Jeremy (original version) MFC after: 1 month Modified: head/sys/x86/x86/busdma_machdep.c Modified: head/sys/x86/x86/busdma_machdep.c ============================================================================== --- head/sys/x86/x86/busdma_machdep.c Fri Aug 17 05:51:46 2012 (r239353) +++ head/sys/x86/x86/busdma_machdep.c Fri Aug 17 14:14:25 2012 (r239354) @@ -533,13 +533,14 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem) && attr == VM_MEMATTR_DEFAULT) { *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags); + } else if (dmat->nsegments >= btoc(dmat->maxsize) && + dmat->alignment <= PAGE_SIZE && + (dmat->boundary == 0 || dmat->boundary >= dmat->lowaddr)) { + /* Page-based multi-segment allocations allowed */ + *vaddr = (void *)kmem_alloc_attr(kernel_map, dmat->maxsize, + mflags, 0ul, dmat->lowaddr, attr); + *mapp = &contig_dmamap; } else { - /* - * XXX Use Contigmalloc until it is merged into this facility - * and handles multi-seg allocations. Nobody is doing - * multi-seg allocations yet though. - * XXX Certain AGP hardware does. - */ *vaddr = (void *)kmem_alloc_contig(kernel_map, dmat->maxsize, mflags, 0ul, dmat->lowaddr, dmat->alignment ? dmat->alignment : 1ul, dmat->boundary, attr); From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 14:22:57 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 80159106564A; Fri, 17 Aug 2012 14:22:57 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 69FE08FC0C; Fri, 17 Aug 2012 14:22:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7HEMvS6080937; Fri, 17 Aug 2012 14:22:57 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7HEMvE7080934; Fri, 17 Aug 2012 14:22:57 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208171422.q7HEMvE7080934@svn.freebsd.org> From: John Baldwin Date: Fri, 17 Aug 2012 14:22:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239355 - stable/7/sys/nfsclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 14:22:57 -0000 Author: jhb Date: Fri Aug 17 14:22:56 2012 New Revision: 239355 URL: http://svn.freebsd.org/changeset/base/239355 Log: MFC 230547: Add a timeout on positive name cache entries in the NFS client. That is, we will only trust a positive name cache entry for a specified amount of time before falling back to a LOOKUP RPC, even if the ctime for the file handle matches the cached copy in the name cache entry. The timeout is configured via a global 'vfs.nfs.name_timeout' sysctl and defaults to 60 seconds. It may be set to zero to disable positive name caching entirely. Note that this can result in increased NFS traffic under certain workloads. Increasing the threshold can mitigate this somewhat. Also, to match the existing 'vfs.nfs.negative_name_timeout' sysctl in 7, this version uses a sysctl rather than a mount option as in 8.x and later. Tested by: Mark Saad Modified: stable/7/sys/nfsclient/nfs_vnops.c stable/7/sys/nfsclient/nfsmount.h Directory Properties: stable/7/sys/ (props changed) stable/7/sys/cddl/contrib/opensolaris/ (props changed) stable/7/sys/contrib/dev/acpica/ (props changed) stable/7/sys/contrib/pf/ (props changed) Modified: stable/7/sys/nfsclient/nfs_vnops.c ============================================================================== --- stable/7/sys/nfsclient/nfs_vnops.c Fri Aug 17 14:14:25 2012 (r239354) +++ stable/7/sys/nfsclient/nfs_vnops.c Fri Aug 17 14:22:56 2012 (r239355) @@ -225,6 +225,10 @@ int nfs_directio_enable = 0; SYSCTL_INT(_vfs_nfs, OID_AUTO, nfs_directio_enable, CTLFLAG_RW, &nfs_directio_enable, 0, "Enable NFS directio"); +static u_int nametimeo = NFS_DEFAULT_NAMETIMEO; +SYSCTL_UINT(_vfs_nfs, OID_AUTO, name_timeout, CTLFLAG_RW, + &nametimeo, 0, "Positive name cache entry timeout"); + static u_int negnametimeo = NFS_DEFAULT_NEGNAMETIMEO; SYSCTL_UINT(_vfs_nfs, OID_AUTO, negative_name_timeout, CTLFLAG_RW, &negnametimeo, 0, "Negative name cache entry timeout"); @@ -908,7 +912,8 @@ nfs_lookup(struct vop_lookup_args *ap) * We only accept a positive hit in the cache if the * change time of the file matches our cached copy. * Otherwise, we discard the cache entry and fallback - * to doing a lookup RPC. + * to doing a lookup RPC. We also only trust cache + * entries for less than nametimeo seconds. * * To better handle stale file handles and attributes, * clear the attribute cache of this node if it is a @@ -927,7 +932,8 @@ nfs_lookup(struct vop_lookup_args *ap) newnp->n_attrstamp = 0; mtx_unlock(&newnp->n_mtx); } - if (VOP_GETATTR(newvp, &vattr, cnp->cn_cred, td) == 0 && + if ((u_int)(ticks - ncticks) < (nametimeo * hz) && + VOP_GETATTR(newvp, &vattr, cnp->cn_cred, td) == 0 && timespeccmp(&vattr.va_ctime, &nctime, ==)) { nfsstats.lookupcache_hits++; if (cnp->cn_nameiop != LOOKUP && Modified: stable/7/sys/nfsclient/nfsmount.h ============================================================================== --- stable/7/sys/nfsclient/nfsmount.h Fri Aug 17 14:14:25 2012 (r239354) +++ stable/7/sys/nfsclient/nfsmount.h Fri Aug 17 14:22:56 2012 (r239355) @@ -114,6 +114,10 @@ struct nfsmount { #define NFS_TPRINTF_DELAY 30 #endif +#ifndef NFS_DEFAULT_NAMETIMEO +#define NFS_DEFAULT_NAMETIMEO 60 +#endif + #ifndef NFS_DEFAULT_NEGNAMETIMEO #define NFS_DEFAULT_NEGNAMETIMEO 60 #endif From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 14:28:11 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2E22E106566C; Fri, 17 Aug 2012 14:28:11 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id F2F168FC08; Fri, 17 Aug 2012 14:28:10 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 46630B96C; Fri, 17 Aug 2012 10:28:10 -0400 (EDT) From: John Baldwin To: Randall Stewart Date: Fri, 17 Aug 2012 08:24:26 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p17; KDE/4.5.5; amd64; ; ) References: <201208161755.q7GHtHHZ048693@svn.freebsd.org> <201208161534.42012.jhb@freebsd.org> <896011BA-5F0C-4371-A9D2-6E96283380E0@lakerest.net> In-Reply-To: <896011BA-5F0C-4371-A9D2-6E96283380E0@lakerest.net> MIME-Version: 1.0 Content-Type: Text/Plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Message-Id: <201208170824.26385.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 17 Aug 2012 10:28:10 -0400 (EDT) Cc: svn-src-head@freebsd.org, Randall Stewart , svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239334 - head/sys/netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 14:28:11 -0000 On Thursday, August 16, 2012 6:33:12 pm Randall Stewart wrote: > > On Aug 16, 2012, at 3:34 PM, John Baldwin wrote: > > > On Thursday, August 16, 2012 1:55:17 pm Randall Stewart wrote: > >> Author: rrs > >> Date: Thu Aug 16 17:55:16 2012 > >> New Revision: 239334 > >> URL: http://svn.freebsd.org/changeset/base/239334 > >> > >> Log: > >> Its never a good idea to double free the same > >> address. > >> > >> MFC after: 1 week (after the other commits ahead of this gets MFC'd) > >> > >> Modified: > >> head/sys/netinet/in.c > >> > >> Modified: head/sys/netinet/in.c > >> > > ============================================================================== > >> --- head/sys/netinet/in.c Thu Aug 16 17:27:11 2012 (r239333) > >> +++ head/sys/netinet/in.c Thu Aug 16 17:55:16 2012 (r239334) > >> @@ -573,7 +573,7 @@ in_control(struct socket *so, u_long cmd > >> } > >> TAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifa_link); > >> IF_ADDR_WUNLOCK(ifp); > >> - ifa_free(&ia->ia_ifa); /* if_addrhead */ > >> +/* ifa_free(&ia->ia_ifa); - Double free?? */ /* if_addrhead */ > > > > This isn't a double free. This is dropping a reference count. In this case > > as the comment suggests, it is removing the reference held by the per- > > interface if_addrhead list that it was just removed from two lines above. > > Later in the function when ifa_free() is invoked: > > > > LIST_REMOVE(ia, ia_hash); > > IN_IFADDR_WUNLOCK(); > > ... > > ifa_free(&ia->ia_ifa); /* in_ifaddrhead */ > > > > It is dropping the reference held by the in_ifaddrhead list which the ifa > > was removed from by the above LIST_REMOVE(). Are you seeing a panic or > > refcount underflow or some such? > > > > No panic, I wish I were so lucky, I had a lockup/fault at: > > in_gif.c line 410 (this is 9 stable) > ----------------------- > IN_IFADDR_RLOCK(); > TAILQ_FOREACH(ia4, &V_in_ifaddrhead, ia_link) { > if ((ia4->ia_ifa.ifa_ifp->if_flags & IFF_BROADCAST) == 0) <------fault in kernel HERE > continue; > if (ip->ip_src.s_addr == ia4->ia_broadaddr.sin_addr.s_addr) { > IN_IFADDR_RUNLOCK(); > return 0; > } > } > IN_IFADDR_RUNLOCK(); > ------------------------ > > I went through and made sure first that every reference using V_in_ifaddrhead > was properly locking, and they were. The only thing I could find is this. From > the instructions I could see in the assembly the ia4->ia_ifa.ifa_ifp was NULL. And > thus caused a deref of a NULL pointer. I don't think what you found is a bug. It is clearly dropping two different references, so I think your fix isn't correct. I suspect there is an extra ifa_free() in some other path that you are tripping over. You can clearly see the two references added when an ifa is added to V_in_ifaddrhead: ifa_ref(ifa); /* if_addrhead */ IF_ADDR_WLOCK(ifp); TAILQ_INSERT_TAIL(&ifp->if_addrhead, ifa, ifa_link); IF_ADDR_WUNLOCK(ifp); ifa_ref(ifa); /* in_ifaddrhead */ IN_IFADDR_WLOCK(); TAILQ_INSERT_TAIL(&V_in_ifaddrhead, ia, ia_link); IN_IFADDR_WUNLOCK(); If you can get a crashdump (not sure it sounds like you are able), I would add KTR traces of all callers to ifa_free() (logging the reference count value and pointer) and possibly adding an explicit panic for the reference count in ifa_free underflowing or overflowing and then look back in history for what ifa_free() calls were made. -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 14:28:12 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F3D57106564A; Fri, 17 Aug 2012 14:28:11 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id CA9828FC16; Fri, 17 Aug 2012 14:28:11 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 2ED67B96E; Fri, 17 Aug 2012 10:28:11 -0400 (EDT) From: John Baldwin To: Randall Stewart Date: Fri, 17 Aug 2012 08:26:25 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p17; KDE/4.5.5; amd64; ; ) References: <201208170551.q7H5pkd1025308@svn.freebsd.org> In-Reply-To: <201208170551.q7H5pkd1025308@svn.freebsd.org> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <201208170826.25123.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 17 Aug 2012 10:28:11 -0400 (EDT) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239353 - head/sys/netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 14:28:12 -0000 On Friday, August 17, 2012 1:51:46 am Randall Stewart wrote: > Author: rrs > Date: Fri Aug 17 05:51:46 2012 > New Revision: 239353 > URL: http://svn.freebsd.org/changeset/base/239353 > > Log: > Ok jhb, lets move the ifa_free() down to the bottom to > assure that *all* tables and such are removed before > we start to free. This won't protect the Hash in ip_input.c > but in theory should protect any other uses that *do* use locks. Eh, this is just a nop unless there is a reference counting bug. Only the last reference would free the memory if the reference count is correct, so this is just adding obfuscation by moving the ifa_free() away from the associated TAILQ_REMOVE(). -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 15:53:44 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EE82F106564A; Fri, 17 Aug 2012 15:53:43 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DA0208FC0C; Fri, 17 Aug 2012 15:53:43 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7HFrhq4090459; Fri, 17 Aug 2012 15:53:43 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7HFrhuf090457; Fri, 17 Aug 2012 15:53:43 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208171553.q7HFrhuf090457@svn.freebsd.org> From: John Baldwin Date: Fri, 17 Aug 2012 15:53:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239356 - head/sbin/dhclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 15:53:44 -0000 Author: jhb Date: Fri Aug 17 15:53:43 2012 New Revision: 239356 URL: http://svn.freebsd.org/changeset/base/239356 Log: Fix dhclient to properly exit and teardown the configured lease when link is lost. devd will start a new dhclient instance when link is restored. PR: bin/166656 Submitted by: Peter Jeremy (mostly) Reviewed by: brooks (earlier version from Peter) MFC after: 1 month Modified: head/sbin/dhclient/dhclient.c Modified: head/sbin/dhclient/dhclient.c ============================================================================== --- head/sbin/dhclient/dhclient.c Fri Aug 17 14:22:56 2012 (r239355) +++ head/sbin/dhclient/dhclient.c Fri Aug 17 15:53:43 2012 (r239356) @@ -278,6 +278,11 @@ routehandler(struct protocol *p) ifi->name); goto die; } + if (!interface_link_status(ifi->name)) { + warning("Interface %s is down, dhclient exiting", + ifi->name); + goto die; + } break; case RTM_IFANNOUNCE: ifan = (struct if_announcemsghdr *)rtm; @@ -316,6 +321,8 @@ routehandler(struct protocol *p) die: script_init("FAIL", NULL); + if (ifi->client->active) + script_write_params("old_", ifi->client->active); if (ifi->client->alias) script_write_params("alias_", ifi->client->alias); script_go(); From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 16:01:24 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B10D310656AA; Fri, 17 Aug 2012 16:01:24 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9D9BE8FC18; Fri, 17 Aug 2012 16:01:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7HG1OGv091336; Fri, 17 Aug 2012 16:01:24 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7HG1Ocu091332; Fri, 17 Aug 2012 16:01:24 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201208171601.q7HG1Ocu091332@svn.freebsd.org> From: John Baldwin Date: Fri, 17 Aug 2012 16:01:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239357 - in head/sys: net netipsec X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 16:01:24 -0000 Author: jhb Date: Fri Aug 17 16:01:24 2012 New Revision: 239357 URL: http://svn.freebsd.org/changeset/base/239357 Log: Unexpand a couple of TAILQ_FOREACH()s. Modified: head/sys/net/if_stf.c head/sys/netipsec/key.c Modified: head/sys/net/if_stf.c ============================================================================== --- head/sys/net/if_stf.c Fri Aug 17 15:53:43 2012 (r239356) +++ head/sys/net/if_stf.c Fri Aug 17 16:01:24 2012 (r239357) @@ -618,10 +618,7 @@ stf_checkaddr4(sc, in, inifp) * reject packets with broadcast */ IN_IFADDR_RLOCK(); - for (ia4 = TAILQ_FIRST(&V_in_ifaddrhead); - ia4; - ia4 = TAILQ_NEXT(ia4, ia_link)) - { + TAILQ_FOREACH(ia4, &V_in_ifaddrhead, ia_link) { if ((ia4->ia_ifa.ifa_ifp->if_flags & IFF_BROADCAST) == 0) continue; if (in->s_addr == ia4->ia_broadaddr.sin_addr.s_addr) { Modified: head/sys/netipsec/key.c ============================================================================== --- head/sys/netipsec/key.c Fri Aug 17 15:53:43 2012 (r239356) +++ head/sys/netipsec/key.c Fri Aug 17 16:01:24 2012 (r239357) @@ -3921,8 +3921,7 @@ key_ismyaddr(sa) case AF_INET: sin = (struct sockaddr_in *)sa; IN_IFADDR_RLOCK(); - for (ia = V_in_ifaddrhead.tqh_first; ia; - ia = ia->ia_link.tqe_next) + TAILQ_FOREACH(ia, &V_in_ifaddrhead, ia_link) { if (sin->sin_family == ia->ia_addr.sin_family && sin->sin_len == ia->ia_addr.sin_len && From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 16:27:12 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A571D106566C; Fri, 17 Aug 2012 16:27:12 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 900D48FC0A; Fri, 17 Aug 2012 16:27:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7HGRCG8094150; Fri, 17 Aug 2012 16:27:12 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7HGRCGG094147; Fri, 17 Aug 2012 16:27:12 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201208171627.q7HGRCGG094147@svn.freebsd.org> From: Hans Petter Selasky Date: Fri, 17 Aug 2012 16:27:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239358 - in head/sys/dev/usb: . wlan X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 16:27:12 -0000 Author: hselasky Date: Fri Aug 17 16:27:11 2012 New Revision: 239358 URL: http://svn.freebsd.org/changeset/base/239358 Log: Add new USB device ID. PR: usb/170688 MFC after: 1 week Modified: head/sys/dev/usb/usbdevs head/sys/dev/usb/wlan/if_run.c Modified: head/sys/dev/usb/usbdevs ============================================================================== --- head/sys/dev/usb/usbdevs Fri Aug 17 16:01:24 2012 (r239357) +++ head/sys/dev/usb/usbdevs Fri Aug 17 16:27:11 2012 (r239358) @@ -1118,6 +1118,7 @@ product ASUS A730W 0x4202 ASUS MyPal A7 product ASUS P535 0x420f ASUS P535 PDA product ASUS GMSC 0x422f ASUS Generic Mass Storage product ASUS RT2570 0x1706 RT2500USB Wireless Adapter +product ASUS USB_N53 0x179d ASUS Black Diamond Dual Band USB-N53 /* ATen products */ product ATEN UC1284 0x2001 Parallel printer Modified: head/sys/dev/usb/wlan/if_run.c ============================================================================== --- head/sys/dev/usb/wlan/if_run.c Fri Aug 17 16:01:24 2012 (r239357) +++ head/sys/dev/usb/wlan/if_run.c Fri Aug 17 16:27:11 2012 (r239358) @@ -136,6 +136,7 @@ static const STRUCT_USB_HOST_ID run_devs RUN_DEV(ASUS, RT2870_5), RUN_DEV(ASUS, USBN13), RUN_DEV(ASUS, RT3070_1), + RUN_DEV(ASUS, USB_N53), RUN_DEV(ASUS2, USBN11), RUN_DEV(AZUREWAVE, RT2870_1), RUN_DEV(AZUREWAVE, RT2870_2), From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 17:02:17 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C439B1065673 for ; Fri, 17 Aug 2012 17:02:17 +0000 (UTC) (envelope-from freebsd@damnhippie.dyndns.org) Received: from qmta12.emeryville.ca.mail.comcast.net (qmta12.emeryville.ca.mail.comcast.net [76.96.27.227]) by mx1.freebsd.org (Postfix) with ESMTP id 9F5578FC15 for ; Fri, 17 Aug 2012 17:02:17 +0000 (UTC) Received: from omta07.emeryville.ca.mail.comcast.net ([76.96.30.59]) by qmta12.emeryville.ca.mail.comcast.net with comcast id nqJk1j0061GXsucACt2Hqz; Fri, 17 Aug 2012 17:02:17 +0000 Received: from damnhippie.dyndns.org ([24.8.232.202]) by omta07.emeryville.ca.mail.comcast.net with comcast id nt2G1j0014NgCEG8Ut2GAd; Fri, 17 Aug 2012 17:02:17 +0000 Received: from [172.22.42.240] (revolution.hippie.lan [172.22.42.240]) by damnhippie.dyndns.org (8.14.3/8.14.3) with ESMTP id q7HH2EOB018230; Fri, 17 Aug 2012 11:02:14 -0600 (MDT) (envelope-from freebsd@damnhippie.dyndns.org) From: Ian Lepore To: John Baldwin In-Reply-To: <201208171553.q7HFrhuf090457@svn.freebsd.org> References: <201208171553.q7HFrhuf090457@svn.freebsd.org> Content-Type: multipart/mixed; boundary="=-0VwgxFO6omcOAMrSi85E" Date: Fri, 17 Aug 2012 11:02:14 -0600 Message-ID: <1345222934.27688.110.camel@revolution.hippie.lan> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239356 - head/sbin/dhclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 17:02:17 -0000 --=-0VwgxFO6omcOAMrSi85E Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On Fri, 2012-08-17 at 15:53 +0000, John Baldwin wrote: > Author: jhb > Date: Fri Aug 17 15:53:43 2012 > New Revision: 239356 > URL: http://svn.freebsd.org/changeset/base/239356 > > Log: > Fix dhclient to properly exit and teardown the configured lease when > link is lost. devd will start a new dhclient instance when link is > restored. > > PR: bin/166656 > Submitted by: Peter Jeremy (mostly) > Reviewed by: brooks (earlier version from Peter) > MFC after: 1 month > > Modified: > head/sbin/dhclient/dhclient.c > > Modified: head/sbin/dhclient/dhclient.c > ============================================================================== > --- head/sbin/dhclient/dhclient.c Fri Aug 17 14:22:56 2012 (r239355) > +++ head/sbin/dhclient/dhclient.c Fri Aug 17 15:53:43 2012 (r239356) > @@ -278,6 +278,11 @@ routehandler(struct protocol *p) > ifi->name); > goto die; > } > + if (!interface_link_status(ifi->name)) { > + warning("Interface %s is down, dhclient exiting", > + ifi->name); > + goto die; > + } > break; > case RTM_IFANNOUNCE: > ifan = (struct if_announcemsghdr *)rtm; > @@ -316,6 +321,8 @@ routehandler(struct protocol *p) > > die: > script_init("FAIL", NULL); > + if (ifi->client->active) > + script_write_params("old_", ifi->client->active); > if (ifi->client->alias) > script_write_params("alias_", ifi->client->alias); > script_go(); I think the attached patch should give the same result without needing to create/destroy a socket to check the link status every time a routing info message arrives. I've actually had this patch in my head for several years, I just hadn't gotten around to submitting it yet. -- Ian --=-0VwgxFO6omcOAMrSi85E Content-Description: Content-Disposition: inline; filename="dhclient.diff" Content-Type: text/x-patch; name="dhclient.diff"; charset="us-ascii" Content-Transfer-Encoding: 7bit diff -r 6cb112d8486e sbin/dhclient/dhclient.c --- a/sbin/dhclient/dhclient.c Mon Aug 13 15:06:09 2012 -0600 +++ b/sbin/dhclient/dhclient.c Fri Aug 17 10:48:02 2012 -0600 @@ -273,7 +273,7 @@ routehandler(struct protocol *p) ifm = (struct if_msghdr *)rtm; if (ifm->ifm_index != ifi->index) break; - if ((rtm->rtm_flags & RTF_UP) == 0) { + if (ifm->ifm_data.ifi_link_state != LINK_STATE_UP) { warning("Interface %s is down, dhclient exiting", ifi->name); goto die; --=-0VwgxFO6omcOAMrSi85E-- From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 17:34:24 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 13E46106566B; Fri, 17 Aug 2012 17:34:24 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id DB6AD8FC16; Fri, 17 Aug 2012 17:34:23 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 22DEDB91C; Fri, 17 Aug 2012 13:34:23 -0400 (EDT) From: John Baldwin To: Ian Lepore Date: Fri, 17 Aug 2012 13:31:10 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p17; KDE/4.5.5; amd64; ; ) References: <201208171553.q7HFrhuf090457@svn.freebsd.org> <1345222934.27688.110.camel@revolution.hippie.lan> In-Reply-To: <1345222934.27688.110.camel@revolution.hippie.lan> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Message-Id: <201208171331.10655.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 17 Aug 2012 13:34:23 -0400 (EDT) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239356 - head/sbin/dhclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 17:34:24 -0000 On Friday, August 17, 2012 1:02:14 pm Ian Lepore wrote: > On Fri, 2012-08-17 at 15:53 +0000, John Baldwin wrote: > > Author: jhb > > Date: Fri Aug 17 15:53:43 2012 > > New Revision: 239356 > > URL: http://svn.freebsd.org/changeset/base/239356 > > > > Log: > > Fix dhclient to properly exit and teardown the configured lease when > > link is lost. devd will start a new dhclient instance when link is > > restored. > > > > PR: bin/166656 > > Submitted by: Peter Jeremy (mostly) > > Reviewed by: brooks (earlier version from Peter) > > MFC after: 1 month > > > > Modified: > > head/sbin/dhclient/dhclient.c > > > > Modified: head/sbin/dhclient/dhclient.c > > ============================================================================== > > --- head/sbin/dhclient/dhclient.c Fri Aug 17 14:22:56 2012 (r239355) > > +++ head/sbin/dhclient/dhclient.c Fri Aug 17 15:53:43 2012 (r239356) > > @@ -278,6 +278,11 @@ routehandler(struct protocol *p) > > ifi->name); > > goto die; > > } > > + if (!interface_link_status(ifi->name)) { > > + warning("Interface %s is down, dhclient exiting", > > + ifi->name); > > + goto die; > > + } > > break; > > case RTM_IFANNOUNCE: > > ifan = (struct if_announcemsghdr *)rtm; > > @@ -316,6 +321,8 @@ routehandler(struct protocol *p) > > > > die: > > script_init("FAIL", NULL); > > + if (ifi->client->active) > > + script_write_params("old_", ifi->client->active); > > if (ifi->client->alias) > > script_write_params("alias_", ifi->client->alias); > > script_go(); > > I think the attached patch should give the same result without needing > to create/destroy a socket to check the link status every time a routing > info message arrives. I've actually had this patch in my head for > several years, I just hadn't gotten around to submitting it yet. Hmm, OpenBSD does check that, but they also seem to verify it via SIOCGMEDIA as well. Do we think this is as reliable? In the kernel we only seem to honor this if the NIC explicitly supports the capability: #define RT_LINK_IS_UP(ifp) (!((ifp)->if_capabilities & IFCAP_LINKSTATE) \ || (ifp)->if_link_state == LINK_STATE_UP) Also, I don't think routing info messages are all that common of an event are they? -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 17:45:28 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3C685106566B; Fri, 17 Aug 2012 17:45:28 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 263C08FC0A; Fri, 17 Aug 2012 17:45:28 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7HHjS1K002361; Fri, 17 Aug 2012 17:45:28 GMT (envelope-from mjg@svn.freebsd.org) Received: (from mjg@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7HHjRHC002354; Fri, 17 Aug 2012 17:45:27 GMT (envelope-from mjg@svn.freebsd.org) Message-Id: <201208171745.q7HHjRHC002354@svn.freebsd.org> From: Mateusz Guzik Date: Fri, 17 Aug 2012 17:45:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239359 - in head: sys/fs/ext2fs sys/ufs/ufs usr.sbin/makefs/ffs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 17:45:28 -0000 Author: mjg Date: Fri Aug 17 17:45:27 2012 New Revision: 239359 URL: http://svn.freebsd.org/changeset/base/239359 Log: Remove unused member of struct indir (in_exists) from UFS and EXT2 code. Reviewed by: mckusick Approved by: trasz (mentor) MFC after: 1 week Modified: head/sys/fs/ext2fs/ext2_bmap.c head/sys/fs/ext2fs/inode.h head/sys/ufs/ufs/inode.h head/sys/ufs/ufs/ufs_bmap.c head/usr.sbin/makefs/ffs/ffs_extern.h head/usr.sbin/makefs/ffs/ufs_bmap.c Modified: head/sys/fs/ext2fs/ext2_bmap.c ============================================================================== --- head/sys/fs/ext2fs/ext2_bmap.c Fri Aug 17 16:27:11 2012 (r239358) +++ head/sys/fs/ext2fs/ext2_bmap.c Fri Aug 17 17:45:27 2012 (r239359) @@ -183,7 +183,6 @@ ext2_bmaparray(vp, bn, bnp, runp, runb) if (bp) bqrelse(bp); - ap->in_exists = 1; bp = getblk(vp, metalbn, bsize, 0, 0, 0); if ((bp->b_flags & B_CACHE) == 0) { #ifdef DIAGNOSTIC @@ -310,7 +309,6 @@ ext2_getlbns(vp, bn, ap, nump) */ ap->in_lbn = metalbn; ap->in_off = off = NIADDR - i; - ap->in_exists = 0; ap++; for (++numlevels; i <= NIADDR; i++) { /* If searching for a meta-data block, quit when found. */ @@ -322,7 +320,6 @@ ext2_getlbns(vp, bn, ap, nump) ++numlevels; ap->in_lbn = metalbn; ap->in_off = off; - ap->in_exists = 0; ++ap; metalbn -= -1 + off * blockcnt; Modified: head/sys/fs/ext2fs/inode.h ============================================================================== --- head/sys/fs/ext2fs/inode.h Fri Aug 17 16:27:11 2012 (r239358) +++ head/sys/fs/ext2fs/inode.h Fri Aug 17 17:45:27 2012 (r239359) @@ -151,7 +151,6 @@ struct inode { struct indir { int32_t in_lbn; /* Logical block number. */ int in_off; /* Offset in buffer. */ - int in_exists; /* Flag if the block exists. */ }; /* Convert between inode pointers and vnode pointers. */ Modified: head/sys/ufs/ufs/inode.h ============================================================================== --- head/sys/ufs/ufs/inode.h Fri Aug 17 16:27:11 2012 (r239358) +++ head/sys/ufs/ufs/inode.h Fri Aug 17 17:45:27 2012 (r239359) @@ -167,7 +167,6 @@ struct inode { struct indir { ufs2_daddr_t in_lbn; /* Logical block number. */ int in_off; /* Offset in buffer. */ - int in_exists; /* Flag if the block exists. */ }; /* Convert between inode pointers and vnode pointers. */ Modified: head/sys/ufs/ufs/ufs_bmap.c ============================================================================== --- head/sys/ufs/ufs/ufs_bmap.c Fri Aug 17 16:27:11 2012 (r239358) +++ head/sys/ufs/ufs/ufs_bmap.c Fri Aug 17 17:45:27 2012 (r239359) @@ -212,7 +212,6 @@ ufs_bmaparray(vp, bn, bnp, nbp, runp, ru if (bp) bqrelse(bp); - ap->in_exists = 1; bp = getblk(vp, metalbn, mp->mnt_stat.f_iosize, 0, 0, 0); if ((bp->b_flags & B_CACHE) == 0) { #ifdef INVARIANTS @@ -357,7 +356,6 @@ ufs_getlbns(vp, bn, ap, nump) */ ap->in_lbn = metalbn; ap->in_off = off = NIADDR - i; - ap->in_exists = 0; ap++; for (++numlevels; i <= NIADDR; i++) { /* If searching for a meta-data block, quit when found. */ @@ -370,7 +368,6 @@ ufs_getlbns(vp, bn, ap, nump) ++numlevels; ap->in_lbn = metalbn; ap->in_off = off; - ap->in_exists = 0; ++ap; metalbn -= -1 + off * blockcnt; Modified: head/usr.sbin/makefs/ffs/ffs_extern.h ============================================================================== --- head/usr.sbin/makefs/ffs/ffs_extern.h Fri Aug 17 16:27:11 2012 (r239358) +++ head/usr.sbin/makefs/ffs/ffs_extern.h Fri Aug 17 17:45:27 2012 (r239359) @@ -44,7 +44,6 @@ struct inode; struct indir { daddr_t in_lbn; /* Logical block number. */ int in_off; /* Offset in buffer. */ - int in_exists; /* Flag if the block exists. */ }; /* ffs.c */ Modified: head/usr.sbin/makefs/ffs/ufs_bmap.c ============================================================================== --- head/usr.sbin/makefs/ffs/ufs_bmap.c Fri Aug 17 16:27:11 2012 (r239358) +++ head/usr.sbin/makefs/ffs/ufs_bmap.c Fri Aug 17 17:45:27 2012 (r239359) @@ -117,7 +117,6 @@ ufs_getlbns(struct inode *ip, daddr_t bn */ ap->in_lbn = metalbn; ap->in_off = off = NIADDR - i; - ap->in_exists = 0; ap++; for (++numlevels; i <= NIADDR; i++) { /* If searching for a meta-data block, quit when found. */ @@ -131,7 +130,6 @@ ufs_getlbns(struct inode *ip, daddr_t bn ++numlevels; ap->in_lbn = metalbn; ap->in_off = off; - ap->in_exists = 0; ++ap; metalbn -= -1 + (off << lbc); From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 18:10:03 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3FC9E106564A for ; Fri, 17 Aug 2012 18:10:03 +0000 (UTC) (envelope-from freebsd@damnhippie.dyndns.org) Received: from qmta11.emeryville.ca.mail.comcast.net (qmta11.emeryville.ca.mail.comcast.net [76.96.27.211]) by mx1.freebsd.org (Postfix) with ESMTP id 19EA28FC16 for ; Fri, 17 Aug 2012 18:10:03 +0000 (UTC) Received: from omta14.emeryville.ca.mail.comcast.net ([76.96.30.60]) by qmta11.emeryville.ca.mail.comcast.net with comcast id ntAC1j00H1HpZEsABu9xga; Fri, 17 Aug 2012 18:09:57 +0000 Received: from damnhippie.dyndns.org ([24.8.232.202]) by omta14.emeryville.ca.mail.comcast.net with comcast id nu9w1j0054NgCEG8au9wUW; Fri, 17 Aug 2012 18:09:57 +0000 Received: from [172.22.42.240] (revolution.hippie.lan [172.22.42.240]) by damnhippie.dyndns.org (8.14.3/8.14.3) with ESMTP id q7HI9s2A018268; Fri, 17 Aug 2012 12:09:54 -0600 (MDT) (envelope-from freebsd@damnhippie.dyndns.org) From: Ian Lepore To: John Baldwin In-Reply-To: <201208171331.10655.jhb@freebsd.org> References: <201208171553.q7HFrhuf090457@svn.freebsd.org> <1345222934.27688.110.camel@revolution.hippie.lan> <201208171331.10655.jhb@freebsd.org> Content-Type: text/plain; charset="us-ascii" Date: Fri, 17 Aug 2012 12:09:54 -0600 Message-ID: <1345226994.27688.129.camel@revolution.hippie.lan> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239356 - head/sbin/dhclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 18:10:03 -0000 On Fri, 2012-08-17 at 13:31 -0400, John Baldwin wrote: > On Friday, August 17, 2012 1:02:14 pm Ian Lepore wrote: > > On Fri, 2012-08-17 at 15:53 +0000, John Baldwin wrote: > > > Author: jhb > > > Date: Fri Aug 17 15:53:43 2012 > > > New Revision: 239356 > > > URL: http://svn.freebsd.org/changeset/base/239356 > > > > > > Log: > > > Fix dhclient to properly exit and teardown the configured lease when > > > link is lost. devd will start a new dhclient instance when link is > > > restored. > > > > > > PR: bin/166656 > > > Submitted by: Peter Jeremy (mostly) > > > Reviewed by: brooks (earlier version from Peter) > > > MFC after: 1 month > > > > > > Modified: > > > head/sbin/dhclient/dhclient.c > > > > > > Modified: head/sbin/dhclient/dhclient.c > > > ============================================================================== > > > --- head/sbin/dhclient/dhclient.c Fri Aug 17 14:22:56 2012 (r239355) > > > +++ head/sbin/dhclient/dhclient.c Fri Aug 17 15:53:43 2012 (r239356) > > > @@ -278,6 +278,11 @@ routehandler(struct protocol *p) > > > ifi->name); > > > goto die; > > > } > > > + if (!interface_link_status(ifi->name)) { > > > + warning("Interface %s is down, dhclient exiting", > > > + ifi->name); > > > + goto die; > > > + } > > > break; > > > case RTM_IFANNOUNCE: > > > ifan = (struct if_announcemsghdr *)rtm; > > > @@ -316,6 +321,8 @@ routehandler(struct protocol *p) > > > > > > die: > > > script_init("FAIL", NULL); > > > + if (ifi->client->active) > > > + script_write_params("old_", ifi->client->active); > > > if (ifi->client->alias) > > > script_write_params("alias_", ifi->client->alias); > > > script_go(); > > > > I think the attached patch should give the same result without needing > > to create/destroy a socket to check the link status every time a routing > > info message arrives. I've actually had this patch in my head for > > several years, I just hadn't gotten around to submitting it yet. > > Hmm, OpenBSD does check that, but they also seem to verify it via SIOCGMEDIA > as well. Do we think this is as reliable? In the kernel we only seem to > honor this if the NIC explicitly supports the capability: > > #define RT_LINK_IS_UP(ifp) (!((ifp)->if_capabilities & IFCAP_LINKSTATE) \ > || (ifp)->if_link_state == LINK_STATE_UP) > > Also, I don't think routing info messages are all that common of an event are they? > I actually don't know how common routing info messages are; the ways I use freebsd don't include a lot of heavy network usage. The IFCAP_LINKSTATE question is interesting. The #define comment for it says "the runtime link state is dynamic." The RT_LINK_IS_UP() macro is interesting too, in that it appears to assume that the link must be up if it isn't dynamic. I think that means the more-correct way than I posted would be a test such as if (!RT_LINK_IS_UP(&ifm->ifm_data)) It looks like IFCAP_LINKSTATE is added to if_capabilities by miibus_attach() and a few specific NIC drivers (presumably ones that don't use standard MII attachements to their PHYs). I would hope all that adds up to the concept that any network driver in control of links that can come and go will either automatically do the right thing by using the miibus code, or by using its own equivelent code when mii isn't appropriate, or the driver is buggy. Hopefully there aren't any in the last category. :) -- Ian From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 18:20:38 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B7B16106564A; Fri, 17 Aug 2012 18:20:38 +0000 (UTC) (envelope-from obrien@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A1C208FC08; Fri, 17 Aug 2012 18:20:38 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7HIKcHI005984; Fri, 17 Aug 2012 18:20:38 GMT (envelope-from obrien@svn.freebsd.org) Received: (from obrien@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7HIKcoX005980; Fri, 17 Aug 2012 18:20:38 GMT (envelope-from obrien@svn.freebsd.org) Message-Id: <201208171820.q7HIKcoX005980@svn.freebsd.org> From: "David E. O'Brien" Date: Fri, 17 Aug 2012 18:20:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239360 - in head: contrib/diff/src gnu/usr.bin/diff X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 18:20:38 -0000 Author: obrien Date: Fri Aug 17 18:20:38 2012 New Revision: 239360 URL: http://svn.freebsd.org/changeset/base/239360 Log: Catch up with the subversion conversion and apply these build-time patches. Deleted: head/gnu/usr.bin/diff/context.c.diff head/gnu/usr.bin/diff/diff.c.diff Modified: head/contrib/diff/src/context.c head/contrib/diff/src/diff.c head/gnu/usr.bin/diff/Makefile Modified: head/contrib/diff/src/context.c ============================================================================== --- head/contrib/diff/src/context.c Fri Aug 17 17:45:27 2012 (r239359) +++ head/contrib/diff/src/context.c Fri Aug 17 18:20:38 2012 (r239360) @@ -29,7 +29,7 @@ # define TIMESPEC_NS(timespec) 0 #endif -size_t nstrftime (char *, size_t, char const *, struct tm const *, int, int); +size_t nstrftime (char *, size_t, char const *, struct tm const *, int, long); static char const *find_function (char const * const *, lin); static struct change *find_hunk (struct change *); @@ -57,12 +57,12 @@ print_context_label (char const *mark, char buf[MAX (INT_STRLEN_BOUND (int) + 32, INT_STRLEN_BOUND (time_t) + 11)]; struct tm const *tm = localtime (&inf->stat.st_mtime); - int nsec = TIMESPEC_NS (inf->stat.st_mtim); + long nsec = TIMESPEC_NS (inf->stat.st_mtim); if (! (tm && nstrftime (buf, sizeof buf, time_format, tm, 0, nsec))) { - long int sec = inf->stat.st_mtime; + time_t sec = inf->stat.st_mtime; verify (info_preserved, sizeof inf->stat.st_mtime <= sizeof sec); - sprintf (buf, "%ld.%.9d", sec, nsec); + sprintf (buf, "%jd.%.9d", (intmax_t)sec, nsec); } fprintf (outfile, "%s %s\t%s\n", mark, inf->name, buf); } Modified: head/contrib/diff/src/diff.c ============================================================================== --- head/contrib/diff/src/diff.c Fri Aug 17 17:45:27 2012 (r239359) +++ head/contrib/diff/src/diff.c Fri Aug 17 18:20:38 2012 (r239360) @@ -137,7 +137,7 @@ exclude_options (void) } static char const shortopts[] = -"0123456789abBcC:dD:eEfF:hHiI:lL:nNpPqrsS:tTuU:vwW:x:X:y"; +"0123456789abBcC:dD:eEfF:hHiI:lL:nNopPqrsS:tTuU:vwW:x:X:y"; /* Values for long options that do not have single-letter equivalents. */ enum @@ -265,14 +265,15 @@ main (int argc, char **argv) initialize_main (&argc, &argv); program_name = argv[0]; setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); c_stack_action (0); function_regexp_list.buf = &function_regexp; ignore_regexp_list.buf = &ignore_regexp; - re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING); + re_set_syntax (RE_SYNTAX_GREP); excluded = new_exclude (); + prepend_default_options (getenv ("DIFF_OPTIONS"), &argc, &argv); + /* Decode the options. */ while ((c = getopt_long (argc, argv, shortopts, longopts, 0)) != -1) @@ -428,6 +429,11 @@ main (int argc, char **argv) new_file = true; break; + case 'o': + /* Output in the old tradition style. */ + specify_style (OUTPUT_NORMAL); + break; + case 'p': show_c_function = true; add_regexp (&function_regexp_list, "^[[:alpha:]$_]"); @@ -983,8 +989,6 @@ specify_style (enum output_style style) { if (output_style != style) { - if (output_style != OUTPUT_UNSPECIFIED) - try_help ("conflicting output style options", 0); output_style = style; } } Modified: head/gnu/usr.bin/diff/Makefile ============================================================================== --- head/gnu/usr.bin/diff/Makefile Fri Aug 17 17:45:27 2012 (r239359) +++ head/gnu/usr.bin/diff/Makefile Fri Aug 17 18:20:38 2012 (r239360) @@ -27,10 +27,4 @@ SUBDIR+=doc DPADD= ${LIBGNUREGEX} LDADD= -lgnuregex -.for f in diff.c context.c -${f}: ${DIFFSRC}/${f} ${.CURDIR}/${f}.diff - patch -s -o ${.TARGET} < ${.CURDIR}/${f}.diff ${DIFFSRC}/${f} -CLEANFILES+= ${f} -.endfor - .include From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 18:25:20 2012 Return-Path: Delivered-To: svn-src-all@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E504E1065670; Fri, 17 Aug 2012 18:25:20 +0000 (UTC) (envelope-from ache@vniz.net) Received: from vniz.net (vniz.net [194.87.13.69]) by mx1.freebsd.org (Postfix) with ESMTP id 4021E8FC14; Fri, 17 Aug 2012 18:25:19 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by vniz.net (8.14.5/8.14.5) with ESMTP id q7HIPDTT058332; Fri, 17 Aug 2012 22:25:13 +0400 (MSK) (envelope-from ache@vniz.net) Received: (from ache@localhost) by localhost (8.14.5/8.14.5/Submit) id q7HIPCjo058331; Fri, 17 Aug 2012 22:25:12 +0400 (MSK) (envelope-from ache) Date: Fri, 17 Aug 2012 22:25:12 +0400 From: Andrey Chernov To: John Baldwin Message-ID: <20120817182512.GA58051@vniz.net> Mail-Followup-To: Andrey Chernov , John Baldwin , src-committers@FreeBSD.ORG, svn-src-all@FreeBSD.ORG, svn-src-head@FreeBSD.ORG References: <201208171553.q7HFrhuf090457@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201208171553.q7HFrhuf090457@svn.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: svn-src-head@FreeBSD.ORG, svn-src-all@FreeBSD.ORG, src-committers@FreeBSD.ORG Subject: Re: svn commit: r239356 - head/sbin/dhclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 18:25:21 -0000 On Fri, Aug 17, 2012 at 03:53:43PM +0000, John Baldwin wrote: > Author: jhb > Date: Fri Aug 17 15:53:43 2012 > New Revision: 239356 > URL: http://svn.freebsd.org/changeset/base/239356 > > Log: > Fix dhclient to properly exit and teardown the configured lease when > link is lost. devd will start a new dhclient instance when link is > restored. Is it any chance to teach dhclient IPv6 addresses in very basic parser level, f.e. to replace nameserver it sniffs from router? Currently dhcp-options(5) understands IPv4 addresses only and produce error on 'supersede' IPv6 address. -- http://ache.vniz.net/ From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 20:15:02 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 057D31065673; Fri, 17 Aug 2012 20:15:02 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E194F8FC0A; Fri, 17 Aug 2012 20:15:01 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7HKF1kR018002; Fri, 17 Aug 2012 20:15:01 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7HKF1bt017999; Fri, 17 Aug 2012 20:15:01 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201208172015.q7HKF1bt017999@svn.freebsd.org> From: Alan Cox Date: Fri, 17 Aug 2012 20:15:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239361 - head/sys/mips/mips X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 20:15:02 -0000 Author: alc Date: Fri Aug 17 20:15:01 2012 New Revision: 239361 URL: http://svn.freebsd.org/changeset/base/239361 Log: Eliminate another vestige of page coloring. Modified: head/sys/mips/mips/uma_machdep.c Modified: head/sys/mips/mips/uma_machdep.c ============================================================================== --- head/sys/mips/mips/uma_machdep.c Fri Aug 17 18:20:38 2012 (r239360) +++ head/sys/mips/mips/uma_machdep.c Fri Aug 17 20:15:01 2012 (r239361) @@ -42,7 +42,6 @@ __FBSDID("$FreeBSD$"); void * uma_small_alloc(uma_zone_t zone, int bytes, u_int8_t *flags, int wait) { - static vm_pindex_t color; vm_paddr_t pa; vm_page_t m; int pflags; @@ -56,7 +55,7 @@ uma_small_alloc(uma_zone_t zone, int byt pflags = VM_ALLOC_SYSTEM; for (;;) { - m = pmap_alloc_direct_page(color++, pflags); + m = pmap_alloc_direct_page(0, pflags); if (m == NULL) { if (wait & M_NOWAIT) return (NULL); From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 20:43:10 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A0FF5106566C; Fri, 17 Aug 2012 20:43:10 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id 49EC08FC0A; Fri, 17 Aug 2012 20:43:10 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 9C39BB922; Fri, 17 Aug 2012 16:43:09 -0400 (EDT) From: John Baldwin To: Ian Lepore Date: Fri, 17 Aug 2012 15:03:06 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p17; KDE/4.5.5; amd64; ; ) References: <201208171553.q7HFrhuf090457@svn.freebsd.org> <201208171331.10655.jhb@freebsd.org> <1345226994.27688.129.camel@revolution.hippie.lan> In-Reply-To: <1345226994.27688.129.camel@revolution.hippie.lan> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201208171503.06203.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 17 Aug 2012 16:43:09 -0400 (EDT) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239356 - head/sbin/dhclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 20:43:10 -0000 On Friday, August 17, 2012 2:09:54 pm Ian Lepore wrote: > On Fri, 2012-08-17 at 13:31 -0400, John Baldwin wrote: > > On Friday, August 17, 2012 1:02:14 pm Ian Lepore wrote: > > > On Fri, 2012-08-17 at 15:53 +0000, John Baldwin wrote: > > > > Author: jhb > > > > Date: Fri Aug 17 15:53:43 2012 > > > > New Revision: 239356 > > > > URL: http://svn.freebsd.org/changeset/base/239356 > > > > > > > > Log: > > > > Fix dhclient to properly exit and teardown the configured lease when > > > > link is lost. devd will start a new dhclient instance when link is > > > > restored. > > > > > > > > PR: bin/166656 > > > > Submitted by: Peter Jeremy (mostly) > > > > Reviewed by: brooks (earlier version from Peter) > > > > MFC after: 1 month > > > > > > > > Modified: > > > > head/sbin/dhclient/dhclient.c > > > > > > > > Modified: head/sbin/dhclient/dhclient.c > > > > ============================================================================== > > > > --- head/sbin/dhclient/dhclient.c Fri Aug 17 14:22:56 2012 (r239355) > > > > +++ head/sbin/dhclient/dhclient.c Fri Aug 17 15:53:43 2012 (r239356) > > > > @@ -278,6 +278,11 @@ routehandler(struct protocol *p) > > > > ifi->name); > > > > goto die; > > > > } > > > > + if (!interface_link_status(ifi->name)) { > > > > + warning("Interface %s is down, dhclient exiting", > > > > + ifi->name); > > > > + goto die; > > > > + } > > > > break; > > > > case RTM_IFANNOUNCE: > > > > ifan = (struct if_announcemsghdr *)rtm; > > > > @@ -316,6 +321,8 @@ routehandler(struct protocol *p) > > > > > > > > die: > > > > script_init("FAIL", NULL); > > > > + if (ifi->client->active) > > > > + script_write_params("old_", ifi->client->active); > > > > if (ifi->client->alias) > > > > script_write_params("alias_", ifi->client->alias); > > > > script_go(); > > > > > > I think the attached patch should give the same result without needing > > > to create/destroy a socket to check the link status every time a routing > > > info message arrives. I've actually had this patch in my head for > > > several years, I just hadn't gotten around to submitting it yet. > > > > Hmm, OpenBSD does check that, but they also seem to verify it via SIOCGMEDIA > > as well. Do we think this is as reliable? In the kernel we only seem to > > honor this if the NIC explicitly supports the capability: > > > > #define RT_LINK_IS_UP(ifp) (!((ifp)->if_capabilities & IFCAP_LINKSTATE) \ > > || (ifp)->if_link_state == LINK_STATE_UP) > > > > Also, I don't think routing info messages are all that common of an event are they? > > > > I actually don't know how common routing info messages are; the ways I > use freebsd don't include a lot of heavy network usage. They appear to be rare: Finding symbol: rt_ifmsg Database directory: /home/jhb/work/freebsd/svn/head/sys/ ------------------------------------------------------------------------------- *** net/route.h: [363] void rt_ifmsg(struct ifnet *); *** dev/usb/usb_pf.c: usbpf_clone_create[202] rt_ifmsg(ifp); *** net/if.c: if_unroute[1841] rt_ifmsg(ifp); if_route[1863] rt_ifmsg(ifp); do_link_state_change[1903] rt_ifmsg(ifp); ifhwioctl[2293] rt_ifmsg(ifp); if_setflag[2678] rt_ifmsg(ifp); *** net/rtsock.c: rt_ifmsg[1256] rt_ifmsg(struct ifnet *ifp) So, adding or removing routes, link state changes, changing the MTU, and changing an interface flag (e.g. ifconfig down). These all seem to be fairly rare to me, and generally require running ifconfig or route, etc. > The IFCAP_LINKSTATE question is interesting. The #define comment for it > says "the runtime link state is dynamic." The RT_LINK_IS_UP() macro is > interesting too, in that it appears to assume that the link must be up > if it isn't dynamic. I think that means the more-correct way than I > posted would be a test such as > > if (!RT_LINK_IS_UP(&ifm->ifm_data)) > > It looks like IFCAP_LINKSTATE is added to if_capabilities by > miibus_attach() and a few specific NIC drivers (presumably ones that > don't use standard MII attachements to their PHYs). > > I would hope all that adds up to the concept that any network driver in > control of links that can come and go will either automatically do the > right thing by using the miibus code, or by using its own equivelent > code when mii isn't appropriate, or the driver is buggy. Hopefully > there aren't any in the last category. :) I think pseudo-interfaces complicate things somewhat, but many of those (vlan(4), bridge(4), etc.) appear to do something sane I think. It's not clear to me that we currently assume that ifi_link_state is definitively valid. -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Fri Aug 17 20:43:11 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D9DB71065674; Fri, 17 Aug 2012 20:43:11 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id AE9938FC12; Fri, 17 Aug 2012 20:43:11 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id D085CB993; Fri, 17 Aug 2012 16:43:10 -0400 (EDT) From: John Baldwin To: Andrey Chernov Date: Fri, 17 Aug 2012 15:07:07 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p17; KDE/4.5.5; amd64; ; ) References: <201208171553.q7HFrhuf090457@svn.freebsd.org> <20120817182512.GA58051@vniz.net> In-Reply-To: <20120817182512.GA58051@vniz.net> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201208171507.07699.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 17 Aug 2012 16:43:10 -0400 (EDT) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239356 - head/sbin/dhclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Aug 2012 20:43:12 -0000 On Friday, August 17, 2012 2:25:12 pm Andrey Chernov wrote: > On Fri, Aug 17, 2012 at 03:53:43PM +0000, John Baldwin wrote: > > Author: jhb > > Date: Fri Aug 17 15:53:43 2012 > > New Revision: 239356 > > URL: http://svn.freebsd.org/changeset/base/239356 > > > > Log: > > Fix dhclient to properly exit and teardown the configured lease when > > link is lost. devd will start a new dhclient instance when link is > > restored. > > Is it any chance to teach dhclient IPv6 addresses in very basic parser > level, f.e. to replace nameserver it sniffs from router? Currently > dhcp-options(5) understands IPv4 addresses only and produce error on > 'supersede' IPv6 address. I think the RFC defines those to be IPv4, yes? Presumably DHCPv6 adds new option types that support IPv6 addresses? -- John Baldwin From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 05:48:20 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 56ED01065670; Sat, 18 Aug 2012 05:48:20 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3F92D8FC12; Sat, 18 Aug 2012 05:48:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7I5mKuh078673; Sat, 18 Aug 2012 05:48:20 GMT (envelope-from andrew@svn.freebsd.org) Received: (from andrew@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7I5mJil078651; Sat, 18 Aug 2012 05:48:19 GMT (envelope-from andrew@svn.freebsd.org) Message-Id: <201208180548.q7I5mJil078651@svn.freebsd.org> From: Andrew Turner Date: Sat, 18 Aug 2012 05:48:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239362 - in head/sys/arm: at91 conf econa lpc mv s3c2xx0 sa11x0 ti xscale xscale/i80321 xscale/i8134x xscale/ixp425 xscale/pxa X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 05:48:20 -0000 Author: andrew Date: Sat Aug 18 05:48:19 2012 New Revision: 239362 URL: http://svn.freebsd.org/changeset/base/239362 Log: Set machine correctly on ARM. This allows universe to use the correct world when building each kernel. Reviewed by: imp Added: head/sys/arm/xscale/std.xscale-be (contents, props changed) Modified: head/sys/arm/at91/std.at91 head/sys/arm/at91/std.at91sam9 head/sys/arm/at91/std.at91sam9g45 head/sys/arm/at91/std.atmel head/sys/arm/conf/DEFAULTS head/sys/arm/econa/std.econa head/sys/arm/lpc/std.lpc head/sys/arm/mv/std-pj4b.mv head/sys/arm/mv/std.mv head/sys/arm/s3c2xx0/std.s3c2410 head/sys/arm/sa11x0/std.sa11x0 head/sys/arm/ti/std.ti head/sys/arm/xscale/i80321/std.i80219 head/sys/arm/xscale/i80321/std.i80321 head/sys/arm/xscale/i8134x/std.i81342 head/sys/arm/xscale/ixp425/std.ixp425 head/sys/arm/xscale/ixp425/std.ixp435 head/sys/arm/xscale/pxa/std.pxa head/sys/arm/xscale/std.xscale Modified: head/sys/arm/at91/std.at91 ============================================================================== --- head/sys/arm/at91/std.at91 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/at91/std.at91 Sat Aug 18 05:48:19 2012 (r239362) @@ -2,6 +2,7 @@ files "../at91/files.at91" cpu CPU_ARM9 +machine arm makeoptions CONF_CFLAGS=-mcpu=arm9 options PHYSADDR=0x20000000 options NO_EVENTTIMERS Modified: head/sys/arm/at91/std.at91sam9 ============================================================================== --- head/sys/arm/at91/std.at91sam9 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/at91/std.at91sam9 Sat Aug 18 05:48:19 2012 (r239362) @@ -2,6 +2,7 @@ files "../at91/files.at91" cpu CPU_ARM9 +machine arm makeoptions CONF_CFLAGS=-mcpu=arm9 options PHYSADDR=0x20000000 options NO_EVENTTIMERS Modified: head/sys/arm/at91/std.at91sam9g45 ============================================================================== --- head/sys/arm/at91/std.at91sam9g45 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/at91/std.at91sam9g45 Sat Aug 18 05:48:19 2012 (r239362) @@ -7,6 +7,7 @@ files "../at91/files.at91" cpu CPU_ARM9 +machine arm makeoptions CONF_CFLAGS=-mcpu=arm9 options PHYSADDR=0x70000000 options NO_EVENTTIMERS Modified: head/sys/arm/at91/std.atmel ============================================================================== --- head/sys/arm/at91/std.atmel Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/at91/std.atmel Sat Aug 18 05:48:19 2012 (r239362) @@ -1,10 +1,6 @@ # $FreeBSD$ -files "../at91/files.at91" -cpu CPU_ARM9 -makeoptions CONF_CFLAGS=-mcpu=arm9 -options PHYSADDR=0x20000000 -options NO_EVENTTIMERS +include "../at91/std.at91sam9" # Supported SoCs for the at91 platform device at91rm9200 Modified: head/sys/arm/conf/DEFAULTS ============================================================================== --- head/sys/arm/conf/DEFAULTS Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/conf/DEFAULTS Sat Aug 18 05:48:19 2012 (r239362) @@ -3,8 +3,6 @@ # # $FreeBSD$ -machine arm - device mem options GEOM_PART_BSD Modified: head/sys/arm/econa/std.econa ============================================================================== --- head/sys/arm/econa/std.econa Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/econa/std.econa Sat Aug 18 05:48:19 2012 (r239362) @@ -2,6 +2,7 @@ files "../econa/files.econa" cpu CPU_FA526 +machine arm makeoptions CONF_CFLAGS=-march=armv4 options PHYSADDR=0x00000000 makeoptions KERNPHYSADDR=0x01000000 Modified: head/sys/arm/lpc/std.lpc ============================================================================== --- head/sys/arm/lpc/std.lpc Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/lpc/std.lpc Sat Aug 18 05:48:19 2012 (r239362) @@ -5,6 +5,7 @@ files "../lpc/files.lpc" cpu CPU_ARM9 +machine arm makeoptions CONF_CFLAGS="-march=armv5te" options PHYSADDR=0x80000000 options STARTUP_PAGETABLE_ADDR=0x80000000 Modified: head/sys/arm/mv/std-pj4b.mv ============================================================================== --- head/sys/arm/mv/std-pj4b.mv Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/mv/std-pj4b.mv Sat Aug 18 05:48:19 2012 (r239362) @@ -2,5 +2,6 @@ files "../mv/files.mv" cpu CPU_MV_PJ4B +machine arm armv6 options VM_MAXUSER_ADDRESS="(KERNBASE-(1024*1024*1024))" Modified: head/sys/arm/mv/std.mv ============================================================================== --- head/sys/arm/mv/std.mv Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/mv/std.mv Sat Aug 18 05:48:19 2012 (r239362) @@ -2,5 +2,6 @@ files "../mv/files.mv" cpu CPU_ARM9E +machine arm makeoptions CONF_CFLAGS="-march=armv5te" options FREEBSD_BOOT_LOADER Modified: head/sys/arm/s3c2xx0/std.s3c2410 ============================================================================== --- head/sys/arm/s3c2xx0/std.s3c2410 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/s3c2xx0/std.s3c2410 Sat Aug 18 05:48:19 2012 (r239362) @@ -2,6 +2,7 @@ files "../s3c2xx0/files.s3c2xx0" cpu CPU_ARM9 +machine arm makeoptions CONF_CFLAGS=-mcpu=arm920t options NO_EVENTTIMERS Modified: head/sys/arm/sa11x0/std.sa11x0 ============================================================================== --- head/sys/arm/sa11x0/std.sa11x0 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/sa11x0/std.sa11x0 Sat Aug 18 05:48:19 2012 (r239362) @@ -3,6 +3,7 @@ files "../sa11x0/files.sa11x0" cpu CPU_SA1100 cpu CPU_SA1110 +machine arm makeoptions KERNPHYSADDR=0xc0000000 makeoptions KERNVIRTADDR=0xc0000000 options NO_EVENTTIMERS Modified: head/sys/arm/ti/std.ti ============================================================================== --- head/sys/arm/ti/std.ti Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/ti/std.ti Sat Aug 18 05:48:19 2012 (r239362) @@ -1,5 +1,6 @@ # $FreeBSD$ cpu CPU_CORTEXA +machine arm armv6 files "../ti/files.ti" Modified: head/sys/arm/xscale/i80321/std.i80219 ============================================================================== --- head/sys/arm/xscale/i80321/std.i80219 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/xscale/i80321/std.i80219 Sat Aug 18 05:48:19 2012 (r239362) @@ -1,5 +1,5 @@ #XScale i80219 generic configuration #$FreeBSD$ files "../xscale/i80321/files.i80219" -include "../xscale/std.xscale" +include "../xscale/std.xscale-be" cpu CPU_XSCALE_80219 Modified: head/sys/arm/xscale/i80321/std.i80321 ============================================================================== --- head/sys/arm/xscale/i80321/std.i80321 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/xscale/i80321/std.i80321 Sat Aug 18 05:48:19 2012 (r239362) @@ -1,5 +1,5 @@ #XScale i80321 generic configuration #$FreeBSD$ files "../xscale/i80321/files.i80321" -include "../xscale/std.xscale" +include "../xscale/std.xscale-be" cpu CPU_XSCALE_80321 Modified: head/sys/arm/xscale/i8134x/std.i81342 ============================================================================== --- head/sys/arm/xscale/i8134x/std.i81342 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/xscale/i8134x/std.i81342 Sat Aug 18 05:48:19 2012 (r239362) @@ -1,5 +1,5 @@ #XScale i81342 generic configuration #$FreeBSD$ files "../xscale/i8134x/files.i81342" -include "../xscale/std.xscale" +include "../xscale/std.xscale-be" cpu CPU_XSCALE_81342 Modified: head/sys/arm/xscale/ixp425/std.ixp425 ============================================================================== --- head/sys/arm/xscale/ixp425/std.ixp425 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/xscale/ixp425/std.ixp425 Sat Aug 18 05:48:19 2012 (r239362) @@ -1,5 +1,5 @@ #XScale IXP425 generic configuration #$FreeBSD$ files "../xscale/ixp425/files.ixp425" -include "../xscale/std.xscale" +include "../xscale/std.xscale-be" cpu CPU_XSCALE_IXP425 Modified: head/sys/arm/xscale/ixp425/std.ixp435 ============================================================================== --- head/sys/arm/xscale/ixp425/std.ixp435 Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/xscale/ixp425/std.ixp435 Sat Aug 18 05:48:19 2012 (r239362) @@ -2,6 +2,6 @@ #$FreeBSD$ files "../xscale/ixp425/files.ixp425" -include "../xscale/std.xscale" +include "../xscale/std.xscale-be" cpu CPU_XSCALE_IXP435 cpu CPU_XSCALE_IXP425 Modified: head/sys/arm/xscale/pxa/std.pxa ============================================================================== --- head/sys/arm/xscale/pxa/std.pxa Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/xscale/pxa/std.pxa Sat Aug 18 05:48:19 2012 (r239362) @@ -7,3 +7,4 @@ makeoptions KERNVIRTADDR=0xc0200000 makeoptions CONF_CFLAGS=-mcpu=xscale options XSCALE_CACHE_READ_WRITE_ALLOCATE options ARM_USE_SMALL_ALLOC +machine arm Modified: head/sys/arm/xscale/std.xscale ============================================================================== --- head/sys/arm/xscale/std.xscale Fri Aug 17 20:15:01 2012 (r239361) +++ head/sys/arm/xscale/std.xscale Sat Aug 18 05:48:19 2012 (r239362) @@ -1,4 +1,3 @@ # $FreeBSD$ -# machine arm armeb options ARM_CACHE_LOCK_ENABLE options NO_EVENTTIMERS Added: head/sys/arm/xscale/std.xscale-be ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/xscale/std.xscale-be Sat Aug 18 05:48:19 2012 (r239362) @@ -0,0 +1,5 @@ +#Big-Endian XScale generic configuration +#$FreeBSD$ + +include "../xscale/std.xscale" +machine arm armeb From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 05:52:18 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id F32A7106566C; Sat, 18 Aug 2012 05:52:17 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C5C218FC0A; Sat, 18 Aug 2012 05:52:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7I5qHP1079095; Sat, 18 Aug 2012 05:52:17 GMT (envelope-from andrew@svn.freebsd.org) Received: (from andrew@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7I5qHc0079093; Sat, 18 Aug 2012 05:52:17 GMT (envelope-from andrew@svn.freebsd.org) Message-Id: <201208180552.q7I5qHc0079093@svn.freebsd.org> From: Andrew Turner Date: Sat, 18 Aug 2012 05:52:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239363 - head/sys/arm/conf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 05:52:18 -0000 Author: andrew Date: Sat Aug 18 05:52:17 2012 New Revision: 239363 URL: http://svn.freebsd.org/changeset/base/239363 Log: Remove machine from the LN2410SBC config, it is set by std.s3c2410 Modified: head/sys/arm/conf/LN2410SBC Modified: head/sys/arm/conf/LN2410SBC ============================================================================== --- head/sys/arm/conf/LN2410SBC Sat Aug 18 05:48:19 2012 (r239362) +++ head/sys/arm/conf/LN2410SBC Sat Aug 18 05:52:17 2012 (r239363) @@ -17,7 +17,6 @@ # # $FreeBSD$ -machine arm ident LN2410SBC include "../s3c2xx0/std.ln2410sbc" From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 09:26:51 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E671F106566B; Sat, 18 Aug 2012 09:26:51 +0000 (UTC) (envelope-from zeising@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D25D68FC08; Sat, 18 Aug 2012 09:26:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7I9Qpkw001698; Sat, 18 Aug 2012 09:26:51 GMT (envelope-from zeising@svn.freebsd.org) Received: (from zeising@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7I9Qptp001696; Sat, 18 Aug 2012 09:26:51 GMT (envelope-from zeising@svn.freebsd.org) Message-Id: <201208180926.q7I9Qptp001696@svn.freebsd.org> From: Niclas Zeising Date: Sat, 18 Aug 2012 09:26:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239364 - head/libexec/revnetgroup X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 09:26:52 -0000 Author: zeising (ports committer) Date: Sat Aug 18 09:26:51 2012 New Revision: 239364 URL: http://svn.freebsd.org/changeset/base/239364 Log: Fix two instances of the file names generated by revnetgroup(8). Approved by: joel (mentor) Modified: head/libexec/revnetgroup/revnetgroup.8 Modified: head/libexec/revnetgroup/revnetgroup.8 ============================================================================== --- head/libexec/revnetgroup/revnetgroup.8 Sat Aug 18 05:52:17 2012 (r239363) +++ head/libexec/revnetgroup/revnetgroup.8 Sat Aug 18 09:26:51 2012 (r239364) @@ -55,7 +55,7 @@ with a particular member. This information is used to generate the .Pa netgroup.byuser and -.Pa netgroup.byhosts +.Pa netgroup.byhost .Tn NIS maps. These reverse netgroup maps are used to help speed up @@ -72,7 +72,7 @@ netgroup is considered the and the member names are the .Em data . By contrast, the reverse -.Pa netgroup.byusers +.Pa netgroup.byuser database lists each unique member as the key and the netgroups to which the members belong become the data. From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 09:32:45 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 56FC9106566C; Sat, 18 Aug 2012 09:32:45 +0000 (UTC) (envelope-from rrs@lakerest.net) Received: from lakerest.net (lakerest.net [70.155.160.98]) by mx1.freebsd.org (Postfix) with ESMTP id D1C8E8FC0A; Sat, 18 Aug 2012 09:32:44 +0000 (UTC) Received: from [10.1.1.141] (bsd3.lakerest.net [70.155.160.101]) (authenticated bits=0) by lakerest.net (8.14.4/8.14.3) with ESMTP id q7I9VNKh010398 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Sat, 18 Aug 2012 05:31:23 -0400 (EDT) (envelope-from rrs@lakerest.net) Mime-Version: 1.0 (Apple Message framework v1278) Content-Type: text/plain; charset=windows-1252 From: Randall Stewart In-Reply-To: <201208170826.25123.jhb@freebsd.org> Date: Sat, 18 Aug 2012 05:31:24 -0400 Content-Transfer-Encoding: quoted-printable Message-Id: References: <201208170551.q7H5pkd1025308@svn.freebsd.org> <201208170826.25123.jhb@freebsd.org> To: John Baldwin X-Mailer: Apple Mail (2.1278) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239353 - head/sys/netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 09:32:45 -0000 On Aug 17, 2012, at 8:26 AM, John Baldwin wrote: > On Friday, August 17, 2012 1:51:46 am Randall Stewart wrote: >> Author: rrs >> Date: Fri Aug 17 05:51:46 2012 >> New Revision: 239353 >> URL: http://svn.freebsd.org/changeset/base/239353 >>=20 >> Log: >> Ok jhb, lets move the ifa_free() down to the bottom to >> assure that *all* tables and such are removed before >> we start to free. This won't protect the Hash in ip_input.c >> but in theory should protect any other uses that *do* use locks. >=20 > Eh, this is just a nop unless there is a reference counting bug. Only = the=20 > last reference would free the memory if the reference count is = correct, so=20 > this is just adding obfuscation by moving the ifa_free() away from the=20= > associated TAILQ_REMOVE(). >=20 Well there is definitely a reference counting but in here somewhere = then. And as far as "obfuscation" of the code, it was not obvious to me when first = looking at the code and it should have been since I looked at this earlier. So = without a more detailed comment I think its obscure anyway ;-) I will get SQA another INVARIANT load and see if they can recreate it = for me. The load they had when they first produced this was *supposed* to be = INVARIANT but after a bit of research on my part I find they were running the non-invariant, = which explains why things locked up instead of the assert triggering.. sigh. Note that in the main FreeBSD sources however, the fact that ip_input.c = does *not* lock when it looks at the hash table these lines are removing from here means = there is still a potential for a crash. I have a fix for this that does not require the lock, when = I get a moment I will send it your way=85 you have seen part of it ;-) R > --=20 > John Baldwin >=20 ------------------------------ Randall Stewart 803-317-4952 (cell) From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 11:25:07 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D12631065672; Sat, 18 Aug 2012 11:25:07 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BBB0C8FC14; Sat, 18 Aug 2012 11:25:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IBP7Yt017421; Sat, 18 Aug 2012 11:25:07 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IBP78p017416; Sat, 18 Aug 2012 11:25:07 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201208181125.q7IBP78p017416@svn.freebsd.org> From: Hiroki Sato Date: Sat, 18 Aug 2012 11:25:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239366 - head/sys/dev/ofw X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 11:25:08 -0000 Author: hrs Date: Sat Aug 18 11:25:07 2012 New Revision: 239366 URL: http://svn.freebsd.org/changeset/base/239366 Log: - Add OF_hasprop() and ofw_bus_has_prop(). These can be used to check existence of the property. - Fix ofw_bus_is_compatible{,_strict}() to prevent substring match in the compatible string. Reviewed by: raj Modified: head/sys/dev/ofw/ofw_bus_subr.c head/sys/dev/ofw/ofw_bus_subr.h head/sys/dev/ofw/openfirm.c head/sys/dev/ofw/openfirm.h Modified: head/sys/dev/ofw/ofw_bus_subr.c ============================================================================== --- head/sys/dev/ofw/ofw_bus_subr.c Sat Aug 18 11:15:30 2012 (r239365) +++ head/sys/dev/ofw/ofw_bus_subr.c Sat Aug 18 11:25:07 2012 (r239366) @@ -167,7 +167,8 @@ ofw_bus_is_compatible(device_t dev, cons onelen = strlen(onecompat); while (len > 0) { - if (strncasecmp(compat, onecompat, onelen) == 0) + if (strlen(compat) == onelen && + strncasecmp(compat, onecompat, onelen) == 0) /* Found it. */ return (1); @@ -183,16 +184,30 @@ int ofw_bus_is_compatible_strict(device_t dev, const char *compatible) { const char *compat; + size_t len; if ((compat = ofw_bus_get_compat(dev)) == NULL) return (0); - if (strncasecmp(compat, compatible, strlen(compatible)) == 0) + len = strlen(compatible); + if (strlen(compat) == len && + strncasecmp(compat, compatible, len) == 0) return (1); return (0); } +int +ofw_bus_has_prop(device_t dev, const char *propname) +{ + phandle_t node; + + if ((node = ofw_bus_get_node(dev)) == -1) + return (0); + + return (OF_hasprop(node, propname)); +} + #ifndef FDT void ofw_bus_setup_iinfo(phandle_t node, struct ofw_bus_iinfo *ii, int intrsz) Modified: head/sys/dev/ofw/ofw_bus_subr.h ============================================================================== --- head/sys/dev/ofw/ofw_bus_subr.h Sat Aug 18 11:15:30 2012 (r239365) +++ head/sys/dev/ofw/ofw_bus_subr.h Sat Aug 18 11:25:07 2012 (r239366) @@ -74,4 +74,7 @@ void ofw_bus_find_iparent(phandle_t); int ofw_bus_is_compatible(device_t, const char *); int ofw_bus_is_compatible_strict(device_t, const char *); +/* Helper routine for checking existence of a prop */ +int ofw_bus_has_prop(device_t, const char *); + #endif /* !_DEV_OFW_OFW_BUS_SUBR_H_ */ Modified: head/sys/dev/ofw/openfirm.c ============================================================================== --- head/sys/dev/ofw/openfirm.c Sat Aug 18 11:15:30 2012 (r239365) +++ head/sys/dev/ofw/openfirm.c Sat Aug 18 11:25:07 2012 (r239366) @@ -261,6 +261,14 @@ OF_getproplen(phandle_t package, const c return (OFW_GETPROPLEN(ofw_obj, package, propname)); } +/* Check existence of a property of a package. */ +int +OF_hasprop(phandle_t package, const char *propname) +{ + + return (OF_getproplen(package, propname) >= 0 ? 1 : 0); +} + /* Get the value of a property of a package. */ ssize_t OF_getprop(phandle_t package, const char *propname, void *buf, size_t buflen) Modified: head/sys/dev/ofw/openfirm.h ============================================================================== --- head/sys/dev/ofw/openfirm.h Sat Aug 18 11:15:30 2012 (r239365) +++ head/sys/dev/ofw/openfirm.h Sat Aug 18 11:25:07 2012 (r239366) @@ -105,6 +105,7 @@ phandle_t OF_parent(phandle_t node); ssize_t OF_getproplen(phandle_t node, const char *propname); ssize_t OF_getprop(phandle_t node, const char *propname, void *buf, size_t len); +int OF_hasprop(phandle_t node, const char *propname); ssize_t OF_searchprop(phandle_t node, const char *propname, void *buf, size_t len); ssize_t OF_getprop_alloc(phandle_t node, const char *propname, From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 11:33:22 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 41DE81065673; Sat, 18 Aug 2012 11:33:22 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2DA4F8FC14; Sat, 18 Aug 2012 11:33:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IBXMhu018285; Sat, 18 Aug 2012 11:33:22 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IBXLfw018283; Sat, 18 Aug 2012 11:33:21 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201208181133.q7IBXLfw018283@svn.freebsd.org> From: Hiroki Sato Date: Sat, 18 Aug 2012 11:33:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239367 - head/sys/arm/mv X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 11:33:22 -0000 Author: hrs Date: Sat Aug 18 11:33:21 2012 New Revision: 239367 URL: http://svn.freebsd.org/changeset/base/239367 Log: Fix a bug that could fail to initialize GPIO pins specified in "gpios" because "gpio-controller" property at the controller node was always ignored. Modified: head/sys/arm/mv/gpio.c Modified: head/sys/arm/mv/gpio.c ============================================================================== --- head/sys/arm/mv/gpio.c Sat Aug 18 11:25:07 2012 (r239366) +++ head/sys/arm/mv/gpio.c Sat Aug 18 11:33:21 2012 (r239367) @@ -547,7 +547,7 @@ mv_handle_gpios_prop(phandle_t ctrl, pce struct mv_gpio_softc sc; pincnt = 0; - if (OF_getproplen(ctrl, "gpio-controller") <= 0) + if (!OF_hasprop(ctrl, "gpio-controller")) /* Node is not a GPIO controller. */ return (ENXIO); From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 11:40:56 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 896A61065672; Sat, 18 Aug 2012 11:40:56 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 75BE98FC0A; Sat, 18 Aug 2012 11:40:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IBeu9T019115; Sat, 18 Aug 2012 11:40:56 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IBeuGR019113; Sat, 18 Aug 2012 11:40:56 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201208181140.q7IBeuGR019113@svn.freebsd.org> From: Hiroki Sato Date: Sat, 18 Aug 2012 11:40:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239368 - head/sys/arm/mv X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 11:40:56 -0000 Author: hrs Date: Sat Aug 18 11:40:55 2012 New Revision: 239368 URL: http://svn.freebsd.org/changeset/base/239368 Log: - MV_DEV_88F6282 has 256KB 4-way L2 cache. - Sort IDs in win_cpu_can_remap() and remove MV_DEV_MV78100 because it is included in MV_DEV_DISCOVERY. - Add MV_DEV_MV78XXX to xor_max_eng(). Modified: head/sys/arm/mv/common.c Modified: head/sys/arm/mv/common.c ============================================================================== --- head/sys/arm/mv/common.c Sat Aug 18 11:33:21 2012 (r239367) +++ head/sys/arm/mv/common.c Sat Aug 18 11:40:55 2012 (r239368) @@ -428,6 +428,7 @@ soc_identify(void) switch (d) { case MV_DEV_88F6281: + case MV_DEV_88F6282: mode = read_cpu_ctrl(CPU_L2_CONFIG) & CPU_L2_CONFIG_MODE; printf(" 256KB 4-way set-associative %s unified L2 cache\n", mode ? "write-through" : "write-back"); @@ -669,10 +670,9 @@ win_cpu_can_remap(int i) if ((dev == MV_DEV_88F5182 && i < 2) || (dev == MV_DEV_88F5281 && i < 4) || (dev == MV_DEV_88F6281 && i < 4) || + (dev == MV_DEV_88F6282 && i < 4) || (dev == MV_DEV_88RC8180 && i < 2) || (dev == MV_DEV_88F6781 && i < 4) || - (dev == MV_DEV_88F6282 && i < 4) || - (dev == MV_DEV_MV78100 && i < 8) || (dev == MV_DEV_MV78100_Z0 && i < 8) || ((dev & MV_DEV_FAMILY_MASK) == MV_DEV_DISCOVERY && i < 8)) return (1); @@ -1525,13 +1525,21 @@ xor_max_eng(void) uint32_t dev, rev; soc_id(&dev, &rev); - if (dev == MV_DEV_88F6281 || - dev == MV_DEV_88F6282) + switch (dev) { + case MV_DEV_88F6281: + case MV_DEV_88F6282: + case MV_DEV_MV78130: + case MV_DEV_MV78160: + case MV_DEV_MV78230: + case MV_DEV_MV78260: + case MV_DEV_MV78460: return (2); - else if ((dev == MV_DEV_MV78100) || (dev == MV_DEV_MV78100_Z0)) + case MV_DEV_MV78100: + case MV_DEV_MV78100_Z0: return (1); - else + default: return (0); + } } static void From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 11:59:21 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 34D3E106564A; Sat, 18 Aug 2012 11:59:21 +0000 (UTC) (envelope-from utisoft@gmail.com) Received: from mail-bk0-f54.google.com (mail-bk0-f54.google.com [209.85.214.54]) by mx1.freebsd.org (Postfix) with ESMTP id 0F0EB8FC0A; Sat, 18 Aug 2012 11:59:19 +0000 (UTC) Received: by bkcje9 with SMTP id je9so1808414bkc.13 for ; Sat, 18 Aug 2012 04:59:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type; bh=moCpTWSunsNQWJewOOipNZPdhNNKVNRDbSYDvU3MGg0=; b=quW7G588WRa2sjbVGUmCqyrhDt2s74w9e4ev9ycNcL3ClP34UNL7+U7j+/TVjgqhFw rxQjFWXkDIO9Kz95uWhA4IMH+X6NgR3myNBOMzmxLUUNOBqKwhdLvnQ0NVuQ8+AeHsRH 6yIoxJEpb2W27VPzvdSTcsODdzyGJux5O24WmuudThsZiG1NxkWEbfBkTpPOa6IQxtBD aAj4RrI+noSFucw4QrT3NdEqnY57hSJrtyxIzyDA5T3f1mYl5hO23EEU+sprQD3IpNvK GNAo5RM1jZGk2ngej/p9FV+lpFTeFmDhdRznowx7ArE/i3Ggalzyk8GvSTF15CfDWNrE vX5A== Received: by 10.204.145.82 with SMTP id c18mr2886381bkv.133.1345291158568; Sat, 18 Aug 2012 04:59:18 -0700 (PDT) MIME-Version: 1.0 Sender: utisoft@gmail.com Received: by 10.204.10.141 with HTTP; Sat, 18 Aug 2012 04:58:48 -0700 (PDT) In-Reply-To: <201208180926.q7I9Qptp001696@svn.freebsd.org> References: <201208180926.q7I9Qptp001696@svn.freebsd.org> From: Chris Rees Date: Sat, 18 Aug 2012 12:58:48 +0100 X-Google-Sender-Auth: K2PCsNBCUCv_8Kz8scm1XZGxb_0 Message-ID: To: Niclas Zeising , cvsadm@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239364 - head/libexec/revnetgroup X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 11:59:21 -0000 On 18 August 2012 10:26, Niclas Zeising wrote: > Author: zeising (ports committer) There's something wrong here-- shouldn't it say (ports, doc committer)? Looks like it's not checking doc/svnadmin/conf/access... Chris From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 12:01:38 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BEB13106567E; Sat, 18 Aug 2012 12:01:38 +0000 (UTC) (envelope-from utisoft@gmail.com) Received: from mail-bk0-f54.google.com (mail-bk0-f54.google.com [209.85.214.54]) by mx1.freebsd.org (Postfix) with ESMTP id 7CE7D8FC1B; Sat, 18 Aug 2012 12:01:36 +0000 (UTC) Received: by bkcje9 with SMTP id je9so1808947bkc.13 for ; Sat, 18 Aug 2012 05:01:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type; bh=Y+07UmWlL88aQC4cJPQxdXX63HelGKJPccJ3xHpwUGA=; b=0uGUtxFYAX42mv3ovSDvwsvhiFmPekRoccYd2OCjeclHfcUwgB/fJxHhhoM5RiNhCI /KWQvRHtQwaHhGM1EpC49Fn6/z06W3Vp/SpPchKbh5Bio9ZlOByPaV2yxKVsbdhRC6AO PQtk686cGU88cN7CiXtomjiqRXM2l/IYRF/Nt2XhArWELGKR5fcrFRXm6dlmlTs+tp/r ZINsVAonKoEy9JIMfEos+3DVBUEfBUwgp6GkxWz7RBcuFZDWk8VZhGw89k7Z0ieoo4oP SHbpORAV2x9YVBWTNlAtI2MXfuaJG2BSpcFBDDeVPY6qqhWZ5mpErkv3U8MPk/ySlZ02 dTJQ== Received: by 10.204.129.14 with SMTP id m14mr2914900bks.7.1345291296157; Sat, 18 Aug 2012 05:01:36 -0700 (PDT) MIME-Version: 1.0 Sender: utisoft@gmail.com Received: by 10.204.10.141 with HTTP; Sat, 18 Aug 2012 05:01:05 -0700 (PDT) In-Reply-To: References: <201208180926.q7I9Qptp001696@svn.freebsd.org> From: Chris Rees Date: Sat, 18 Aug 2012 13:01:05 +0100 X-Google-Sender-Auth: 7a_UZWwNR22u6V1jO2Qab8LxGgA Message-ID: To: Niclas Zeising , cvsadm@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r239364 - head/libexec/revnetgroup X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 12:01:38 -0000 On 18 August 2012 12:58, Chris Rees wrote: > On 18 August 2012 10:26, Niclas Zeising wrote: >> Author: zeising (ports committer) > > There's something wrong here-- shouldn't it say (ports, doc > committer)? Looks like it's not checking doc/svnadmin/conf/access... (replying to own message) For example, Glen Barber appears correctly (and demonstrates that it should be doc,ports committer): http://lists.freebsd.org/pipermail/svn-src-head/2012-August/039471.html Chris From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 12:08:05 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0F90D106564A; Sat, 18 Aug 2012 12:08:05 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EFD838FC12; Sat, 18 Aug 2012 12:08:04 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IC84N7021996; Sat, 18 Aug 2012 12:08:04 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IC84CN021994; Sat, 18 Aug 2012 12:08:04 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201208181208.q7IC84CN021994@svn.freebsd.org> From: Hiroki Sato Date: Sat, 18 Aug 2012 12:08:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239369 - head/sys/arm/arm X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 12:08:05 -0000 Author: hrs Date: Sat Aug 18 12:08:04 2012 New Revision: 239369 URL: http://svn.freebsd.org/changeset/base/239369 Log: Fix build when DEBUG is defined. Modified: head/sys/arm/arm/pmap-v6.c Modified: head/sys/arm/arm/pmap-v6.c ============================================================================== --- head/sys/arm/arm/pmap-v6.c Sat Aug 18 11:40:55 2012 (r239368) +++ head/sys/arm/arm/pmap-v6.c Sat Aug 18 12:08:04 2012 (r239369) @@ -174,6 +174,10 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef DEBUG +extern int last_fault_code; +#endif + #ifdef PMAP_DEBUG #define PDEBUG(_lev_,_stat_) \ if (pmap_debug_level >= (_lev_)) \ @@ -1352,8 +1356,7 @@ pmap_fault_fixup(pmap_t pm, vm_offset_t * the TLB. */ if (rv == 0 && pm->pm_l1->l1_domain_use_count == 1) { - extern int last_fault_code; - printf("fixup: pm %p, va 0x%lx, ftype %d - nothing to do!\n", + printf("fixup: pm %p, va 0x%08x, ftype %d - nothing to do!\n", pm, va, ftype); printf("fixup: l2 %p, l2b %p, ptep %p, pl1pd %p\n", l2, l2b, ptep, pl1pd); From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 12:20:51 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E3113106566C; Sat, 18 Aug 2012 12:20:51 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CE68B8FC14; Sat, 18 Aug 2012 12:20:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7ICKpvV023242; Sat, 18 Aug 2012 12:20:51 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7ICKpQU023239; Sat, 18 Aug 2012 12:20:51 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201208181220.q7ICKpQU023239@svn.freebsd.org> From: Hiroki Sato Date: Sat, 18 Aug 2012 12:20:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239370 - head/sys/arm/mv X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 12:20:52 -0000 Author: hrs Date: Sat Aug 18 12:20:51 2012 New Revision: 239370 URL: http://svn.freebsd.org/changeset/base/239370 Log: Sort IDs. Modified: head/sys/arm/mv/mvreg.h Modified: head/sys/arm/mv/mvreg.h ============================================================================== --- head/sys/arm/mv/mvreg.h Sat Aug 18 12:08:04 2012 (r239369) +++ head/sys/arm/mv/mvreg.h Sat Aug 18 12:20:51 2012 (r239370) @@ -391,8 +391,8 @@ #define MV_DEV_88F5182 0x5182 #define MV_DEV_88F5281 0x5281 #define MV_DEV_88F6281 0x6281 -#define MV_DEV_88F6781 0x6781 #define MV_DEV_88F6282 0x6282 +#define MV_DEV_88F6781 0x6781 #define MV_DEV_MV78100_Z0 0x6381 #define MV_DEV_MV78100 0x7810 #define MV_DEV_MV78130 0x7813 From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 12:37:08 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 96418106566B; Sat, 18 Aug 2012 12:37:08 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 75F298FC14; Sat, 18 Aug 2012 12:37:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7ICb8sF025098; Sat, 18 Aug 2012 12:37:08 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7ICb8rs025095; Sat, 18 Aug 2012 12:37:08 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201208181237.q7ICb8rs025095@svn.freebsd.org> From: Hiroki Sato Date: Sat, 18 Aug 2012 12:37:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239371 - head/sys/arm/mv X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 12:37:08 -0000 Author: hrs Date: Sat Aug 18 12:37:07 2012 New Revision: 239371 URL: http://svn.freebsd.org/changeset/base/239371 Log: Add mvts(4) driver for internal thermal sensor found on 88F6282 and 88F6283. The temperature value will be exported via sysctl like this: dev.mvts.0.temperature: 52.1C Added: head/sys/arm/mv/mv_ts.c (contents, props changed) Modified: head/sys/arm/mv/files.mv Modified: head/sys/arm/mv/files.mv ============================================================================== --- head/sys/arm/mv/files.mv Sat Aug 18 12:20:51 2012 (r239370) +++ head/sys/arm/mv/files.mv Sat Aug 18 12:37:07 2012 (r239371) @@ -29,6 +29,7 @@ arm/mv/mv_localbus.c standard arm/mv/mv_machdep.c standard arm/mv/mv_pci.c optional pci arm/mv/mv_sata.c optional ata | atamvsata +arm/mv/mv_ts.c standard arm/mv/timer.c standard arm/mv/twsi.c optional iicbus Added: head/sys/arm/mv/mv_ts.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/mv/mv_ts.c Sat Aug 18 12:37:07 2012 (r239371) @@ -0,0 +1,178 @@ +/*- + * Copyright (c) 2012 Hiroki Sato + * All rights reserved. + * + * 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; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Driver for on-die thermal sensor in 88F6282 and 88F6283. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +static struct resource_spec mvts_res[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { -1, 0 } +}; + +struct mvts_softc { + device_t sc_dev; + struct resource *sc_res[sizeof(mvts_res)]; +}; + +static int +ts_probe(device_t dev) +{ + uint32_t d, r; + + if (!ofw_bus_is_compatible(dev, "mrvl,ts")) + return (ENXIO); + soc_id(&d, &r); + switch (d) { + case MV_DEV_88F6282: + break; + default: + device_printf(dev, "unsupported SoC (ID: 0x%08X)!\n", d); + return (ENXIO); + } + device_set_desc(dev, "Marvell Thermal Sensor"); + + return (0); +} + +#define MV_TEMP_VALID_BIT (1 << 9) +#define MV_TEMP_SENS_OFFS 10 +#define MV_TEMP_SENS_MASK 0x1ff +#define MV_TEMP_SENS_READ_MAX 16 +#define TZ_ZEROC 2732 +#define MV_TEMP_CONVERT(x) ((((322 - x) * 100000) / 13625) + TZ_ZEROC) + +/* + * MSB LSB + * 0000 0000 0000 0000 0000 0000 0000 0000 + * ^- valid bit + * |---------| + * ^--- temperature (9 bits) + */ + +static int +ts_sysctl_handler(SYSCTL_HANDLER_ARGS) +{ + struct mvts_softc *sc; + device_t dev; + uint32_t ret, ret0; + u_int val; + int i; + + dev = (device_t)arg1; + sc = device_get_softc(dev); + val = TZ_ZEROC; + + ret = bus_read_4(sc->sc_res[0], 0); + if ((ret & MV_TEMP_VALID_BIT) == 0) { + device_printf(dev, "temperature sensor is broken.\n"); + goto ts_sysctl_handle_int; + } + ret0 = 0; + for (i = 0; i < MV_TEMP_SENS_READ_MAX; i++) { + ret = bus_read_4(sc->sc_res[0], 0); + ret = (ret >> MV_TEMP_SENS_OFFS) & MV_TEMP_SENS_MASK; + + /* + * Successive reads should returns the same value except + * for the LSB when the sensor is normal. + */ + if (((ret0 ^ ret) & 0x1fe) == 0) + break; + else + ret0 = ret; + } + if (i == MV_TEMP_SENS_READ_MAX) { + device_printf(dev, "temperature sensor is unstable.\n"); + goto ts_sysctl_handle_int; + } + val = (u_int)MV_TEMP_CONVERT(ret); + +ts_sysctl_handle_int: + return (sysctl_handle_int(oidp, &val, 0, req)); +} + +static int +ts_attach(device_t dev) +{ + struct mvts_softc *sc; + struct sysctl_ctx_list *ctx; + int error; + + sc = device_get_softc(dev); + sc->sc_dev = dev; + error = bus_alloc_resources(dev, mvts_res, sc->sc_res); + if (error) { + device_printf(dev, "could not allocate resources\n"); + return (ENXIO); + } + ctx = device_get_sysctl_ctx(dev); + SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), + OID_AUTO, "temperature", CTLTYPE_INT | CTLFLAG_RD, dev, + 0, ts_sysctl_handler, "IK", "Current Temperature"); + + return (0); +} + +static int +ts_detach(device_t dev) +{ + + return (0); +} + +static device_method_t ts_methods[] = { + DEVMETHOD(device_probe, ts_probe), + DEVMETHOD(device_attach, ts_attach), + DEVMETHOD(device_detach, ts_detach), + {0, 0}, +}; + +static driver_t ts_driver = { + "mvts", + ts_methods, + sizeof(struct mvts_softc), +}; + +static devclass_t ts_devclass; +DRIVER_MODULE(mvts, simplebus, ts_driver, ts_devclass, 0, 0); +MODULE_VERSION(mvts, 1); From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 16:13:17 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8CCDE106564A; Sat, 18 Aug 2012 16:13:17 +0000 (UTC) (envelope-from kevlo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 783E58FC0A; Sat, 18 Aug 2012 16:13:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IGDHe8049185; Sat, 18 Aug 2012 16:13:17 GMT (envelope-from kevlo@svn.freebsd.org) Received: (from kevlo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IGDHWo049183; Sat, 18 Aug 2012 16:13:17 GMT (envelope-from kevlo@svn.freebsd.org) Message-Id: <201208181613.q7IGDHWo049183@svn.freebsd.org> From: Kevin Lo Date: Sat, 18 Aug 2012 16:13:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239372 - head/sys/fs/ext2fs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 16:13:17 -0000 Author: kevlo Date: Sat Aug 18 16:13:16 2012 New Revision: 239372 URL: http://svn.freebsd.org/changeset/base/239372 Log: Fix typo Modified: head/sys/fs/ext2fs/ext2_bmap.c Modified: head/sys/fs/ext2fs/ext2_bmap.c ============================================================================== --- head/sys/fs/ext2fs/ext2_bmap.c Sat Aug 18 12:37:07 2012 (r239371) +++ head/sys/fs/ext2fs/ext2_bmap.c Sat Aug 18 16:13:16 2012 (r239372) @@ -187,7 +187,7 @@ ext2_bmaparray(vp, bn, bnp, runp, runb) if ((bp->b_flags & B_CACHE) == 0) { #ifdef DIAGNOSTIC if (!daddr) - panic("ufs_bmaparray: indirect block not in cache"); + panic("ext2_bmaparray: indirect block not in cache"); #endif bp->b_blkno = blkptrtodb(ump, daddr); bp->b_iocmd = BIO_READ; From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 16:14:50 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D4FC4106566C; Sat, 18 Aug 2012 16:14:50 +0000 (UTC) (envelope-from kevlo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C125A8FC14; Sat, 18 Aug 2012 16:14:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IGEoPn049369; Sat, 18 Aug 2012 16:14:50 GMT (envelope-from kevlo@svn.freebsd.org) Received: (from kevlo@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IGEoDi049367; Sat, 18 Aug 2012 16:14:50 GMT (envelope-from kevlo@svn.freebsd.org) Message-Id: <201208181614.q7IGEoDi049367@svn.freebsd.org> From: Kevin Lo Date: Sat, 18 Aug 2012 16:14:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239373 - head/usr.bin/rpcinfo X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 16:14:50 -0000 Author: kevlo Date: Sat Aug 18 16:14:50 2012 New Revision: 239373 URL: http://svn.freebsd.org/changeset/base/239373 Log: Cleanup use of 'host' when running 'rpcinfo -p'. Obtained from: NetBSD Modified: head/usr.bin/rpcinfo/rpcinfo.c Modified: head/usr.bin/rpcinfo/rpcinfo.c ============================================================================== --- head/usr.bin/rpcinfo/rpcinfo.c Sat Aug 18 16:13:16 2012 (r239372) +++ head/usr.bin/rpcinfo/rpcinfo.c Sat Aug 18 16:14:50 2012 (r239373) @@ -476,7 +476,7 @@ pmapdump(int argc, char **argv) struct rpcent *rpc; enum clnt_stat clnt_st; struct rpc_err err; - char *host; + char *host = NULL; if (argc > 1) usage(); @@ -513,10 +513,16 @@ pmapdump(int argc, char **argv) if ((clnt_st == RPC_PROGVERSMISMATCH) || (clnt_st == RPC_PROGUNAVAIL)) { CLNT_GETERR(client, &err); - if (err.re_vers.low > PMAPVERS) - warnx( - "%s does not support portmapper. Try rpcinfo %s instead", - host, host); + if (err.re_vers.low > PMAPVERS) { + if (host) + warnx("%s does not support portmapper." + "Try rpcinfo %s instead", host, + host); + else + warnx("local host does not support " + "portmapper. Try 'rpcinfo' " + "instead"); + } exit(1); } clnt_perror(client, "rpcinfo: can't contact portmapper"); From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 18:17:11 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3D7071065670; Sat, 18 Aug 2012 18:17:11 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2982B8FC08; Sat, 18 Aug 2012 18:17:11 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IIHBpn062167; Sat, 18 Aug 2012 18:17:11 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IIHAxj062165; Sat, 18 Aug 2012 18:17:10 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208181817.q7IIHAxj062165@svn.freebsd.org> From: Konstantin Belousov Date: Sat, 18 Aug 2012 18:17:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239374 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 18:17:11 -0000 Author: kib Date: Sat Aug 18 18:17:10 2012 New Revision: 239374 URL: http://svn.freebsd.org/changeset/base/239374 Log: Deliver SIGSYS to the guilty thread, not to the process. MFC after: 1 week Modified: head/sys/kern/kern_sig.c Modified: head/sys/kern/kern_sig.c ============================================================================== --- head/sys/kern/kern_sig.c Sat Aug 18 16:14:50 2012 (r239373) +++ head/sys/kern/kern_sig.c Sat Aug 18 18:17:10 2012 (r239374) @@ -3314,7 +3314,7 @@ nosys(td, args) struct proc *p = td->td_proc; PROC_LOCK(p); - kern_psignal(p, SIGSYS); + tdsignal(td, SIGSYS); PROC_UNLOCK(p); return (ENOSYS); } From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 18:26:26 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0CF3C106564A; Sat, 18 Aug 2012 18:26:26 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EA06D8FC08; Sat, 18 Aug 2012 18:26:25 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IIQPtg063208; Sat, 18 Aug 2012 18:26:25 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IIQPWE063200; Sat, 18 Aug 2012 18:26:25 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201208181826.q7IIQPWE063200@svn.freebsd.org> From: Konstantin Belousov Date: Sat, 18 Aug 2012 18:26:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239375 - in head/sys: dev/drm2 dev/drm2/i915 modules/drm2/drm2 modules/drm2/i915kms X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 18:26:26 -0000 Author: kib Date: Sat Aug 18 18:26:25 2012 New Revision: 239375 URL: http://svn.freebsd.org/changeset/base/239375 Log: Add drm and i915 ioctl translations for 32 bit process on 64 bit host. Submitted by: meowthink@gmail.com MFC after: 2 weeks Added: head/sys/dev/drm2/drm_ioc32.c (contents, props changed) head/sys/dev/drm2/i915/i915_ioc32.c (contents, props changed) Modified: head/sys/dev/drm2/drmP.h head/sys/dev/drm2/drm_drv.c head/sys/dev/drm2/i915/i915_dma.c head/sys/dev/drm2/i915/i915_drv.h head/sys/modules/drm2/drm2/Makefile head/sys/modules/drm2/i915kms/Makefile Modified: head/sys/dev/drm2/drmP.h ============================================================================== --- head/sys/dev/drm2/drmP.h Sat Aug 18 18:17:10 2012 (r239374) +++ head/sys/dev/drm2/drmP.h Sat Aug 18 18:26:25 2012 (r239375) @@ -105,6 +105,7 @@ struct drm_file; #include #include +#include "opt_compat.h" #include "opt_drm.h" #ifdef DRM_DEBUG #undef DRM_DEBUG @@ -760,6 +761,10 @@ struct drm_driver_info { int (*device_is_agp) (struct drm_device * dev); drm_ioctl_desc_t *ioctls; +#ifdef COMPAT_FREEBSD32 + drm_ioctl_desc_t *compat_ioctls; + int *compat_ioctls_nr; +#endif int max_ioctl; int buf_priv_size; Modified: head/sys/dev/drm2/drm_drv.c ============================================================================== --- head/sys/dev/drm2/drm_drv.c Sat Aug 18 18:17:10 2012 (r239374) +++ head/sys/dev/drm2/drm_drv.c Sat Aug 18 18:26:25 2012 (r239375) @@ -36,8 +36,8 @@ __FBSDID("$FreeBSD$"); * open/close, and ioctl dispatch. */ - #include +#include #include #include #include @@ -802,6 +802,8 @@ void drm_close(void *data) DRM_UNLOCK(dev); } +extern drm_ioctl_desc_t drm_compat_ioctls[]; + /* drm_ioctl is called whenever a process performs an ioctl on /dev/drm. */ int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags, @@ -846,7 +848,22 @@ int drm_ioctl(struct cdev *kdev, u_long return EINVAL; } - ioctl = &drm_ioctls[nr]; +#ifdef COMPAT_FREEBSD32 + /* + * Called whenever a 32-bit process running under a 64-bit + * kernel performs an ioctl on /dev/drm. + */ + if (SV_CURPROC_FLAG(SV_ILP32) && drm_compat_ioctls[nr].func != NULL) + /* + * Assume that ioctls without an explicit compat + * routine will just work. This may not always be a + * good assumption, but it's better than always + * failing. + */ + ioctl = &drm_compat_ioctls[nr]; + else +#endif + ioctl = &drm_ioctls[nr]; /* It's not a core DRM ioctl, try driver-specific. */ if (ioctl->func == NULL && nr >= DRM_COMMAND_BASE) { /* The array entries begin at DRM_COMMAND_BASE ioctl nr */ @@ -856,7 +873,14 @@ int drm_ioctl(struct cdev *kdev, u_long nr, dev->driver->max_ioctl); return EINVAL; } - ioctl = &dev->driver->ioctls[nr]; +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32) && + nr < *dev->driver->compat_ioctls_nr && + dev->driver->compat_ioctls[nr].func != NULL) + ioctl = &dev->driver->compat_ioctls[nr]; + else +#endif + ioctl = &dev->driver->ioctls[nr]; is_driver_ioctl = 1; } func = ioctl->func; Added: head/sys/dev/drm2/drm_ioc32.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/dev/drm2/drm_ioc32.c Sat Aug 18 18:26:25 2012 (r239375) @@ -0,0 +1,788 @@ +/*- + * Copyright (C) Paul Mackerras 2005. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Paul Mackerras + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_compat.h" + +#ifdef COMPAT_FREEBSD32 + +#include +#include + +/** @file drm_ioc32.c + * 32-bit ioctl compatibility routines for the DRM. + */ + +#define DRM_IOCTL_VERSION32 DRM_IOWR(0x00, drm_version32_t) +#define DRM_IOCTL_GET_UNIQUE32 DRM_IOWR(0x01, drm_unique32_t) +#define DRM_IOCTL_GET_MAP32 DRM_IOWR(0x04, drm_map32_t) +#define DRM_IOCTL_GET_CLIENT32 DRM_IOWR(0x05, drm_client32_t) +#define DRM_IOCTL_GET_STATS32 DRM_IOR( 0x06, drm_stats32_t) + +#define DRM_IOCTL_SET_UNIQUE32 DRM_IOW( 0x10, drm_unique32_t) +#define DRM_IOCTL_ADD_MAP32 DRM_IOWR(0x15, drm_map32_t) +#define DRM_IOCTL_ADD_BUFS32 DRM_IOWR(0x16, drm_buf_desc32_t) +#define DRM_IOCTL_MARK_BUFS32 DRM_IOW( 0x17, drm_buf_desc32_t) +#define DRM_IOCTL_INFO_BUFS32 DRM_IOWR(0x18, drm_buf_info32_t) +#define DRM_IOCTL_MAP_BUFS32 DRM_IOWR(0x19, drm_buf_map32_t) +#define DRM_IOCTL_FREE_BUFS32 DRM_IOW( 0x1a, drm_buf_free32_t) + +#define DRM_IOCTL_RM_MAP32 DRM_IOW( 0x1b, drm_map32_t) + +#define DRM_IOCTL_SET_SAREA_CTX32 DRM_IOW( 0x1c, drm_ctx_priv_map32_t) +#define DRM_IOCTL_GET_SAREA_CTX32 DRM_IOWR(0x1d, drm_ctx_priv_map32_t) + +#define DRM_IOCTL_RES_CTX32 DRM_IOWR(0x26, drm_ctx_res32_t) +#define DRM_IOCTL_DMA32 DRM_IOWR(0x29, drm_dma32_t) + +#define DRM_IOCTL_AGP_ENABLE32 DRM_IOW( 0x32, drm_agp_mode32_t) +#define DRM_IOCTL_AGP_INFO32 DRM_IOR( 0x33, drm_agp_info32_t) +#define DRM_IOCTL_AGP_ALLOC32 DRM_IOWR(0x34, drm_agp_buffer32_t) +#define DRM_IOCTL_AGP_FREE32 DRM_IOW( 0x35, drm_agp_buffer32_t) +#define DRM_IOCTL_AGP_BIND32 DRM_IOW( 0x36, drm_agp_binding32_t) +#define DRM_IOCTL_AGP_UNBIND32 DRM_IOW( 0x37, drm_agp_binding32_t) + +#define DRM_IOCTL_SG_ALLOC32 DRM_IOW( 0x38, drm_scatter_gather32_t) +#define DRM_IOCTL_SG_FREE32 DRM_IOW( 0x39, drm_scatter_gather32_t) + +#define DRM_IOCTL_UPDATE_DRAW32 DRM_IOW( 0x3f, drm_update_draw32_t) + +#define DRM_IOCTL_WAIT_VBLANK32 DRM_IOWR(0x3a, drm_wait_vblank32_t) + +typedef struct drm_version_32 { + int version_major; /**< Major version */ + int version_minor; /**< Minor version */ + int version_patchlevel; /**< Patch level */ + u32 name_len; /**< Length of name buffer */ + u32 name; /**< Name of driver */ + u32 date_len; /**< Length of date buffer */ + u32 date; /**< User-space buffer to hold date */ + u32 desc_len; /**< Length of desc buffer */ + u32 desc; /**< User-space buffer to hold desc */ +} drm_version32_t; + +static int compat_drm_version(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_version32_t *v32 = data; + struct drm_version version; + int err; + + version.name_len = v32->name_len; + version.name = (void *)(unsigned long)v32->name; + version.date_len = v32->date_len; + version.date = (void *)(unsigned long)v32->date; + version.desc_len = v32->desc_len; + version.desc = (void *)(unsigned long)v32->desc; + + err = drm_version(dev, (void *)&version, file_priv); + if (err) + return err; + + v32->version_major = version.version_major; + v32->version_minor = version.version_minor; + v32->version_patchlevel = version.version_patchlevel; + v32->name_len = version.name_len; + v32->date_len = version.date_len; + v32->desc_len = version.desc_len; + + return 0; +} + +typedef struct drm_unique32 { + u32 unique_len; /**< Length of unique */ + u32 unique; /**< Unique name for driver instantiation */ +} drm_unique32_t; + +static int compat_drm_getunique(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_unique32_t *uq32 = data; + struct drm_unique u; + int err; + + u.unique_len = uq32->unique_len; + u.unique = (void *)(unsigned long)uq32->unique; + + err = drm_getunique(dev, (void *)&u, file_priv); + if (err) + return err; + + uq32->unique_len = u.unique_len; + + return 0; +} + +static int compat_drm_setunique(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_unique32_t *uq32 = data; + struct drm_unique u; + + u.unique_len = uq32->unique_len; + u.unique = (void *)(unsigned long)uq32->unique; + + return drm_setunique(dev, (void *)&u, file_priv); +} + +typedef struct drm_map32 { + u32 offset; /**< Requested physical address (0 for SAREA)*/ + u32 size; /**< Requested physical size (bytes) */ + enum drm_map_type type; /**< Type of memory to map */ + enum drm_map_flags flags; /**< Flags */ + u32 handle; /**< User-space: "Handle" to pass to mmap() */ + int mtrr; /**< MTRR slot used */ +} drm_map32_t; + +static int compat_drm_getmap(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_map32_t *m32 = data; + struct drm_map map; + int err; + void *handle; + + map.offset = (unsigned long)m32->offset; + + err = drm_getmap(dev, (void *)&map, file_priv); + if (err) + return err; + + m32->offset = map.offset; + m32->size = map.size; + m32->type = map.type; + m32->flags = map.flags; + handle = map.handle; + m32->mtrr = map.mtrr; + + m32->handle = (unsigned long)handle; + + return 0; + +} + +static int compat_drm_addmap(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_map32_t *m32 = data; + struct drm_map map; + int err; + void *handle; + + map.offset = (unsigned long)m32->offset; + map.size = (unsigned long)m32->size; + map.type = m32->type; + map.flags = m32->flags; + + err = drm_addmap_ioctl(dev, (void *)&map, file_priv); + if (err) + return err; + + m32->offset = map.offset; + m32->mtrr = map.mtrr; + handle = map.handle; + + m32->handle = (unsigned long)handle; + if (m32->handle != (unsigned long)handle) + DRM_DEBUG("compat_drm_addmap truncated handle" + " %p for type %d offset %x\n", + handle, m32->type, m32->offset); + + return 0; +} + +static int compat_drm_rmmap(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_map32_t *m32 = data; + struct drm_map map; + + map.handle = (void *)(unsigned long)m32->handle; + + return drm_rmmap_ioctl(dev, (void *)&map, file_priv); +} + +typedef struct drm_client32 { + int idx; /**< Which client desired? */ + int auth; /**< Is client authenticated? */ + u32 pid; /**< Process ID */ + u32 uid; /**< User ID */ + u32 magic; /**< Magic */ + u32 iocs; /**< Ioctl count */ +} drm_client32_t; + +static int compat_drm_getclient(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_client32_t *c32 = data; + struct drm_client client; + int err; + + client.idx = c32->idx; + + err = drm_getclient(dev, (void *)&client, file_priv); + if (err) + return err; + + c32->idx = client.idx; + c32->auth = client.auth; + c32->pid = client.pid; + c32->uid = client.uid; + c32->magic = client.magic; + c32->iocs = client.iocs; + + return 0; +} + +typedef struct drm_stats32 { + u32 count; + struct { + u32 value; + enum drm_stat_type type; + } data[15]; +} drm_stats32_t; + +static int compat_drm_getstats(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_stats32_t *s32 = data; + struct drm_stats stats; + int i, err; + + err = drm_getstats(dev, (void *)&stats, file_priv); + if (err) + return err; + + s32->count = stats.count; + for (i = 0; i < stats.count; i++) { + s32->data[i].value = stats.data[i].value; + s32->data[i].type = stats.data[i].type; + } + + return 0; +} + +typedef struct drm_buf_desc32 { + int count; /**< Number of buffers of this size */ + int size; /**< Size in bytes */ + int low_mark; /**< Low water mark */ + int high_mark; /**< High water mark */ + int flags; + u32 agp_start; /**< Start address in the AGP aperture */ +} drm_buf_desc32_t; + +static int compat_drm_addbufs(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_buf_desc32_t *b32 = data; + struct drm_buf_desc buf; + int err; + + buf.count = b32->count; + buf.size = b32->size; + buf.low_mark = b32->low_mark; + buf.high_mark = b32->high_mark; + buf.flags = b32->flags; + buf.agp_start = (unsigned long)b32->agp_start; + + err = drm_addbufs(dev, (void *)&buf, file_priv); + if (err) + return err; + + b32->count = buf.count; + b32->size = buf.size; + b32->low_mark = buf.low_mark; + b32->high_mark = buf.high_mark; + b32->flags = buf.flags; + b32->agp_start = buf.agp_start; + + return 0; +} + +static int compat_drm_markbufs(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_buf_desc32_t *b32 = data; + struct drm_buf_desc buf; + + buf.size = b32->size; + buf.low_mark = b32->low_mark; + buf.high_mark = b32->high_mark; + + return drm_markbufs(dev, (void *)&buf, file_priv); +} + +typedef struct drm_buf_info32 { + int count; /**< Entries in list */ + u32 list; +} drm_buf_info32_t; + +static int compat_drm_infobufs(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_buf_info32_t *req32 = data; + drm_buf_desc32_t *to; + struct drm_buf_info *request; + struct drm_buf_desc *list; + size_t nbytes; + int i, err; + int count, actual; + + count = req32->count; + to = (drm_buf_desc32_t *)(unsigned long)req32->list; + if (count < 0) + count = 0; + + nbytes = sizeof(*request) + count * sizeof(struct drm_buf_desc); + request = malloc(nbytes, DRM_MEM_BUFLISTS, M_ZERO | M_NOWAIT); + if (!request) + return -EFAULT; + list = (struct drm_buf_desc *) (request + 1); + + request->count = count; + request->list = list; + + err = drm_infobufs(dev, (void *)request, file_priv); + if (err) + return err; + + actual = request->count; + if (count >= actual) + for (i = 0; i < actual; ++i) { + to[i].count = list[i].count; + to[i].size = list[i].size; + to[i].low_mark = list[i].low_mark; + to[i].high_mark = list[i].high_mark; + to[i].flags = list[i].flags; + } + + req32->count = actual; + + return 0; +} + +typedef struct drm_buf_pub32 { + int idx; /**< Index into the master buffer list */ + int total; /**< Buffer size */ + int used; /**< Amount of buffer in use (for DMA) */ + u32 address; /**< Address of buffer */ +} drm_buf_pub32_t; + +typedef struct drm_buf_map32 { + int count; /**< Length of the buffer list */ + u32 virtual; /**< Mmap'd area in user-virtual */ + u32 list; /**< Buffer information */ +} drm_buf_map32_t; + +static int compat_drm_mapbufs(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_buf_map32_t *req32 = data; + drm_buf_pub32_t *list32; + struct drm_buf_map *request; + struct drm_buf_pub *list; + int i, err; + int count, actual; + size_t nbytes; + + count = req32->count; + list32 = (void *)(unsigned long)req32->list; + + if (count < 0) + return -EINVAL; + nbytes = sizeof(*request) + count * sizeof(struct drm_buf_pub); + request = malloc(nbytes, DRM_MEM_BUFLISTS, M_ZERO | M_NOWAIT); + if (!request) + return -EFAULT; + list = (struct drm_buf_pub *) (request + 1); + + request->count = count; + request->list = list; + + err = drm_mapbufs(dev, (void *)request, file_priv); + if (err) + return err; + + actual = request->count; + if (count >= actual) + for (i = 0; i < actual; ++i) { + list32[i].idx = list[i].idx; + list32[i].total = list[i].total; + list32[i].used = list[i].used; + list32[i].address = (unsigned long)list[i].address; + } + + req32->count = actual; + req32->virtual = (unsigned long)request->virtual; + + return 0; +} + +typedef struct drm_buf_free32 { + int count; + u32 list; +} drm_buf_free32_t; + +static int compat_drm_freebufs(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_buf_free32_t *req32 = data; + struct drm_buf_free request; + + request.count = req32->count; + request.list = (int *)(unsigned long)req32->list; + + return drm_freebufs(dev, (void *)&request, file_priv); +} + +typedef struct drm_ctx_priv_map32 { + unsigned int ctx_id; /**< Context requesting private mapping */ + u32 handle; /**< Handle of map */ +} drm_ctx_priv_map32_t; + +static int compat_drm_setsareactx(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_ctx_priv_map32_t *req32 = data; + struct drm_ctx_priv_map request; + + request.ctx_id = req32->ctx_id; + request.handle = (void *)(unsigned long)req32->handle; + + return drm_setsareactx(dev, (void *)&request, file_priv); +} + +static int compat_drm_getsareactx(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_ctx_priv_map32_t *req32 = data; + struct drm_ctx_priv_map request; + int err; + + request.ctx_id = req32->ctx_id; + + err = drm_getsareactx(dev, (void *)&request, file_priv); + if (err) + return err; + + req32->handle = (unsigned long)request.handle; + + return 0; +} + +typedef struct drm_ctx_res32 { + int count; + u32 contexts; +} drm_ctx_res32_t; + +static int compat_drm_resctx(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_ctx_res32_t *res32 = data; + struct drm_ctx_res res; + int err; + + res.count = res32->count; + res.contexts = (struct drm_ctx __user *)(unsigned long)res32->contexts; + + err = drm_resctx(dev, (void *)&res, file_priv); + if (err) + return err; + + res32->count = res.count; + + return 0; +} + +typedef struct drm_dma32 { + int context; /**< Context handle */ + int send_count; /**< Number of buffers to send */ + u32 send_indices; /**< List of handles to buffers */ + u32 send_sizes; /**< Lengths of data to send */ + enum drm_dma_flags flags; /**< Flags */ + int request_count; /**< Number of buffers requested */ + int request_size; /**< Desired size for buffers */ + u32 request_indices; /**< Buffer information */ + u32 request_sizes; + int granted_count; /**< Number of buffers granted */ +} drm_dma32_t; + +static int compat_drm_dma(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_dma32_t *d32 = data; + struct drm_dma d; + int err; + + d.context = d32->context; + d.send_count = d32->send_count; + d.send_indices = (int *)(unsigned long)d32->send_indices; + d.send_sizes = (int *)(unsigned long)d32->send_sizes; + d.flags = d32->flags; + d.request_count = d32->request_count; + d.request_indices = (int *)(unsigned long)d32->request_indices; + d.request_sizes = (int *)(unsigned long)d32->request_sizes; + + err = drm_dma(dev, (void *)&d, file_priv); + if (err) + return err; + + d32->request_size = d.request_size; + d32->granted_count = d.granted_count; + + return 0; +} + +typedef struct drm_agp_mode32 { + u32 mode; /**< AGP mode */ +} drm_agp_mode32_t; + +static int compat_drm_agp_enable(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_agp_mode32_t *m32 = data; + struct drm_agp_mode mode; + + mode.mode = m32->mode; + + return drm_agp_enable_ioctl(dev, (void *)&mode, file_priv); +} + +typedef struct drm_agp_info32 { + int agp_version_major; + int agp_version_minor; + u32 mode; + u32 aperture_base; /* physical address */ + u32 aperture_size; /* bytes */ + u32 memory_allowed; /* bytes */ + u32 memory_used; + + /* PCI information */ + unsigned short id_vendor; + unsigned short id_device; +} drm_agp_info32_t; + +static int compat_drm_agp_info(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_agp_info32_t *i32 = data; + struct drm_agp_info info; + int err; + + err = drm_agp_info_ioctl(dev, (void *)&info, file_priv); + if (err) + return err; + + i32->agp_version_major = info.agp_version_major; + i32->agp_version_minor = info.agp_version_minor; + i32->mode = info.mode; + i32->aperture_base = info.aperture_base; + i32->aperture_size = info.aperture_size; + i32->memory_allowed = info.memory_allowed; + i32->memory_used = info.memory_used; + i32->id_vendor = info.id_vendor; + i32->id_device = info.id_device; + + return 0; +} + +typedef struct drm_agp_buffer32 { + u32 size; /**< In bytes -- will round to page boundary */ + u32 handle; /**< Used for binding / unbinding */ + u32 type; /**< Type of memory to allocate */ + u32 physical; /**< Physical used by i810 */ +} drm_agp_buffer32_t; + +static int compat_drm_agp_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_agp_buffer32_t *req32 = data; + struct drm_agp_buffer request; + int err; + + request.size = req32->size; + request.type = req32->type; + + err = drm_agp_alloc_ioctl(dev, (void *)&request, file_priv); + if (err) + return err; + + req32->handle = request.handle; + req32->physical = request.physical; + + return 0; +} + +static int compat_drm_agp_free(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_agp_buffer32_t *req32 = data; + struct drm_agp_buffer request; + + request.handle = req32->handle; + + return drm_agp_free_ioctl(dev, (void *)&request, file_priv); +} + +typedef struct drm_agp_binding32 { + u32 handle; /**< From drm_agp_buffer */ + u32 offset; /**< In bytes -- will round to page boundary */ +} drm_agp_binding32_t; + +static int compat_drm_agp_bind(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_agp_binding32_t *req32 = data; + struct drm_agp_binding request; + + request.handle = req32->handle; + request.offset = req32->offset; + + return drm_agp_bind_ioctl(dev, (void *)&request, file_priv); +} + +static int compat_drm_agp_unbind(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_agp_binding32_t *req32 = data; + struct drm_agp_binding request; + + request.handle = req32->handle; + + return drm_agp_unbind_ioctl(dev, (void *)&request, file_priv); +} + +typedef struct drm_scatter_gather32 { + u32 size; /**< In bytes -- will round to page boundary */ + u32 handle; /**< Used for mapping / unmapping */ +} drm_scatter_gather32_t; + +static int compat_drm_sg_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_scatter_gather32_t *req32 = data; + struct drm_scatter_gather request; + int err; + + request.size = (unsigned long)req32->size; + + err = drm_sg_alloc_ioctl(dev, (void *)&request, file_priv); + if (err) + return err; + + /* XXX not sure about the handle conversion here... */ + req32->handle = (unsigned long)request.handle >> PAGE_SHIFT; + + return 0; +} + +static int compat_drm_sg_free(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_scatter_gather32_t *req32 = data; + struct drm_scatter_gather request; + + request.handle = (unsigned long)req32->handle << PAGE_SHIFT; + + return drm_sg_free(dev, (void *)&request, file_priv); +} + +typedef struct drm_update_draw32 { + drm_drawable_t handle; + unsigned int type; + unsigned int num; + /* 64-bit version has a 32-bit pad here */ + u64 data; /**< Pointer */ +} __attribute__((packed)) drm_update_draw32_t; + +static int compat_drm_update_draw(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_update_draw32_t *update32 = data; + struct drm_update_draw request; + int err; + + request.handle = update32->handle; + request.type = update32->type; + request.num = update32->num; + request.data = update32->data; + + err = drm_update_draw(dev, (void *)&request, file_priv); + return err; +} + +struct drm_wait_vblank_request32 { + enum drm_vblank_seq_type type; + unsigned int sequence; + u32 signal; +}; + +struct drm_wait_vblank_reply32 { + enum drm_vblank_seq_type type; + unsigned int sequence; + s32 tval_sec; + s32 tval_usec; +}; + +typedef union drm_wait_vblank32 { + struct drm_wait_vblank_request32 request; + struct drm_wait_vblank_reply32 reply; +} drm_wait_vblank32_t; + +static int compat_drm_wait_vblank(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ + drm_wait_vblank32_t *req32 = data; + union drm_wait_vblank request; + int err; + + request.request.type = req32->request.type; + request.request.sequence = req32->request.sequence; + request.request.signal = req32->request.signal; + + err = drm_wait_vblank(dev, (void *)&request, file_priv); + if (err) + return err; + + req32->reply.type = request.reply.type; + req32->reply.sequence = request.reply.sequence; + req32->reply.tval_sec = request.reply.tval_sec; + req32->reply.tval_usec = request.reply.tval_usec; + + return 0; +} + +drm_ioctl_desc_t drm_compat_ioctls[256] = { + DRM_IOCTL_DEF(DRM_IOCTL_VERSION32, compat_drm_version, 0), + DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE32, compat_drm_getunique, 0), + DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP32, compat_drm_getmap, 0), + DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT32, compat_drm_getclient, 0), + DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS32, compat_drm_getstats, 0), + DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE32, compat_drm_setunique, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP32, compat_drm_addmap, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_ADD_BUFS32, compat_drm_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_MARK_BUFS32, compat_drm_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_INFO_BUFS32, compat_drm_infobufs, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_MAP_BUFS32, compat_drm_mapbufs, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_FREE_BUFS32, compat_drm_freebufs, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP32, compat_drm_rmmap, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX32, compat_drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX32, compat_drm_getsareactx, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX32, compat_drm_resctx, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_DMA32, compat_drm_dma, DRM_AUTH), + + DRM_IOCTL_DEF(DRM_IOCTL_AGP_ENABLE32, compat_drm_agp_enable, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_AGP_INFO32, compat_drm_agp_info, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_AGP_ALLOC32, compat_drm_agp_alloc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_AGP_FREE32, compat_drm_agp_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_AGP_BIND32, compat_drm_agp_bind, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_AGP_UNBIND32, compat_drm_agp_unbind, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + + DRM_IOCTL_DEF(DRM_IOCTL_SG_ALLOC32, compat_drm_sg_alloc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_IOCTL_SG_FREE32, compat_drm_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + + DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW32, compat_drm_update_draw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + + DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK32, compat_drm_wait_vblank, DRM_UNLOCKED), +}; + +#endif Modified: head/sys/dev/drm2/i915/i915_dma.c ============================================================================== --- head/sys/dev/drm2/i915/i915_dma.c Sat Aug 18 18:17:10 2012 (r239374) +++ head/sys/dev/drm2/i915/i915_dma.c Sat Aug 18 18:26:25 2012 (r239375) @@ -627,7 +627,7 @@ i915_flush_ioctl(struct drm_device *dev, return (ret); } -static int i915_batchbuffer(struct drm_device *dev, void *data, +int i915_batchbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv) { drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; @@ -676,7 +676,7 @@ fail_free: return ret; } -static int i915_cmdbuffer(struct drm_device *dev, void *data, +int i915_cmdbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv) { drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; @@ -747,7 +747,7 @@ static int i915_flip_bufs(struct drm_dev return ret; } -static int i915_getparam(struct drm_device *dev, void *data, +int i915_getparam(struct drm_device *dev, void *data, struct drm_file *file_priv) { drm_i915_private_t *dev_priv = dev->dev_private; @@ -1493,6 +1493,11 @@ struct drm_ioctl_desc i915_ioctls[] = { DRM_IOCTL_DEF(DRM_I915_GET_SPRITE_COLORKEY, intel_sprite_get_colorkey, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), }; +#ifdef COMPAT_FREEBSD32 +extern drm_ioctl_desc_t i915_compat_ioctls[]; +extern int i915_compat_ioctls_nr; +#endif + struct drm_driver_info i915_driver_info = { .driver_features = DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_IRQ | DRIVER_LOCKLESS_IRQ | @@ -1516,6 +1521,10 @@ struct drm_driver_info i915_driver_info .sysctl_cleanup = i915_sysctl_cleanup, .ioctls = i915_ioctls, +#ifdef COMPAT_FREEBSD32 + .compat_ioctls = i915_compat_ioctls, + .compat_ioctls_nr = &i915_compat_ioctls_nr, +#endif .max_ioctl = DRM_ARRAY_SIZE(i915_ioctls), .name = DRIVER_NAME, Modified: head/sys/dev/drm2/i915/i915_drv.h ============================================================================== --- head/sys/dev/drm2/i915/i915_drv.h Sat Aug 18 18:17:10 2012 (r239374) +++ head/sys/dev/drm2/i915/i915_drv.h Sat Aug 18 18:26:25 2012 (r239375) @@ -1034,6 +1034,12 @@ int i915_sysctl_init(struct drm_device * void i915_sysctl_cleanup(struct drm_device *dev); /* i915_dma.c */ +int i915_batchbuffer(struct drm_device *dev, void *data, + struct drm_file *file_priv); +int i915_cmdbuffer(struct drm_device *dev, void *data, + struct drm_file *file_priv); +int i915_getparam(struct drm_device *dev, void *data, + struct drm_file *file_priv); extern void i915_kernel_lost_context(struct drm_device * dev); extern int i915_driver_load(struct drm_device *, unsigned long flags); extern int i915_driver_unload(struct drm_device *); Added: head/sys/dev/drm2/i915/i915_ioc32.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/dev/drm2/i915/i915_ioc32.c Sat Aug 18 18:26:25 2012 (r239375) @@ -0,0 +1,138 @@ +/*- + * Copyright (C) Paul Mackerras 2005 + * Copyright (C) Alan Hourihane 2005 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Paul Mackerras + * Alan Hourihane + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_compat.h" + +#ifdef COMPAT_FREEBSD32 + +/** @file i915_ioc32.c + * 32-bit ioctl compatibility routines for the i915 DRM. + */ + +#include +#include +#include +#include +#include + +typedef struct _drm_i915_batchbuffer32 { + int start; /* agp offset */ + int used; /* nr bytes in use */ + int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ + int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ + int num_cliprects; /* mulitpass with multiple cliprects? */ + u32 cliprects; /* pointer to userspace cliprects */ +} drm_i915_batchbuffer32_t; + +static int compat_i915_batchbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv) +{ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 19:57:32 2012 Return-Path: Delivered-To: svn-src-all@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7CB9A106564A; Sat, 18 Aug 2012 19:57:32 +0000 (UTC) (envelope-from ache@vniz.net) Received: from vniz.net (vniz.net [194.87.13.69]) by mx1.freebsd.org (Postfix) with ESMTP id EEA538FC08; Sat, 18 Aug 2012 19:57:31 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by vniz.net (8.14.5/8.14.5) with ESMTP id q7IJvO4o074761; Sat, 18 Aug 2012 23:57:24 +0400 (MSK) (envelope-from ache@vniz.net) Received: (from ache@localhost) by localhost (8.14.5/8.14.5/Submit) id q7IJvOKZ074760; Sat, 18 Aug 2012 23:57:24 +0400 (MSK) (envelope-from ache) Date: Sat, 18 Aug 2012 23:57:24 +0400 From: Andrey Chernov To: John Baldwin Message-ID: <20120818195724.GA74684@vniz.net> Mail-Followup-To: Andrey Chernov , John Baldwin , src-committers@FreeBSD.ORG, svn-src-all@FreeBSD.ORG, svn-src-head@FreeBSD.ORG References: <201208171553.q7HFrhuf090457@svn.freebsd.org> <20120817182512.GA58051@vniz.net> <201208171507.07699.jhb@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201208171507.07699.jhb@freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: svn-src-head@FreeBSD.ORG, svn-src-all@FreeBSD.ORG, src-committers@FreeBSD.ORG Subject: Re: svn commit: r239356 - head/sbin/dhclient X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 19:57:32 -0000 On Fri, Aug 17, 2012 at 03:07:07PM -0400, John Baldwin wrote: > On Friday, August 17, 2012 2:25:12 pm Andrey Chernov wrote: > > On Fri, Aug 17, 2012 at 03:53:43PM +0000, John Baldwin wrote: > > > Author: jhb > > > Date: Fri Aug 17 15:53:43 2012 > > > New Revision: 239356 > > > URL: http://svn.freebsd.org/changeset/base/239356 > > > > > > Log: > > > Fix dhclient to properly exit and teardown the configured lease when > > > link is lost. devd will start a new dhclient instance when link is > > > restored. > > > > Is it any chance to teach dhclient IPv6 addresses in very basic parser > > level, f.e. to replace nameserver it sniffs from router? Currently > > dhcp-options(5) understands IPv4 addresses only and produce error on > > 'supersede' IPv6 address. > > I think the RFC defines those to be IPv4, yes? Presumably DHCPv6 adds > new option types that support IPv6 addresses? RFC 2131 (if you mean it) describes DHCP process itself, it does not define contents of 'supersede' or other override options for dhclient. Moreover, current dhclient somewhow able to fetch my IPv6 tunnel DNS address from the roiter (I don't look deeper, maybe it is router bug), but I don't want IPv6 tunnel DNS, I want router fe80:... DNS instead. -- http://ache.vniz.net/ From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 22:59:07 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 71192106566C; Sat, 18 Aug 2012 22:59:07 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 41FF08FC08; Sat, 18 Aug 2012 22:59:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IMx7e4091745; Sat, 18 Aug 2012 22:59:07 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IMx7fm091741; Sat, 18 Aug 2012 22:59:07 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201208182259.q7IMx7fm091741@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 18 Aug 2012 22:59:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239376 - in head/sys: conf ia64/conf ia64/ia64 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 22:59:07 -0000 Author: marcel Date: Sat Aug 18 22:59:06 2012 New Revision: 239376 URL: http://svn.freebsd.org/changeset/base/239376 Log: Remove support for SKI: HP's Itanium simulator. It's pretty much not used, serves very little value given that FreeBSD runs on real H/W for a long time. Note that SKI is open-source (see http://ski.sourceforge.net), so if there's interest and value again, then this code can be revived. Discussed with: jhb Deleted: head/sys/ia64/conf/SKI head/sys/ia64/ia64/ssc.c head/sys/ia64/ia64/sscdisk.c Modified: head/sys/conf/files.ia64 head/sys/conf/options.ia64 head/sys/ia64/conf/NOTES Modified: head/sys/conf/files.ia64 ============================================================================== --- head/sys/conf/files.ia64 Sat Aug 18 18:26:25 2012 (r239375) +++ head/sys/conf/files.ia64 Sat Aug 18 22:59:06 2012 (r239376) @@ -104,8 +104,6 @@ ia64/ia64/ptrace_machdep.c standard ia64/ia64/sal.c standard ia64/ia64/sapic.c standard ia64/ia64/setjmp.S standard -ia64/ia64/ssc.c optional ski -ia64/ia64/sscdisk.c optional ski ia64/ia64/stack_machdep.c optional ddb | stack ia64/ia64/support.S standard ia64/ia64/sys_machdep.c standard Modified: head/sys/conf/options.ia64 ============================================================================== --- head/sys/conf/options.ia64 Sat Aug 18 18:26:25 2012 (r239375) +++ head/sys/conf/options.ia64 Sat Aug 18 22:59:06 2012 (r239376) @@ -29,8 +29,3 @@ PSM_DEBUG opt_psm.h # Atkbd options ATKBD_DFLT_KEYMAP opt_atkbd.h - -# SKI emulator options -SKI opt_ski.h -SKI_ROOT_FILESYSTEM opt_ski.h -SSC_NSECT opt_ski.h Modified: head/sys/ia64/conf/NOTES ============================================================================== --- head/sys/ia64/conf/NOTES Sat Aug 18 18:26:25 2012 (r239375) +++ head/sys/ia64/conf/NOTES Sat Aug 18 22:59:06 2012 (r239376) @@ -27,10 +27,6 @@ options LOG2_ID_PAGE_SIZE=27 # 128M # The page size being equal to 1< Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6C946106566C; Sat, 18 Aug 2012 23:17:43 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 57D0A8FC0A; Sat, 18 Aug 2012 23:17:43 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7INHhFV093684; Sat, 18 Aug 2012 23:17:43 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7INHhkA093682; Sat, 18 Aug 2012 23:17:43 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201208182317.q7INHhkA093682@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 18 Aug 2012 23:17:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239377 - head/sys/boot/ia64 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 23:17:43 -0000 Author: marcel Date: Sat Aug 18 23:17:42 2012 New Revision: 239377 URL: http://svn.freebsd.org/changeset/base/239377 Log: Don't build the ski loader anymore. The code is not deleted just yet, as it explains the distinction between the common and the platform- specific code. Modified: head/sys/boot/ia64/Makefile Modified: head/sys/boot/ia64/Makefile ============================================================================== --- head/sys/boot/ia64/Makefile Sat Aug 18 22:59:06 2012 (r239376) +++ head/sys/boot/ia64/Makefile Sat Aug 18 23:17:42 2012 (r239377) @@ -1,5 +1,10 @@ # $FreeBSD$ -SUBDIR= common efi ski +SUBDIR= common efi + +# In the ski sub-directory, one can build a loader for use under Ski. +# Ski is an Itanium simulator, originally developed by HP. It's not +# supported anymore in FreeBSD, but left for reference and education. +# SUBDIR += ski .include From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 23:23:15 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 98B8B106564A; Sat, 18 Aug 2012 23:23:15 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6AD148FC0C; Sat, 18 Aug 2012 23:23:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7INNFmv094294; Sat, 18 Aug 2012 23:23:15 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7INNFJW094292; Sat, 18 Aug 2012 23:23:15 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201208182323.q7INNFJW094292@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 18 Aug 2012 23:23:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239378 - head/sys/boot X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 23:23:15 -0000 Author: marcel Date: Sat Aug 18 23:23:14 2012 New Revision: 239378 URL: http://svn.freebsd.org/changeset/base/239378 Log: Build zfs on ia64 as well. We don't build a loader with zfs support just yet, but building it makes sure we catch (build) regressions. Modified: head/sys/boot/Makefile.ia64 Modified: head/sys/boot/Makefile.ia64 ============================================================================== --- head/sys/boot/Makefile.ia64 Sat Aug 18 23:17:42 2012 (r239377) +++ head/sys/boot/Makefile.ia64 Sat Aug 18 23:23:14 2012 (r239378) @@ -1,3 +1,4 @@ # $FreeBSD$ SUBDIR+= efi +SUBDIR+= zfs From owner-svn-src-all@FreeBSD.ORG Sat Aug 18 23:28:35 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A9383106566B; Sat, 18 Aug 2012 23:28:35 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 94E048FC15; Sat, 18 Aug 2012 23:28:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7INSZC3094852; Sat, 18 Aug 2012 23:28:35 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7INSZFB094850; Sat, 18 Aug 2012 23:28:35 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201208182328.q7INSZFB094850@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 18 Aug 2012 23:28:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239379 - head/sys/ia64/ia64 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 23:28:35 -0000 Author: marcel Date: Sat Aug 18 23:28:34 2012 New Revision: 239379 URL: http://svn.freebsd.org/changeset/base/239379 Log: Use pmap_kextract(x) rather than pmap_extract(kernel_pmap, x). The former knows about all the special mappings, like PBVM. The kernel text and data are in the PBVM. Modified: head/sys/ia64/ia64/mem.c Modified: head/sys/ia64/ia64/mem.c ============================================================================== --- head/sys/ia64/ia64/mem.c Sat Aug 18 23:23:14 2012 (r239378) +++ head/sys/ia64/ia64/mem.c Sat Aug 18 23:28:34 2012 (r239379) @@ -129,7 +129,7 @@ kmemphys: addr = trunc_page(v); eaddr = round_page(v + c); for (; addr < eaddr; addr += PAGE_SIZE) { - if (pmap_extract(kernel_pmap, addr) == 0) + if (pmap_kextract(addr) == 0) return (EFAULT); } if (!kernacc((caddr_t)v, c, (uio->uio_rw == UIO_READ)