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

ibmvnic: Use common counter for capabilities checks

Two different counters were being used for capabilities
requests and queries. These commands are not called
at the same time so there is no reason a single counter
cannot be used.

Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Thomas Falcon and committed by
David S. Miller
901e040a 6c267b3d

+39 -35
+38 -33
drivers/net/ethernet/ibm/ibmvnic.c
··· 1260 1260 } 1261 1261 adapter->rx_scrq = NULL; 1262 1262 } 1263 - 1264 - adapter->requested_caps = 0; 1265 1263 } 1266 1264 1267 1265 static void release_sub_crqs_no_irqs(struct ibmvnic_adapter *adapter) ··· 1281 1283 adapter->rx_scrq[i]); 1282 1284 adapter->rx_scrq = NULL; 1283 1285 } 1284 - 1285 - adapter->requested_caps = 0; 1286 1286 } 1287 1287 1288 1288 static int disable_scrq_irq(struct ibmvnic_adapter *adapter, ··· 1568 1572 1569 1573 crq.request_capability.capability = cpu_to_be16(REQ_TX_QUEUES); 1570 1574 crq.request_capability.number = cpu_to_be64(adapter->req_tx_queues); 1575 + atomic_inc(&adapter->running_cap_crqs); 1571 1576 ibmvnic_send_crq(adapter, &crq); 1572 1577 1573 1578 crq.request_capability.capability = cpu_to_be16(REQ_RX_QUEUES); 1574 1579 crq.request_capability.number = cpu_to_be64(adapter->req_rx_queues); 1580 + atomic_inc(&adapter->running_cap_crqs); 1575 1581 ibmvnic_send_crq(adapter, &crq); 1576 1582 1577 1583 crq.request_capability.capability = cpu_to_be16(REQ_RX_ADD_QUEUES); 1578 1584 crq.request_capability.number = cpu_to_be64(adapter->req_rx_add_queues); 1585 + atomic_inc(&adapter->running_cap_crqs); 1579 1586 ibmvnic_send_crq(adapter, &crq); 1580 1587 1581 1588 crq.request_capability.capability = 1582 1589 cpu_to_be16(REQ_TX_ENTRIES_PER_SUBCRQ); 1583 1590 crq.request_capability.number = 1584 1591 cpu_to_be64(adapter->req_tx_entries_per_subcrq); 1592 + atomic_inc(&adapter->running_cap_crqs); 1585 1593 ibmvnic_send_crq(adapter, &crq); 1586 1594 1587 1595 crq.request_capability.capability = 1588 1596 cpu_to_be16(REQ_RX_ADD_ENTRIES_PER_SUBCRQ); 1589 1597 crq.request_capability.number = 1590 1598 cpu_to_be64(adapter->req_rx_add_entries_per_subcrq); 1599 + atomic_inc(&adapter->running_cap_crqs); 1591 1600 ibmvnic_send_crq(adapter, &crq); 1592 1601 1593 1602 crq.request_capability.capability = cpu_to_be16(REQ_MTU); 1594 1603 crq.request_capability.number = cpu_to_be64(adapter->req_mtu); 1604 + atomic_inc(&adapter->running_cap_crqs); 1595 1605 ibmvnic_send_crq(adapter, &crq); 1596 1606 1597 1607 if (adapter->netdev->flags & IFF_PROMISC) { ··· 1605 1603 crq.request_capability.capability = 1606 1604 cpu_to_be16(PROMISC_REQUESTED); 1607 1605 crq.request_capability.number = cpu_to_be64(1); 1606 + atomic_inc(&adapter->running_cap_crqs); 1608 1607 ibmvnic_send_crq(adapter, &crq); 1609 1608 } 1610 1609 } else { 1611 1610 crq.request_capability.capability = 1612 1611 cpu_to_be16(PROMISC_REQUESTED); 1613 1612 crq.request_capability.number = cpu_to_be64(0); 1613 + atomic_inc(&adapter->running_cap_crqs); 1614 1614 ibmvnic_send_crq(adapter, &crq); 1615 1615 } 1616 1616 ··· 1964 1960 { 1965 1961 union ibmvnic_crq crq; 1966 1962 1967 - atomic_set(&adapter->running_cap_queries, 0); 1963 + atomic_set(&adapter->running_cap_crqs, 0); 1968 1964 memset(&crq, 0, sizeof(crq)); 1969 1965 crq.query_capability.first = IBMVNIC_CRQ_CMD; 1970 1966 crq.query_capability.cmd = QUERY_CAPABILITY; 1971 1967 1972 1968 crq.query_capability.capability = cpu_to_be16(MIN_TX_QUEUES); 1973 - atomic_inc(&adapter->running_cap_queries); 1969 + atomic_inc(&adapter->running_cap_crqs); 1974 1970 ibmvnic_send_crq(adapter, &crq); 1975 1971 1976 1972 crq.query_capability.capability = cpu_to_be16(MIN_RX_QUEUES); 1977 - atomic_inc(&adapter->running_cap_queries); 1973 + atomic_inc(&adapter->running_cap_crqs); 1978 1974 ibmvnic_send_crq(adapter, &crq); 1979 1975 1980 1976 crq.query_capability.capability = cpu_to_be16(MIN_RX_ADD_QUEUES); 1981 - atomic_inc(&adapter->running_cap_queries); 1977 + atomic_inc(&adapter->running_cap_crqs); 1982 1978 ibmvnic_send_crq(adapter, &crq); 1983 1979 1984 1980 crq.query_capability.capability = cpu_to_be16(MAX_TX_QUEUES); 1985 - atomic_inc(&adapter->running_cap_queries); 1981 + atomic_inc(&adapter->running_cap_crqs); 1986 1982 ibmvnic_send_crq(adapter, &crq); 1987 1983 1988 1984 crq.query_capability.capability = cpu_to_be16(MAX_RX_QUEUES); 1989 - atomic_inc(&adapter->running_cap_queries); 1985 + atomic_inc(&adapter->running_cap_crqs); 1990 1986 ibmvnic_send_crq(adapter, &crq); 1991 1987 1992 1988 crq.query_capability.capability = cpu_to_be16(MAX_RX_ADD_QUEUES); 1993 - atomic_inc(&adapter->running_cap_queries); 1989 + atomic_inc(&adapter->running_cap_crqs); 1994 1990 ibmvnic_send_crq(adapter, &crq); 1995 1991 1996 1992 crq.query_capability.capability = 1997 1993 cpu_to_be16(MIN_TX_ENTRIES_PER_SUBCRQ); 1998 - atomic_inc(&adapter->running_cap_queries); 1994 + atomic_inc(&adapter->running_cap_crqs); 1999 1995 ibmvnic_send_crq(adapter, &crq); 2000 1996 2001 1997 crq.query_capability.capability = 2002 1998 cpu_to_be16(MIN_RX_ADD_ENTRIES_PER_SUBCRQ); 2003 - atomic_inc(&adapter->running_cap_queries); 1999 + atomic_inc(&adapter->running_cap_crqs); 2004 2000 ibmvnic_send_crq(adapter, &crq); 2005 2001 2006 2002 crq.query_capability.capability = 2007 2003 cpu_to_be16(MAX_TX_ENTRIES_PER_SUBCRQ); 2008 - atomic_inc(&adapter->running_cap_queries); 2004 + atomic_inc(&adapter->running_cap_crqs); 2009 2005 ibmvnic_send_crq(adapter, &crq); 2010 2006 2011 2007 crq.query_capability.capability = 2012 2008 cpu_to_be16(MAX_RX_ADD_ENTRIES_PER_SUBCRQ); 2013 - atomic_inc(&adapter->running_cap_queries); 2009 + atomic_inc(&adapter->running_cap_crqs); 2014 2010 ibmvnic_send_crq(adapter, &crq); 2015 2011 2016 2012 crq.query_capability.capability = cpu_to_be16(TCP_IP_OFFLOAD); 2017 - atomic_inc(&adapter->running_cap_queries); 2013 + atomic_inc(&adapter->running_cap_crqs); 2018 2014 ibmvnic_send_crq(adapter, &crq); 2019 2015 2020 2016 crq.query_capability.capability = cpu_to_be16(PROMISC_SUPPORTED); 2021 - atomic_inc(&adapter->running_cap_queries); 2017 + atomic_inc(&adapter->running_cap_crqs); 2022 2018 ibmvnic_send_crq(adapter, &crq); 2023 2019 2024 2020 crq.query_capability.capability = cpu_to_be16(MIN_MTU); 2025 - atomic_inc(&adapter->running_cap_queries); 2021 + atomic_inc(&adapter->running_cap_crqs); 2026 2022 ibmvnic_send_crq(adapter, &crq); 2027 2023 2028 2024 crq.query_capability.capability = cpu_to_be16(MAX_MTU); 2029 - atomic_inc(&adapter->running_cap_queries); 2025 + atomic_inc(&adapter->running_cap_crqs); 2030 2026 ibmvnic_send_crq(adapter, &crq); 2031 2027 2032 2028 crq.query_capability.capability = cpu_to_be16(MAX_MULTICAST_FILTERS); 2033 - atomic_inc(&adapter->running_cap_queries); 2029 + atomic_inc(&adapter->running_cap_crqs); 2034 2030 ibmvnic_send_crq(adapter, &crq); 2035 2031 2036 2032 crq.query_capability.capability = cpu_to_be16(VLAN_HEADER_INSERTION); 2037 - atomic_inc(&adapter->running_cap_queries); 2033 + atomic_inc(&adapter->running_cap_crqs); 2038 2034 ibmvnic_send_crq(adapter, &crq); 2039 2035 2040 2036 crq.query_capability.capability = cpu_to_be16(MAX_TX_SG_ENTRIES); 2041 - atomic_inc(&adapter->running_cap_queries); 2037 + atomic_inc(&adapter->running_cap_crqs); 2042 2038 ibmvnic_send_crq(adapter, &crq); 2043 2039 2044 2040 crq.query_capability.capability = cpu_to_be16(RX_SG_SUPPORTED); 2045 - atomic_inc(&adapter->running_cap_queries); 2041 + atomic_inc(&adapter->running_cap_crqs); 2046 2042 ibmvnic_send_crq(adapter, &crq); 2047 2043 2048 2044 crq.query_capability.capability = cpu_to_be16(OPT_TX_COMP_SUB_QUEUES); 2049 - atomic_inc(&adapter->running_cap_queries); 2045 + atomic_inc(&adapter->running_cap_crqs); 2050 2046 ibmvnic_send_crq(adapter, &crq); 2051 2047 2052 2048 crq.query_capability.capability = cpu_to_be16(OPT_RX_COMP_QUEUES); 2053 - atomic_inc(&adapter->running_cap_queries); 2049 + atomic_inc(&adapter->running_cap_crqs); 2054 2050 ibmvnic_send_crq(adapter, &crq); 2055 2051 2056 2052 crq.query_capability.capability = 2057 2053 cpu_to_be16(OPT_RX_BUFADD_Q_PER_RX_COMP_Q); 2058 - atomic_inc(&adapter->running_cap_queries); 2054 + atomic_inc(&adapter->running_cap_crqs); 2059 2055 ibmvnic_send_crq(adapter, &crq); 2060 2056 2061 2057 crq.query_capability.capability = 2062 2058 cpu_to_be16(OPT_TX_ENTRIES_PER_SUBCRQ); 2063 - atomic_inc(&adapter->running_cap_queries); 2059 + atomic_inc(&adapter->running_cap_crqs); 2064 2060 ibmvnic_send_crq(adapter, &crq); 2065 2061 2066 2062 crq.query_capability.capability = 2067 2063 cpu_to_be16(OPT_RXBA_ENTRIES_PER_SUBCRQ); 2068 - atomic_inc(&adapter->running_cap_queries); 2064 + atomic_inc(&adapter->running_cap_crqs); 2069 2065 ibmvnic_send_crq(adapter, &crq); 2070 2066 2071 2067 crq.query_capability.capability = cpu_to_be16(TX_RX_DESC_REQ); 2072 - atomic_inc(&adapter->running_cap_queries); 2068 + atomic_inc(&adapter->running_cap_crqs); 2073 2069 ibmvnic_send_crq(adapter, &crq); 2074 2070 } 2075 2071 ··· 2357 2353 u64 *req_value; 2358 2354 char *name; 2359 2355 2356 + atomic_dec(&adapter->running_cap_crqs); 2360 2357 switch (be16_to_cpu(crq->request_capability_rsp.capability)) { 2361 2358 case REQ_TX_QUEUES: 2362 2359 req_value = &adapter->req_tx_queues; ··· 2412 2407 } 2413 2408 2414 2409 /* Done receiving requested capabilities, query IP offload support */ 2415 - if (++adapter->requested_caps == 7) { 2410 + if (atomic_read(&adapter->running_cap_crqs) == 0) { 2416 2411 union ibmvnic_crq newcrq; 2417 2412 int buf_sz = sizeof(struct ibmvnic_query_ip_offload_buffer); 2418 2413 struct ibmvnic_query_ip_offload_buffer *ip_offload_buf = ··· 2553 2548 struct device *dev = &adapter->vdev->dev; 2554 2549 long rc; 2555 2550 2556 - atomic_dec(&adapter->running_cap_queries); 2551 + atomic_dec(&adapter->running_cap_crqs); 2557 2552 netdev_dbg(netdev, "Outstanding queries: %d\n", 2558 - atomic_read(&adapter->running_cap_queries)); 2553 + atomic_read(&adapter->running_cap_crqs)); 2559 2554 rc = crq->query_capability.rc.code; 2560 2555 if (rc) { 2561 2556 dev_err(dev, "Error %ld in QUERY_CAP_RSP\n", rc); ··· 2713 2708 } 2714 2709 2715 2710 out: 2716 - if (atomic_read(&adapter->running_cap_queries) == 0) 2711 + if (atomic_read(&adapter->running_cap_crqs) == 0) 2717 2712 init_sub_crqs(adapter, 0); 2718 2713 /* We're done querying the capabilities, initialize sub-crqs */ 2719 2714 }
+1 -2
drivers/net/ethernet/ibm/ibmvnic.h
··· 976 976 dma_addr_t login_rsp_buf_token; 977 977 int login_rsp_buf_sz; 978 978 979 - atomic_t running_cap_queries; 979 + atomic_t running_cap_crqs; 980 980 981 981 struct ibmvnic_sub_crq_queue **tx_scrq; 982 982 struct ibmvnic_sub_crq_queue **rx_scrq; 983 - int requested_caps; 984 983 bool renegotiate; 985 984 986 985 /* rx structs */