udp: dynamically size hash tables at boot time
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / net / udp.h
index 5fb029f817a3574fb8b7648dbb793d2ff29248b5..22aa2e7eb1d77e1cb075f79e190e36b8ee7aee01 100644 (file)
@@ -54,12 +54,19 @@ struct udp_hslot {
        struct hlist_nulls_head head;
        spinlock_t              lock;
 } __attribute__((aligned(2 * sizeof(long))));
+
 struct udp_table {
-       struct udp_hslot        hash[UDP_HTABLE_SIZE];
+       struct udp_hslot        *hash;
+       unsigned int mask;
+       unsigned int log;
 };
 extern struct udp_table udp_table;
-extern void udp_table_init(struct udp_table *);
-
+extern void udp_table_init(struct udp_table *, const char *);
+static inline struct udp_hslot *udp_hashslot(struct udp_table *table,
+                                            struct net *net, unsigned num)
+{
+       return &table->hash[udp_hashfn(net, num, table->mask)];
+}
 
 /* Note: this must match 'valbool' in sock_setsockopt */
 #define UDP_CSUM_NOXMIT                1
@@ -144,7 +151,7 @@ extern unsigned int udp_poll(struct file *file, struct socket *sock,
 extern int     udp_lib_getsockopt(struct sock *sk, int level, int optname,
                                   char __user *optval, int __user *optlen);
 extern int     udp_lib_setsockopt(struct sock *sk, int level, int optname,
-                                  char __user *optval, int optlen,
+                                  char __user *optval, unsigned int optlen,
                                   int (*push_pending_frames)(struct sock *));
 
 extern struct sock *udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport,