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. ...
Unified · Split
| @@ -2981,6 +2981,11 @@ S: 521 Pleasant Valley Road · 2980 unmodified lines | |||
| 2981 | S: Potsdam, New York 13676 | 2981 | S: Potsdam, New York 13676 |
| 2982 | S: USA | 2982 | S: USA |
| 2983 | 2983 | ||
| 2984 | N: Shannon Nelson | ||
| 2985 | E: sln@onemain.com | ||
| 2986 | D: Worked on several network drivers including | ||
| 2987 | D: ixgbe, i40e, ionic, pds_core, pds_vdpa, pds_fwctl | ||
| 2988 | |||
| 2984 | N: Dave Neuer | 2989 | N: Dave Neuer |
| 2985 | E: dave.neuer@pobox.com | 2990 | E: dave.neuer@pobox.com |
| 2986 | D: Helped implement support for Compaq's H31xx series iPAQs | 2991 | D: Helped implement support for Compaq's H31xx series iPAQs |
| @@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines | |||
| 6 | 6 | ||
| 7 | # Common defines | 7 | # Common defines |
| 8 | $defs: | 8 | $defs: |
| 9 | name: | ||
| 10 | type: string | ||
| 11 | pattern: ^[0-9a-z-]+$ | ||
| 9 | uint: | 12 | uint: |
| 10 | type: integer | 13 | type: integer |
| 11 | minimum: 0 | 14 | minimum: 0 |
| @@ -76,7 +79,7 @@ properties: · 64 unmodified lines | |||
| 76 | additionalProperties: False | 79 | additionalProperties: False |
| 77 | properties: | 80 | properties: |
| 78 | name: | 81 | name: |
| 79 | type: string | 82 | $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: string | 85 | type: string |
| @@ -103,7 +106,7 @@ properties: · 20 unmodified lines | |||
| 103 | additionalProperties: False | 106 | additionalProperties: False |
| 104 | properties: | 107 | properties: |
| 105 | name: | 108 | name: |
| 106 | type: string | 109 | $ref: '#/$defs/name' |
| 107 | value: | 110 | value: |
| 108 | type: integer | 111 | type: integer |
| 109 | doc: | 112 | doc: |
| @@ -132,7 +135,7 @@ properties: · 22 unmodified lines | |||
| 132 | additionalProperties: False | 135 | additionalProperties: False |
| 133 | properties: | 136 | properties: |
| 134 | name: | 137 | name: |
| 135 | type: string | 138 | $ref: '#/$defs/name' |
| 136 | type: | 139 | type: |
| 137 | description: The netlink attribute type | 140 | 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: string | 175 | $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: False | 209 | additionalProperties: False |
| 207 | properties: | 210 | properties: |
| 208 | name: | 211 | name: |
| 209 | type: string | 212 | $ref: '#/$defs/name' |
| 210 | type: &attr-type | 213 | type: &attr-type |
| 211 | description: The netlink attribute type | 214 | 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: string | 354 | $ref: '#/$defs/name' |
| 352 | doc: | 355 | doc: |
| 353 | description: Documentation for the command. | 356 | description: Documentation for the command. |
| 354 | type: string | 357 | type: string |
| @@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines | |||
| 6 | 6 | ||
| 7 | # Common defines | 7 | # Common defines |
| 8 | $defs: | 8 | $defs: |
| 9 | name: | ||
| 10 | type: string | ||
| 11 | pattern: ^[0-9a-z-]+$ | ||
| 9 | uint: | 12 | uint: |
| 10 | type: integer | 13 | type: integer |
| 11 | minimum: 0 | 14 | minimum: 0 |
| @@ -29,7 +32,7 @@ additionalProperties: False · 17 unmodified lines | |||
| 29 | properties: | 32 | properties: |
| 30 | name: | 33 | name: |
| 31 | description: Name of the genetlink family. | 34 | description: Name of the genetlink family. |
| 32 | type: string | 35 | $ref: '#/$defs/name' |
| 33 | doc: | 36 | doc: |
| 34 | type: string | 37 | type: string |
| 35 | protocol: | 38 | protocol: |
| @@ -48,7 +51,7 @@ properties: · 12 unmodified lines | |||
| 48 | additionalProperties: False | 51 | additionalProperties: False |
| 49 | properties: | 52 | properties: |
| 50 | name: | 53 | name: |
| 51 | type: string | 54 | $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: string | 57 | type: string |
| @@ -75,7 +78,7 @@ properties: · 20 unmodified lines | |||
| 75 | additionalProperties: False | 78 | additionalProperties: False |
| 76 | properties: | 79 | properties: |
| 77 | name: | 80 | name: |
| 78 | type: string | 81 | $ref: '#/$defs/name' |
| 79 | value: | 82 | value: |
| 80 | type: integer | 83 | 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: string | 102 | $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: False | 124 | additionalProperties: False |
| 122 | properties: | 125 | properties: |
| 123 | name: | 126 | name: |
| 124 | type: string | 127 | $ref: '#/$defs/name' |
| 125 | type: &attr-type | 128 | 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: string | 249 | $ref: '#/$defs/name' |
| 247 | doc: | 250 | doc: |
| 248 | description: Documentation for the command. | 251 | description: Documentation for the command. |
| 249 | type: string | 252 | 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: string | 333 | $ref: '#/$defs/name' |
| 331 | flags: *cmd_flags | 334 | flags: *cmd_flags |
| 332 | 335 | ||
| 333 | kernel-family: | 336 | kernel-family: |
| @@ -6,6 +6,12 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines | |||
| 6 | 6 | ||
| 7 | # Common defines | 7 | # 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: integer | 16 | type: integer |
| 11 | minimum: 0 | 17 | minimum: 0 |
| @@ -71,7 +77,7 @@ properties: · 59 unmodified lines | |||
| 71 | additionalProperties: False | 77 | additionalProperties: False |
| 72 | properties: | 78 | properties: |
| 73 | name: | 79 | name: |
| 74 | type: string | 80 | $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: string | 83 | type: string |
| @@ -98,7 +104,7 @@ properties: · 20 unmodified lines | |||
| 98 | additionalProperties: False | 104 | additionalProperties: False |
| 99 | properties: | 105 | properties: |
| 100 | name: | 106 | name: |
| 101 | type: string | 107 | $ref: '#/$defs/name' |
| 102 | value: | 108 | value: |
| 103 | type: integer | 109 | type: integer |
| 104 | doc: | 110 | doc: |
| @@ -124,7 +130,7 @@ properties: · 19 unmodified lines | |||
| 124 | additionalProperties: False | 130 | additionalProperties: False |
| 125 | properties: | 131 | properties: |
| 126 | name: | 132 | name: |
| 127 | type: string | 133 | $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: string | 192 | $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: False | 226 | additionalProperties: False |
| 221 | properties: | 227 | properties: |
| 222 | name: | 228 | name: |
| 223 | type: string | 229 | $ref: '#/$defs/name' |
| 224 | type: &attr-type | 230 | type: &attr-type |
| 225 | description: The netlink attribute type | 231 | 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: string | 417 | $ref: '#/$defs/name' |
| 412 | doc: | 418 | doc: |
| 413 | description: Documentation for the command. | 419 | description: Documentation for the command. |
| 414 | type: string | 420 | type: string |
| @@ -38,15 +38,15 @@ definitions: · 37 unmodified lines | |||
| 38 | - | 38 | - |
| 39 | name: dsa | 39 | name: dsa |
| 40 | - | 40 | - |
| 41 | name: pci_pf | 41 | name: pci-pf |
| 42 | - | 42 | - |
| 43 | name: pci_vf | 43 | name: pci-vf |
| 44 | - | 44 | - |
| 45 | name: virtual | 45 | name: virtual |
| 46 | - | 46 | - |
| 47 | name: unused | 47 | name: unused |
| 48 | - | 48 | - |
| 49 | name: pci_sf | 49 | name: pci-sf |
| 50 | - | 50 | - |
| 51 | type: enum | 51 | type: enum |
| 52 | name: port-fn-state | 52 | name: port-fn-state |
| @@ -220,7 +220,7 @@ definitions: · 167 unmodified lines | |||
| 220 | - | 220 | - |
| 221 | name: flag | 221 | name: flag |
| 222 | - | 222 | - |
| 223 | name: nul_string | 223 | name: nul-string |
| 224 | value: 10 | 224 | value: 10 |
| 225 | - | 225 | - |
| 226 | name: binary | 226 | name: binary |
| @@ -188,7 +188,7 @@ definitions: · 187 unmodified lines | |||
| 188 | value: 10000 | 188 | value: 10000 |
| 189 | - | 189 | - |
| 190 | type: const | 190 | type: const |
| 191 | name: pin-frequency-77_5-khz | 191 | name: pin-frequency-77-5-khz |
| 192 | value: 77500 | 192 | value: 77500 |
| 193 | - | 193 | - |
| 194 | type: const | 194 | type: const |
| @@ -48,7 +48,7 @@ definitions: · 47 unmodified lines | |||
| 48 | name: started | 48 | name: started |
| 49 | doc: The firmware flashing process has started. | 49 | doc: The firmware flashing process has started. |
| 50 | - | 50 | - |
| 51 | name: in_progress | 51 | 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: completed | 54 | name: completed |
| @@ -1422,7 +1422,7 @@ attribute-sets: · 1367 unmodified lines | |||
| 1422 | name: hkey | 1422 | name: hkey |
| 1423 | type: binary | 1423 | type: binary |
| 1424 | - | 1424 | - |
| 1425 | name: input_xfrm | 1425 | name: input-xfrm |
| 1426 | type: u32 | 1426 | type: u32 |
| 1427 | - | 1427 | - |
| 1428 | name: start-context | 1428 | name: start-context |
| @@ -2238,7 +2238,7 @@ operations: · 809 unmodified lines | |||
| 2238 | - hfunc | 2238 | - hfunc |
| 2239 | - indir | 2239 | - indir |
| 2240 | - hkey | 2240 | - hkey |
| 2241 | - input_xfrm | 2241 | - input-xfrm |
| 2242 | dump: | 2242 | dump: |
| 2243 | request: | 2243 | request: |
| 2244 | attributes: | 2244 | attributes: |
| @@ -15,7 +15,7 @@ kernel-policy: global · 14 unmodified lines | |||
| 15 | definitions: | 15 | definitions: |
| 16 | - | 16 | - |
| 17 | type: enum | 17 | type: enum |
| 18 | name: encap_type | 18 | 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: type | 43 | name: type |
| 44 | type: u8 | 44 | type: u8 |
| 45 | - | 45 | - |
| 46 | name: remcsum_nopartial | 46 | name: remcsum-nopartial |
| 47 | type: flag | 47 | type: flag |
| 48 | - | 48 | - |
| 49 | name: local_v4 | 49 | name: local-v4 |
| 50 | type: u32 | 50 | type: u32 |
| 51 | - | 51 | - |
| 52 | name: local_v6 | 52 | name: local-v6 |
| 53 | type: binary | 53 | type: binary |
| 54 | checks: | 54 | checks: |
| 55 | min-len: 16 | 55 | min-len: 16 |
| 56 | - | 56 | - |
| 57 | name: peer_v4 | 57 | name: peer-v4 |
| 58 | type: u32 | 58 | type: u32 |
| 59 | - | 59 | - |
| 60 | name: peer_v6 | 60 | name: peer-v6 |
| 61 | type: binary | 61 | type: binary |
| 62 | checks: | 62 | checks: |
| 63 | min-len: 16 | 63 | min-len: 16 |
| 64 | - | 64 | - |
| 65 | name: peer_port | 65 | name: peer-port |
| 66 | type: u16 | 66 | type: u16 |
| 67 | byte-order: big-endian | 67 | byte-order: big-endian |
| 68 | - | 68 | - |
| @@ -90,12 +90,12 @@ operations: · 21 unmodified lines | |||
| 90 | - port | 90 | - port |
| 91 | - ipproto | 91 | - ipproto |
| 92 | - type | 92 | - type |
| 93 | - remcsum_nopartial | 93 | - remcsum-nopartial |
| 94 | - local_v4 | 94 | - local-v4 |
| 95 | - peer_v4 | 95 | - peer-v4 |
| 96 | - local_v6 | 96 | - local-v6 |
| 97 | - peer_v6 | 97 | - peer-v6 |
| 98 | - peer_port | 98 | - peer-port |
| 99 | - ifindex | 99 | - ifindex |
| 100 | 100 | ||
| 101 | - | 101 | - |
| @@ -112,11 +112,11 @@ operations: · 10 unmodified lines | |||
| 112 | - af | 112 | - af |
| 113 | - ifindex | 113 | - ifindex |
| 114 | - port | 114 | - port |
| 115 | - peer_port | 115 | - peer-port |
| 116 | - local_v4 | 116 | - local-v4 |
| 117 | - peer_v4 | 117 | - peer-v4 |
| 118 | - local_v6 | 118 | - local-v6 |
| 119 | - peer_v6 | 119 | - peer-v6 |
| 120 | 120 | ||
| 121 | - | 121 | - |
| 122 | name: get | 122 | name: get |
| @@ -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-closed | 62 | name: sub-closed |
| 63 | doc: >- | 63 | doc: >- |
| 64 | A subflow has been closed. An error (copy of sk_err) could be set if an | 64 | 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-priority | 69 | name: sub-priority |
| 70 | value: 13 | 70 | 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-created | 76 | name: listener-created |
| 77 | value: 15 | 77 | value: 15 |
| @@ -255,7 +255,7 @@ attribute-sets: · 177 unmodified lines | |||
| 255 | name: timeout | 255 | name: timeout |
| 256 | type: u32 | 256 | type: u32 |
| 257 | - | 257 | - |
| 258 | name: if_idx | 258 | name: if-idx |
| 259 | type: u32 | 259 | type: u32 |
| 260 | - | 260 | - |
| 261 | name: reset-reason | 261 | name: reset-reason |
| @@ -27,7 +27,7 @@ attribute-sets: · 26 unmodified lines | |||
| 27 | name: proc | 27 | name: proc |
| 28 | type: u32 | 28 | type: u32 |
| 29 | - | 29 | - |
| 30 | name: service_time | 30 | name: service-time |
| 31 | type: s64 | 31 | type: s64 |
| 32 | - | 32 | - |
| 33 | name: pad | 33 | name: pad |
| @@ -139,7 +139,7 @@ operations: · 105 unmodified lines | |||
| 139 | - prog | 139 | - prog |
| 140 | - version | 140 | - version |
| 141 | - proc | 141 | - proc |
| 142 | - service_time | 142 | - service-time |
| 143 | - saddr4 | 143 | - saddr4 |
| 144 | - daddr4 | 144 | - daddr4 |
| 145 | - saddr6 | 145 | - saddr6 |
| @@ -216,7 +216,7 @@ definitions: · 215 unmodified lines | |||
| 216 | type: struct | 216 | type: struct |
| 217 | members: | 217 | members: |
| 218 | - | 218 | - |
| 219 | name: nd_target | 219 | name: nd-target |
| 220 | type: binary | 220 | type: binary |
| 221 | len: 16 | 221 | len: 16 |
| 222 | byte-order: big-endian | 222 | byte-order: big-endian |
| @@ -258,12 +258,12 @@ definitions: · 35 unmodified lines | |||
| 258 | type: struct | 258 | type: struct |
| 259 | members: | 259 | members: |
| 260 | - | 260 | - |
| 261 | name: vlan_tpid | 261 | name: vlan-tpid |
| 262 | type: u16 | 262 | type: u16 |
| 263 | byte-order: big-endian | 263 | 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_tci | 266 | name: vlan-tci |
| 267 | type: u16 | 267 | type: u16 |
| 268 | byte-order: big-endian | 268 | byte-order: big-endian |
| 269 | doc: Tag control identifier (TCI) to push. | 269 | doc: Tag control identifier (TCI) to push. |
| @@ -603,7 +603,7 @@ definitions: · 602 unmodified lines | |||
| 603 | name: optmask | 603 | name: optmask |
| 604 | type: u32 | 604 | type: u32 |
| 605 | - | 605 | - |
| 606 | name: if_stats_msg | 606 | name: if-stats-msg |
| 607 | type: struct | 607 | type: struct |
| 608 | members: | 608 | members: |
| 609 | - | 609 | - |
| @@ -2486,7 +2486,7 @@ operations: · 1876 unmodified lines | |||
| 2486 | name: getstats | 2486 | name: getstats |
| 2487 | doc: Get / dump link stats. | 2487 | doc: Get / dump link stats. |
| 2488 | attribute-set: stats-attrs | 2488 | attribute-set: stats-attrs |
| 2489 | fixed-header: if_stats_msg | 2489 | fixed-header: if-stats-msg |
| 2490 | do: | 2490 | do: |
| 2491 | request: | 2491 | request: |
| 2492 | value: 94 | 2492 | value: 94 |
| @@ -232,7 +232,7 @@ definitions: · 231 unmodified lines | |||
| 232 | type: u8 | 232 | 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_log | 235 | name: Scell-log |
| 236 | type: u8 | 236 | type: u8 |
| 237 | doc: cell size for idle damping | 237 | doc: cell size for idle damping |
| 238 | - | 238 | - |
| @@ -253,7 +253,7 @@ definitions: · 14 unmodified lines | |||
| 253 | name: DPs | 253 | name: DPs |
| 254 | type: u32 | 254 | type: u32 |
| 255 | - | 255 | - |
| 256 | name: def_DP | 256 | name: def-DP |
| 257 | type: u32 | 257 | type: u32 |
| 258 | - | 258 | - |
| 259 | name: grio | 259 | name: grio |
| @@ -66,7 +66,7 @@ Admin Function driver · 65 unmodified lines | |||
| 66 | As mentioned above RVU PF0 is called the admin function (AF), this driver | 66 | As mentioned above RVU PF0 is called the admin function (AF), this driver |
| 67 | supports resource provisioning and configuration of functional blocks. | 67 | supports resource provisioning and configuration of functional blocks. |
| 68 | Doesn't handle any I/O. It sets up few basic stuff but most of the | 68 | Doesn't handle any I/O. It sets up few basic stuff but most of the |
| 69 | funcionality is achieved via configuration requests from PFs and VFs. | 69 | functionality is achieved via configuration requests from PFs and VFs. |
| 70 | 70 | ||
| 71 | PF/VFs communicates with AF via a shared memory region (mailbox). Upon | 71 | PF/VFs communicates with AF via a shared memory region (mailbox). Upon |
| 72 | receiving requests AF does resource provisioning and other HW configuration. | 72 | receiving requests AF does resource provisioning and other HW configuration. |
| @@ -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 | ||
| 1878 | outpoolrm: | ||
| 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 | ||
| @@ -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 | ||
| 2036 | static 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 | |||
| 2044 | static 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 | |||
| 2052 | static 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 | |||
| 2036 | static int btintel_pcie_setup_internal(struct hci_dev *hdev) | 2058 | static 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); |
| @@ -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: |
| @@ -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 | else | 3043 | 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 towards | 3050 | /* 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 | } |
| @@ -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 | #endif | 512 | #endif |
| 513 | 513 | ||
| @@ -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; |
| @@ -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); |
| @@ -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. */ |
| 245 | static int | 245 | static noinline_for_stack int |
| 246 | qed_mfw_get_gen_tlv_value(struct qed_drv_tlv_hdr *p_tlv, | 246 | qed_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 | ||
| 307 | static int | 307 | static noinline_for_stack int |
| 308 | qed_mfw_get_eth_tlv_value(struct qed_drv_tlv_hdr *p_tlv, | 308 | qed_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 | ||
| 441 | static int | 441 | static noinline_for_stack int |
| 442 | qed_mfw_get_fcoe_tlv_value(struct qed_drv_tlv_hdr *p_tlv, | 442 | qed_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 | ||
| 1076 | static int | 1076 | static noinline_for_stack int |
| 1077 | qed_mfw_get_iscsi_tlv_value(struct qed_drv_tlv_hdr *p_tlv, | 1077 | qed_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) |
| @@ -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, |
| @@ -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 */ |
| @@ -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 | ||
| 206 | static void | 206 | /* noinline works around https://github.com/llvm/llvm-project/issues/143908 */ |
| 207 | static noinline_for_stack void | ||
| 207 | il4965_rs_rate_scale_clear_win(struct il_rate_scale_data *win) | 208 | il4965_rs_rate_scale_clear_win(struct il_rate_scale_data *win) |
| 208 | { | 209 | { |
| 209 | win->data = 0; | 210 | win->data = 0; |
| @@ -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); |
| @@ -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 | ||
| 348 | struct hci_dev { | 349 | struct 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; |
| @@ -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 of | 31 | * @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, |
| @@ -17,6 +17,10 @@ · 16 unmodified lines | |||
| 17 | #ifndef _UAPI_VM_SOCKETS_H | 17 | #ifndef _UAPI_VM_SOCKETS_H |
| 18 | #define _UAPI_VM_SOCKETS_H | 18 | #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 | ||
| @@ -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) { |
| @@ -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 | } |
| @@ -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. */ |
| 67 | struct hci_dev *hci_dev_get(int index) | 67 | static 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 | ||
| 89 | struct hci_dev *hci_dev_get(int index) | ||
| 90 | { | ||
| 91 | return __hci_dev_get(index, NULL); | ||
| 92 | } | ||
| 93 | |||
| 94 | static struct hci_dev *hci_dev_get_srcu(int index, int *srcu_index) | ||
| 95 | { | ||
| 96 | return __hci_dev_get(index, srcu_index); | ||
| 97 | } | ||
| 98 | |||
| 99 | static 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 | ||
| 89 | bool hci_discovery_active(struct hci_dev *hdev) | 107 | bool hci_discovery_active(struct hci_dev *hdev) |
| @@ -568,9 +586,9 @@ static int hci_dev_do_reset(struct hci_dev *hdev) · 478 unmodified lines | |||
| 568 | int hci_dev_reset(__u16 dev) | 586 | int 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 | ||
| 594 | done: | 612 | done: |
| 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); |
| @@ -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 know | 3520 | /* 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 { |
| @@ -2015,10 +2015,19 @@ void br_multicast_port_ctx_init(struct net_bridge_port *port, · 2014 unmodified lines | |||
| 2015 | 2015 | ||
| 2016 | void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx) | 2016 | void 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 | #endif | 2023 | #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 | ||
| 2024 | int br_multicast_add_port(struct net_bridge_port *port) | 2033 | int br_multicast_add_port(struct net_bridge_port *port) |
| @@ -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, |
| @@ -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 { |
| @@ -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 | ||
| 150 | void ieee80211_link_stop(struct ieee80211_link_data *link) | 150 | void ieee80211_link_stop(struct ieee80211_link_data *link) |
| @@ -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; |
| @@ -660,6 +660,11 @@ static void unix_sock_destructor(struct sock *sk) · 659 unmodified lines | |||
| 660 | #endif | 660 | #endif |
| 661 | } | 661 | } |
| 662 | 662 | ||
| 663 | static unsigned int unix_skb_len(const struct sk_buff *skb) | ||
| 664 | { | ||
| 665 | return skb->len - UNIXCB(skb).consumed; | ||
| 666 | } | ||
| 667 | |||
| 663 | static void unix_release_sock(struct sock *sk, int embrion) | 668 | static 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 | ||
| 2664 | static unsigned int unix_skb_len(const struct sk_buff *skb) | ||
| 2665 | { | ||
| 2666 | return skb->len - UNIXCB(skb).consumed; | ||
| 2667 | } | ||
| 2668 | |||
| 2669 | struct unix_stream_read_state { | 2675 | struct 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) |
| 2681 | static int unix_stream_recv_urg(struct unix_stream_read_state *state) | 2687 | static 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 | ||
| @@ -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-xor | 43 | # 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): |
| @@ -210,7 +210,7 @@ static void __sendpair(struct __test_metadata *_metadata, · 209 unmodified lines | |||
| 210 | static void __recvpair(struct __test_metadata *_metadata, | 210 | static 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 | ||
| 313 | static 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 | |||
| 371 | TEST_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 | ||
| 349 | TEST_F(msg_oob, oob) | 384 | TEST_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 | |||
| 399 | TEST_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 | ||
| 360 | TEST_F(msg_oob, oob_drop) | 408 | TEST_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 | ||
| 375 | TEST_F(msg_oob, oob_ahead) | 425 | TEST_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 | ||
| 390 | TEST_F(msg_oob, oob_break) | 444 | TEST_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 | ||
| 408 | TEST_F(msg_oob, oob_ahead_break) | 464 | TEST_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 | ||
| 431 | TEST_F(msg_oob, oob_break_drop) | 489 | TEST_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 | ||
| 454 | TEST_F(msg_oob, ex_oob_break) | 514 | TEST_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 | ||
| 481 | TEST_F(msg_oob, ex_oob_drop) | 543 | TEST_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 | ||
| 503 | TEST_F(msg_oob, ex_oob_drop_2) | 567 | TEST_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 | ||
| 528 | TEST_F(msg_oob, ex_oob_oob) | 594 | TEST_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 | |||
| 619 | TEST_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 | |||
| 642 | TEST_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 | ||
| 551 | TEST_F(msg_oob, ex_oob_ahead_break) | 665 | TEST_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 | ||
| 581 | TEST_F(msg_oob, ex_oob_siocatmark) | 699 | TEST_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 | ||
| 600 | TEST_F(msg_oob, inline_oob) | 720 | TEST_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 | ||
| 617 | TEST_F(msg_oob, inline_oob_break) | 739 | TEST_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 | ||
| 638 | TEST_F(msg_oob, inline_oob_ahead_break) | 762 | TEST_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 | ||
| 666 | TEST_F(msg_oob, inline_ex_oob_break) | 792 | TEST_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 | ||
| 691 | TEST_F(msg_oob, inline_ex_oob_no_drop) | 819 | TEST_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 | ||
| 712 | TEST_F(msg_oob, inline_ex_oob_drop) | 842 | TEST_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 | ||
| 736 | TEST_F(msg_oob, inline_ex_oob_siocatmark) | 868 | TEST_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 | ||
| 757 | TEST_HARNESS_MAIN | 891 | TEST_HARNESS_MAIN |