net/iavf: fix VLAN tag extraction handling
[dpdk.git] / drivers / net / hns3 / hns3_ethdev.c
index c0ab3fc..dbd48de 100644 (file)
@@ -130,7 +130,7 @@ hns3_proc_imp_reset_event(struct hns3_adapter *hns, bool is_delay,
 {
        struct hns3_hw *hw = &hns->hw;
 
-       rte_atomic16_set(&hw->reset.disable_cmd, 1);
+       __atomic_store_n(&hw->reset.disable_cmd, 1, __ATOMIC_RELAXED);
        hns3_atomic_set_bit(HNS3_IMP_RESET, &hw->reset.pending);
        *vec_val = BIT(HNS3_VECTOR0_IMPRESET_INT_B);
        if (!is_delay) {
@@ -150,7 +150,7 @@ hns3_proc_global_reset_event(struct hns3_adapter *hns, bool is_delay,
 {
        struct hns3_hw *hw = &hns->hw;
 
-       rte_atomic16_set(&hw->reset.disable_cmd, 1);
+       __atomic_store_n(&hw->reset.disable_cmd, 1, __ATOMIC_RELAXED);
        hns3_atomic_set_bit(HNS3_GLOBAL_RESET, &hw->reset.pending);
        *vec_val = BIT(HNS3_VECTOR0_GLOBALRESET_INT_B);
        if (!is_delay) {
@@ -2343,6 +2343,7 @@ hns3_dev_configure(struct rte_eth_dev *dev)
        uint16_t nb_rx_q = dev->data->nb_rx_queues;
        uint16_t nb_tx_q = dev->data->nb_tx_queues;
        struct rte_eth_rss_conf rss_conf;
+       uint32_t max_rx_pkt_len;
        uint16_t mtu;
        bool gro_en;
        int ret;
@@ -2396,12 +2397,18 @@ hns3_dev_configure(struct rte_eth_dev *dev)
         * according to the maximum RX packet length.
         */
        if (conf->rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
-               /*
-                * Security of max_rx_pkt_len is guaranteed in dpdk frame.
-                * Maximum value of max_rx_pkt_len is HNS3_MAX_FRAME_LEN, so it
-                * can safely assign to "uint16_t" type variable.
-                */
-               mtu = (uint16_t)HNS3_PKTLEN_TO_MTU(conf->rxmode.max_rx_pkt_len);
+               max_rx_pkt_len = conf->rxmode.max_rx_pkt_len;
+               if (max_rx_pkt_len > HNS3_MAX_FRAME_LEN ||
+                   max_rx_pkt_len <= HNS3_DEFAULT_FRAME_LEN) {
+                       hns3_err(hw, "maximum Rx packet length must be greater "
+                                "than %u and less than %u when jumbo frame enabled.",
+                                (uint16_t)HNS3_DEFAULT_FRAME_LEN,
+                                (uint16_t)HNS3_MAX_FRAME_LEN);
+                       ret = -EINVAL;
+                       goto cfg_err;
+               }
+
+               mtu = (uint16_t)HNS3_PKTLEN_TO_MTU(max_rx_pkt_len);
                ret = hns3_dev_mtu_set(dev, mtu);
                if (ret)
                        goto cfg_err;
@@ -5070,7 +5077,7 @@ hns3_do_stop(struct hns3_adapter *hns)
                return ret;
        hw->mac.link_status = ETH_LINK_DOWN;
 
-       if (rte_atomic16_read(&hw->reset.disable_cmd) == 0) {
+       if (__atomic_load_n(&hw->reset.disable_cmd, __ATOMIC_RELAXED) == 0) {
                hns3_configure_all_mac_addr(hns, true);
                ret = hns3_reset_all_tqps(hns);
                if (ret) {
@@ -5613,7 +5620,7 @@ hns3_prepare_reset(struct hns3_adapter *hns)
                 * any mailbox handling or command to firmware is only valid
                 * after hns3_cmd_init is called.
                 */
-               rte_atomic16_set(&hw->reset.disable_cmd, 1);
+               __atomic_store_n(&hw->reset.disable_cmd, 1, __ATOMIC_RELAXED);
                hw->reset.stats.request_cnt++;
                break;
        case HNS3_IMP_RESET:
@@ -5673,7 +5680,7 @@ hns3_stop_service(struct hns3_adapter *hns)
         * from table space. Hence, for function reset software intervention is
         * required to delete the entries
         */
-       if (rte_atomic16_read(&hw->reset.disable_cmd) == 0)
+       if (__atomic_load_n(&hw->reset.disable_cmd, __ATOMIC_RELAXED) == 0)
                hns3_configure_all_mc_mac_addr(hns, true);
        rte_spinlock_unlock(&hw->lock);
 
@@ -5795,8 +5802,10 @@ hns3_reset_service(void *param)
         * The interrupt may have been lost. It is necessary to handle
         * the interrupt to recover from the error.
         */
-       if (rte_atomic16_read(&hns->hw.reset.schedule) == SCHEDULE_DEFERRED) {
-               rte_atomic16_set(&hns->hw.reset.schedule, SCHEDULE_REQUESTED);
+       if (__atomic_load_n(&hw->reset.schedule, __ATOMIC_RELAXED) ==
+                           SCHEDULE_DEFERRED) {
+               __atomic_store_n(&hw->reset.schedule, SCHEDULE_REQUESTED,
+                                 __ATOMIC_RELAXED);
                hns3_err(hw, "Handling interrupts in delayed tasks");
                hns3_interrupt_handler(&rte_eth_devices[hw->data->port_id]);
                reset_level = hns3_get_reset_level(hns, &hw->reset.pending);
@@ -5805,7 +5814,7 @@ hns3_reset_service(void *param)
                        hns3_atomic_set_bit(HNS3_IMP_RESET, &hw->reset.pending);
                }
        }
-       rte_atomic16_set(&hns->hw.reset.schedule, SCHEDULE_NONE);
+       __atomic_store_n(&hw->reset.schedule, SCHEDULE_NONE, __ATOMIC_RELAXED);
 
        /*
         * Check if there is any ongoing reset in the hardware. This status can
@@ -6325,7 +6334,8 @@ hns3_dev_init(struct rte_eth_dev *eth_dev)
 
        hw->adapter_state = HNS3_NIC_INITIALIZED;
 
-       if (rte_atomic16_read(&hns->hw.reset.schedule) == SCHEDULE_PENDING) {
+       if (__atomic_load_n(&hw->reset.schedule, __ATOMIC_RELAXED) ==
+                           SCHEDULE_PENDING) {
                hns3_err(hw, "Reschedule reset service after dev_init");
                hns3_schedule_reset(hns);
        } else {