Hi, 2.6.24-rc4-mm1 build failed at drivers/net/wireless/ath5k/base.c for some inline functions like this: drivers/net/wireless/ath5k/base.c:292: sorry, unimplemented: inlining failed in call to 'ath5k_extend_tsf': function body not available fix it with adjust the order of inline function body. Signed-off-by: Dave Young <hidave.darkstar@xxxxxxxxx> --- drivers/net/wireless/ath5k/base.c | 67 ++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff -upr linux/drivers/net/wireless/ath5k/base.c linux.new/drivers/net/wireless/ath5k/base.c --- linux/drivers/net/wireless/ath5k/base.c 2007-12-07 10:01:42.000000000 +0800 +++ linux.new/drivers/net/wireless/ath5k/base.c 2007-12-07 10:01:49.000000000 +0800 @@ -250,8 +250,19 @@ static int ath5k_rxbuf_setup(struct ath static int ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf, struct ieee80211_tx_control *ctl); + static inline void ath5k_txbuf_free(struct ath5k_softc *sc, - struct ath5k_buf *bf); + struct ath5k_buf *bf) +{ + BUG_ON(!bf); + if (!bf->skb) + return; + pci_unmap_single(sc->pdev, bf->skbaddr, bf->skb->len, + PCI_DMA_TODEVICE); + dev_kfree_skb(bf->skb); + bf->skb = NULL; +} + /* Queues setup */ static struct ath5k_txq *ath5k_txq_setup(struct ath5k_softc *sc, int qtype, int subtype); @@ -278,14 +289,29 @@ static int ath5k_beacon_setup(struct at struct ieee80211_tx_control *ctl); static void ath5k_beacon_send(struct ath5k_softc *sc); static void ath5k_beacon_config(struct ath5k_softc *sc); -static inline u64 ath5k_extend_tsf(struct ath5k_hw *ah, u32 rstamp); + +static inline u64 ath5k_extend_tsf(struct ath5k_hw *ah, u32 rstamp) +{ + u64 tsf = ath5k_hw_get_tsf64(ah); + + if ((tsf & 0x7fff) < rstamp) + tsf -= 0x8000; + + return (tsf & ~0x7fff) | rstamp; +} + /* Interrupt handling */ static int ath5k_init(struct ath5k_softc *sc); static int ath5k_stop_locked(struct ath5k_softc *sc); static int ath5k_stop_hw(struct ath5k_softc *sc); static irqreturn_t ath5k_intr(int irq, void *dev_id); static void ath5k_tasklet_reset(unsigned long data); -static inline void ath5k_update_txpow(struct ath5k_softc *sc); + +static inline void ath5k_update_txpow(struct ath5k_softc *sc) +{ + ath5k_hw_set_txpower_limit(sc->ah, 0); +} + static void ath5k_calibrate(unsigned long data); /* LED functions */ static void ath5k_led_off(unsigned long data); @@ -1341,21 +1367,6 @@ err_unmap: return ret; } -static inline void -ath5k_txbuf_free(struct ath5k_softc *sc, struct ath5k_buf *bf) -{ - BUG_ON(!bf); - if (!bf->skb) - return; - pci_unmap_single(sc->pdev, bf->skbaddr, bf->skb->len, - PCI_DMA_TODEVICE); - dev_kfree_skb(bf->skb); - bf->skb = NULL; -} - - - - /**************\ * Queues setup * \**************/ @@ -2046,20 +2057,6 @@ ath5k_beacon_config(struct ath5k_softc * #undef TSF_TO_TU } -static inline -u64 ath5k_extend_tsf(struct ath5k_hw *ah, u32 rstamp) -{ - u64 tsf = ath5k_hw_get_tsf64(ah); - - if ((tsf & 0x7fff) < rstamp) - tsf -= 0x8000; - - return (tsf & ~0x7fff) | rstamp; -} - - - - /********************\ * Interrupt handling * \********************/ @@ -2295,12 +2292,6 @@ ath5k_tasklet_reset(unsigned long data) ath5k_reset(sc->hw); } -static inline void -ath5k_update_txpow(struct ath5k_softc *sc) -{ - ath5k_hw_set_txpower_limit(sc->ah, 0); -} - /* * Periodically recalibrate the PHY to account * for temperature/environment changes. - To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html