Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Revert ibmvnic merge do_change_param_reset into do_reset

This reverts commit 16b5f5ce351f8709a6b518cc3cbf240c378305bf
where it restructures do_reset. There are patches being tested that
would require major rework if this is committed first.

We will resend this after the other patches have been applied.

Signed-off-by: Dany Madden <drt@linux.ibm.com>
Link: https://lore.kernel.org/r/20201106191745.1679846-1-drt@linux.ibm.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Dany Madden and committed by
Jakub Kicinski
9f32c27e 3b4202a4

+104 -43
+104 -43
drivers/net/ethernet/ibm/ibmvnic.c
··· 1827 1827 } 1828 1828 1829 1829 /** 1830 + * do_change_param_reset returns zero if we are able to keep processing reset 1831 + * events, or non-zero if we hit a fatal error and must halt. 1832 + */ 1833 + static int do_change_param_reset(struct ibmvnic_adapter *adapter, 1834 + struct ibmvnic_rwi *rwi, 1835 + u32 reset_state) 1836 + { 1837 + struct net_device *netdev = adapter->netdev; 1838 + int i, rc; 1839 + 1840 + netdev_dbg(adapter->netdev, "Change param resetting driver (%d)\n", 1841 + rwi->reset_reason); 1842 + 1843 + netif_carrier_off(netdev); 1844 + adapter->reset_reason = rwi->reset_reason; 1845 + 1846 + ibmvnic_cleanup(netdev); 1847 + 1848 + if (reset_state == VNIC_OPEN) { 1849 + rc = __ibmvnic_close(netdev); 1850 + if (rc) 1851 + return rc; 1852 + } 1853 + 1854 + release_resources(adapter); 1855 + release_sub_crqs(adapter, 1); 1856 + release_crq_queue(adapter); 1857 + 1858 + adapter->state = VNIC_PROBED; 1859 + 1860 + rc = init_crq_queue(adapter); 1861 + 1862 + if (rc) { 1863 + netdev_err(adapter->netdev, 1864 + "Couldn't initialize crq. rc=%d\n", rc); 1865 + return rc; 1866 + } 1867 + 1868 + rc = ibmvnic_reset_init(adapter, true); 1869 + if (rc) 1870 + return IBMVNIC_INIT_FAILED; 1871 + 1872 + /* If the adapter was in PROBE state prior to the reset, 1873 + * exit here. 1874 + */ 1875 + if (reset_state == VNIC_PROBED) 1876 + return 0; 1877 + 1878 + rc = ibmvnic_login(netdev); 1879 + if (rc) { 1880 + adapter->state = reset_state; 1881 + return rc; 1882 + } 1883 + 1884 + rc = init_resources(adapter); 1885 + if (rc) 1886 + return rc; 1887 + 1888 + ibmvnic_disable_irqs(adapter); 1889 + 1890 + adapter->state = VNIC_CLOSED; 1891 + 1892 + if (reset_state == VNIC_CLOSED) 1893 + return 0; 1894 + 1895 + rc = __ibmvnic_open(netdev); 1896 + if (rc) 1897 + return IBMVNIC_OPEN_FAILED; 1898 + 1899 + /* refresh device's multicast list */ 1900 + ibmvnic_set_multi(netdev); 1901 + 1902 + /* kick napi */ 1903 + for (i = 0; i < adapter->req_rx_queues; i++) 1904 + napi_schedule(&adapter->napi[i]); 1905 + 1906 + return 0; 1907 + } 1908 + 1909 + /** 1830 1910 * do_reset returns zero if we are able to keep processing reset events, or 1831 1911 * non-zero if we hit a fatal error and must halt. 1832 1912 */ ··· 1921 1841 netdev_dbg(adapter->netdev, "Re-setting driver (%d)\n", 1922 1842 rwi->reset_reason); 1923 1843 1924 - adapter->reset_reason = rwi->reset_reason; 1925 - /* requestor of VNIC_RESET_CHANGE_PARAM already has the rtnl lock */ 1926 - if (!(adapter->reset_reason == VNIC_RESET_CHANGE_PARAM)) 1927 - rtnl_lock(); 1844 + rtnl_lock(); 1928 1845 1929 1846 netif_carrier_off(netdev); 1847 + adapter->reset_reason = rwi->reset_reason; 1930 1848 1931 1849 old_num_rx_queues = adapter->req_rx_queues; 1932 1850 old_num_tx_queues = adapter->req_tx_queues; ··· 1936 1858 if (reset_state == VNIC_OPEN && 1937 1859 adapter->reset_reason != VNIC_RESET_MOBILITY && 1938 1860 adapter->reset_reason != VNIC_RESET_FAILOVER) { 1939 - if (adapter->reset_reason == VNIC_RESET_CHANGE_PARAM) { 1940 - rc = __ibmvnic_close(netdev); 1941 - if (rc) 1942 - goto out; 1943 - } else { 1944 - adapter->state = VNIC_CLOSING; 1861 + adapter->state = VNIC_CLOSING; 1945 1862 1946 - /* Release the RTNL lock before link state change and 1947 - * re-acquire after the link state change to allow 1948 - * linkwatch_event to grab the RTNL lock and run during 1949 - * a reset. 1950 - */ 1951 - rtnl_unlock(); 1952 - rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_DN); 1953 - rtnl_lock(); 1954 - if (rc) 1955 - goto out; 1863 + /* Release the RTNL lock before link state change and 1864 + * re-acquire after the link state change to allow 1865 + * linkwatch_event to grab the RTNL lock and run during 1866 + * a reset. 1867 + */ 1868 + rtnl_unlock(); 1869 + rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_DN); 1870 + rtnl_lock(); 1871 + if (rc) 1872 + goto out; 1956 1873 1957 - if (adapter->state != VNIC_CLOSING) { 1958 - rc = -1; 1959 - goto out; 1960 - } 1961 - 1962 - adapter->state = VNIC_CLOSED; 1874 + if (adapter->state != VNIC_CLOSING) { 1875 + rc = -1; 1876 + goto out; 1963 1877 } 1964 - } 1965 1878 1966 - if (adapter->reset_reason == VNIC_RESET_CHANGE_PARAM) { 1967 - release_resources(adapter); 1968 - release_sub_crqs(adapter, 1); 1969 - release_crq_queue(adapter); 1879 + adapter->state = VNIC_CLOSED; 1970 1880 } 1971 1881 1972 1882 if (adapter->reset_reason != VNIC_RESET_NON_FATAL) { ··· 1963 1897 */ 1964 1898 adapter->state = VNIC_PROBED; 1965 1899 1966 - if (adapter->reset_reason == VNIC_RESET_CHANGE_PARAM) { 1967 - rc = init_crq_queue(adapter); 1968 - } else if (adapter->reset_reason == VNIC_RESET_MOBILITY) { 1900 + if (adapter->reset_reason == VNIC_RESET_MOBILITY) { 1969 1901 rc = ibmvnic_reenable_crq_queue(adapter); 1970 1902 release_sub_crqs(adapter, 1); 1971 1903 } else { ··· 2003 1939 goto out; 2004 1940 } 2005 1941 2006 - if (adapter->reset_reason == VNIC_RESET_CHANGE_PARAM) { 2007 - rc = init_resources(adapter); 2008 - if (rc) 2009 - goto out; 2010 - } else if (adapter->req_rx_queues != old_num_rx_queues || 1942 + if (adapter->req_rx_queues != old_num_rx_queues || 2011 1943 adapter->req_tx_queues != old_num_tx_queues || 2012 1944 adapter->req_rx_add_entries_per_subcrq != 2013 1945 old_num_rx_slots || ··· 2064 2004 rc = 0; 2065 2005 2066 2006 out: 2067 - /* requestor of VNIC_RESET_CHANGE_PARAM should still hold the rtnl lock */ 2068 - if (!(adapter->reset_reason == VNIC_RESET_CHANGE_PARAM)) 2069 - rtnl_unlock(); 2007 + rtnl_unlock(); 2070 2008 2071 2009 return rc; 2072 2010 } ··· 2198 2140 } 2199 2141 spin_unlock_irqrestore(&adapter->state_lock, flags); 2200 2142 2201 - if (adapter->force_reset_recovery) { 2143 + if (rwi->reset_reason == VNIC_RESET_CHANGE_PARAM) { 2144 + /* CHANGE_PARAM requestor holds rtnl_lock */ 2145 + rc = do_change_param_reset(adapter, rwi, reset_state); 2146 + } else if (adapter->force_reset_recovery) { 2202 2147 /* Transport event occurred during previous reset */ 2203 2148 if (adapter->wait_for_reset) { 2204 2149 /* Previous was CHANGE_PARAM; caller locked */