Author: sephe
Date: Wed Apr 27 05:18:04 2016
New Revision: 298690
URL: https://svnweb.freebsd.org/changeset/base/298690

Log:
  hyperv/hn: Mark sysctls MPSAFE
  
  MFC after:    1 week
  Sponsored by: Microsoft OSTC

Modified:
  head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c

Modified: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c  Wed Apr 27 05:05:54 
2016        (r298689)
+++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c  Wed Apr 27 05:18:04 
2016        (r298690)
@@ -214,7 +214,8 @@ struct hn_txdesc {
 
 int hv_promisc_mode = 0;    /* normal mode by default */
 
-SYSCTL_NODE(_hw, OID_AUTO, hn, CTLFLAG_RD, NULL, "Hyper-V network interface");
+SYSCTL_NODE(_hw, OID_AUTO, hn, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
+    "Hyper-V network interface");
 
 /* Trust tcp segements verification on host side. */
 static int hn_trust_hosttcp = 1;
@@ -2170,7 +2171,7 @@ hn_create_rx_data(struct hn_softc *sc, i
 
        /* Create dev.hn.UNIT.rx sysctl tree */
        sc->hn_rx_sysctl_tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "rx",
-           CTLFLAG_RD, 0, "");
+           CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "");
 
        for (i = 0; i < sc->hn_rx_ring_cnt; ++i) {
                struct hn_rx_ring *rxr = &sc->hn_rx_ring[i];
@@ -2210,7 +2211,7 @@ hn_create_rx_data(struct hn_softc *sc, i
                        snprintf(name, sizeof(name), "%d", i);
                        rxr->hn_rx_sysctl_tree = SYSCTL_ADD_NODE(ctx,
                            SYSCTL_CHILDREN(sc->hn_rx_sysctl_tree),
-                           OID_AUTO, name, CTLFLAG_RD, 0, "");
+                           OID_AUTO, name, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "");
 
                        if (rxr->hn_rx_sysctl_tree != NULL) {
                                SYSCTL_ADD_ULONG(ctx,
@@ -2222,59 +2223,61 @@ hn_create_rx_data(struct hn_softc *sc, i
        }
 
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "lro_queued",
-           CTLTYPE_U64 | CTLFLAG_RW, sc,
+           CTLTYPE_U64 | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_rx_ring, hn_lro.lro_queued),
            hn_rx_stat_u64_sysctl, "LU", "LRO queued");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "lro_flushed",
-           CTLTYPE_U64 | CTLFLAG_RW, sc,
+           CTLTYPE_U64 | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_rx_ring, hn_lro.lro_flushed),
            hn_rx_stat_u64_sysctl, "LU", "LRO flushed");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "lro_tried",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_rx_ring, hn_lro_tried),
            hn_rx_stat_ulong_sysctl, "LU", "# of LRO tries");
 #if __FreeBSD_version >= 1100099
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "lro_length_lim",
-           CTLTYPE_UINT | CTLFLAG_RW, sc, 0, hn_lro_lenlim_sysctl, "IU",
+           CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
+           hn_lro_lenlim_sysctl, "IU",
            "Max # of data bytes to be aggregated by LRO");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "lro_ackcnt_lim",
-           CTLTYPE_INT | CTLFLAG_RW, sc, 0, hn_lro_ackcnt_sysctl, "I",
+           CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
+           hn_lro_ackcnt_sysctl, "I",
            "Max # of ACKs to be aggregated by LRO");
 #endif
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "trust_hosttcp",
-           CTLTYPE_INT | CTLFLAG_RW, sc, HN_TRUST_HCSUM_TCP,
+           CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, HN_TRUST_HCSUM_TCP,
            hn_trust_hcsum_sysctl, "I",
            "Trust tcp segement verification on host side, "
            "when csum info is missing");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "trust_hostudp",
-           CTLTYPE_INT | CTLFLAG_RW, sc, HN_TRUST_HCSUM_UDP,
+           CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, HN_TRUST_HCSUM_UDP,
            hn_trust_hcsum_sysctl, "I",
            "Trust udp datagram verification on host side, "
            "when csum info is missing");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "trust_hostip",
