History

Merge tag 'net-6.16-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net

Pull networking fixes from Paolo Abeni: "Including fixes from bluetooth and wireless. Current release - regressions: - bridge: fix use-after-free during router port configuration Current release - new code bugs: - eth: wangxun: fix the creation of page_pool Previous releases - regressions: - netpoll: initialize UDP checksum field before checksumming - wifi: mac80211: finish link init before RCU publish - bluetooth: fix use-after-free in vhci_flush() - eth: - ionic: fix DMA mapping test - bnxt: properly flush XDP redirect lists Previous releases - always broken: - netlink: specs: enforce strict naming of properties - unix: don't leave consecutive consumed OOB skbs. - vsock: fix linux/vm_sockets.h userspace compilation errors - selftests: fix TCP packet checksum" * tag 'net-6.16-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (38 commits) net: libwx: fix the creation of page_pool net: selftests: fix TCP packet checksum atm: Release atm_dev_mutex after removing procfs in atm_dev_deregister(). netlink: specs: enforce strict naming of properties netlink: specs: tc: replace underscores with dashes in names netlink: specs: rt-link: replace underscores with dashes in names netlink: specs: mptcp: replace underscores with dashes in names netlink: specs: ovs_flow: replace underscores with dashes in names netlink: specs: devlink: replace underscores with dashes in names netlink: specs: dpll: replace underscores with dashes in names netlink: specs: ethtool: replace underscores with dashes in names netlink: specs: fou: replace underscores with dashes in names netlink: specs: nfsd: replace underscores with dashes in names net: enetc: Correct endianness handling in _enetc_rd_reg64 atm: idt77252: Add missing `dma_map_error()` bnxt: properly flush XDP redirect lists vsock/uapi: fix linux/vm_sockets.h userspace compilation errors wifi: mac80211: finish link init before RCU publish wifi: iwlwifi: mvm: assume '1' as the default mac_config_cmd version selftest: af_unix: Add tests for -ECONNRESET. ...

Linus Torvalds committed 1 year ago

Commit e34a79b2 parents ee88bdd 85720e041 files · +378 −116Browse files

Unified · Split

41 files
  1. CREDITS +5 −0
  2. Documentation/netlink/genetlink-legacy.yaml +9 −6
  3. Documentation/netlink/genetlink.yaml +10 −7
  4. Documentation/netlink/netlink-raw.yaml +12 −6
  5. Documentation/netlink/specs/devlink.yaml +4 −4
  6. Documentation/netlink/specs/dpll.yaml +1 −1
  7. Documentation/netlink/specs/ethtool.yaml +3 −3
  8. Documentation/netlink/specs/fou.yaml +18 −18
  9. Documentation/netlink/specs/mptcp_pm.yaml +4 −4
  10. Documentation/netlink/specs/nfsd.yaml +2 −2
  11. Documentation/netlink/specs/ovs_flow.yaml +3 −3
  12. Documentation/netlink/specs/rt-link.yaml +2 −2
  13. Documentation/netlink/specs/tc.yaml +2 −2
  14. Documentation/networking/device_drivers/ethernet/marvell/octeontx2.rst +1 −1
  15. drivers/atm/idt77252.c +5 −0
  16. drivers/bluetooth/btintel_pcie.c +31 −2
  17. drivers/bluetooth/hci_qca.c +10 −3
  18. drivers/net/ethernet/broadcom/bnxt/bnxt.c +4 −1
  19. drivers/net/ethernet/freescale/enetc/enetc_hw.h +1 −1
  20. drivers/net/ethernet/microsoft/mana/gdma_main.c +3 −0
  21. drivers/net/ethernet/pensando/ionic/ionic_txrx.c +6 −6
  22. drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c +4 −4
  23. drivers/net/ethernet/wangxun/libwx/wx_lib.c +1 −1
  24. drivers/net/usb/qmi_wwan.c +1 −0
  25. drivers/net/wireless/intel/iwlegacy/4965-rs.c +2 −1
  26. drivers/net/wireless/intel/iwlwifi/mvm/mld-mac.c +2 −2
  27. include/net/bluetooth/hci_core.h +2 −0
  28. include/uapi/linux/mptcp_pm.h +3 −3
  29. include/uapi/linux/vm_sockets.h +4 −0
  30. net/atm/clip.c +5 −6
  31. net/atm/resources.c +1 −2
  32. net/bluetooth/hci_core.c +30 −4
  33. net/bluetooth/l2cap_core.c +8 −1
  34. net/bridge/br_multicast.c +9 −0
  35. net/core/netpoll.c +1 −1
  36. net/core/selftests.c +3 −2
  37. net/mac80211/link.c +3 −3
  38. net/mac80211/util.c +1 −1
  39. net/unix/af_unix.c +23 −8
  40. tools/testing/selftests/drivers/net/hw/rss_input_xfrm.py +1 −1
  41. tools/testing/selftests/net/af_unix/msg_oob.c +138 −4
