diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2016-09-01 12:33:46 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2016-09-01 12:33:46 -0400 |
| commit | 0cb7bf61b1e9f05027de58c80f9b46a714d24e35 (patch) | |
| tree | 41fb55cf62d07b425122f9a8b96412c0d8eb99c5 /include/net | |
| parent | aa877175e7a9982233ed8f10cb4bfddd78d82741 (diff) | |
| parent | 3eab887a55424fc2c27553b7bfe32330df83f7b8 (diff) | |
Merge branch 'linus' into smp/hotplug
Apply upstream changes to avoid conflicts with pending patches.
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/act_api.h | 23 | ||||
| -rw-r--r-- | include/net/af_rxrpc.h | 2 | ||||
| -rw-r--r-- | include/net/gre.h | 1 | ||||
| -rw-r--r-- | include/net/inet_ecn.h | 3 | ||||
| -rw-r--r-- | include/net/mac80211.h | 3 | ||||
| -rw-r--r-- | include/net/pkt_cls.h | 41 |
6 files changed, 47 insertions, 26 deletions
diff --git a/include/net/act_api.h b/include/net/act_api.h index 41e6a24a44b9..82f3c912a5b1 100644 --- a/include/net/act_api.h +++ b/include/net/act_api.h | |||
| @@ -176,8 +176,8 @@ int tcf_register_action(struct tc_action_ops *a, struct pernet_operations *ops); | |||
| 176 | int tcf_unregister_action(struct tc_action_ops *a, | 176 | int tcf_unregister_action(struct tc_action_ops *a, |
| 177 | struct pernet_operations *ops); | 177 | struct pernet_operations *ops); |
| 178 | int tcf_action_destroy(struct list_head *actions, int bind); | 178 | int tcf_action_destroy(struct list_head *actions, int bind); |
| 179 | int tcf_action_exec(struct sk_buff *skb, const struct list_head *actions, | 179 | int tcf_action_exec(struct sk_buff *skb, struct tc_action **actions, |
| 180 | struct tcf_result *res); | 180 | int nr_actions, struct tcf_result *res); |
| 181 | int tcf_action_init(struct net *net, struct nlattr *nla, | 181 | int tcf_action_init(struct net *net, struct nlattr *nla, |
| 182 | struct nlattr *est, char *n, int ovr, | 182 | struct nlattr *est, char *n, int ovr, |
| 183 | int bind, struct list_head *); | 183 | int bind, struct list_head *); |
| @@ -189,30 +189,17 @@ int tcf_action_dump_old(struct sk_buff *skb, struct tc_action *a, int, int); | |||
| 189 | int tcf_action_dump_1(struct sk_buff *skb, struct tc_action *a, int, int); | 189 | int tcf_action_dump_1(struct sk_buff *skb, struct tc_action *a, int, int); |
| 190 | int tcf_action_copy_stats(struct sk_buff *, struct tc_action *, int); | 190 | int tcf_action_copy_stats(struct sk_buff *, struct tc_action *, int); |
| 191 | 191 | ||
| 192 | #define tc_no_actions(_exts) \ | 192 | #endif /* CONFIG_NET_CLS_ACT */ |
| 193 | (list_empty(&(_exts)->actions)) | ||
| 194 | |||
| 195 | #define tc_for_each_action(_a, _exts) \ | ||
| 196 | list_for_each_entry(a, &(_exts)->actions, list) | ||
| 197 | |||
| 198 | #define tc_single_action(_exts) \ | ||
| 199 | (list_is_singular(&(_exts)->actions)) | ||
| 200 | 193 | ||
| 201 | static inline void tcf_action_stats_update(struct tc_action *a, u64 bytes, | 194 | static inline void tcf_action_stats_update(struct tc_action *a, u64 bytes, |
| 202 | u64 packets, u64 lastuse) | 195 | u64 packets, u64 lastuse) |
| 203 | { | 196 | { |
| 197 | #ifdef CONFIG_NET_CLS_ACT | ||
| 204 | if (!a->ops->stats_update) | 198 | if (!a->ops->stats_update) |
| 205 | return; | 199 | return; |
| 206 | 200 | ||
| 207 | a->ops->stats_update(a, bytes, packets, lastuse); | 201 | a->ops->stats_update(a, bytes, packets, lastuse); |
| 202 | #endif | ||
| 208 | } | 203 | } |
| 209 | 204 | ||
| 210 | #else /* CONFIG_NET_CLS_ACT */ | ||
| 211 | |||
| 212 | #define tc_no_actions(_exts) true | ||
| 213 | #define tc_for_each_action(_a, _exts) while ((void)(_a), 0) | ||
| 214 | #define tc_single_action(_exts) false | ||
| 215 | #define tcf_action_stats_update(a, bytes, packets, lastuse) | ||
| 216 | |||
| 217 | #endif /* CONFIG_NET_CLS_ACT */ | ||
| 218 | #endif | 205 | #endif |
diff --git a/include/net/af_rxrpc.h b/include/net/af_rxrpc.h index ac1bc3c49fbd..7b0f88699b25 100644 --- a/include/net/af_rxrpc.h +++ b/include/net/af_rxrpc.h | |||
| @@ -40,12 +40,12 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *, | |||
| 40 | unsigned long, | 40 | unsigned long, |
| 41 | gfp_t); | 41 | gfp_t); |
| 42 | int rxrpc_kernel_send_data(struct rxrpc_call *, struct msghdr *, size_t); | 42 | int rxrpc_kernel_send_data(struct rxrpc_call *, struct msghdr *, size_t); |
| 43 | void rxrpc_kernel_data_consumed(struct rxrpc_call *, struct sk_buff *); | ||
| 43 | void rxrpc_kernel_abort_call(struct rxrpc_call *, u32); | 44 | void rxrpc_kernel_abort_call(struct rxrpc_call *, u32); |
| 44 | void rxrpc_kernel_end_call(struct rxrpc_call *); | 45 | void rxrpc_kernel_end_call(struct rxrpc_call *); |
| 45 | bool rxrpc_kernel_is_data_last(struct sk_buff *); | 46 | bool rxrpc_kernel_is_data_last(struct sk_buff *); |
| 46 | u32 rxrpc_kernel_get_abort_code(struct sk_buff *); | 47 | u32 rxrpc_kernel_get_abort_code(struct sk_buff *); |
| 47 | int rxrpc_kernel_get_error_number(struct sk_buff *); | 48 | int rxrpc_kernel_get_error_number(struct sk_buff *); |
| 48 | void rxrpc_kernel_data_delivered(struct sk_buff *); | ||
| 49 | void rxrpc_kernel_free_skb(struct sk_buff *); | 49 | void rxrpc_kernel_free_skb(struct sk_buff *); |
| 50 | struct rxrpc_call *rxrpc_kernel_accept_call(struct socket *, unsigned long); | 50 | struct rxrpc_call *rxrpc_kernel_accept_call(struct socket *, unsigned long); |
| 51 | int rxrpc_kernel_reject_call(struct socket *); | 51 | int rxrpc_kernel_reject_call(struct socket *); |
diff --git a/include/net/gre.h b/include/net/gre.h index 7a54a31d1d4c..73ea256eb7d7 100644 --- a/include/net/gre.h +++ b/include/net/gre.h | |||
| @@ -104,6 +104,7 @@ static inline void gre_build_header(struct sk_buff *skb, int hdr_len, | |||
| 104 | 104 | ||
| 105 | skb_push(skb, hdr_len); | 105 | skb_push(skb, hdr_len); |
| 106 | 106 | ||
| 107 | skb_set_inner_protocol(skb, proto); | ||
| 107 | skb_reset_transport_header(skb); | 108 | skb_reset_transport_header(skb); |
| 108 | greh = (struct gre_base_hdr *)skb->data; | 109 | greh = (struct gre_base_hdr *)skb->data; |
| 109 | greh->flags = gre_tnl_flags_to_gre_flags(flags); | 110 | greh->flags = gre_tnl_flags_to_gre_flags(flags); |
diff --git a/include/net/inet_ecn.h b/include/net/inet_ecn.h index 0dc0a51da38f..dce2d586d9ce 100644 --- a/include/net/inet_ecn.h +++ b/include/net/inet_ecn.h | |||
| @@ -128,7 +128,8 @@ static inline int IP6_ECN_set_ce(struct sk_buff *skb, struct ipv6hdr *iph) | |||
| 128 | to = from | htonl(INET_ECN_CE << 20); | 128 | to = from | htonl(INET_ECN_CE << 20); |
| 129 | *(__be32 *)iph = to; | 129 | *(__be32 *)iph = to; |
| 130 | if (skb->ip_summed == CHECKSUM_COMPLETE) | 130 | if (skb->ip_summed == CHECKSUM_COMPLETE) |
| 131 | skb->csum = csum_add(csum_sub(skb->csum, from), to); | 131 | skb->csum = csum_add(csum_sub(skb->csum, (__force __wsum)from), |
| 132 | (__force __wsum)to); | ||
| 132 | return 1; | 133 | return 1; |
| 133 | } | 134 | } |
| 134 | 135 | ||
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index b4faadbb4e01..cca510a585c3 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
| @@ -3620,7 +3620,8 @@ struct ieee80211_ops { | |||
| 3620 | 3620 | ||
| 3621 | int (*join_ibss)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); | 3621 | int (*join_ibss)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); |
| 3622 | void (*leave_ibss)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); | 3622 | void (*leave_ibss)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); |
| 3623 | u32 (*get_expected_throughput)(struct ieee80211_sta *sta); | 3623 | u32 (*get_expected_throughput)(struct ieee80211_hw *hw, |
| 3624 | struct ieee80211_sta *sta); | ||
| 3624 | int (*get_txpower)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | 3625 | int (*get_txpower)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
| 3625 | int *dbm); | 3626 | int *dbm); |
| 3626 | 3627 | ||
diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 6f8d65342d3a..c99508d426cc 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h | |||
| @@ -59,7 +59,8 @@ tcf_unbind_filter(struct tcf_proto *tp, struct tcf_result *r) | |||
| 59 | struct tcf_exts { | 59 | struct tcf_exts { |
| 60 | #ifdef CONFIG_NET_CLS_ACT | 60 | #ifdef CONFIG_NET_CLS_ACT |
| 61 | __u32 type; /* for backward compat(TCA_OLD_COMPAT) */ | 61 | __u32 type; /* for backward compat(TCA_OLD_COMPAT) */ |
| 62 | struct list_head actions; | 62 | int nr_actions; |
| 63 | struct tc_action **actions; | ||
| 63 | #endif | 64 | #endif |
| 64 | /* Map to export classifier specific extension TLV types to the | 65 | /* Map to export classifier specific extension TLV types to the |
| 65 | * generic extensions API. Unsupported extensions must be set to 0. | 66 | * generic extensions API. Unsupported extensions must be set to 0. |
| @@ -72,7 +73,10 @@ static inline void tcf_exts_init(struct tcf_exts *exts, int action, int police) | |||
| 72 | { | 73 | { |
| 73 | #ifdef CONFIG_NET_CLS_ACT | 74 | #ifdef CONFIG_NET_CLS_ACT |
| 74 | exts->type = 0; | 75 | exts->type = 0; |
| 75 | INIT_LIST_HEAD(&exts->actions); | 76 | exts->nr_actions = 0; |
| 77 | exts->actions = kcalloc(TCA_ACT_MAX_PRIO, sizeof(struct tc_action *), | ||
| 78 | GFP_KERNEL); | ||
| 79 | WARN_ON(!exts->actions); /* TODO: propagate the error to callers */ | ||
| 76 | #endif | 80 | #endif |
| 77 | exts->action = action; | 81 | exts->action = action; |
| 78 | exts->police = police; | 82 | exts->police = police; |
| @@ -89,7 +93,7 @@ static inline int | |||
| 89 | tcf_exts_is_predicative(struct tcf_exts *exts) | 93 | tcf_exts_is_predicative(struct tcf_exts *exts) |
| 90 | { | 94 | { |
| 91 | #ifdef CONFIG_NET_CLS_ACT | 95 | #ifdef CONFIG_NET_CLS_ACT |
| 92 | return !list_empty(&exts->actions); | 96 | return exts->nr_actions; |
| 93 | #else | 97 | #else |
| 94 | return 0; | 98 | return 0; |
| 95 | #endif | 99 | #endif |
| @@ -108,6 +112,20 @@ tcf_exts_is_available(struct tcf_exts *exts) | |||
| 108 | return tcf_exts_is_predicative(exts); | 112 | return tcf_exts_is_predicative(exts); |
| 109 | } | 113 | } |
| 110 | 114 | ||
| 115 | static inline void tcf_exts_to_list(const struct tcf_exts *exts, | ||
| 116 | struct list_head *actions) | ||
| 117 | { | ||
| 118 | #ifdef CONFIG_NET_CLS_ACT | ||
| 119 | int i; | ||
| 120 | |||
| 121 | for (i = 0; i < exts->nr_actions; i++) { | ||
| 122 | struct tc_action *a = exts->actions[i]; | ||
| 123 | |||
| 124 | list_add(&a->list, actions); | ||
| 125 | } | ||
| 126 | #endif | ||
| 127 | } | ||
| 128 | |||
| 111 | /** | 129 | /** |
| 112 | * tcf_exts_exec - execute tc filter extensions | 130 | * tcf_exts_exec - execute tc filter extensions |
| 113 | * @skb: socket buffer | 131 | * @skb: socket buffer |
| @@ -124,12 +142,25 @@ tcf_exts_exec(struct sk_buff *skb, struct tcf_exts *exts, | |||
| 124 | struct tcf_result *res) | 142 | struct tcf_result *res) |
| 125 | { | 143 | { |
| 126 | #ifdef CONFIG_NET_CLS_ACT | 144 | #ifdef CONFIG_NET_CLS_ACT |
| 127 | if (!list_empty(&exts->actions)) | 145 | if (exts->nr_actions) |
| 128 | return tcf_action_exec(skb, &exts->actions, res); | 146 | return tcf_action_exec(skb, exts->actions, exts->nr_actions, |
| 147 | res); | ||
| 129 | #endif | 148 | #endif |
| 130 | return 0; | 149 | return 0; |
| 131 | } | 150 | } |
| 132 | 151 | ||
| 152 | #ifdef CONFIG_NET_CLS_ACT | ||
| 153 | |||
| 154 | #define tc_no_actions(_exts) ((_exts)->nr_actions == 0) | ||
| 155 | #define tc_single_action(_exts) ((_exts)->nr_actions == 1) | ||
| 156 | |||
| 157 | #else /* CONFIG_NET_CLS_ACT */ | ||
| 158 | |||
| 159 | #define tc_no_actions(_exts) true | ||
| 160 | #define tc_single_action(_exts) false | ||
| 161 | |||
| 162 | #endif /* CONFIG_NET_CLS_ACT */ | ||
| 163 | |||
| 133 | int tcf_exts_validate(struct net *net, struct tcf_proto *tp, | 164 | int tcf_exts_validate(struct net *net, struct tcf_proto *tp, |
| 134 | struct nlattr **tb, struct nlattr *rate_tlv, | 165 | struct nlattr **tb, struct nlattr *rate_tlv, |
| 135 | struct tcf_exts *exts, bool ovr); | 166 | struct tcf_exts *exts, bool ovr); |
