]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/core/sock.c
net: add socket option for low latency polling
[karo-tx-linux.git] / net / core / sock.c
index 788c0da5eed17fedee804c1654bff2b33d7d0261..1e744b12fda35364990e927b911b3ba2b615ade9 100644 (file)
@@ -913,6 +913,19 @@ set_rcvbuf:
                sock_valbool_flag(sk, SOCK_SELECT_ERR_QUEUE, valbool);
                break;
 
+#ifdef CONFIG_NET_LL_RX_POLL
+       case SO_LL:
+               /* allow unprivileged users to decrease the value */
+               if ((val > sk->sk_ll_usec) && !capable(CAP_NET_ADMIN))
+                       ret = -EPERM;
+               else {
+                       if (val < 0)
+                               ret = -EINVAL;
+                       else
+                               sk->sk_ll_usec = val;
+               }
+               break;
+#endif
        default:
                ret = -ENOPROTOOPT;
                break;
@@ -1170,6 +1183,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
                v.val = sock_flag(sk, SOCK_SELECT_ERR_QUEUE);
                break;
 
+#ifdef CONFIG_NET_LL_RX_POLL
+       case SO_LL:
+               v.val = sk->sk_ll_usec;
+               break;
+#endif
+
        default:
                return -ENOPROTOOPT;
        }
@@ -2288,6 +2307,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
 
 #ifdef CONFIG_NET_LL_RX_POLL
        sk->sk_napi_id          =       0;
+       sk->sk_ll_usec          =       sysctl_net_ll_poll;
 #endif
 
        /*