CREDITS+5−0
@@ -2981,6 +2981,11 @@ S: 521 Pleasant Valley Road · 2980 unmodified lines
2981S: Potsdam, New York 136762981S: Potsdam, New York 13676
2982S: USA2982S: USA
2983 2983
2984N: Shannon Nelson
2985E: sln@onemain.com
2986D: Worked on several network drivers including
2987D: ixgbe, i40e, ionic, pds_core, pds_vdpa, pds_fwctl
2988
2984N: Dave Neuer2989N: Dave Neuer
2985E: dave.neuer@pobox.com2990E: dave.neuer@pobox.com
2986D: Helped implement support for Compaq's H31xx series iPAQs2991D: Helped implement support for Compaq's H31xx series iPAQs
Documentation/netlink/genetlink-legacy.yaml+9−6
@@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines
6 6
7# Common defines7# Common defines
8$defs:8$defs:
9 name:
10 type: string
11 pattern: ^[0-9a-z-]+$
9 uint:12 uint:
10 type: integer13 type: integer
11 minimum: 014 minimum: 0
@@ -76,7 +79,7 @@ properties: · 64 unmodified lines
76 additionalProperties: False79 additionalProperties: False
77 properties:80 properties:
78 name:81 name:
79 type: string82 $ref: '#/$defs/name'
80 header:83 header:
81 description: For C-compatible languages, header which already defines this value.84 description: For C-compatible languages, header which already defines this value.
82 type: string85 type: string
@@ -103,7 +106,7 @@ properties: · 20 unmodified lines
103 additionalProperties: False106 additionalProperties: False
104 properties:107 properties:
105 name:108 name:
106 type: string109 $ref: '#/$defs/name'
107 value:110 value:
108 type: integer111 type: integer
109 doc:112 doc:
@@ -132,7 +135,7 @@ properties: · 22 unmodified lines
132 additionalProperties: False135 additionalProperties: False
133 properties:136 properties:
134 name:137 name:
135 type: string138 $ref: '#/$defs/name'
136 type:139 type:
137 description: The netlink attribute type140 description: The netlink attribute type
138 enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]141 enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
@@ -169,7 +172,7 @@ properties: · 30 unmodified lines
169 name:172 name:
170 description: |173 description: |
171 Name used when referring to this space in other definitions, not used outside of the spec.174 Name used when referring to this space in other definitions, not used outside of the spec.
172 type: string175 $ref: '#/$defs/name'
173 name-prefix:176 name-prefix:
174 description: |177 description: |
175 Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-178 Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
@@ -206,7 +209,7 @@ properties: · 30 unmodified lines
206 additionalProperties: False209 additionalProperties: False
207 properties:210 properties:
208 name:211 name:
209 type: string212 $ref: '#/$defs/name'
210 type: &attr-type213 type: &attr-type
211 description: The netlink attribute type214 description: The netlink attribute type
212 enum: [ unused, pad, flag, binary, bitfield32,215 enum: [ unused, pad, flag, binary, bitfield32,
@@ -348,7 +351,7 @@ properties: · 135 unmodified lines
348 properties:351 properties:
349 name:352 name:
350 description: Name of the operation, also defining its C enum value in uAPI.353 description: Name of the operation, also defining its C enum value in uAPI.
351 type: string354 $ref: '#/$defs/name'
352 doc:355 doc:
353 description: Documentation for the command.356 description: Documentation for the command.
354 type: string357 type: string
Documentation/netlink/genetlink.yaml+10−7
@@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines
6 6
7# Common defines7# Common defines
8$defs:8$defs:
9 name:
10 type: string
11 pattern: ^[0-9a-z-]+$
9 uint:12 uint:
10 type: integer13 type: integer
11 minimum: 014 minimum: 0
@@ -29,7 +32,7 @@ additionalProperties: False · 17 unmodified lines
29properties:32properties:
30 name:33 name:
31 description: Name of the genetlink family.34 description: Name of the genetlink family.
32 type: string35 $ref: '#/$defs/name'
33 doc:36 doc:
34 type: string37 type: string
35 protocol:38 protocol:
@@ -48,7 +51,7 @@ properties: · 12 unmodified lines
48 additionalProperties: False51 additionalProperties: False
49 properties:52 properties:
50 name:53 name:
51 type: string54 $ref: '#/$defs/name'
52 header:55 header:
53 description: For C-compatible languages, header which already defines this value.56 description: For C-compatible languages, header which already defines this value.
54 type: string57 type: string
@@ -75,7 +78,7 @@ properties: · 20 unmodified lines
75 additionalProperties: False78 additionalProperties: False
76 properties:79 properties:
77 name:80 name:
78 type: string81 $ref: '#/$defs/name'
79 value:82 value:
80 type: integer83 type: integer
81 doc:84 doc:
@@ -96,7 +99,7 @@ properties: · 14 unmodified lines
96 name:99 name:
97 description: |100 description: |
98 Name used when referring to this space in other definitions, not used outside of the spec.101 Name used when referring to this space in other definitions, not used outside of the spec.
99 type: string102 $ref: '#/$defs/name'
100 name-prefix:103 name-prefix:
101 description: |104 description: |
102 Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-105 Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
@@ -121,7 +124,7 @@ properties: · 18 unmodified lines
121 additionalProperties: False124 additionalProperties: False
122 properties:125 properties:
123 name:126 name:
124 type: string127 $ref: '#/$defs/name'
125 type: &attr-type128 type: &attr-type
126 enum: [ unused, pad, flag, binary,129 enum: [ unused, pad, flag, binary,
127 uint, sint, u8, u16, u32, u64, s8, s16, s32, s64,130 uint, sint, u8, u16, u32, u64, s8, s16, s32, s64,
@@ -243,7 +246,7 @@ properties: · 115 unmodified lines
243 properties:246 properties:
244 name:247 name:
245 description: Name of the operation, also defining its C enum value in uAPI.248 description: Name of the operation, also defining its C enum value in uAPI.
246 type: string249 $ref: '#/$defs/name'
247 doc:250 doc:
248 description: Documentation for the command.251 description: Documentation for the command.
249 type: string252 type: string
@@ -327,7 +330,7 @@ properties: · 77 unmodified lines
327 name:330 name:
328 description: |331 description: |
329 The name for the group, used to form the define and the value of the define.332 The name for the group, used to form the define and the value of the define.
330 type: string333 $ref: '#/$defs/name'
331 flags: *cmd_flags334 flags: *cmd_flags
332 335
333 kernel-family:336 kernel-family:
Documentation/netlink/netlink-raw.yaml+12−6
@@ -6,6 +6,12 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines
6 6
7# Common defines7# Common defines
8$defs:8$defs:
9 name:
10 type: string
11 pattern: ^[0-9a-z-]+$
12 name-cap:
13 type: string
14 pattern: ^[0-9a-zA-Z-]+$
9 uint:15 uint:
10 type: integer16 type: integer
11 minimum: 017 minimum: 0
@@ -71,7 +77,7 @@ properties: · 59 unmodified lines
71 additionalProperties: False77 additionalProperties: False
72 properties:78 properties:
73 name:79 name:
74 type: string80 $ref: '#/$defs/name'
75 header:81 header:
76 description: For C-compatible languages, header which already defines this value.82 description: For C-compatible languages, header which already defines this value.
77 type: string83 type: string
@@ -98,7 +104,7 @@ properties: · 20 unmodified lines
98 additionalProperties: False104 additionalProperties: False
99 properties:105 properties:
100 name:106 name:
101 type: string107 $ref: '#/$defs/name'
102 value:108 value:
103 type: integer109 type: integer
104 doc:110 doc:
@@ -124,7 +130,7 @@ properties: · 19 unmodified lines
124 additionalProperties: False130 additionalProperties: False
125 properties:131 properties:
126 name:132 name:
127 type: string133 $ref: '#/$defs/name-cap'
128 type:134 type:
129 description: |135 description: |
130 The netlink attribute type. Members of type 'binary' or 'pad'136 The netlink attribute type. Members of type 'binary' or 'pad'
@@ -183,7 +189,7 @@ properties: · 52 unmodified lines
183 name:189 name:
184 description: |190 description: |
185 Name used when referring to this space in other definitions, not used outside of the spec.191 Name used when referring to this space in other definitions, not used outside of the spec.
186 type: string192 $ref: '#/$defs/name'
187 name-prefix:193 name-prefix:
188 description: |194 description: |
189 Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-195 Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
@@ -220,7 +226,7 @@ properties: · 30 unmodified lines
220 additionalProperties: False226 additionalProperties: False
221 properties:227 properties:
222 name:228 name:
223 type: string229 $ref: '#/$defs/name'
224 type: &attr-type230 type: &attr-type
225 description: The netlink attribute type231 description: The netlink attribute type
226 enum: [ unused, pad, flag, binary, bitfield32,232 enum: [ unused, pad, flag, binary, bitfield32,
@@ -408,7 +414,7 @@ properties: · 181 unmodified lines
408 properties:414 properties:
409 name:415 name:
410 description: Name of the operation, also defining its C enum value in uAPI.416 description: Name of the operation, also defining its C enum value in uAPI.
411 type: string417 $ref: '#/$defs/name'
412 doc:418 doc:
413 description: Documentation for the command.419 description: Documentation for the command.
414 type: string420 type: string
Documentation/netlink/specs/devlink.yaml+4−4
@@ -38,15 +38,15 @@ definitions: · 37 unmodified lines
38 -38 -
39 name: dsa39 name: dsa
40 -40 -
41 name: pci_pf41 name: pci-pf
42 -42 -
43 name: pci_vf43 name: pci-vf
44 -44 -
45 name: virtual45 name: virtual
46 -46 -
47 name: unused47 name: unused
48 -48 -
49 name: pci_sf49 name: pci-sf
50 -50 -
51 type: enum51 type: enum
52 name: port-fn-state52 name: port-fn-state
@@ -220,7 +220,7 @@ definitions: · 167 unmodified lines
220 -220 -
221 name: flag221 name: flag
222 -222 -
223 name: nul_string223 name: nul-string
224 value: 10224 value: 10
225 -225 -
226 name: binary226 name: binary
Documentation/netlink/specs/dpll.yaml+1−1
@@ -188,7 +188,7 @@ definitions: · 187 unmodified lines
188 value: 10000188 value: 10000
189 -189 -
190 type: const190 type: const
191 name: pin-frequency-77_5-khz191 name: pin-frequency-77-5-khz
192 value: 77500192 value: 77500
193 -193 -
194 type: const194 type: const
Documentation/netlink/specs/ethtool.yaml+3−3
@@ -48,7 +48,7 @@ definitions: · 47 unmodified lines
48 name: started48 name: started
49 doc: The firmware flashing process has started.49 doc: The firmware flashing process has started.
50 -50 -
51 name: in_progress51 name: in-progress
52 doc: The firmware flashing process is in progress.52 doc: The firmware flashing process is in progress.
53 -53 -
54 name: completed54 name: completed
@@ -1422,7 +1422,7 @@ attribute-sets: · 1367 unmodified lines
1422 name: hkey1422 name: hkey
1423 type: binary1423 type: binary
1424 -1424 -
1425 name: input_xfrm1425 name: input-xfrm
1426 type: u321426 type: u32
1427 -1427 -
1428 name: start-context1428 name: start-context
@@ -2238,7 +2238,7 @@ operations: · 809 unmodified lines
2238 - hfunc2238 - hfunc
2239 - indir2239 - indir
2240 - hkey2240 - hkey
2241 - input_xfrm2241 - input-xfrm
2242 dump:2242 dump:
2243 request:2243 request:
2244 attributes:2244 attributes:
Documentation/netlink/specs/fou.yaml+18−18
@@ -15,7 +15,7 @@ kernel-policy: global · 14 unmodified lines
15definitions:15definitions:
16 -16 -
17 type: enum17 type: enum
18 name: encap_type18 name: encap-type
19 name-prefix: fou-encap-19 name-prefix: fou-encap-
20 enum-name:20 enum-name:
21 entries: [ unspec, direct, gue ]21 entries: [ unspec, direct, gue ]
@@ -43,26 +43,26 @@ attribute-sets: · 21 unmodified lines
43 name: type43 name: type
44 type: u844 type: u8
45 -45 -
46 name: remcsum_nopartial46 name: remcsum-nopartial
47 type: flag47 type: flag
48 -48 -
49 name: local_v449 name: local-v4
50 type: u3250 type: u32
51 -51 -
52 name: local_v652 name: local-v6
53 type: binary53 type: binary
54 checks:54 checks:
55 min-len: 1655 min-len: 16
56 -56 -
57 name: peer_v457 name: peer-v4
58 type: u3258 type: u32
59 -59 -
60 name: peer_v660 name: peer-v6
61 type: binary61 type: binary
62 checks:62 checks:
63 min-len: 1663 min-len: 16
64 -64 -
65 name: peer_port65 name: peer-port
66 type: u1666 type: u16
67 byte-order: big-endian67 byte-order: big-endian
68 -68 -
@@ -90,12 +90,12 @@ operations: · 21 unmodified lines
90 - port90 - port
91 - ipproto91 - ipproto
92 - type92 - type
93 - remcsum_nopartial93 - remcsum-nopartial
94 - local_v494 - local-v4
95 - peer_v495 - peer-v4
96 - local_v696 - local-v6
97 - peer_v697 - peer-v6
98 - peer_port98 - peer-port
99 - ifindex99 - ifindex
100 100
101 -101 -
@@ -112,11 +112,11 @@ operations: · 10 unmodified lines
112 - af112 - af
113 - ifindex113 - ifindex
114 - port114 - port
115 - peer_port115 - peer-port
116 - local_v4116 - local-v4
117 - peer_v4117 - peer-v4
118 - local_v6118 - local-v6
119 - peer_v6119 - peer-v6
120 120
121 -121 -
122 name: get122 name: get
Documentation/netlink/specs/mptcp_pm.yaml+4−4
@@ -57,21 +57,21 @@ definitions: · 56 unmodified lines
57 doc: >-57 doc: >-
58 A new subflow has been established. 'error' should not be set.58 A new subflow has been established. 'error' should not be set.
59 Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |59 Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |
60 daddr6, sport, dport, backup, if_idx [, error].60 daddr6, sport, dport, backup, if-idx [, error].
61 -61 -
62 name: sub-closed62 name: sub-closed
63 doc: >-63 doc: >-
64 A subflow has been closed. An error (copy of sk_err) could be set if an64 A subflow has been closed. An error (copy of sk_err) could be set if an
65 error has been detected for this subflow.65 error has been detected for this subflow.
66 Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |66 Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |
67 daddr6, sport, dport, backup, if_idx [, error].67 daddr6, sport, dport, backup, if-idx [, error].
68 -68 -
69 name: sub-priority69 name: sub-priority
70 value: 1370 value: 13
71 doc: >-71 doc: >-
72 The priority of a subflow has changed. 'error' should not be set.72 The priority of a subflow has changed. 'error' should not be set.
73 Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |73 Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |
74 daddr6, sport, dport, backup, if_idx [, error].74 daddr6, sport, dport, backup, if-idx [, error].
75 -75 -
76 name: listener-created76 name: listener-created
77 value: 1577 value: 15
@@ -255,7 +255,7 @@ attribute-sets: · 177 unmodified lines
255 name: timeout255 name: timeout
256 type: u32256 type: u32
257 -257 -
258 name: if_idx258 name: if-idx
259 type: u32259 type: u32
260 -260 -
261 name: reset-reason261 name: reset-reason
Documentation/netlink/specs/nfsd.yaml+2−2
@@ -27,7 +27,7 @@ attribute-sets: · 26 unmodified lines
27 name: proc27 name: proc
28 type: u3228 type: u32
29 -29 -
30 name: service_time30 name: service-time
31 type: s6431 type: s64
32 -32 -
33 name: pad33 name: pad
@@ -139,7 +139,7 @@ operations: · 105 unmodified lines
139 - prog139 - prog
140 - version140 - version
141 - proc141 - proc
142 - service_time142 - service-time
143 - saddr4143 - saddr4
144 - daddr4144 - daddr4
145 - saddr6145 - saddr6
Documentation/netlink/specs/ovs_flow.yaml+3−3
@@ -216,7 +216,7 @@ definitions: · 215 unmodified lines
216 type: struct216 type: struct
217 members:217 members:
218 -218 -
219 name: nd_target219 name: nd-target
220 type: binary220 type: binary
221 len: 16221 len: 16
222 byte-order: big-endian222 byte-order: big-endian
@@ -258,12 +258,12 @@ definitions: · 35 unmodified lines
258 type: struct258 type: struct
259 members:259 members:
260 -260 -
261 name: vlan_tpid261 name: vlan-tpid
262 type: u16262 type: u16
263 byte-order: big-endian263 byte-order: big-endian
264 doc: Tag protocol identifier (TPID) to push.264 doc: Tag protocol identifier (TPID) to push.
265 -265 -
266 name: vlan_tci266 name: vlan-tci
267 type: u16267 type: u16
268 byte-order: big-endian268 byte-order: big-endian
269 doc: Tag control identifier (TCI) to push.269 doc: Tag control identifier (TCI) to push.
Documentation/netlink/specs/rt-link.yaml+2−2
@@ -603,7 +603,7 @@ definitions: · 602 unmodified lines
603 name: optmask603 name: optmask
604 type: u32604 type: u32
605 -605 -
606 name: if_stats_msg606 name: if-stats-msg
607 type: struct607 type: struct
608 members:608 members:
609 -609 -
@@ -2486,7 +2486,7 @@ operations: · 1876 unmodified lines
2486 name: getstats2486 name: getstats
2487 doc: Get / dump link stats.2487 doc: Get / dump link stats.
2488 attribute-set: stats-attrs2488 attribute-set: stats-attrs
2489 fixed-header: if_stats_msg2489 fixed-header: if-stats-msg
2490 do:2490 do:
2491 request:2491 request:
2492 value: 942492 value: 94
Documentation/netlink/specs/tc.yaml+2−2
@@ -232,7 +232,7 @@ definitions: · 231 unmodified lines
232 type: u8232 type: u8
233 doc: log(P_max / (qth-max - qth-min))233 doc: log(P_max / (qth-max - qth-min))
234 -234 -
235 name: Scell_log235 name: Scell-log
236 type: u8236 type: u8
237 doc: cell size for idle damping237 doc: cell size for idle damping
238 -238 -
@@ -253,7 +253,7 @@ definitions: · 14 unmodified lines
253 name: DPs253 name: DPs
254 type: u32254 type: u32
255 -255 -
256 name: def_DP256 name: def-DP
257 type: u32257 type: u32
258 -258 -
259 name: grio259 name: grio
Documentation/networking/device_drivers/ethernet/marvell/octeontx2.rst+1−1
@@ -66,7 +66,7 @@ Admin Function driver · 65 unmodified lines
66As mentioned above RVU PF0 is called the admin function (AF), this driver66As mentioned above RVU PF0 is called the admin function (AF), this driver
67supports resource provisioning and configuration of functional blocks.67supports resource provisioning and configuration of functional blocks.
68Doesn't handle any I/O. It sets up few basic stuff but most of the68Doesn't handle any I/O. It sets up few basic stuff but most of the
69funcionality is achieved via configuration requests from PFs and VFs.69functionality is achieved via configuration requests from PFs and VFs.
70 70
71PF/VFs communicates with AF via a shared memory region (mailbox). Upon71PF/VFs communicates with AF via a shared memory region (mailbox). Upon
72receiving requests AF does resource provisioning and other HW configuration.72receiving requests AF does resource provisioning and other HW configuration.
drivers/atm/idt77252.c+5−0
@@ -852,6 +852,8 @@ queue_skb(struct idt77252_dev *card, struct vc_map *vc, · 851 unmodified lines
852 852
853 IDT77252_PRV_PADDR(skb) = dma_map_single(&card->pcidev->dev, skb->data,853 IDT77252_PRV_PADDR(skb) = dma_map_single(&card->pcidev->dev, skb->data,
854 skb->len, DMA_TO_DEVICE);854 skb->len, DMA_TO_DEVICE);
855 if (dma_mapping_error(&card->pcidev->dev, IDT77252_PRV_PADDR(skb)))
856 return -ENOMEM;
855 857
856 error = -EINVAL;858 error = -EINVAL;
857 859
@@ -1857,6 +1859,8 @@ add_rx_skb(struct idt77252_dev *card, int queue, · 999 unmodified lines
1857 paddr = dma_map_single(&card->pcidev->dev, skb->data,1859 paddr = dma_map_single(&card->pcidev->dev, skb->data,
1858 skb_end_pointer(skb) - skb->data,1860 skb_end_pointer(skb) - skb->data,
1859 DMA_FROM_DEVICE);1861 DMA_FROM_DEVICE);
1862 if (dma_mapping_error(&card->pcidev->dev, paddr))
1863 goto outpoolrm;
1860 IDT77252_PRV_PADDR(skb) = paddr;1864 IDT77252_PRV_PADDR(skb) = paddr;
1861 1865
1862 if (push_rx_skb(card, skb, queue)) {1866 if (push_rx_skb(card, skb, queue)) {
@@ -1871,6 +1875,7 @@ outunmap: · 8 unmodified lines
1871 dma_unmap_single(&card->pcidev->dev, IDT77252_PRV_PADDR(skb),1875 dma_unmap_single(&card->pcidev->dev, IDT77252_PRV_PADDR(skb),
1872 skb_end_pointer(skb) - skb->data, DMA_FROM_DEVICE);1876 skb_end_pointer(skb) - skb->data, DMA_FROM_DEVICE);
1873 1877
1878outpoolrm:
1874 handle = IDT77252_PRV_POOL(skb);1879 handle = IDT77252_PRV_POOL(skb);
1875 card->sbpool[POOL_QUEUE(handle)].skb[POOL_INDEX(handle)] = NULL;1880 card->sbpool[POOL_QUEUE(handle)].skb[POOL_INDEX(handle)] = NULL;
1876 1881
drivers/bluetooth/btintel_pcie.c+31−2
@@ -2033,6 +2033,28 @@ static void btintel_pcie_release_hdev(struct btintel_pcie_data *data) · 2032 unmodified lines
2033 data->hdev = NULL;2033 data->hdev = NULL;
2034}2034}
2035 2035
2036static void btintel_pcie_disable_interrupts(struct btintel_pcie_data *data)
2037{
2038 spin_lock(&data->irq_lock);
2039 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_MASK, data->fh_init_mask);
2040 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_MASK, data->hw_init_mask);
2041 spin_unlock(&data->irq_lock);
2042}
2043
2044static void btintel_pcie_enable_interrupts(struct btintel_pcie_data *data)
2045{
2046 spin_lock(&data->irq_lock);
2047 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_MASK, ~data->fh_init_mask);
2048 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_MASK, ~data->hw_init_mask);
2049 spin_unlock(&data->irq_lock);
2050}
2051
2052static void btintel_pcie_synchronize_irqs(struct btintel_pcie_data *data)
2053{
2054 for (int i = 0; i < data->alloc_vecs; i++)
2055 synchronize_irq(data->msix_entries[i].vector);
2056}
2057
2036static int btintel_pcie_setup_internal(struct hci_dev *hdev)2058static int btintel_pcie_setup_internal(struct hci_dev *hdev)
2037{2059{
2038 struct btintel_pcie_data *data = hci_get_drvdata(hdev);2060 struct btintel_pcie_data *data = hci_get_drvdata(hdev);
@@ -2152,6 +2174,8 @@ static int btintel_pcie_setup(struct hci_dev *hdev) · 113 unmodified lines
2152 bt_dev_err(hdev, "Firmware download retry count: %d",2174 bt_dev_err(hdev, "Firmware download retry count: %d",
2153 fw_dl_retry);2175 fw_dl_retry);
2154 btintel_pcie_dump_debug_registers(hdev);2176 btintel_pcie_dump_debug_registers(hdev);
2177 btintel_pcie_disable_interrupts(data);
2178 btintel_pcie_synchronize_irqs(data);
2155 err = btintel_pcie_reset_bt(data);2179 err = btintel_pcie_reset_bt(data);
2156 if (err) {2180 if (err) {
2157 bt_dev_err(hdev, "Failed to do shr reset: %d", err);2181 bt_dev_err(hdev, "Failed to do shr reset: %d", err);
@@ -2159,6 +2183,7 @@ static int btintel_pcie_setup(struct hci_dev *hdev) · 1 unmodified line
2159 }2183 }
2160 usleep_range(10000, 12000);2184 usleep_range(10000, 12000);
2161 btintel_pcie_reset_ia(data);2185 btintel_pcie_reset_ia(data);
2186 btintel_pcie_enable_interrupts(data);
2162 btintel_pcie_config_msix(data);2187 btintel_pcie_config_msix(data);
2163 err = btintel_pcie_enable_bt(data);2188 err = btintel_pcie_enable_bt(data);
2164 if (err) {2189 if (err) {
@@ -2291,6 +2316,12 @@ static void btintel_pcie_remove(struct pci_dev *pdev) · 126 unmodified lines
2291 2316
2292 data = pci_get_drvdata(pdev);2317 data = pci_get_drvdata(pdev);
2293 2318
2319 btintel_pcie_disable_interrupts(data);
2320
2321 btintel_pcie_synchronize_irqs(data);
2322
2323 flush_work(&data->rx_work);
2324
2294 btintel_pcie_reset_bt(data);2325 btintel_pcie_reset_bt(data);
2295 for (int i = 0; i < data->alloc_vecs; i++) {2326 for (int i = 0; i < data->alloc_vecs; i++) {
2296 struct msix_entry *msix_entry;2327 struct msix_entry *msix_entry;
@@ -2303,8 +2334,6 @@ static void btintel_pcie_remove(struct pci_dev *pdev) · 6 unmodified lines
2303 2334
2304 btintel_pcie_release_hdev(data);2335 btintel_pcie_release_hdev(data);
2305 2336
2306 flush_work(&data->rx_work);
2307
2308 destroy_workqueue(data->workqueue);2337 destroy_workqueue(data->workqueue);
2309 2338
2310 btintel_pcie_free(data);2339 btintel_pcie_free(data);
drivers/bluetooth/hci_qca.c+10−3
@@ -2392,10 +2392,17 @@ static int qca_serdev_probe(struct serdev_device *serdev) · 2391 unmodified lines
2392 */2392 */
2393 qcadev->bt_power->pwrseq = devm_pwrseq_get(&serdev->dev,2393 qcadev->bt_power->pwrseq = devm_pwrseq_get(&serdev->dev,
2394 "bluetooth");2394 "bluetooth");
2395 if (IS_ERR(qcadev->bt_power->pwrseq))
2396 return PTR_ERR(qcadev->bt_power->pwrseq);
2397 2395
2398 break;2396 /*
2397 * Some modules have BT_EN enabled via a hardware pull-up,
2398 * meaning it is not defined in the DTS and is not controlled
2399 * through the power sequence. In such cases, fall through
2400 * to follow the legacy flow.
2401 */
2402 if (IS_ERR(qcadev->bt_power->pwrseq))
2403 qcadev->bt_power->pwrseq = NULL;
2404 else
2405 break;
2399 }2406 }
2400 fallthrough;2407 fallthrough;
2401 case QCA_WCN3950:2408 case QCA_WCN3950:
drivers/net/ethernet/broadcom/bnxt/bnxt.c+4−1
@@ -2989,6 +2989,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, · 2988 unmodified lines
2989{2989{
2990 struct bnxt_napi *bnapi = cpr->bnapi;2990 struct bnxt_napi *bnapi = cpr->bnapi;
2991 u32 raw_cons = cpr->cp_raw_cons;2991 u32 raw_cons = cpr->cp_raw_cons;
2992 bool flush_xdp = false;
2992 u32 cons;2993 u32 cons;
2993 int rx_pkts = 0;2994 int rx_pkts = 0;
2994 u8 event = 0;2995 u8 event = 0;
@@ -3042,6 +3043,8 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, · 47 unmodified lines
3042 else3043 else
3043 rc = bnxt_force_rx_discard(bp, cpr, &raw_cons,3044 rc = bnxt_force_rx_discard(bp, cpr, &raw_cons,
3044 &event);3045 &event);
3046 if (event & BNXT_REDIRECT_EVENT)
3047 flush_xdp = true;
3045 if (likely(rc >= 0))3048 if (likely(rc >= 0))
3046 rx_pkts += rc;3049 rx_pkts += rc;
3047 /* Increment rx_pkts when rc is -ENOMEM to count towards3050 /* Increment rx_pkts when rc is -ENOMEM to count towards
@@ -3066,7 +3069,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, · 18 unmodified lines
3066 }3069 }
3067 }3070 }
3068 3071
3069 if (event & BNXT_REDIRECT_EVENT) {3072 if (flush_xdp) {
3070 xdp_do_flush();3073 xdp_do_flush();
3071 event &= ~BNXT_REDIRECT_EVENT;3074 event &= ~BNXT_REDIRECT_EVENT;
3072 }3075 }
drivers/net/ethernet/freescale/enetc/enetc_hw.h+1−1
@@ -507,7 +507,7 @@ static inline u64 _enetc_rd_reg64(void __iomem *reg) · 506 unmodified lines
507 tmp = ioread32(reg + 4);507 tmp = ioread32(reg + 4);
508 } while (high != tmp);508 } while (high != tmp);
509 509
510 return le64_to_cpu((__le64)high << 32 | low);510 return (u64)high << 32 | low;
511}511}
512#endif512#endif
513 513
drivers/net/ethernet/microsoft/mana/gdma_main.c+3−0
@@ -31,6 +31,9 @@ static void mana_gd_init_pf_regs(struct pci_dev *pdev) · 30 unmodified lines
31 gc->db_page_base = gc->bar0_va +31 gc->db_page_base = gc->bar0_va +
32 mana_gd_r64(gc, GDMA_PF_REG_DB_PAGE_OFF);32 mana_gd_r64(gc, GDMA_PF_REG_DB_PAGE_OFF);
33 33
34 gc->phys_db_page_base = gc->bar0_pa +
35 mana_gd_r64(gc, GDMA_PF_REG_DB_PAGE_OFF);
36
34 sriov_base_off = mana_gd_r64(gc, GDMA_SRIOV_REG_CFG_BASE_OFF);37 sriov_base_off = mana_gd_r64(gc, GDMA_SRIOV_REG_CFG_BASE_OFF);
35 38
36 sriov_base_va = gc->bar0_va + sriov_base_off;39 sriov_base_va = gc->bar0_va + sriov_base_off;
drivers/net/ethernet/pensando/ionic/ionic_txrx.c+6−6
@@ -321,7 +321,7 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame, · 320 unmodified lines
321 len, DMA_TO_DEVICE);321 len, DMA_TO_DEVICE);
322 } else /* XDP_REDIRECT */ {322 } else /* XDP_REDIRECT */ {
323 dma_addr = ionic_tx_map_single(q, frame->data, len);323 dma_addr = ionic_tx_map_single(q, frame->data, len);
324 if (!dma_addr)324 if (dma_addr == DMA_MAPPING_ERROR)
325 return -EIO;325 return -EIO;
326 }326 }
327 327
@@ -357,7 +357,7 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame, · 29 unmodified lines
357 } else {357 } else {
358 dma_addr = ionic_tx_map_frag(q, frag, 0,358 dma_addr = ionic_tx_map_frag(q, frag, 0,
359 skb_frag_size(frag));359 skb_frag_size(frag));
360 if (dma_mapping_error(q->dev, dma_addr)) {360 if (dma_addr == DMA_MAPPING_ERROR) {
361 ionic_tx_desc_unmap_bufs(q, desc_info);361 ionic_tx_desc_unmap_bufs(q, desc_info);
362 return -EIO;362 return -EIO;
363 }363 }
@@ -1083,7 +1083,7 @@ static dma_addr_t ionic_tx_map_single(struct ionic_queue *q, · 719 unmodified lines
1083 net_warn_ratelimited("%s: DMA single map failed on %s!\n",1083 net_warn_ratelimited("%s: DMA single map failed on %s!\n",
1084 dev_name(dev), q->name);1084 dev_name(dev), q->name);
1085 q_to_tx_stats(q)->dma_map_err++;1085 q_to_tx_stats(q)->dma_map_err++;
1086 return 0;1086 return DMA_MAPPING_ERROR;
1087 }1087 }
1088 return dma_addr;1088 return dma_addr;
1089}1089}
@@ -1100,7 +1100,7 @@ static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q, · 10 unmodified lines
1100 net_warn_ratelimited("%s: DMA frag map failed on %s!\n",1100 net_warn_ratelimited("%s: DMA frag map failed on %s!\n",
1101 dev_name(dev), q->name);1101 dev_name(dev), q->name);
1102 q_to_tx_stats(q)->dma_map_err++;1102 q_to_tx_stats(q)->dma_map_err++;
1103 return 0;1103 return DMA_MAPPING_ERROR;
1104 }1104 }
1105 return dma_addr;1105 return dma_addr;
1106}1106}
@@ -1116,7 +1116,7 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb, · 9 unmodified lines
1116 int frag_idx;1116 int frag_idx;
1117 1117
1118 dma_addr = ionic_tx_map_single(q, skb->data, skb_headlen(skb));1118 dma_addr = ionic_tx_map_single(q, skb->data, skb_headlen(skb));
1119 if (!dma_addr)1119 if (dma_addr == DMA_MAPPING_ERROR)
1120 return -EIO;1120 return -EIO;
1121 buf_info->dma_addr = dma_addr;1121 buf_info->dma_addr = dma_addr;
1122 buf_info->len = skb_headlen(skb);1122 buf_info->len = skb_headlen(skb);
@@ -1126,7 +1126,7 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb, · 3 unmodified lines
1126 nfrags = skb_shinfo(skb)->nr_frags;1126 nfrags = skb_shinfo(skb)->nr_frags;
1127 for (frag_idx = 0; frag_idx < nfrags; frag_idx++, frag++) {1127 for (frag_idx = 0; frag_idx < nfrags; frag_idx++, frag++) {
1128 dma_addr = ionic_tx_map_frag(q, frag, 0, skb_frag_size(frag));1128 dma_addr = ionic_tx_map_frag(q, frag, 0, skb_frag_size(frag));
1129 if (!dma_addr)1129 if (dma_addr == DMA_MAPPING_ERROR)
1130 goto dma_fail;1130 goto dma_fail;
1131 buf_info->dma_addr = dma_addr;1131 buf_info->dma_addr = dma_addr;
1132 buf_info->len = skb_frag_size(frag);1132 buf_info->len = skb_frag_size(frag);
drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c+4−4
@@ -242,7 +242,7 @@ static int qed_mfw_get_tlv_group(u8 tlv_type, u8 *tlv_group) · 241 unmodified lines
242}242}
243 243
244/* Returns size of the data buffer or, -1 in case TLV data is not available. */244/* Returns size of the data buffer or, -1 in case TLV data is not available. */
245static int245static noinline_for_stack int
246qed_mfw_get_gen_tlv_value(struct qed_drv_tlv_hdr *p_tlv,246qed_mfw_get_gen_tlv_value(struct qed_drv_tlv_hdr *p_tlv,
247 struct qed_mfw_tlv_generic *p_drv_buf,247 struct qed_mfw_tlv_generic *p_drv_buf,
248 struct qed_tlv_parsed_buf *p_buf)248 struct qed_tlv_parsed_buf *p_buf)
@@ -304,7 +304,7 @@ qed_mfw_get_gen_tlv_value(struct qed_drv_tlv_hdr *p_tlv, · 55 unmodified lines
304 return -1;304 return -1;
305}305}
306 306
307static int307static noinline_for_stack int
308qed_mfw_get_eth_tlv_value(struct qed_drv_tlv_hdr *p_tlv,308qed_mfw_get_eth_tlv_value(struct qed_drv_tlv_hdr *p_tlv,
309 struct qed_mfw_tlv_eth *p_drv_buf,309 struct qed_mfw_tlv_eth *p_drv_buf,
310 struct qed_tlv_parsed_buf *p_buf)310 struct qed_tlv_parsed_buf *p_buf)
@@ -438,7 +438,7 @@ qed_mfw_get_tlv_time_value(struct qed_mfw_tlv_time *p_time, · 127 unmodified lines
438 return QED_MFW_TLV_TIME_SIZE;438 return QED_MFW_TLV_TIME_SIZE;
439}439}
440 440
441static int441static noinline_for_stack int
442qed_mfw_get_fcoe_tlv_value(struct qed_drv_tlv_hdr *p_tlv,442qed_mfw_get_fcoe_tlv_value(struct qed_drv_tlv_hdr *p_tlv,
443 struct qed_mfw_tlv_fcoe *p_drv_buf,443 struct qed_mfw_tlv_fcoe *p_drv_buf,
444 struct qed_tlv_parsed_buf *p_buf)444 struct qed_tlv_parsed_buf *p_buf)
@@ -1073,7 +1073,7 @@ qed_mfw_get_fcoe_tlv_value(struct qed_drv_tlv_hdr *p_tlv, · 628 unmodified lines
1073 return -1;1073 return -1;
1074}1074}
1075 1075
1076static int1076static noinline_for_stack int
1077qed_mfw_get_iscsi_tlv_value(struct qed_drv_tlv_hdr *p_tlv,1077qed_mfw_get_iscsi_tlv_value(struct qed_drv_tlv_hdr *p_tlv,
1078 struct qed_mfw_tlv_iscsi *p_drv_buf,1078 struct qed_mfw_tlv_iscsi *p_drv_buf,
1079 struct qed_tlv_parsed_buf *p_buf)1079 struct qed_tlv_parsed_buf *p_buf)
drivers/net/ethernet/wangxun/libwx/wx_lib.c+1−1
@@ -2623,7 +2623,7 @@ static int wx_alloc_page_pool(struct wx_ring *rx_ring) · 2622 unmodified lines
2623 struct page_pool_params pp_params = {2623 struct page_pool_params pp_params = {
2624 .flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV,2624 .flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV,
2625 .order = 0,2625 .order = 0,
2626 .pool_size = rx_ring->size,2626 .pool_size = rx_ring->count,
2627 .nid = dev_to_node(rx_ring->dev),2627 .nid = dev_to_node(rx_ring->dev),
2628 .dev = rx_ring->dev,2628 .dev = rx_ring->dev,
2629 .dma_dir = DMA_FROM_DEVICE,2629 .dma_dir = DMA_FROM_DEVICE,
drivers/net/usb/qmi_wwan.c+1−0
@@ -1426,6 +1426,7 @@ static const struct usb_device_id products[] = { · 1425 unmodified lines
1426 {QMI_QUIRK_SET_DTR(0x22de, 0x9051, 2)}, /* Hucom Wireless HM-211S/K */1426 {QMI_QUIRK_SET_DTR(0x22de, 0x9051, 2)}, /* Hucom Wireless HM-211S/K */
1427 {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */1427 {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
1428 {QMI_QUIRK_SET_DTR(0x1e0e, 0x9001, 5)}, /* SIMCom 7100E, 7230E, 7600E ++ */1428 {QMI_QUIRK_SET_DTR(0x1e0e, 0x9001, 5)}, /* SIMCom 7100E, 7230E, 7600E ++ */
1429 {QMI_QUIRK_SET_DTR(0x1e0e, 0x9071, 3)}, /* SIMCom 8230C ++ */
1429 {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */1430 {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */
1430 {QMI_QUIRK_SET_DTR(0x2c7c, 0x0191, 4)}, /* Quectel EG91 */1431 {QMI_QUIRK_SET_DTR(0x2c7c, 0x0191, 4)}, /* Quectel EG91 */
1431 {QMI_QUIRK_SET_DTR(0x2c7c, 0x0195, 4)}, /* Quectel EG95 */1432 {QMI_QUIRK_SET_DTR(0x2c7c, 0x0195, 4)}, /* Quectel EG95 */
drivers/net/wireless/intel/iwlegacy/4965-rs.c+2−1
@@ -203,7 +203,8 @@ il4965_rs_extract_rate(u32 rate_n_flags) · 202 unmodified lines
203 return (u8) (rate_n_flags & 0xFF);203 return (u8) (rate_n_flags & 0xFF);
204}204}
205 205
206static void206/* noinline works around https://github.com/llvm/llvm-project/issues/143908 */
207static noinline_for_stack void
207il4965_rs_rate_scale_clear_win(struct il_rate_scale_data *win)208il4965_rs_rate_scale_clear_win(struct il_rate_scale_data *win)
208{209{
209 win->data = 0;210 win->data = 0;
drivers/net/wireless/intel/iwlwifi/mvm/mld-mac.c+2−2
@@ -32,9 +32,9 @@ static void iwl_mvm_mld_mac_ctxt_cmd_common(struct iwl_mvm *mvm, · 31 unmodified lines
32 unsigned int link_id;32 unsigned int link_id;
33 int cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw,33 int cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw,
34 WIDE_ID(MAC_CONF_GROUP,34 WIDE_ID(MAC_CONF_GROUP,
35 MAC_CONFIG_CMD), 0);35 MAC_CONFIG_CMD), 1);
36 36
37 if (WARN_ON(cmd_ver < 1 || cmd_ver > 3))37 if (WARN_ON(cmd_ver > 3))
38 return;38 return;
39 39
40 cmd->id_and_color = cpu_to_le32(mvmvif->id);40 cmd->id_and_color = cpu_to_le32(mvmvif->id);
include/net/bluetooth/hci_core.h+2−0
@@ -29,6 +29,7 @@ · 28 unmodified lines
29#include <linux/idr.h>29#include <linux/idr.h>
30#include <linux/leds.h>30#include <linux/leds.h>
31#include <linux/rculist.h>31#include <linux/rculist.h>
32#include <linux/srcu.h>
32 33
33#include <net/bluetooth/hci.h>34#include <net/bluetooth/hci.h>
34#include <net/bluetooth/hci_drv.h>35#include <net/bluetooth/hci_drv.h>
@@ -347,6 +348,7 @@ struct adv_monitor { · 312 unmodified lines
347 348
348struct hci_dev {349struct hci_dev {
349 struct list_head list;350 struct list_head list;
351 struct srcu_struct srcu;
350 struct mutex lock;352 struct mutex lock;
351 353
352 struct ida unset_handle_ida;354 struct ida unset_handle_ida;
include/uapi/linux/mptcp_pm.h+3−3
@@ -27,14 +27,14 @@ · 26 unmodified lines
27 * token, rem_id.27 * token, rem_id.
28 * @MPTCP_EVENT_SUB_ESTABLISHED: A new subflow has been established. 'error'28 * @MPTCP_EVENT_SUB_ESTABLISHED: A new subflow has been established. 'error'
29 * should not be set. Attributes: token, family, loc_id, rem_id, saddr4 |29 * should not be set. Attributes: token, family, loc_id, rem_id, saddr4 |
30 * saddr6, daddr4 | daddr6, sport, dport, backup, if_idx [, error].30 * saddr6, daddr4 | daddr6, sport, dport, backup, if-idx [, error].
31 * @MPTCP_EVENT_SUB_CLOSED: A subflow has been closed. An error (copy of31 * @MPTCP_EVENT_SUB_CLOSED: A subflow has been closed. An error (copy of
32 * sk_err) could be set if an error has been detected for this subflow.32 * sk_err) could be set if an error has been detected for this subflow.
33 * Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |33 * Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |
34 * daddr6, sport, dport, backup, if_idx [, error].34 * daddr6, sport, dport, backup, if-idx [, error].
35 * @MPTCP_EVENT_SUB_PRIORITY: The priority of a subflow has changed. 'error'35 * @MPTCP_EVENT_SUB_PRIORITY: The priority of a subflow has changed. 'error'
36 * should not be set. Attributes: token, family, loc_id, rem_id, saddr4 |36 * should not be set. Attributes: token, family, loc_id, rem_id, saddr4 |
37 * saddr6, daddr4 | daddr6, sport, dport, backup, if_idx [, error].37 * saddr6, daddr4 | daddr6, sport, dport, backup, if-idx [, error].
38 * @MPTCP_EVENT_LISTENER_CREATED: A new PM listener is created. Attributes:38 * @MPTCP_EVENT_LISTENER_CREATED: A new PM listener is created. Attributes:
39 * family, sport, saddr4 | saddr6.39 * family, sport, saddr4 | saddr6.
40 * @MPTCP_EVENT_LISTENER_CLOSED: A PM listener is closed. Attributes: family,40 * @MPTCP_EVENT_LISTENER_CLOSED: A PM listener is closed. Attributes: family,
include/uapi/linux/vm_sockets.h+4−0
@@ -17,6 +17,10 @@ · 16 unmodified lines
17#ifndef _UAPI_VM_SOCKETS_H17#ifndef _UAPI_VM_SOCKETS_H
18#define _UAPI_VM_SOCKETS_H18#define _UAPI_VM_SOCKETS_H
19 19
20#ifndef __KERNEL__
21#include <sys/socket.h> /* for struct sockaddr and sa_family_t */
22#endif
23
20#include <linux/socket.h>24#include <linux/socket.h>
21#include <linux/types.h>25#include <linux/types.h>
22 26
net/atm/clip.c+5−6
@@ -193,12 +193,6 @@ static void clip_push(struct atm_vcc *vcc, struct sk_buff *skb) · 192 unmodified lines
193 193
194 pr_debug("\n");194 pr_debug("\n");
195 195
196 if (!clip_devs) {
197 atm_return(vcc, skb->truesize);
198 kfree_skb(skb);
199 return;
200 }
201
202 if (!skb) {196 if (!skb) {
203 pr_debug("removing VCC %p\n", clip_vcc);197 pr_debug("removing VCC %p\n", clip_vcc);
204 if (clip_vcc->entry)198 if (clip_vcc->entry)
@@ -208,6 +202,11 @@ static void clip_push(struct atm_vcc *vcc, struct sk_buff *skb) · 3 unmodified lines
208 return;202 return;
209 }203 }
210 atm_return(vcc, skb->truesize);204 atm_return(vcc, skb->truesize);
205 if (!clip_devs) {
206 kfree_skb(skb);
207 return;
208 }
209
211 skb->dev = clip_vcc->entry ? clip_vcc->entry->neigh->dev : clip_devs;210 skb->dev = clip_vcc->entry ? clip_vcc->entry->neigh->dev : clip_devs;
212 /* clip_vcc->entry == NULL if we don't have an IP address yet */211 /* clip_vcc->entry == NULL if we don't have an IP address yet */
213 if (!skb->dev) {212 if (!skb->dev) {
net/atm/resources.c+1−2
@@ -146,11 +146,10 @@ void atm_dev_deregister(struct atm_dev *dev) · 145 unmodified lines
146 */146 */
147 mutex_lock(&atm_dev_mutex);147 mutex_lock(&atm_dev_mutex);
148 list_del(&dev->dev_list);148 list_del(&dev->dev_list);
149 mutex_unlock(&atm_dev_mutex);
150
151 atm_dev_release_vccs(dev);149 atm_dev_release_vccs(dev);
152 atm_unregister_sysfs(dev);150 atm_unregister_sysfs(dev);
153 atm_proc_dev_deregister(dev);151 atm_proc_dev_deregister(dev);
152 mutex_unlock(&atm_dev_mutex);
154 153
155 atm_dev_put(dev);154 atm_dev_put(dev);
156}155}
net/bluetooth/hci_core.c+30−4
@@ -64,7 +64,7 @@ static DEFINE_IDA(hci_index_ida); · 63 unmodified lines
64 64
65/* Get HCI device by index.65/* Get HCI device by index.
66 * Device is held on return. */66 * Device is held on return. */
67struct hci_dev *hci_dev_get(int index)67static struct hci_dev *__hci_dev_get(int index, int *srcu_index)
68{68{
69 struct hci_dev *hdev = NULL, *d;69 struct hci_dev *hdev = NULL, *d;
70 70
@@ -77,6 +77,8 @@ struct hci_dev *hci_dev_get(int index) · 6 unmodified lines
77 list_for_each_entry(d, &hci_dev_list, list) {77 list_for_each_entry(d, &hci_dev_list, list) {
78 if (d->id == index) {78 if (d->id == index) {
79 hdev = hci_dev_hold(d);79 hdev = hci_dev_hold(d);
80 if (srcu_index)
81 *srcu_index = srcu_read_lock(&d->srcu);
80 break;82 break;
81 }83 }
82 }84 }
@@ -84,6 +86,22 @@ struct hci_dev *hci_dev_get(int index) · 1 unmodified line
84 return hdev;86 return hdev;
85}87}
86 88
89struct hci_dev *hci_dev_get(int index)
90{
91 return __hci_dev_get(index, NULL);
92}
93
94static struct hci_dev *hci_dev_get_srcu(int index, int *srcu_index)
95{
96 return __hci_dev_get(index, srcu_index);
97}
98
99static void hci_dev_put_srcu(struct hci_dev *hdev, int srcu_index)
100{
101 srcu_read_unlock(&hdev->srcu, srcu_index);
102 hci_dev_put(hdev);
103}
104
87/* ---- Inquiry support ---- */105/* ---- Inquiry support ---- */
88 106
89bool hci_discovery_active(struct hci_dev *hdev)107bool hci_discovery_active(struct hci_dev *hdev)
@@ -568,9 +586,9 @@ static int hci_dev_do_reset(struct hci_dev *hdev) · 478 unmodified lines
568int hci_dev_reset(__u16 dev)586int hci_dev_reset(__u16 dev)
569{587{
570 struct hci_dev *hdev;588 struct hci_dev *hdev;
571 int err;589 int err, srcu_index;
572 590
573 hdev = hci_dev_get(dev);591 hdev = hci_dev_get_srcu(dev, &srcu_index);
574 if (!hdev)592 if (!hdev)
575 return -ENODEV;593 return -ENODEV;
576 594
@@ -592,7 +610,7 @@ int hci_dev_reset(__u16 dev) · 15 unmodified lines
592 err = hci_dev_do_reset(hdev);610 err = hci_dev_do_reset(hdev);
593 611
594done:612done:
595 hci_dev_put(hdev);613 hci_dev_put_srcu(hdev, srcu_index);
596 return err;614 return err;
597}615}
598 616
@@ -2433,6 +2451,11 @@ struct hci_dev *hci_alloc_dev_priv(int sizeof_priv) · 1834 unmodified lines
2433 if (!hdev)2451 if (!hdev)
2434 return NULL;2452 return NULL;
2435 2453
2454 if (init_srcu_struct(&hdev->srcu)) {
2455 kfree(hdev);
2456 return NULL;
2457 }
2458
2436 hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);2459 hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);
2437 hdev->esco_type = (ESCO_HV1);2460 hdev->esco_type = (ESCO_HV1);
2438 hdev->link_mode = (HCI_LM_ACCEPT);2461 hdev->link_mode = (HCI_LM_ACCEPT);
@@ -2678,6 +2701,9 @@ void hci_unregister_dev(struct hci_dev *hdev) · 239 unmodified lines
2678 list_del(&hdev->list);2701 list_del(&hdev->list);
2679 write_unlock(&hci_dev_list_lock);2702 write_unlock(&hci_dev_list_lock);
2680 2703
2704 synchronize_srcu(&hdev->srcu);
2705 cleanup_srcu_struct(&hdev->srcu);
2706
2681 disable_work_sync(&hdev->rx_work);2707 disable_work_sync(&hdev->rx_work);
2682 disable_work_sync(&hdev->cmd_work);2708 disable_work_sync(&hdev->cmd_work);
2683 disable_work_sync(&hdev->tx_work);2709 disable_work_sync(&hdev->tx_work);
net/bluetooth/l2cap_core.c+8−1
@@ -3415,7 +3415,7 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data · 3414 unmodified lines
3415 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };3415 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3416 struct l2cap_conf_efs efs;3416 struct l2cap_conf_efs efs;
3417 u8 remote_efs = 0;3417 u8 remote_efs = 0;
3418 u16 mtu = L2CAP_DEFAULT_MTU;3418 u16 mtu = 0;
3419 u16 result = L2CAP_CONF_SUCCESS;3419 u16 result = L2CAP_CONF_SUCCESS;
3420 u16 size;3420 u16 size;
3421 3421
@@ -3520,6 +3520,13 @@ done: · 98 unmodified lines
3520 /* Configure output options and let the other side know3520 /* Configure output options and let the other side know
3521 * which ones we don't like. */3521 * which ones we don't like. */
3522 3522
3523 /* If MTU is not provided in configure request, use the most recently
3524 * explicitly or implicitly accepted value for the other direction,
3525 * or the default value.
3526 */
3527 if (mtu == 0)
3528 mtu = chan->imtu ? chan->imtu : L2CAP_DEFAULT_MTU;
3529
3523 if (mtu < L2CAP_DEFAULT_MIN_MTU)3530 if (mtu < L2CAP_DEFAULT_MIN_MTU)
3524 result = L2CAP_CONF_UNACCEPT;3531 result = L2CAP_CONF_UNACCEPT;
3525 else {3532 else {
net/bridge/br_multicast.c+9−0
@@ -2015,10 +2015,19 @@ void br_multicast_port_ctx_init(struct net_bridge_port *port, · 2014 unmodified lines
2015 2015
2016void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx)2016void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx)
2017{2017{
2018 struct net_bridge *br = pmctx->port->br;
2019 bool del = false;
2020
2018#if IS_ENABLED(CONFIG_IPV6)2021#if IS_ENABLED(CONFIG_IPV6)
2019 timer_delete_sync(&pmctx->ip6_mc_router_timer);2022 timer_delete_sync(&pmctx->ip6_mc_router_timer);
2020#endif2023#endif
2021 timer_delete_sync(&pmctx->ip4_mc_router_timer);2024 timer_delete_sync(&pmctx->ip4_mc_router_timer);
2025
2026 spin_lock_bh(&br->multicast_lock);
2027 del |= br_ip6_multicast_rport_del(pmctx);
2028 del |= br_ip4_multicast_rport_del(pmctx);
2029 br_multicast_rport_del_notify(pmctx, del);
2030 spin_unlock_bh(&br->multicast_lock);
2022}2031}
2023 2032
2024int br_multicast_add_port(struct net_bridge_port *port)2033int br_multicast_add_port(struct net_bridge_port *port)
net/core/netpoll.c+1−1
@@ -432,6 +432,7 @@ int netpoll_send_udp(struct netpoll *np, const char *msg, int len) · 431 unmodified lines
432 udph->dest = htons(np->remote_port);432 udph->dest = htons(np->remote_port);
433 udph->len = htons(udp_len);433 udph->len = htons(udp_len);
434 434
435 udph->check = 0;
435 if (np->ipv6) {436 if (np->ipv6) {
436 udph->check = csum_ipv6_magic(&np->local_ip.in6,437 udph->check = csum_ipv6_magic(&np->local_ip.in6,
437 &np->remote_ip.in6,438 &np->remote_ip.in6,
@@ -460,7 +461,6 @@ int netpoll_send_udp(struct netpoll *np, const char *msg, int len) · 22 unmodified lines
460 skb_reset_mac_header(skb);461 skb_reset_mac_header(skb);
461 skb->protocol = eth->h_proto = htons(ETH_P_IPV6);462 skb->protocol = eth->h_proto = htons(ETH_P_IPV6);
462 } else {463 } else {
463 udph->check = 0;
464 udph->check = csum_tcpudp_magic(np->local_ip.ip,464 udph->check = csum_tcpudp_magic(np->local_ip.ip,
465 np->remote_ip.ip,465 np->remote_ip.ip,
466 udp_len, IPPROTO_UDP,466 udp_len, IPPROTO_UDP,
net/core/selftests.c+3−2
@@ -160,8 +160,9 @@ static struct sk_buff *net_test_get_skb(struct net_device *ndev, · 159 unmodified lines
160 skb->csum = 0;160 skb->csum = 0;
161 skb->ip_summed = CHECKSUM_PARTIAL;161 skb->ip_summed = CHECKSUM_PARTIAL;
162 if (attr->tcp) {162 if (attr->tcp) {
163 thdr->check = ~tcp_v4_check(skb->len, ihdr->saddr,163 int l4len = skb->len - skb_transport_offset(skb);
164 ihdr->daddr, 0);164
165 thdr->check = ~tcp_v4_check(l4len, ihdr->saddr, ihdr->daddr, 0);
165 skb->csum_start = skb_transport_header(skb) - skb->head;166 skb->csum_start = skb_transport_header(skb) - skb->head;
166 skb->csum_offset = offsetof(struct tcphdr, check);167 skb->csum_offset = offsetof(struct tcphdr, check);
167 } else {168 } else {
net/mac80211/link.c+3−3
@@ -93,9 +93,6 @@ void ieee80211_link_init(struct ieee80211_sub_if_data *sdata, · 92 unmodified lines
93 if (link_id < 0)93 if (link_id < 0)
94 link_id = 0;94 link_id = 0;
95 95
96 rcu_assign_pointer(sdata->vif.link_conf[link_id], link_conf);
97 rcu_assign_pointer(sdata->link[link_id], link);
98
99 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {96 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
100 struct ieee80211_sub_if_data *ap_bss;97 struct ieee80211_sub_if_data *ap_bss;
101 struct ieee80211_bss_conf *ap_bss_conf;98 struct ieee80211_bss_conf *ap_bss_conf;
@@ -145,6 +142,9 @@ void ieee80211_link_init(struct ieee80211_sub_if_data *sdata, · 43 unmodified lines
145 142
146 ieee80211_link_debugfs_add(link);143 ieee80211_link_debugfs_add(link);
147 }144 }
145
146 rcu_assign_pointer(sdata->vif.link_conf[link_id], link_conf);
147 rcu_assign_pointer(sdata->link[link_id], link);
148}148}
149 149
150void ieee80211_link_stop(struct ieee80211_link_data *link)150void ieee80211_link_stop(struct ieee80211_link_data *link)
net/mac80211/util.c+1−1
@@ -3884,7 +3884,7 @@ void ieee80211_recalc_dtim(struct ieee80211_local *local, · 3883 unmodified lines
3884{3884{
3885 u64 tsf = drv_get_tsf(local, sdata);3885 u64 tsf = drv_get_tsf(local, sdata);
3886 u64 dtim_count = 0;3886 u64 dtim_count = 0;
3887 u16 beacon_int = sdata->vif.bss_conf.beacon_int * 1024;3887 u32 beacon_int = sdata->vif.bss_conf.beacon_int * 1024;
3888 u8 dtim_period = sdata->vif.bss_conf.dtim_period;3888 u8 dtim_period = sdata->vif.bss_conf.dtim_period;
3889 struct ps_data *ps;3889 struct ps_data *ps;
3890 u8 bcns_from_dtim;3890 u8 bcns_from_dtim;
net/unix/af_unix.c+23−8
@@ -660,6 +660,11 @@ static void unix_sock_destructor(struct sock *sk) · 659 unmodified lines
660#endif660#endif
661}661}
662 662
663static unsigned int unix_skb_len(const struct sk_buff *skb)
664{
665 return skb->len - UNIXCB(skb).consumed;
666}
667
663static void unix_release_sock(struct sock *sk, int embrion)668static void unix_release_sock(struct sock *sk, int embrion)
664{669{
665 struct unix_sock *u = unix_sk(sk);670 struct unix_sock *u = unix_sk(sk);
@@ -694,10 +699,16 @@ static void unix_release_sock(struct sock *sk, int embrion) · 28 unmodified lines
694 699
695 if (skpair != NULL) {700 if (skpair != NULL) {
696 if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) {701 if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) {
702 struct sk_buff *skb = skb_peek(&sk->sk_receive_queue);
703
704#if IS_ENABLED(CONFIG_AF_UNIX_OOB)
705 if (skb && !unix_skb_len(skb))
706 skb = skb_peek_next(skb, &sk->sk_receive_queue);
707#endif
697 unix_state_lock(skpair);708 unix_state_lock(skpair);
698 /* No more writes */709 /* No more writes */
699 WRITE_ONCE(skpair->sk_shutdown, SHUTDOWN_MASK);710 WRITE_ONCE(skpair->sk_shutdown, SHUTDOWN_MASK);
700 if (!skb_queue_empty_lockless(&sk->sk_receive_queue) || embrion)711 if (skb || embrion)
701 WRITE_ONCE(skpair->sk_err, ECONNRESET);712 WRITE_ONCE(skpair->sk_err, ECONNRESET);
702 unix_state_unlock(skpair);713 unix_state_unlock(skpair);
703 skpair->sk_state_change(skpair);714 skpair->sk_state_change(skpair);
@@ -2661,11 +2672,6 @@ static long unix_stream_data_wait(struct sock *sk, long timeo, · 1957 unmodified lines
2661 return timeo;2672 return timeo;
2662}2673}
2663 2674
2664static unsigned int unix_skb_len(const struct sk_buff *skb)
2665{
2666 return skb->len - UNIXCB(skb).consumed;
2667}
2668
2669struct unix_stream_read_state {2675struct unix_stream_read_state {
2670 int (*recv_actor)(struct sk_buff *, int, int,2676 int (*recv_actor)(struct sk_buff *, int, int,
2671 struct unix_stream_read_state *);2677 struct unix_stream_read_state *);
@@ -2680,11 +2686,11 @@ struct unix_stream_read_state { · 8 unmodified lines
2680#if IS_ENABLED(CONFIG_AF_UNIX_OOB)2686#if IS_ENABLED(CONFIG_AF_UNIX_OOB)
2681static int unix_stream_recv_urg(struct unix_stream_read_state *state)2687static int unix_stream_recv_urg(struct unix_stream_read_state *state)
2682{2688{
2689 struct sk_buff *oob_skb, *read_skb = NULL;
2683 struct socket *sock = state->socket;2690 struct socket *sock = state->socket;
2684 struct sock *sk = sock->sk;2691 struct sock *sk = sock->sk;
2685 struct unix_sock *u = unix_sk(sk);2692 struct unix_sock *u = unix_sk(sk);
2686 int chunk = 1;2693 int chunk = 1;
2687 struct sk_buff *oob_skb;
2688 2694
2689 mutex_lock(&u->iolock);2695 mutex_lock(&u->iolock);
2690 unix_state_lock(sk);2696 unix_state_lock(sk);
@@ -2699,9 +2705,16 @@ static int unix_stream_recv_urg(struct unix_stream_read_state *state) · 8 unmodified lines
2699 2705
2700 oob_skb = u->oob_skb;2706 oob_skb = u->oob_skb;
2701 2707
2702 if (!(state->flags & MSG_PEEK))2708 if (!(state->flags & MSG_PEEK)) {
2703 WRITE_ONCE(u->oob_skb, NULL);2709 WRITE_ONCE(u->oob_skb, NULL);
2704 2710
2711 if (oob_skb->prev != (struct sk_buff *)&sk->sk_receive_queue &&
2712 !unix_skb_len(oob_skb->prev)) {
2713 read_skb = oob_skb->prev;
2714 __skb_unlink(read_skb, &sk->sk_receive_queue);
2715 }
2716 }
2717
2705 spin_unlock(&sk->sk_receive_queue.lock);2718 spin_unlock(&sk->sk_receive_queue.lock);
2706 unix_state_unlock(sk);2719 unix_state_unlock(sk);
2707 2720
@@ -2712,6 +2725,8 @@ static int unix_stream_recv_urg(struct unix_stream_read_state *state) · 4 unmodified lines
2712 2725
2713 mutex_unlock(&u->iolock);2726 mutex_unlock(&u->iolock);
2714 2727
2728 consume_skb(read_skb);
2729
2715 if (chunk < 0)2730 if (chunk < 0)
2716 return -EFAULT;2731 return -EFAULT;
2717 2732
tools/testing/selftests/drivers/net/hw/rss_input_xfrm.py+1−1
@@ -38,7 +38,7 @@ def test_rss_input_xfrm(cfg, ipver): · 37 unmodified lines
38 raise KsftSkipEx("socket.SO_INCOMING_CPU was added in Python 3.11")38 raise KsftSkipEx("socket.SO_INCOMING_CPU was added in Python 3.11")
39 39
40 input_xfrm = cfg.ethnl.rss_get(40 input_xfrm = cfg.ethnl.rss_get(
41 {'header': {'dev-name': cfg.ifname}}).get('input_xfrm')41 {'header': {'dev-name': cfg.ifname}}).get('input-xfrm')
42 42
43 # Check for symmetric xor/or-xor43 # Check for symmetric xor/or-xor
44 if not input_xfrm or (input_xfrm != 1 and input_xfrm != 2):44 if not input_xfrm or (input_xfrm != 1 and input_xfrm != 2):
tools/testing/selftests/net/af_unix/msg_oob.c+138−4
@@ -210,7 +210,7 @@ static void __sendpair(struct __test_metadata *_metadata, · 209 unmodified lines
210static void __recvpair(struct __test_metadata *_metadata,210static void __recvpair(struct __test_metadata *_metadata,
211 FIXTURE_DATA(msg_oob) *self,211 FIXTURE_DATA(msg_oob) *self,
212 const char *expected_buf, int expected_len,212 const char *expected_buf, int expected_len,
213 int buf_len, int flags)213 int buf_len, int flags, bool is_sender)
214{214{
215 int i, ret[2], recv_errno[2], expected_errno = 0;215 int i, ret[2], recv_errno[2], expected_errno = 0;
216 char recv_buf[2][BUF_SZ] = {};216 char recv_buf[2][BUF_SZ] = {};
@@ -221,7 +221,9 @@ static void __recvpair(struct __test_metadata *_metadata, · 4 unmodified lines
221 errno = 0;221 errno = 0;
222 222
223 for (i = 0; i < 2; i++) {223 for (i = 0; i < 2; i++) {
224 ret[i] = recv(self->fd[i * 2 + 1], recv_buf[i], buf_len, flags);224 int index = is_sender ? i * 2 : i * 2 + 1;
225
226 ret[i] = recv(self->fd[index], recv_buf[i], buf_len, flags);
225 recv_errno[i] = errno;227 recv_errno[i] = errno;
226 }228 }
227 229
@@ -308,6 +310,20 @@ static void __siocatmarkpair(struct __test_metadata *_metadata, · 80 unmodified lines
308 ASSERT_EQ(answ[0], answ[1]);310 ASSERT_EQ(answ[0], answ[1]);
309}311}
310 312
313static void __resetpair(struct __test_metadata *_metadata,
314 FIXTURE_DATA(msg_oob) *self,
315 const FIXTURE_VARIANT(msg_oob) *variant,
316 bool reset)
317{
318 int i;
319
320 for (i = 0; i < 2; i++)
321 close(self->fd[i * 2 + 1]);
322
323 __recvpair(_metadata, self, "", reset ? -ECONNRESET : 0, 1,
324 variant->peek ? MSG_PEEK : 0, true);
325}
326
311#define sendpair(buf, len, flags) \327#define sendpair(buf, len, flags) \
312 __sendpair(_metadata, self, buf, len, flags)328 __sendpair(_metadata, self, buf, len, flags)
313 329
@@ -316,9 +332,10 @@ static void __siocatmarkpair(struct __test_metadata *_metadata, · 2 unmodified lines
316 if (variant->peek) \332 if (variant->peek) \
317 __recvpair(_metadata, self, \333 __recvpair(_metadata, self, \
318 expected_buf, expected_len, \334 expected_buf, expected_len, \
319 buf_len, (flags) | MSG_PEEK); \335 buf_len, (flags) | MSG_PEEK, false); \
320 __recvpair(_metadata, self, \336 __recvpair(_metadata, self, \
321 expected_buf, expected_len, buf_len, flags); \337 expected_buf, expected_len, \
338 buf_len, flags, false); \
322 } while (0)339 } while (0)
323 340
324#define epollpair(oob_remaining) \341#define epollpair(oob_remaining) \
@@ -330,6 +347,9 @@ static void __siocatmarkpair(struct __test_metadata *_metadata, · 5 unmodified lines
330#define setinlinepair() \347#define setinlinepair() \
331 __setinlinepair(_metadata, self)348 __setinlinepair(_metadata, self)
332 349
350#define resetpair(reset) \
351 __resetpair(_metadata, self, variant, reset)
352
333#define tcp_incompliant \353#define tcp_incompliant \
334 for (self->tcp_compliant = false; \354 for (self->tcp_compliant = false; \
335 self->tcp_compliant == false; \355 self->tcp_compliant == false; \
@@ -344,6 +364,21 @@ TEST_F(msg_oob, non_oob) · 8 unmodified lines
344 recvpair("", -EINVAL, 1, MSG_OOB);364 recvpair("", -EINVAL, 1, MSG_OOB);
345 epollpair(false);365 epollpair(false);
346 siocatmarkpair(false);366 siocatmarkpair(false);
367
368 resetpair(true);
369}
370
371TEST_F(msg_oob, non_oob_no_reset)
372{
373 sendpair("x", 1, 0);
374 epollpair(false);
375 siocatmarkpair(false);
376
377 recvpair("x", 1, 1, 0);
378 epollpair(false);
379 siocatmarkpair(false);
380
381 resetpair(false);
347}382}
348 383
349TEST_F(msg_oob, oob)384TEST_F(msg_oob, oob)
@@ -355,6 +390,19 @@ TEST_F(msg_oob, oob) · 5 unmodified lines
355 recvpair("x", 1, 1, MSG_OOB);390 recvpair("x", 1, 1, MSG_OOB);
356 epollpair(false);391 epollpair(false);
357 siocatmarkpair(true);392 siocatmarkpair(true);
393
394 tcp_incompliant {
395 resetpair(false); /* TCP sets -ECONNRESET for ex-OOB. */
396 }
397}
398
399TEST_F(msg_oob, oob_reset)
400{
401 sendpair("x", 1, MSG_OOB);
402 epollpair(true);
403 siocatmarkpair(true);
404
405 resetpair(true);
358}406}
359 407
360TEST_F(msg_oob, oob_drop)408TEST_F(msg_oob, oob_drop)
@@ -370,6 +418,8 @@ TEST_F(msg_oob, oob_drop) · 9 unmodified lines
370 recvpair("", -EINVAL, 1, MSG_OOB);418 recvpair("", -EINVAL, 1, MSG_OOB);
371 epollpair(false);419 epollpair(false);
372 siocatmarkpair(false);420 siocatmarkpair(false);
421
422 resetpair(false);
373}423}
374 424
375TEST_F(msg_oob, oob_ahead)425TEST_F(msg_oob, oob_ahead)
@@ -385,6 +435,10 @@ TEST_F(msg_oob, oob_ahead) · 9 unmodified lines
385 recvpair("hell", 4, 4, 0);435 recvpair("hell", 4, 4, 0);
386 epollpair(false);436 epollpair(false);
387 siocatmarkpair(true);437 siocatmarkpair(true);
438
439 tcp_incompliant {
440 resetpair(false); /* TCP sets -ECONNRESET for ex-OOB. */
441 }
388}442}
389 443
390TEST_F(msg_oob, oob_break)444TEST_F(msg_oob, oob_break)
@@ -403,6 +457,8 @@ TEST_F(msg_oob, oob_break) · 12 unmodified lines
403 457
404 recvpair("", -EAGAIN, 1, 0);458 recvpair("", -EAGAIN, 1, 0);
405 siocatmarkpair(false);459 siocatmarkpair(false);
460
461 resetpair(false);
406}462}
407 463
408TEST_F(msg_oob, oob_ahead_break)464TEST_F(msg_oob, oob_ahead_break)
@@ -426,6 +482,8 @@ TEST_F(msg_oob, oob_ahead_break) · 17 unmodified lines
426 recvpair("world", 5, 5, 0);482 recvpair("world", 5, 5, 0);
427 epollpair(false);483 epollpair(false);
428 siocatmarkpair(false);484 siocatmarkpair(false);
485
486 resetpair(false);
429}487}
430 488
431TEST_F(msg_oob, oob_break_drop)489TEST_F(msg_oob, oob_break_drop)
@@ -449,6 +507,8 @@ TEST_F(msg_oob, oob_break_drop) · 17 unmodified lines
449 recvpair("", -EINVAL, 1, MSG_OOB);507 recvpair("", -EINVAL, 1, MSG_OOB);
450 epollpair(false);508 epollpair(false);
451 siocatmarkpair(false);509 siocatmarkpair(false);
510
511 resetpair(false);
452}512}
453 513
454TEST_F(msg_oob, ex_oob_break)514TEST_F(msg_oob, ex_oob_break)
@@ -476,6 +536,8 @@ TEST_F(msg_oob, ex_oob_break) · 21 unmodified lines
476 recvpair("ld", 2, 2, 0);536 recvpair("ld", 2, 2, 0);
477 epollpair(false);537 epollpair(false);
478 siocatmarkpair(false);538 siocatmarkpair(false);
539
540 resetpair(false);
479}541}
480 542
481TEST_F(msg_oob, ex_oob_drop)543TEST_F(msg_oob, ex_oob_drop)
@@ -498,6 +560,8 @@ TEST_F(msg_oob, ex_oob_drop) · 16 unmodified lines
498 epollpair(false);560 epollpair(false);
499 siocatmarkpair(true);561 siocatmarkpair(true);
500 }562 }
563
564 resetpair(false);
501}565}
502 566
503TEST_F(msg_oob, ex_oob_drop_2)567TEST_F(msg_oob, ex_oob_drop_2)
@@ -523,6 +587,8 @@ TEST_F(msg_oob, ex_oob_drop_2) · 19 unmodified lines
523 epollpair(false);587 epollpair(false);
524 siocatmarkpair(true);588 siocatmarkpair(true);
525 }589 }
590
591 resetpair(false);
526}592}
527 593
528TEST_F(msg_oob, ex_oob_oob)594TEST_F(msg_oob, ex_oob_oob)
@@ -546,6 +612,54 @@ TEST_F(msg_oob, ex_oob_oob) · 17 unmodified lines
546 recvpair("", -EINVAL, 1, MSG_OOB);612 recvpair("", -EINVAL, 1, MSG_OOB);
547 epollpair(false);613 epollpair(false);
548 siocatmarkpair(false);614 siocatmarkpair(false);
615
616 resetpair(false);
617}
618
619TEST_F(msg_oob, ex_oob_ex_oob)
620{
621 sendpair("x", 1, MSG_OOB);
622 epollpair(true);
623 siocatmarkpair(true);
624
625 recvpair("x", 1, 1, MSG_OOB);
626 epollpair(false);
627 siocatmarkpair(true);
628
629 sendpair("y", 1, MSG_OOB);
630 epollpair(true);
631 siocatmarkpair(true);
632
633 recvpair("y", 1, 1, MSG_OOB);
634 epollpair(false);
635 siocatmarkpair(true);
636
637 tcp_incompliant {
638 resetpair(false); /* TCP sets -ECONNRESET for ex-OOB. */
639 }
640}
641
642TEST_F(msg_oob, ex_oob_ex_oob_oob)
643{
644 sendpair("x", 1, MSG_OOB);
645 epollpair(true);
646 siocatmarkpair(true);
647
648 recvpair("x", 1, 1, MSG_OOB);
649 epollpair(false);
650 siocatmarkpair(true);
651
652 sendpair("y", 1, MSG_OOB);
653 epollpair(true);
654 siocatmarkpair(true);
655
656 recvpair("y", 1, 1, MSG_OOB);
657 epollpair(false);
658 siocatmarkpair(true);
659
660 sendpair("z", 1, MSG_OOB);
661 epollpair(true);
662 siocatmarkpair(true);
549}663}
550 664
551TEST_F(msg_oob, ex_oob_ahead_break)665TEST_F(msg_oob, ex_oob_ahead_break)
@@ -576,6 +690,10 @@ TEST_F(msg_oob, ex_oob_ahead_break) · 24 unmodified lines
576 recvpair("d", 1, 1, MSG_OOB);690 recvpair("d", 1, 1, MSG_OOB);
577 epollpair(false);691 epollpair(false);
578 siocatmarkpair(true);692 siocatmarkpair(true);
693
694 tcp_incompliant {
695 resetpair(false); /* TCP sets -ECONNRESET for ex-OOB. */
696 }
579}697}
580 698
581TEST_F(msg_oob, ex_oob_siocatmark)699TEST_F(msg_oob, ex_oob_siocatmark)
@@ -595,6 +713,8 @@ TEST_F(msg_oob, ex_oob_siocatmark) · 13 unmodified lines
595 recvpair("hell", 4, 4, 0); /* Intentionally stop at ex-OOB. */713 recvpair("hell", 4, 4, 0); /* Intentionally stop at ex-OOB. */
596 epollpair(true);714 epollpair(true);
597 siocatmarkpair(false);715 siocatmarkpair(false);
716
717 resetpair(true);
598}718}
599 719
600TEST_F(msg_oob, inline_oob)720TEST_F(msg_oob, inline_oob)
@@ -612,6 +732,8 @@ TEST_F(msg_oob, inline_oob) · 11 unmodified lines
612 recvpair("x", 1, 1, 0);732 recvpair("x", 1, 1, 0);
613 epollpair(false);733 epollpair(false);
614 siocatmarkpair(false);734 siocatmarkpair(false);
735
736 resetpair(false);
615}737}
616 738
617TEST_F(msg_oob, inline_oob_break)739TEST_F(msg_oob, inline_oob_break)
@@ -633,6 +755,8 @@ TEST_F(msg_oob, inline_oob_break) · 15 unmodified lines
633 recvpair("o", 1, 1, 0);755 recvpair("o", 1, 1, 0);
634 epollpair(false);756 epollpair(false);
635 siocatmarkpair(false);757 siocatmarkpair(false);
758
759 resetpair(false);
636}760}
637 761
638TEST_F(msg_oob, inline_oob_ahead_break)762TEST_F(msg_oob, inline_oob_ahead_break)
@@ -661,6 +785,8 @@ TEST_F(msg_oob, inline_oob_ahead_break) · 22 unmodified lines
661 785
662 epollpair(false);786 epollpair(false);
663 siocatmarkpair(false);787 siocatmarkpair(false);
788
789 resetpair(false);
664}790}
665 791
666TEST_F(msg_oob, inline_ex_oob_break)792TEST_F(msg_oob, inline_ex_oob_break)
@@ -686,6 +812,8 @@ TEST_F(msg_oob, inline_ex_oob_break) · 19 unmodified lines
686 recvpair("rld", 3, 3, 0);812 recvpair("rld", 3, 3, 0);
687 epollpair(false);813 epollpair(false);
688 siocatmarkpair(false);814 siocatmarkpair(false);
815
816 resetpair(false);
689}817}
690 818
691TEST_F(msg_oob, inline_ex_oob_no_drop)819TEST_F(msg_oob, inline_ex_oob_no_drop)
@@ -707,6 +835,8 @@ TEST_F(msg_oob, inline_ex_oob_no_drop) · 15 unmodified lines
707 recvpair("y", 1, 1, 0);835 recvpair("y", 1, 1, 0);
708 epollpair(false);836 epollpair(false);
709 siocatmarkpair(false);837 siocatmarkpair(false);
838
839 resetpair(false);
710}840}
711 841
712TEST_F(msg_oob, inline_ex_oob_drop)842TEST_F(msg_oob, inline_ex_oob_drop)
@@ -731,6 +861,8 @@ TEST_F(msg_oob, inline_ex_oob_drop) · 18 unmodified lines
731 epollpair(false);861 epollpair(false);
732 siocatmarkpair(false);862 siocatmarkpair(false);
733 }863 }
864
865 resetpair(false);
734}866}
735 867
736TEST_F(msg_oob, inline_ex_oob_siocatmark)868TEST_F(msg_oob, inline_ex_oob_siocatmark)
@@ -752,6 +884,8 @@ TEST_F(msg_oob, inline_ex_oob_siocatmark) · 15 unmodified lines
752 recvpair("hell", 4, 4, 0); /* Intentionally stop at ex-OOB. */884 recvpair("hell", 4, 4, 0); /* Intentionally stop at ex-OOB. */
753 epollpair(true);885 epollpair(true);
754 siocatmarkpair(false);886 siocatmarkpair(false);
887
888 resetpair(true);
755}889}
756 890
757TEST_HARNESS_MAIN891TEST_HARNESS_MAIN

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t