-           CTLTYPE_INT | CTLFLAG_RW, sc, HN_TRUST_HCSUM_IP,
+           CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, HN_TRUST_HCSUM_IP,
            hn_trust_hcsum_sysctl, "I",
            "Trust ip packet verification on host side, "
            "when csum info is missing");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "csum_ip",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_rx_ring, hn_csum_ip),
            hn_rx_stat_ulong_sysctl, "LU", "RXCSUM IP");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "csum_tcp",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_rx_ring, hn_csum_tcp),
            hn_rx_stat_ulong_sysctl, "LU", "RXCSUM TCP");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "csum_udp",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_rx_ring, hn_csum_udp),
            hn_rx_stat_ulong_sysctl, "LU", "RXCSUM UDP");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "csum_trusted",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_rx_ring, hn_csum_trusted),
            hn_rx_stat_ulong_sysctl, "LU",
            "# of packets that we trust host's csum verification");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "small_pkts",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_rx_ring, hn_small_pkts),
            hn_rx_stat_ulong_sysctl, "LU", "# of small packets received");
        SYSCTL_ADD_INT(ctx, child, OID_AUTO, "rx_ring_cnt",
@@ -2467,7 +2470,7 @@ hn_create_tx_ring(struct hn_softc *sc, i
 
                snprintf(name, sizeof(name), "%d", id);
                txr->hn_tx_sysctl_tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO,
-                   name, CTLFLAG_RD, 0, "");
+                   name, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "");
 
                if (txr->hn_tx_sysctl_tree != NULL) {
                        child = SYSCTL_CHILDREN(txr->hn_tx_sysctl_tree);
@@ -2562,7 +2565,7 @@ hn_create_tx_data(struct hn_softc *sc, i
 
        /* Create dev.hn.UNIT.tx sysctl tree */
        sc->hn_tx_sysctl_tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "tx",
-           CTLFLAG_RD, 0, "");
+           CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "");
 
        for (i = 0; i < sc->hn_tx_ring_cnt; ++i) {
                int error;
@@ -2573,23 +2576,23 @@ hn_create_tx_data(struct hn_softc *sc, i
        }
 
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "no_txdescs",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_tx_ring, hn_no_txdescs),
            hn_tx_stat_ulong_sysctl, "LU", "# of times short of TX descs");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "send_failed",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_tx_ring, hn_send_failed),
            hn_tx_stat_ulong_sysctl, "LU", "# of hyper-v sending failure");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "txdma_failed",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_tx_ring, hn_txdma_failed),
            hn_tx_stat_ulong_sysctl, "LU", "# of TX DMA failure");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "tx_collapsed",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_tx_ring, hn_tx_collapsed),
            hn_tx_stat_ulong_sysctl, "LU", "# of TX mbuf collapsed");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "tx_chimney",
-           CTLTYPE_ULONG | CTLFLAG_RW, sc,
+           CTLTYPE_ULONG | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_tx_ring, hn_tx_chimney),
            hn_tx_stat_ulong_sysctl, "LU", "# of chimney send");
        SYSCTL_ADD_INT(ctx, child, OID_AUTO, "txdesc_cnt",
@@ -2599,15 +2602,16 @@ hn_create_tx_data(struct hn_softc *sc, i
            CTLFLAG_RD, &sc->hn_tx_chimney_max, 0,
            "Chimney send packet size upper boundary");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "tx_chimney_size",
-           CTLTYPE_INT | CTLFLAG_RW, sc, 0, hn_tx_chimney_size_sysctl,
+           CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
+           hn_tx_chimney_size_sysctl,
            "I", "Chimney send packet size limit");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "direct_tx_size",
-           CTLTYPE_INT | CTLFLAG_RW, sc,
+           CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_tx_ring, hn_direct_tx_size),
            hn_tx_conf_int_sysctl, "I",
            "Size of the packet for direct transmission");
        SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "sched_tx",
-           CTLTYPE_INT | CTLFLAG_RW, sc,
+           CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc,
            __offsetof(struct hn_tx_ring, hn_sched_tx),
            hn_tx_conf_int_sysctl, "I",
            "Always schedule transmission "
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to