1/*- 2 * Copyright (C) 2012 Emulex 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, --- 22 unchanged lines hidden (view full) --- 31 * Contact Information: 32 * freebsd-drivers@emulex.com 33 * 34 * Emulex 35 * 3333 Susan Street 36 * Costa Mesa, CA 92626 37 */ 38 |
39/* $FreeBSD: head/sys/dev/oce/oce_if.c 246799 2013-02-14 17:34:17Z jpaetzel $ */ |
40 41#include "opt_inet6.h" 42#include "opt_inet.h" 43 44#include "oce_if.h" 45 46 47/* Driver entry points prototypes */ --- 1764 unchanged lines hidden (view full) --- 1812 /* TX Watch Dog*/ 1813 for (i = 0; i < sc->nwqs; i++) 1814 oce_tx_restart(sc, sc->wq[i]); 1815 1816 callout_reset(&sc->timer, hz, oce_local_timer, sc); 1817} 1818 1819 |
1820/* NOTE : This should only be called holding 1821 * DEVICE_LOCK. 1822*/ |
1823static void 1824oce_if_deactivate(POCE_SOFTC sc) 1825{ 1826 int i, mtime = 0; 1827 int wait_req = 0; 1828 struct oce_rq *rq; 1829 struct oce_wq *wq; 1830 struct oce_eq *eq; --- 13 unchanged lines hidden (view full) --- 1844 mtime += 1; 1845 if (!wait_req) 1846 break; 1847 } 1848 1849 /* Stop intrs and finish any bottom halves pending */ 1850 oce_hw_intr_disable(sc); 1851 |
1852 /* Since taskqueue_drain takes a Giant Lock, We should not acquire 1853 any other lock. So unlock device lock and require after 1854 completing taskqueue_drain. 1855 */ 1856 UNLOCK(&sc->dev_lock); |
1857 for (i = 0; i < sc->intr_count; i++) { 1858 if (sc->intrs[i].tq != NULL) { 1859 taskqueue_drain(sc->intrs[i].tq, &sc->intrs[i].task); 1860 } 1861 } |
1862 LOCK(&sc->dev_lock); |
1863 1864 /* Delete RX queue in card with flush param */ 1865 oce_stop_rx(sc); 1866 1867 /* Invalidate any pending cq and eq entries*/ 1868 for_all_evnt_queues(sc, eq, i) 1869 oce_drain_eq(eq); 1870 for_all_rq_queues(sc, rq, i) --- 164 unchanged lines hidden --- |