diff --git a/.elts/config.yaml b/.elts/config.yaml index d253bca5c62d..90612c7fd1db 100644 --- a/.elts/config.yaml +++ b/.elts/config.yaml @@ -1,5 +1,5 @@ upstream_repo: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git upstream_base: 4.19.304 base: 4.14.336 -upstream_version: 4.19.315 -version: 4.14.348 +upstream_version: 4.19.317 +version: 4.14.350 diff --git a/.elts/meta/4.14.349.yaml b/.elts/meta/4.14.349.yaml new file mode 100644 index 000000000000..1266db87a0b5 --- /dev/null +++ b/.elts/meta/4.14.349.yaml @@ -0,0 +1,613 @@ +8bb6ee62c33b1f281b98b2dd19f1d7249a1ee5ab: + title: 'speakup: Fix sizeof() vs ARRAY_SIZE() bug' + mainline: 008ab3c53bc4f0b2f20013c8f6c204a3203d0b8b + upstream: 42f0a3f67158ed6b2908d2b9ffbf7e96d23fd358 +a43f1f02b3a93c9a2da8ea92e4d6509d0a61ebd8: + title: 'ring-buffer: Fix a race between readers and resize checks' + mainline: c2274b908db05529980ec056359fae916939fdaa + upstream: b50932ea673b5a089a4bb570a8a868d95c72854e +39d470c1d65655756f7bc56eef30977466000040: + title: 'nilfs2: fix unexpected freezing of nilfs_segctor_sync()' + mainline: 936184eadd82906992ff1f5ab3aada70cce44cee + upstream: 072980bc50626c4557694ce54e3f6f2bde02b6e0 +6696ef522ef729e48bb88e624f4b450cc48d0008: + title: 'nilfs2: fix potential hang in nilfs_detach_log_writer()' + mainline: eb85dace897c5986bc2f36b3c783c6abb8a4292e + upstream: 911d38be151921a5d152bb55e81fd752384c6830 +478b032b9b295f6e4d224766b1d74f3f8d8015f5: + title: 'tty: n_gsm: fix possible out-of-bounds in gsm0_receive()' + mainline: 47388e807f85948eefc403a8a5fdc5b406a65d5a + upstream: 9513d4148950b05bc99fa7314dc883cc0e1605e5 +0e454ea0aef962c0bc28aaec416c987c472ee16f: + title: 'wifi: cfg80211: fix the order of arguments for trace events of the tx_rx_evt class' + mainline: 9ef369973cd2c97cce3388d2c0c7e3c056656e8a + upstream: 5099e30dde0caffa9f0e2c41d7327fc3ed987fd5 +52bed87bdd7ff234fbf08cffb5805fec3753a574: + title: 'net: usb: qmi_wwan: add Telit FN920C04 compositions' + mainline: 0b8fe5bd73249dc20be2e88a12041f8920797b59 + upstream: 25468fffbbd2b0f06b4b12d79ff56cc5c40bfd1f +1de2264213019b0e94512027fedda73173da635e: + title: 'ASoC: rt5645: Fix the electric noise due to the CBJ contacts floating' + mainline: 103abab975087e1f01b76fcb54c91dbb65dbc249 + upstream: 5c50d2e998143ce00c0629dcaabd73c3d962545c +f5822a115c534c96bcde99428ab661088e193a09: + title: 'ASoC: dt-bindings: rt5645: add cbj sleeve gpio property' + mainline: 306b38e3fa727d22454a148a364123709e356600 + upstream: 5af06b6c57a9bbfa9bd5421e28bcd5c571c5821e +6c8dd658875782d45f021c5015b9ec9bf5f5ff87: + title: 'ASoC: da7219-aad: fix usage of device_get_named_child_node()' + mainline: e8a6a5ad73acbafd98e8fd3f0cbf6e379771bb76 + upstream: 6d2d2aaae1faa64c2f803d6f11f4b2df3b3c2cff +8355ba0b459240e847584f780402073b8236df46: + title: 'crypto: bcm - Fix pointer arithmetic' + mainline: 2b3460cbf454c6b03d7429e9ffc4fe09322eb1a9 + upstream: c256b616067bfd6d274c679c06986b78d2402434 +09020d6f62421e7fd4240279ff30dde78a0300bc: + title: 'firmware: raspberrypi: Use correct device for DMA mappings' + mainline: df518a0ae1b982a4dcf2235464016c0c4576a34d + upstream: b7277844e7e367381b2377853afceb58427cf6fb +78f8f3e6cf95446a03837bb11a67c4c2569ced32: + title: 'ecryptfs: Fix buffer size for tag 66 packet' + mainline: 85a6a1aff08ec9f5b929d345d066e2830e8818e5 + upstream: 1c125b9287e58f364d82174efb167414b92b11f1 +7ee6938a59b80751d7919f67a3c4fb585d3829f6: + title: 'nilfs2: fix out-of-range warning' + mainline: c473bcdd80d4ab2ae79a7a509a6712818366e32a + upstream: 7610fd35b74211ab8def4e124095e600a1ae945b +72d5387b60255610eb6fd5c18bb819fc39cc8917: + title: 'parisc: add missing export of __cmpxchg_u8()' + mainline: c57e5dccb06decf3cb6c272ab138c033727149b5 + upstream: 63d5a72afbd1505f180e81bc72e056ceea28b43b +7eb7c75444aa358909836ea7ff4f692a53b199f9: + title: 'crypto: ccp - Remove forward declaration' + mainline: 3512dcb4e6c64733871202c01f0ec6b5d84d32ac + upstream: 4b713a1581b17a94a21699165a20d82eb0eca2dc +afb1d97ca2b2cdfa5f46e8eb9fc37934349bc34e: + title: 'crypto: ccp - drop platform ifdef checks' + mainline: 42c2d7d02977ef09d434b1f5b354f5bc6c1027ab + upstream: ce8f89223c9552d18b118596a85fd6cc237bc0e9 +7375909839424727552bd0bb2022ca3db5c6ffe8: + title: 'jffs2: prevent xattr node from overflowing the eraseblock' + mainline: c6854e5a267c28300ff045480b5a7ee7f6f1d913 + upstream: 2904e1d9b64f72d291095e3cbb31634f08788b11 +a28a74b9a53b5b25cde8cfbea4c071f7a1c9beed: + title: 'null_blk: Fix missing mutex_destroy() at module removal' + mainline: 07d1b99825f40f9c0d93e6b99d79a08d0717bac1 + upstream: 54ee1f7e2ea06e5c5341dc54255881fa5d11b312 +520ccb81e3976c1c21d19d43265958faad0aee46: + title: 'nfsd: drop st_mutex before calling move_to_close_lru()' + mainline: 56c35f43eef013579c76c007ba1f386d8c2cac14 + upstream: 52d3370e8022ce28cd8cf4d16c09245aa683d7fb +6faa6059493e8a857fe5c3b5e12a3ceec730cda3: + title: 'wifi: ath10k: poll service ready message before failing' + mainline: e57b7d62a1b2f496caf0beba81cec3c90fad80d5 + upstream: 54e3970b1848856e49f8cd08751dcb010ac3296b +a2c3254bc18b8f7bea19a00d8e7ea4ec52e941c1: + title: 'x86/boot: Ignore relocations in .notes sections in walk_relocs() too' + mainline: 76e9762d66373354b45c33b60e9a53ef2a3c5ff2 + upstream: 2487db16d4b9faead07b7825d33294e9e783791d +5b61b9cefdb45e69ab265050d603cdd30f3d089b: + title: 'scsi: ufs: qcom: Perform read back after writing reset bit' + mainline: c4d28e06b0c94636f6e35d003fa9ebac0a94e1ae + upstream: e6bfc88b60f0874a00b22f243a94a5e8601d5039 +936e250e7ec6cb3bad3a8aa3a699a625e62cb5a6: + title: 'scsi: ufs: core: Perform read back after disabling interrupts' + mainline: e4a628877119bd40164a651d20321247b6f94a8b + upstream: bf144a2e3b5048e5a9e3baf19f54d5e865d578b4 +c5a8d87d1f0792ab4f65cf240309a4effe22de01: + title: 'scsi: ufs: core: Perform read back after disabling UIC_COMMAND_COMPL' + mainline: 4bf3855497b60765ca03b983d064b25e99b97657 + upstream: 8dfd79c1c31660549a03439d42794c138efa5432 +94707145849c4be8019d4f7b2cce86402f9f9127: + title: 'irqchip/alpine-msi: Fix off-by-one in allocation error path' + mainline: ff3669a71afa06208de58d6bea1cc49d5e3fcbd1 + upstream: 4654dfa98682444152aac9bcef50e0d5e114a135 +96f2e9bb5b58c10a84e2a0064c7dc88cdcfff4d8: + title: 'ACPI: disable -Wstringop-truncation' + mainline: a3403d304708f60565582d60af4316289d0316a0 + upstream: 2e816914b5ba234c3815ca80bffd2f3b3a7de6b0 +8734c83b6dae36fbe4d97f42409e04459426858c: + title: 'scsi: libsas: Fix the failure of adding phy with zero-address to port' + mainline: 06036a0a5db34642c5dbe22021a767141f010b7a + upstream: 2d8f31aa03df040c58a2e4a0382b96269c1bf96a +784e2dc0d9be9b2e2ff8e3d05713f4d82895a489: + title: 'scsi: hpsa: Fix allocation size for Scsi_Host private data' + mainline: 504e2bed5d50610c1836046c0c195b0a6dba9c72 + upstream: 9fc44d44b3b8eadd8b797462c733eb6c63598e6f +6541bba29a4584f20a372e98ca07659b1b971c3e: + title: 'wifi: ath10k: Fix an error code problem in ath10k_dbg_sta_write_peer_debug_trigger()' + mainline: c511a9c12674d246916bb16c479d496b76983193 + upstream: 569da482fdec15251ff113462717182d85bd1665 +d85d76f39ef8f74c3ce4b2084bc1d56b90f808ce: + title: 'macintosh/via-macii: Remove BUG_ON assertions' + mainline: 5f93d7081a47e1972031ccf57c4b2779eee162fb + upstream: 880897e8a5ade054a04575e5d8cc2666da415ab4 +cbe81c90b06ebd1a23367c8c594dbddac39d531c: + title: 'm68k/mac: Add mutual exclusion for IOP interrupt polling' +fad0ed0dd7bf14e6c89489e1db0486828e45f563: + title: 'macintosh/via-macii, macintosh/adb-iop: Clean up whitespace' + mainline: 47fd2060660e62b169990a6fcd9eb61bc1a85c5c + upstream: d0aa752285c9a35ee1ae0f2a4da10c5ceb6c09b6 +82b5124ff8448c3b27d5cf963d835806a4ec8726: + title: 'macintosh/via-macii: Fix "BUG: sleeping function called from invalid context"' + mainline: d301a71c76ee4c384b4e03cdc320a55f5cf1df05 + upstream: e4ff8bcfb2841fe4e17e5901578b632adb89036d +e6c959db704b9f17b53d0d695ac791ddb180649b: + title: 'wifi: carl9170: add a proper sanity check for endpoints' + mainline: b6dd09b3dac89b45d1ea3e3bd035a3859c0369a0 + upstream: eb0f2fc3ff5806cc572cd9055ce7c52a01e97645 +0e282a437be278b5a28b5de56553710ca304877a: + title: 'wifi: ar5523: enable proper endpoint verification' + mainline: e120b6388d7d88635d67dcae6483f39c37111850 + upstream: 79ddf5f2020fd593d50f1363bb5131283d74f78f +08d55870d721795f5ca9affb641a9d77a5cde478: + title: 'sh: kprobes: Merge arch_copy_kprobe() into arch_prepare_kprobe()' + mainline: 1422ae080b66134fe192082d9b721ab7bd93fcc5 + upstream: 8ed15460d8bbc517bf54b24c7694e6c0ff174968 +3d986276f8b5fa0dc170e1b35f0659b9ba4b2cd0: + title: 'Revert "sh: Handle calling csum_partial with misaligned data"' + mainline: b5319c96292ff877f6b58d349acf0a9dc8d3b454 + upstream: 3c37203af733254154602273a970cfb7400c223e +2461969d18d1b3a8ca40c5203819221813d2fa47: + title: 'scsi: bfa: Ensure the copied buf is NUL terminated' + mainline: 13d0cecb4626fae67c00c84d3c7851f6b62f7df3 + upstream: 481fc0c8617304a67649027c4a44723a139a0462 +c2d34a41a30021d6947d93dee2373e98416296b8: + title: 'scsi: qedf: Ensure the copied buf is NUL terminated' + mainline: d0184a375ee797eb657d74861ba0935b6e405c62 + upstream: 1f84a2744ad813be23fc4be99fb74bfb24aadb95 +ceee9c23ca78be8cbe0b677623554c14da4a8ffe: + title: 'wifi: mwl8k: initialize cmd->addr[] properly' + mainline: 1d60eabb82694e58543e2b6366dae3e7465892a5 + upstream: 6bc4e51e8d8451d40ec092d01119287af2acffcf +2341a1b273189a5673cfbb6a5badecca8e25d24a: + title: 'net: usb: sr9700: stop lying about skb->truesize' + mainline: 05417aa9c0c038da2464a0c504b9d4f99814a23b + upstream: c0aff9978bb6ead0aec382a2645a563a3dd2df38 +314fdca9aa1eac5417fd9621bf4ebbacfd100e75: + title: 'm68k: Fix spinlock race in kernel thread creation' + mainline: da89ce46f02470ef08f0f580755d14d547da59ed + upstream: 2a8d1d95302c7d52c6ac8fa5cb4a6948ae0d3a14 +4e23b79c4b130dd3049e3c0001d4926dcfacded5: + title: 'm68k/mac: Use ''030 reset method on SE/30' + mainline: 9c0e91f6b701dce6902408d50c4df9cebe4744f5 + upstream: c96430d59c71a0e5c641b5267ccf141c501fe15e +3d47f159d4991609f1a71bb15683f1b8cac8d2a8: + title: 'm68k: mac: Fix reboot hang on Mac IIci' + mainline: 265a3b322df9a973ff1fc63da70af456ab6ae1d6 + upstream: 8055e882c57031a5ca7fbf278796c19ded9f9d6f +be1d9f0e9de4ae6b3c0baed5547aa84be06f6548: + title: 'af_unix: Fix data races in unix_release_sock/unix_stream_sendmsg' + mainline: 540bf24fba16b88c1b3b9353927204b4f1074e25 + upstream: fca6072e1a7b1e709ada5604b951513b89b4bd0a +16d0a15317ccdd42565ee3b0b4414f7134f414ba: + title: 'net: usb: smsc95xx: stop lying about skb->truesize' + mainline: d50729f1d60bca822ef6d9c1a5fb28d486bd7593 + upstream: 1010b50b2ebaaa863baeba7572267ac39bbb7adb +d84c07f0a36edfbb017f66723aff19b75408ec6a: + title: 'net: openvswitch: fix overwriting ct original tuple for ICMPv6' + mainline: 7c988176b6c16c516474f6fceebe0f055af5eb56 + upstream: 6a51ac92bf35d34b4996d6eb67e2fe469f573b11 +e990bf08d73df105508439d775a40706fa34e4da: + title: 'ipv6: sr: add missing seg6_local_exit' + mainline: 3321687e321307629c71b664225b861ebf3e5753 + upstream: 9acb7ed4ff0e57b29326768aa8780f2ba2310090 +32cc76dc98c3a167b25dfe1548848036fc07d834: + title: 'ipv6: sr: fix incorrect unregister order' + mainline: 6e370a771d2985107e82d0f6174381c1acb49c20 + upstream: d55cf7ced48c5054a79829a0b14203710006a277 +a7eb748e89ec4c74a795fd32380019f21ae75895: + title: 'ipv6: sr: fix invalid unregister error path' + mainline: 160e9d2752181fcf18c662e74022d77d3164cd45 + upstream: 10610575a3ac2a702bf5c57aa931beaf847949c7 +73bc0203a1791e5252c190a016d46502406d53f0: + title: 'mtd: rawnand: hynix: fixed typo' + mainline: 6819db94e1cd3ce24a432f3616cd563ed0c4eaba + upstream: 80850a39e2548988f4feae26f3fd66286b460278 +4ba8a5fa126c85d319a0f1c773a15c04dde7d74c: + title: 'fbdev: shmobile: fix snprintf truncation' + mainline: 26c8cfb9d1e4b252336d23dd5127a8cbed414a32 + upstream: f6100ea560ed320a397d99aad6ad6918f0f1a70a +43f9acac76b1661328292b13c57936252536a7ee: + title: 'drm/mediatek: Add 0 size check to mtk_drm_gem_obj' + mainline: 1e4350095e8ab2577ee05f8c3b044e661b5af9a0 + upstream: 79078880795478d551a05acc41f957700030d364 +27a754ac9d1b146c6690b8cc566be4df02028430: + title: 'powerpc/fsl-soc: hide unused const variable' + mainline: 01acaf3aa75e1641442cc23d8fe0a7bb4226efb1 + upstream: b798cfeea12ebfd74c4bba511deb02956c97789e +a36a6656bdcc519ee8206e91a484c9545e41c428: + title: 'media: ngene: Add dvb_ca_en50221_init return value check' + mainline: 9bb1fd7eddcab2d28cfc11eb20f1029154dac718 + upstream: 7394bab35c51cead246ef50d8c2e699e36032aed +83fe7e17269e69bb85c5dcde3543fe69a7d14907: + title: 'media: radio-shark2: Avoid led_names truncations' + mainline: 1820e16a3019b6258e6009d34432946a6ddd0a90 + upstream: cbc12c9693fad0545fb0e753d78979026ae0772a +d1bafe8dbdd69b5b94c648616261b10f89e9e634: + title: 'fbdev: sh7760fb: allow modular build' + mainline: 51084f89d687e14d96278241e5200cde4b0985c7 + upstream: 74bafc897cb6c83b29c66cb39e82936204a5e51f +8b76f73f5124b83712d6cdcb3ef990263e40c5f0: + title: 'ASoC: tracing: Export SND_SOC_DAPM_DIR_OUT to its value' + mainline: 58300f8d6a48e58d1843199be743f819e2791ea3 + upstream: 60c68092723ea420215e9c3d5530038bc6568739 +e39747d5b28a334d3aa4a7d53db14f9f30390923: + title: 'x86/insn: Fix PUSH instruction in x86 instruction decoder opcode map' + mainline: 59162e0c11d7257cde15f907d19fefe26da66692 + upstream: ef10bbdf4d59a98cf57ddf943756f14ef3cdbccd +668cfe934e0081e60581269d5afab127489cdfda: + title: 'ext4: avoid excessive credit estimate in ext4_tmpfile()' + mainline: 35a1f12f0ca857fee1d7a04ef52cbd5f1f84de13 + upstream: 1f9e32f9ea3454f79d80c8af7fac54843beba7f6 +0f0c8dcfaaff549a0397d3e63ec093c2ff6d602d: + title: 'selftests/kcmp: Make the test output consistent and clear' + mainline: ff682226a353d88ffa5db9c2a9b945066776311e + upstream: 32b0469d13ebeb008b39613eb5acf529a10e0bde +eea262830c62f8856fed4c532b5598f83c2972a9: + title: 'selftests/kcmp: remove unused open mode' + mainline: eb59a58113717df04b8a8229befd8ab1e5dbf86e + upstream: 24331545d6ff749a8dbfb09925af86e8cc50dad5 +b3ab7172b68826ae894b394561679727af8e970d: + title: 'RDMA/ipoib: Fix use of sizeof()' +183cb1a936e35c5ae205498945addd70a31a61e0: + title: 'RDMA/IPoIB: Fix format truncation compilation errors' + mainline: 49ca2b2ef3d003402584c68ae7b3055ba72e750a + upstream: b469345f1fca84bed4dea3cae85faa401cf9bf3e +08f41b353c1621f65bd6f61aa5f5aed2fc1feb11: + title: 'netrom: fix possible dead-lock in nr_rt_ioctl()' + mainline: e03e7f20ebf7e1611d40d1fdc1bde900fd3335f6 + upstream: b9d663fbf74290cb68fbc66ae4367bd56837ad1d +79417a25cb5eb9644fe89e5aae703a6b591669d5: + title: 'af_packet: do not call packet_read_pending() from tpacket_destruct_skb()' + mainline: 581073f626e387d3e7eed55c48c8495584ead7ba + upstream: 4f3ae7d846b4565c0b80d65ed607c3277bc984d4 +03baaba21b3291e6300e4fafb8d2849f0389de3d: + title: 'sched/topology: Don''t set SD_BALANCE_WAKE on cpuset domain relax' + mainline: 9ae7ab20b4835dbea0e5fc6a5c70171dc354a72e + upstream: 046daa54c348ccec12ab38b92923060dd09ef00b +cd212b4b364b6efe32441d764cabaef2402c8eba: + title: 'sched/fair: Allow disabling sched_balance_newidle with sched_relax_domain_level' + mainline: a1fd0b9d751f840df23ef0e75b691fc00cfd4743 + upstream: 454de5ed81766fbbf4777c43392d8b0b35e7e16d +8d680792eafdefb9e3e547a305a505da085932ff: + title: 'greybus: lights: check return of get_channel_from_mode' + mainline: a1ba19a1ae7cd1e324685ded4ab563e78fe68648 + upstream: 8f4a76d477f0cc3c54d512f07f6f88c8e1c1e07b +0d0f766835c349005332fd8e7b296660a7d6a65a: + title: 'dmaengine: idma64: Add check for dma_set_max_seg_size' + mainline: 2b1c1cf08a0addb6df42f16b37133dc7a351de29 + upstream: 12c70cc851b263b8cc9479a23488992eeb4c35e6 +e9c8e448b86118386e2aed7e3bb0e02fdbb68d14: + title: 'firmware: dmi-id: add a release callback function' + mainline: cf770af5645a41a753c55a053fa1237105b0964a + upstream: 20595142ca22ac2c8357564d9e7d52a0ffa471af +bcbacbcfd59ba38747a001592ffb3aae1118e5de: + title: 'serial: max3100: Lock port->lock when calling uart_handle_cts_change()' + mainline: 77ab53371a2066fdf9b895246505f5ef5a4b5d47 + upstream: 44b38924135d2093e2ec1812969464845dd66dc9 +c6cf8b544d9ca71186322b2ede24e7ded577381a: + title: 'serial: max3100: Update uart_driver_registered on driver removal' + mainline: 712a1fcb38dc7cac6da63ee79a88708fbf9c45ec + upstream: 21a61a7fbcfdd3493cede43ebc7c4dfae2147a8b +647c442cedd75f319c8ce8dc039c2d7baec68317: + title: 'serial: max3100: Fix bitwise types' + mainline: e60955dbecb97f080848a57524827e2db29c70fd + upstream: 2ae8d5726526c05452aff0444b0f305fdf89a32d +89f965ae0a3f751235963e2597c63fd9ce035113: + title: 'greybus: arche-ctrl: move device table to its right location' + mainline: 6a0b8c0da8d8d418cde6894a104cf74e6098ddfa + upstream: 22e65ed6799f2bfd059d633890d6c7ebe46abc9b +0328af15e33a89109f97c8abcce2119896607fb4: + title: 'usb: gadget: u_audio: Clear uac pointer when freed.' + mainline: a2cf936ebef291ef7395172b9e2f624779fb6dc0 + upstream: a646645af00f65db78fe4a60f753f2b07df35b6e +5bbc7d325cef8fbd593fd8e71f12343c47028be1: + title: 'stm class: Fix a double free in stm_register_device()' + mainline: 3df463865ba42b8f88a590326f4c9ea17a1ce459 + upstream: 6cc30ef8eb6d8f8d6df43152264bbf8835d99931 +16e15c7fd21ec24f98668e5a7bf28ef5c1a0fcaa: + title: 'ppdev: Add an error check in register_device' + mainline: fbf740aeb86a4fe82ad158d26d711f2f3be79b3e + upstream: 65cd017d43f4319a56747d38308b0a24cf57299e +d1e6203d776319b888b57b1176df438ee85e67f7: + title: 'extcon: max8997: select IRQ_DOMAIN instead of depending on it' + mainline: b1781d0a1458070d40134e4f3412ec9d70099bec + upstream: b463819e3725b60c550145df952080b5d0fe85a7 +46dc390d5714351d5b798312f8edf666e327a1ef: + title: 'f2fs: add error prints for debugging mount failure' + mainline: 9227d5227b8db354d386f592f159eaa44db1c0b8 + upstream: 3506e1b893b5c2afa96922f36a01f018e4c4bbba +3fa32fd0a2737a59698613854994f72051a6d4bb: + title: 'libsubcmd: Fix parse-options memory leak' + mainline: 230a7a71f92212e723fa435d4ca5922de33ec88a + upstream: 3625187a973f16a3df59b803297816fe51d32400 +41c0d9061a68f5979e3244c26854cef37d91382b: + title: 'Input: ims-pcu - fix printf string overflow' + mainline: bf32bceedd0453c70d9d022e2e29f98e446d7161 + upstream: 502f295dcccf0ee7c4bddcf1ff2876987aaf89ca +7dfc577218ae7aeeadc5bdffe5727d57337904ee: + title: 'Input: pm8xxx-vibrator - correct VIB_MAX_LEVELS calculation' + mainline: 48c0687a322d54ac7e7a685c0b6db78d78f593af + upstream: fd4bb5284d34687c82356f07efe957af89ee51fe +bb75c00bad0d04025b00991fe16db2fc0504ce58: + title: 'um: Fix return value in ubd_init()' + mainline: 31a5990ed253a66712d7ddc29c92d297a991fdf2 + upstream: d2640251f94078e1dcf0a26b1815601f6dbd5440 +330646466ce0f4978524457d109ac80ece62c547: + title: 'um: Add winch to winch_handlers before registering winch IRQ' + mainline: a0fbbd36c156b9f7b2276871d499c9943dfe5101 + upstream: 66ea9a7c6824821476914bed21a476cd20094f33 +b7d9420c157cdb207a95dfc4a40edd116dedf355: + title: 'media: stk1160: fix bounds checking in stk1160_copy_video()' + mainline: faa4364bef2ec0060de381ff028d1d836600a381 + upstream: f6a392266276730bea893b55d12940e32a25f56a +cd05d6e21092d824ec4d37f39f7583310d0442fa: + title: 'powerpc/pseries: Add failure related checks for h_get_mpp and h_get_ppp' + mainline: 6d4341638516bf97b9a34947e0bd95035a8230a5 + upstream: f0f4cb4cc3f43324bab3b5541b27e79cbd15c8d1 +d6c506b111a38e5583e5bdd880cc0c04d7ef3948: + title: 'um: Fix the -Wmissing-prototypes warning for __switch_mm' + mainline: 2cbade17b18c0f0fd9963f26c9fc9b057eb1cb3a + upstream: c08650c13bfc05794855480cc51075fdfcc388e0 +75fd6535ba80c0726e31004af666d80a0b9c3df8: + title: 'media: cec: cec-api: add locking in cec_release()' + mainline: 42bcaacae924bf18ae387c3f78c202df0b739292 + upstream: d2cfbc5298add5e0c6cfe8b343f73dfdf01c8b1c +9da7f2b727fd54add9890e238847acf82d6807a1: + title: 'null_blk: Fix the WARNING: modpost: missing MODULE_DESCRIPTION()' + mainline: 9e6727f824edcdb8fdd3e6e8a0862eb49546e1cd + upstream: 7471d0be031ab830a0fa154437601cff98f7068b +4e00769cc5020fde90269bdd1e5c24302b0ba6ce: + title: 'x86/kconfig: Select ARCH_WANT_FRAME_POINTERS again when UNWINDER_FRAME_POINTER=y' + mainline: 66ee3636eddcc82ab82b539d08b85fb5ac1dff9b + upstream: 28a7a1f9571068bb2ddc8a11f0afe5dfa9863462 +3327ed68607e86e489af26305145830bf3f299a6: + title: 'nfc: nci: Fix uninit-value in nci_rx_work' + mainline: e4a87abf588536d1cdfb128595e6e680af5cf3ed + upstream: 406cfac9debd4a6d3dc5d9258ee086372a8c08b6 +2d5acfc9e45f4597b931857dd92d2f29d2382ad7: + title: 'ipv6: sr: fix memleak in seg6_hmac_init_algo' + mainline: efb9f4f19f8e37fde43dfecebc80292d179f56c6 + upstream: afd5730969aec960a2fee4e5ee839a6014643976 +45e0b129726564750a58c06f1b4060b23f158960: + title: 'params: lift param_set_uint_minmax to common code' + mainline: 2a14c9ae15a38148484a128b84bff7e9ffd90d68 + upstream: 459de98d7a6b3d504b5e8664f32f59a306dd425c +cf1096a1c8e1905df5e69949153c2598060457f0: + title: 'tcp: Fix shift-out-of-bounds in dctcp_update_alpha().' + mainline: 3ebc46ca8675de6378e3f8f40768e180bb8afa66 + upstream: 06d0fe049b51b0a92a70df8333fd85c4ba3eb2c6 +a629b0579dee6b041fdcad1859fa9f6a86da4ced: + title: 'openvswitch: Set the skbuff pkt_type for proper pmtud support.' + mainline: 30a92c9e3d6b073932762bef2ac66f4ee784c657 + upstream: 62a95de44a9bc006e01b0afa1b1e8868dc6de9d1 +0374a08aa5206c6200a88e0a122500dfd1d195f0: + title: 'arm64: asm-bug: Add .align 2 to the end of __BUG_ENTRY' + mainline: ffbf4fb9b5c12ff878a10ea17997147ea4ebea6f + upstream: f221bd58db0f6ca087ac0392284f6bce21f4f8ea +63c5945dbfcb8b6f4c260aef57172893a15ebbb3: + title: 'virtio: delete vq in vp_find_vqs_msix() when request_irq() fails' + mainline: 89875151fccdd024d571aa884ea97a0128b968b6 + upstream: cb7a7c8144b434e06aba99b13b045a7efe859587 +273d17ed35348d5e6cabe23d9170c876f95f3946: + title: 'net: fec: remove redundant variable ''inc''' +76ff93a5ccf6378571ba77875039f77752ac8a33: + title: 'net: fec: avoid lock evasion when reading pps_enable' + mainline: 3b1c92f8e5371700fada307cc8fd2c51fa7bc8c1 + upstream: 4e4efb8f1b275e85c5c7f69087e392dbae437a8d +3267e236cb890a2ff6450ba831f3ad66386d6c4b: + title: 'nfc: nci: Fix kcov check in nci_rx_work()' + mainline: 19e35f24750ddf860c51e51c68cf07ea181b4881 + upstream: c6c938ef515733a1c7af2c87dbc23138f402ba97 +1a7a9cc0bb2c966cb7edee4a47dc81053e9030d8: + title: 'nfc: nci: Fix handling of zero-length payload packets in nci_rx_work()' + mainline: 6671e352497ca4bb07a96c48e03907065ff77d8a + upstream: 8f02d494cebae48dbd14c582ad4b36846e211b6a +ac335a5fe30958ed4c81fac6b76e4b6c77f6f95d: + title: 'netfilter: nfnetlink_queue: acquire rcu_read_lock() in instance_destroy_rcu()' + mainline: dc21c6cc3d6986d938efbf95de62473982c98dec + upstream: 8658bd777cbfcb0c13df23d0ea120e70517761b9 +0a359294f4d22e037ff38999b1fdaa688aab6e5f: + title: 'spi: Don''t mark message DMA mapped when no transfer in it is' + mainline: 9f788ba457b45b0ce422943fcec9fa35c4587764 + upstream: c7893975764ba3b7a58a186f63dae188f7eddb18 +5584ee5ae01187bdcb286738c27d8cecf7c2b92d: + title: 'nvmet: fix ns enable/disable possible hang' + mainline: f97914e35fd98b2b18fb8a092e0a0799f73afdfe + upstream: 36a935c8785a9ca95b094440a0450cd56b90e70c +d6e67757cebbeb5857838f51e2c514a3c9fc5557: + title: 'net/mlx5e: Use rx_missed_errors instead of rx_dropped for reporting buffer exhaustion' + mainline: 5c74195d5dd977e97556e6fa76909b831c241230 + upstream: 19f9b6cb94eebb4ef2a4a6bca0ef595039d73e04 +5beeab6917b9b59ab2c15744b190b3ad93c58687: + title: 'dma-buf/sw-sync: don''t enable IRQ from sync_print_obj()' + mainline: b794918961516f667b0c745aebdfebbb8a98df39 + upstream: 1ff116f68560a25656933d5a18e7619cb6773d8a +3d00c58ac6d7f0fa0882aafb5b1ca2c3c22838eb: + title: 'enic: Validate length of nl attributes in enic_set_vf_port' + mainline: e8021b94b0412c37bcc79027c2e382086b6ce449 + upstream: 2b649d7e0cb42a660f0260ef25fd55fdc9c6c600 +d7936abfc24afa29d587b2bdd0829092dc478ebf: + title: 'smsc95xx: remove redundant function arguments' + mainline: 368be1ca28f66deba16627e2a02e78adedd023a6 + upstream: eced17c8715d43ce16f61c5a6a49299fbf37c0a0 +17ddb0fdf87c7f3f7c07e2721f688301411d2792: + title: 'smsc95xx: use usbnet->driver_priv' + mainline: ad90a73f0236c41f7a2dedc2e75c7b5a364eb93e + upstream: bcc526fec891dee22162082b1beeb9068b9eabb0 +e0bd5cab3be56a1437e713a5411c458b80fa039c: + title: 'net: usb: smsc95xx: fix changing LED_SEL bit value updated from EEPROM' + mainline: 52a2f0608366a629d43dacd3191039c95fef74ba + upstream: 85b6bcf9d5e332aa9c4b7820cb3aa748c3df6a80 +4c2d953d579bbc6018f916d7474ca42a0ea2471f: + title: 'net:fec: Add fec_enet_deinit()' + mainline: bf0497f53c8535f99b72041529d3f7708a6e2c0d + upstream: 416b0756721dcee2bb6227a4403e694011c32874 +c00f30ffce7c99732b9610771908b84af2f7e95a: + title: 'kconfig: fix comparison to constant symbols, ''m'', ''n''' + mainline: aabdc960a283ba78086b0bf66ee74326f49e218e + upstream: 6bfda3ef7f6a2c1de30e70d67e901aa966f40c17 +59e5a44b8b298cec43305d8ba650673094448b28: + title: 'net: add DEV_STATS_READ() helper' + mainline: 0b068c714ca9479d2783cc333fff5bc2d4a6d45c +f18d1f1dd0f85682cce01581ea7c2596d0d35ead: + title: 'ipvlan: properly track tx_errors' + mainline: ff672b9ffeb3f82135488ac16c5c5eb4b992999b +41e5da22e02a94825b061ad86f10c9d6955727fd: + title: 'ipvlan: add ipvlan_route_v6_outbound() helper' + mainline: 18f039428c7df183b09c69ebf10ffd4e521035d2 +3a016fed8503f04152b170bc324fd7fbbfb155e4: + title: 'ipvlan: Dont Use skb->sk in ipvlan_process_v{4,6}_outbound' + mainline: b3dc6e8003b500861fa307e9a3400c52e78e4d3a + upstream: 0049a623dfbbb49888de7f0c2f33a582b5ead989 +24212e46bb2a25ec7c7ef9c45a40670608a3a0f8: + title: 'ALSA: timer: Simplify timer hw resolution calls' +804b59ac965568b4ac7b1788ba8b3b324e362693: + title: 'ALSA: timer: Set lower bound of start tick time' + mainline: 4a63bd179fa8d3fcc44a0d9d71d941ddd62f0c4e + upstream: 68396c825c43664b20a3a1ba546844deb2b4e48f +f642f364e2b4e4302e6b41f1583603a9be83baef: + title: 'binder: fix max_thread type inconsistency' + mainline: 42316941335644a98335f209daafa4c122f28983 + upstream: c437184be3c16f7123e5c59b4c85c1101f4dc96b +5584cc5bd6c850f9738f7b249be3d298f0012a16: + title: 'mmc: core: Do not force a retune before RPMB switch' + mainline: 67380251e8bbd3302c64fea07f95c31971b91c22 + upstream: bda1d354bef71be32aaf2c5e6b96eef854b3dd4e +042d63a09767b3d6d006fc867d77cf610bfcdebf: + title: 'fs/nilfs2: convert timers to use timer_setup()' +705fabd9032429d644eee84edc1d45f740edcc81: + title: 'nilfs2: fix use-after-free of timer for log writer thread' + mainline: f5d4e04634c9cf68bdf23de08ada0bb92e8befe7 + upstream: 822ae5a8eac30478578a75f7e064f0584931bf2d +7e6f3eaf97955faec6cf408b6404a35cf2c82ea0: + title: 'vxlan: Fix regression when dropping packets due to invalid src addresses' + mainline: 1cd4bc987abb2823836cbb8f887026011ccddc8a + upstream: f6141cbc2b5af521b1711e95363302b858a38729 +34358bf261de42b079db6cbd5ae3b074282cd00f: + title: 'neighbour: fix unaligned access to pneigh_entry' + mainline: ed779fe4c9b5a20b4ab4fd6f3e19807445bb78c7 + upstream: f451d1a013fd585cbf70a65ca6b9cf3548bb039f +792524d8e1b344cedcb40983a8756d4793a22e9e: + title: 'ata: pata_legacy: make legacy_exit() work again' + mainline: d4a89339f17c87c4990070e9116462d16e75894f + upstream: 21604179f67bd484790c296565bdc38f7a40fe35 +aa9c43942fc69f5e652d6b4f68e0e2bf75868c7e: + title: 'arm64: tegra: Correct Tegra132 I2C alias' + mainline: 2633c58e1354d7de2c8e7be8bdb6f68a0a01bad7 + upstream: 40f76e72ec0ebe27dcff9bfd5de8e65e1a2b8939 +d7263704edf4ee2783b116f64f407752d5b2f2bf: + title: 'md/raid5: fix deadlock that raid5d() wait for itself to clear MD_SB_CHANGE_PENDING' + mainline: 151f66bb618d1fd0eeb84acb61b4a9fa5d8bb0fa + upstream: b32aa95843cac6b12c2c014d40fca18aef24a347 +964fdd7feb56e40a55b89328877b0a7103bb4084: + title: 'arm64: dts: hi3798cv200: fix the size of GICR' + mainline: 428a575dc9038846ad259466d5ba109858c0a023 + upstream: 26e62b983a31b304733fb21f4b576a4a1e171297 +35d3fa1859980a84c64c51b04a2ac57ffe5af109: + title: 'media: mxl5xx: Move xpt structures off stack' + mainline: 526f4527545b2d4ce0733733929fac7b6da09ac6 + upstream: 772f5e31ed2d6bc5e8698394e4d13b298060c74a +2046df24d6472a520a62d52a72d84d180b3e363c: + title: 'media: v4l2-core: hold videodev_lock until dev reg, finishes' + mainline: 1ed4477f2ea4743e7c5e1f9f3722152d14e6eeb1 + upstream: 1ea3de272f5cc7603610b96316f9ed07bec6c2d0 +293140832f7230044b5f6888d0110714f51b554f: + title: 'fbdev: savage: Handle err return when savagefb_check_var failed' + mainline: 6ad959b6703e2c4c5d7af03b4cfd5ff608036339 + upstream: be754cbd77eaf2932408a4e18532e4945274a5c7 +832e81e147209b23bc09678738383b7bc258b448: + title: 'netfilter: nf_tables: add nft_set_is_anonymous() helper' +05084047e524051c0ea37f6b3183017d783e6e20: + title: 'netfilter: nf_tables: fix set double-free in abort path' + mainline: 40ba1d9b4d19796afc9b7ece872f5f3e8f5e2c13 +c4af59f2d8336214168c4e0778a1a0a62afcbdc4: + title: 'netfilter: nf_tables: pass context to nft_set_destroy()' + mainline: 0c2a85edd143162b3a698f31e94bf8cdc041da87 + upstream: 525561faa075cb49905783fd3e4e16b66b218846 +b42c75cd69307b546b719cc59fb421a7c80a980f: + title: 'netfilter: nftables: rename set element data activation/deactivation functions' + mainline: f8bb7889af58d8e74d2d61c76b1418230f1610fa + upstream: 68b10f33a37e942bdc06b9cb313ad4e1b1f612e8 +e4382ad0d81a0f37c3d430a3009f597568a949a4: + title: 'netfilter: nf_tables: pass ctx to nf_tables_expr_destroy()' +50bfcb0af95ae860d93c151604451b9a10af6e06: + title: 'netfilter: nf_tables: drop map element references from preparation phase' + mainline: 628bd3e49cba1c066228e23d71a852c23e26da73 + upstream: bc9f791d2593f17e39f87c6e2b3a36549a3705b1 +4538b02484e4c2d0c016ca190c5219fd97f932fb: + title: 'netfilter: nf_tables: don''t skip expired elements during walk' + mainline: 24138933b97b055d486e8064b4a1721702442a9b + upstream: 94313a196b44184b5b52c1876da6a537701b425a +ea71b10a3d18e5589f44b836a83003a6e741d6bb: + title: 'netfilter: nft_dynset: report EOPNOTSUPP on missing set feature' + mainline: 95cd4bca7b1f4a25810f3ddfc5e767fb46931789 + upstream: c5c4746c8cd6d049dcbf39c811172c917ea6fb6e +fa8b9918795f9be7f4ca95f5440acff86fe946db: + title: 'netfilter: nft_dynset: relax superfluous check on set updates' + mainline: 7b1394892de8d95748d05e3ee41e85edb4abbfa1 + upstream: 79e98cd78610560a6a6cf85200eb31331602f9a9 +6658c1ef0cb35d3d594507db800cb44a54db4f75: + title: 'KVM: arm64: Allow AArch32 PSTATE.M to be restored as System mode' + mainline: dfe6d190f38fc5df5ff2614b463a5195a399c885 + upstream: 3c9ee8294728633e707c25fe0a321eeac1cc7515 +9d5b95ce1488266fd3dc3951da6c8ce25c366ada: + title: 'crypto: qat - Fix ADF_DEV_RESET_SYNC memory leak' + mainline: d3b17c6d9dddc2db3670bc9be628b122416a3d26 + upstream: 0ce5964b82f212f4df6a9813f09a0b5de15bd9c8 +9a9a74f4cdb1295a5a854d2ca6cb87fc19048ef3: + title: 'net/9p: fix uninit-value in p9_client_rpc()' + mainline: 25460d6f39024cc3b8241b14c7ccf0d6f11a736a + upstream: 72c5d8e416ecc46af370a1340b3db5ff0b0cc867 +471ea347bb7d4b16dd62a6642efb111fa36f2da7: + title: 'intel_th: pci: Add Meteor Lake-S CPU support' + mainline: a4f813c3ec9d1c32bc402becd1f011b3904dd699 + upstream: 58c0309c73fe1e9c477ed4cc5d02fc9015336979 +9f2edbc910b189e46e7ca3d17680e36fde63276d: + title: 'sparc64: Fix number of online CPUs' + mainline: 98937707fea8375e8acea0aaa0b68a956dd52719 + upstream: 180b2e4c1ba4f6e3e4c52d6664cb019f6eac02f8 +f751d9a9f3d6c01908cf9bc9d966a35ecc1a2f64: + title: 'kdb: Fix buffer overflow during tab-complete' + mainline: e9730744bf3af04cda23799029342aa3cddbc454 + upstream: fb824a99e148ff272a53d71d84122728b5f00992 +f990953b6d8d752849e6f682628d4632f051b7de: + title: 'kdb: Use format-strings rather than ''\0'' injection in kdb_read()' + mainline: 09b35989421dfd5573f0b4683c7700a7483c71f9 + upstream: 4edfbbaca46491b06af14e49dcb79ac661d0bbdc +fc2a098bc09c4f9968c93222902d72f518ec6953: + title: 'kdb: Fix console handling when editing and tab-completing commands' + mainline: db2f9c7dc29114f531df4a425d0867d01e1f1e28 + upstream: 21c068c1bbb4c336741749596d004b1965faab2c +201f3d45deb9bcf1046483d72642d8457976c7a9: + title: 'kdb: Merge identical case statements in kdb_read()' + mainline: 6244917f377bf64719551b58592a02a0336a7439 + upstream: 4a89182788f9af9a290c19098382fb972ebe2783 +c89fb4fb7559ec8e3f74ecbc29ef856a47cc85d4: + title: 'kdb: Use format-specifiers rather than memset() for padding in kdb_read()' + mainline: c9b51ddb66b1d96e4d364c088da0f1dfb004c574 + upstream: 2467f3f182eb35627534effd4956fceb2504c127 +212ca5dd4286a76808254db293bd898a062b56e3: + title: 'sparc: move struct termio to asm/termios.h' + mainline: c32d18e7942d7589b62e301eb426b32623366565 + upstream: 980a1cd6e092eab9398a78f517809a7dacaa0468 +199f7d837409f78087fde12a33c486d4d866c16e: + title: 'ext4: fix mb_cache_entry''s e_refcnt leak in ext4_xattr_block_cache_find()' + mainline: 0c0b4a49d3e7f49690a6827a41faeffad5df7e21 + upstream: 9ad75e78747b5a50dc5a52f0f8e92e920a653f16 +593e234893f02097b207840c7c31b4d91b64ca14: + title: 'nfs: fix undefined behavior in nfs_block_bits()' + mainline: 3c0a2e0b0ae661457c8505fecc7be5501aa7a715 + upstream: 74ea538aa24490d7d259c881189bb58dbf1f692c +aa4a1101113a8425c065d44e33c636cad583327d: + title: 'crypto: algif_aead - fix uninitialized ctx->init' +8949bc46fedc763c195c9a72f69abb9405cac9dc: + title: 'x86/kvm: Teardown PV features on boot CPU as well' + mainline: 8b79feffeca28c5459458fe78676b081e87c93a4 +227178f3eba56c465bdd554e9786a0699bbf40d4: + title: 'x86/kvm: Disable kvmclock on all CPUs on shutdown' + mainline: c02027b5742b5aa804ef08a4a9db433295533046 +f07e26ece43c2b61389d2a56226ea19d3bd40c57: + title: 'x86/kvm: Disable all PV features on crash' + mainline: 3d6b84132d2a57b5a74100f6923a8feb679ac2ce diff --git a/.elts/meta/4.14.350.yaml b/.elts/meta/4.14.350.yaml new file mode 100644 index 000000000000..3733d48b0c65 --- /dev/null +++ b/.elts/meta/4.14.350.yaml @@ -0,0 +1,506 @@ +037ba8c484cfe176665b4bdb735a62d8cc7b1b9a: + title: 'Revert "scsi: target: Fix SELinux error when systemd-modules loads the target module"' +378cd84450603623545e9b29cac5445b188b6c0c: + title: 'Revert "tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets"' +2e31c6f2136246110bfbd82c25ec9ecbf4169729: + title: 'Revert "tcp: remove redundant check on tskb"' +9dd807b0452a622f5a5547b451eda30befa3d61d: + title: 'tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets' + mainline: 94062790aedb505bdda209b10bea47b294d6394f +a57e28b291e0ad50d1c6ceba6a7cb556fdf1faf6: + title: 'wifi: mac80211: mesh: Fix leak of mesh_preq_queue objects' + mainline: b7d7f11a291830fdf69d3301075dd0fb347ced84 + upstream: 377dbb220edc8421b7960691876c5b3bef62f89b +9feb2600c4ba32c9fb136d7b5e16ca06c853ea8c: + title: 'wifi: mac80211: Fix deadlock in ieee80211_sta_ps_deliver_wakeup()' + mainline: 44c06bbde6443de206b30f513100b5670b23fc5e + upstream: e51637e0c66a6f72d134d9f95daa47ea62b43c7e +79e590b3651e9074489976e737e7fc1255a6cd79: + title: 'wifi: iwlwifi: mvm: don''t read past the mfuart notifcation' + mainline: 4bb95f4535489ed830cf9b34b0a891e384d1aee4 + upstream: 15b37c6fab9d5e40ac399fa1c725118588ed649c +9ba19e227817b86f1032cc551912a049b62ba7e6: + title: 'ipv6: sr: block BH in seg6_output_core() and seg6_input_core()' + mainline: c0b98ac1cc104f48763cdb27b1e9ac25fd81fc90 + upstream: 6330fe95e59bc1de5ad3ebd89e379d785c7c6fc0 +7c79a301b097797b8edd46b11a888a287e281f98: + title: 'vxlan: Fix regression when dropping packets due to invalid src addresses' + mainline: 1cd4bc987abb2823836cbb8f887026011ccddc8a + upstream: ddd44dc20554c38450204df47f8422c7fec78f2d +54f3a87336ada67c8a8da26f7575d12c5ca85bfb: + title: 'tcp: count CLOSE-WAIT sockets for TCP_MIB_CURRESTAB' + mainline: a46d0ea5c94205f40ecf912d1bb7806a8a64704f + upstream: 25dec34bfd770f444409b3228f90f64feb6804f6 +7a5ce9a4d73421a553e354ee6eb5de1a3bffeae5: + title: 'ptp: Fix error message on failed pin verification' + mainline: 323a359f9b077f382f4483023d096a4d316fd135 + upstream: e468462fe0efdd233b6fd7b978e9911bb1eb8614 +4d194b485b1878813b072bc174b6443164b96fb1: + title: 'af_unix: ensure POLLOUT on remote close() for connected dgram socket' +003de6abbdca3c2d230bd4ce3adc752b5eb4982c: + title: 'af_unix: Fix a data-race in unix_dgram_peer_wake_me().' + mainline: 662a80946ce13633ae90a55379f1346c10f0c432 +4379c4db8fa9f7d4adfdf7256277c96ac968a690: + title: 'af_unix: Annotate data-race of sk->sk_state in unix_inq_len().' + mainline: 3a0f38eb285c8c2eead4b3230c7ac2983707599d + upstream: 5c91a2f308cabf7cc0e30997455ac15926199987 +03b7c75271f457de1fc83095624428cd9ef74db4: + title: 'af_unix: Fix data races around sk->sk_shutdown.' + mainline: e1d09c2c2f5793474556b60f83900e088d0d366d +089da5e3914abb4806b03eff85aeb895c0ab860b: + title: 'af_unix: Annotate data-races around sk->sk_state in unix_write_space() and poll().' + mainline: eb0718fb3e97ad0d6f4529b810103451c90adf94 + upstream: 6b4dffb64e98b9eacc7c214056146d32642f7e8a +c6f96daa0536f49a7d624196dbc3defc536eacdb: + title: 'af_unix: Annotate data-races around sk->sk_state in sendmsg() and recvmsg().' + mainline: 8a34d4e8d9742a24f74998f45a6a98edd923319b + upstream: 7cd9dd08be2482bd1015642b61d97a187af5a774 +cab04acca50227f3f27fb5616bee123fea171762: + title: 'af_unix: Annotate data-races around sk->sk_state in UNIX_DIAG.' + mainline: 0aa3be7b3e1f8f997312cc4705f8165e02806f8f + upstream: 123d798351c96a15456478558fccac0eb766f26d +98e2f1cec1532524595d79af5c86ed370debd735: + title: 'af_unix: Annotate data-race of net->unx.sysctl_max_dgram_qlen.' + mainline: bd9f2d05731f6a112d0c7391a0d537bfc588dbe6 + upstream: f5cf5e139ec736f1ac18cda8d5e5fc80d7eef787 +15baad6e966a2478052b6e2efd0153a9e9a9e0c2: + title: 'af_unix: Use unix_recvq_full_lockless() in unix_stream_connect().' + mainline: 45d872f0e65593176d880ec148f41ad7c02e40a7 + upstream: b56ff0d20a4a60b9e6424d0609acccbbde573ea8 +a8d1038ecf162678372a6f5686eabbf0c070ec91: + title: 'af_unix: Use skb_queue_len_lockless() in sk_diag_show_rqlen().' + mainline: 5d915e584d8408211d4567c22685aae8820bfc55 + upstream: 141826272a2cd16436f9b6c241cf88b72feddb3b +669958a2bdd8b94c6bbe1df7c83feae7b844afb3: + title: 'af_unix: Annotate data-race of sk->sk_shutdown in sk_diag_fill().' + mainline: efaf24e30ec39ebbea9112227485805a48b0ceb1 + upstream: 9c2d206ddc697595ceb0e8e356c64f9e845a0c2f +77067622d8f27240f3e5438767cce7317f8b9c34: + title: 'usb: gadget: f_fs: Fix race between aio_cancel() and AIO request complete' + mainline: 24729b307eefcd7c476065cd7351c1a018082c19 + upstream: f71a53148ce34898fef099b75386a3a9f4449311 +6c20d50e094e8b67aab06f29f7e97351bbfef601: + title: 'serial: sc16is7xx: replace hardcoded divisor value with BIT() macro' + mainline: 2e57cefc4477659527f7adab1f87cdbf60ef1ae6 + upstream: 9dcb6eb967fe778d1d985a709ac4030895603fc0 +f966c6e6aa0166c853782a705ae5389f8c6b24e7: + title: 'serial: sc16is7xx: fix bug in sc16is7xx_set_baud() when using prescaler' + mainline: 8492bd91aa055907c67ef04f2b56f6dadd1f44bf + upstream: 2b14e818ef3e49741ee60a317554222c6af3a800 +41d740fdbcb6d45f86ec6cd7238ba2ca38df8824: + title: 'media: mc: mark the media devnode as registered from the, start' + mainline: 4bc60736154bc9e0e39d3b88918f5d3762ebe5e0 + upstream: d3f6dc1155a09bc2c212b734c3ff01a046490e92 +fe9a3e689a0275a21eae214693dd7ddbdbb63cec: + title: 'selftests/mm: compaction_test: fix incorrect write of zero to nr_hugepages' + mainline: 9ad665ef55eaad1ead1406a58a34f615a7c18b5e + upstream: 62b71327cf1af11ceb4a3f53ebf0c85cb9ad3db8 +75614587972465759b313027993c87e60eeb446f: + title: 'selftests/mm: conform test to TAP format output' + mainline: 9a21701edc41465de56f97914741bfb7bfc2517d + upstream: 4a4f88dcf8b688db0cf527362ebf4db0d272a3f6 +6132af7d247da481d1f4e99c91f5fdc29961bce3: + title: 'selftests/mm: compaction_test: fix bogus test success on Aarch64' + mainline: d4202e66a4b1fe6968f17f9f09bbc30d08f028a1 + upstream: 4d5f7ab71a24f17311d361f47c61cc49064e1dd0 +71bf6edd5d5c1384f56efcc445146a367f1e7c38: + title: 'nilfs2: Remove check for PageError' + mainline: 79ea65563ad8aaab309d61eeb4d5019dd6cf5fa0 + upstream: c158e493640ce76e76241f0529cebe19770ba5b2 +52c1c33e0dafbe82538c326d4a6144544e9501f4: + title: 'nilfs2: return the mapped address from nilfs_get_page()' + mainline: 09a46acb3697e50548bb265afa1d79163659dd85 + upstream: 7ed62ec616a3441aa3859150d50fadf5fd117aa8 +c5682abd08cb2a8960de840d00ce1efc5066286e: + title: 'nilfs2: fix nilfs_empty_dir() misjudgment and long loop on I/O errors' + mainline: 7373a51e7998b508af7136530f3a997b286ce81c + upstream: 2ac8a2fe22bdde9eecce2a42cf5cab79333fb428 +ac2c307a0180583e260719f923ba2edabddea919: + title: 'USB: class: cdc-wdm: Fix CPU lockup caused by excessive log messages' + mainline: 22f00812862564b314784167a89f27b444f82a46 + upstream: 217d1f44fff560b3995a685a60aa66e55a7f0f56 +6f5dcde17cd2c15cb9812b4441ab1ba7088ccf0c: + title: 'mei: me: release irq in mei_me_pci_resume error path' + mainline: 283cb234ef95d94c61f59e1cd070cd9499b51292 + upstream: 83c2321411d8bb8f832dbb482ea3387ac1322542 +79cb0bb1b0e2cbed9eaec6f1fb7ce81baf278a39: + title: 'jfs: xattr: fix buffer overflow for invalid xattr' + mainline: 7c55b78818cfb732680c4a72ab270cc2d2ee3d0f + upstream: f0dedb5c511ed82cbaff4997a8decf2351ba549f +b8b14f255f86c39eee93bc4fbc4c8f6c3f9da875: + title: 'xhci: Apply reset resume quirk to Etron EJ188 xHCI host' + mainline: 17bd54555c2aaecfdb38e2734149f684a73fa584 + upstream: a2ddc0475c4c6fff5b9eac0e0eb4726640925e1b +41c568e13eb14e46c634292e403a4652603b2d46: + title: 'xhci: Apply broken streams quirk to Etron EJ188 xHCI host' + mainline: 91f7a1524a92c70ffe264db8bdfa075f15bbbeb9 + upstream: 5c08d8bcc6f20965d665a6122a3fe60eba042e74 +abe1fafad8d912b27028e91a0040650149ab4ab8: + title: 'Input: try trimming too long modalias strings' + mainline: 0774d19038c496f0c3602fb505c43e1b2d8eed85 + upstream: d9bbbbf1a2cac25fafa44ba09d2ab8f5365c0a06 +c0be0c4967c8b988f9603c7b7cecc01379071c67: + title: 'HID: core: remove unnecessary WARN_ON() in implement()' + mainline: 4aa2dcfbad538adf7becd0034a3754e1bd01b2b5 + upstream: 955b3764671f3f157215194972d9c01a3a4bd316 +2cb6663051a21277c7bdf9695ad8a04fc6a5dc7a: + title: 'iommu/amd: Fix sysfs leak in iommu init' + mainline: a295ec52c8624883885396fde7b4df1a179627c3 + upstream: 7f66540fcf6f8f66784f739c33f79d2889e95106 +b4722a9d958fe8bd54d0358650bf07b11ab91d4b: + title: 'drm/bridge/panel: Fix runtime warning on panel bridge release' + mainline: ce62600c4dbee8d43b02277669dd91785a9b81d9 + upstream: 3e0daaf28639c6fd22e96eb2f8772ad40e922ee7 +291c8c1e9e291262f9179c0ba5cef2e49df4f142: + title: 'tcp: fix race in tcp_v6_syn_recv_sock()' + mainline: d37fe4255abe8e7b419b90c5847e8ec2b8debb08 + upstream: 06f208ae0670ef97b0bf253a5523863e113026b6 +9ae3694d9677f29e0d8e5bbb86841f69baae279d: + title: 'Bluetooth: L2CAP: Fix rejecting L2CAP_CONN_PARAM_UPDATE_REQ' + mainline: 806a5198c05987b748b50f3d0c0cfb3d417381a4 + upstream: a1f9c8328219b9bb2c29846d6c74ea981e60b5a7 +fab190e5fcd0466de646405bf49ca7017bbdca31: + title: 'ipv6/route: Add a missing check on proc_dointvec' + mainline: f0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded + upstream: f00c343be6f25a6a3736fd6b332c918da57d81d8 +04f57a8a33fef04d61ba56f8b4e830fe0cebc8f2: + title: 'net/ipv6: Fix the RT cache flush via sysctl using a previous delay' + mainline: 14a20e5b4ad998793c5f43b0330d9e1388446cf3 + upstream: ebde6e8a52c68dc45b4ae354e279ba74788579e7 +82d942edbd8b21acbacd1d16eb3cb52d47404384: + title: 'drivers: core: synchronize really_probe() and dev_uevent()' + mainline: c0a40097f0bc81deafc15f9195d1fb54595cd6d0 + upstream: bb3641a5831789d83a58a39ed4a928bcbece7080 +126c475927adda67084f403fee8ec76a853b70fc: + title: 'drm/exynos/vidi: fix memory leak in .get_modes()' + mainline: 38e3825631b1f314b21e3ade00b5a4d737eb054e + upstream: 540ca99729e28dbe902b01039a3b4bd74520a819 +37026b40b51170c1f9b052ef1b1cd19ec815c566: + title: 'vmci: prevent speculation leaks by sanitizing event in event_deliver()' + mainline: 8003f00d895310d409b2bf9ef907c56b42a4e0f4 + upstream: 58730dfbd4ae01c1b022b0d234a8bf8c02cdfb81 +aaea44b590e4a5e853dcc48edbf8ffa6dc611490: + title: 'fs/proc: fix softlockup in __read_vmcore' + mainline: 5cbcb62dddf5346077feb82b7b0c9254222d3445 + upstream: 7bdf1d550ddfcd9ab797087421f77b7aceddc8a7 +c02663a1e56ea3793580a51e2ea012e198661ca1: + title: 'ocfs2: use coarse time for new created files' + mainline: b8cb324277ee16f3eca3055b96fce4735a5a41c6 + upstream: f882e853ea33c1e4f7107387f85879139682b720 +db16f074c58fb04ccb5efd329bd001b3769662b2: + title: 'ocfs2: fix races between hole punching and AIO+DIO' + mainline: 952b023f06a24b2ad6ba67304c4c84d45bea2f18 + upstream: 3c26b5d21b1239e9c7fd31ba7d9b2d7bdbaa68d9 +7932419ef19393d4fc9b05a04583d8c31c2785e3: + title: 'dmaengine: axi-dmac: fix possible race in remove()' + mainline: 1bc31444209c8efae98cb78818131950d9a6f4d6 + upstream: 5226e7062723bd5d4f1bd5e98ace7c1e6c015d57 +c2986a4fcfa961be763f68bb7c55ff808dcbbc63: + title: 'intel_th: pci: Add Granite Rapids support' + mainline: e44937889bdf4ecd1f0c25762b7226406b9b7a69 + upstream: 96185ee73d5cd28c2b19311c87536ffeeb653562 +fbda6dc2f8c85e96d6ae1f5243146a33e627ee9e: + title: 'intel_th: pci: Add Granite Rapids SOC support' + mainline: 854afe461b009801a171b3a49c5f75ea43e4c04c + upstream: 04d47e1fd4e9a9b9c32e769b9106bbcbddeca756 +97c26585440f81fc3832759721964719ae7a4802: + title: 'intel_th: pci: Add Sapphire Rapids SOC support' + mainline: 2e1da7efabe05cb0cf0b358883b2bc89080ed0eb + upstream: f9159b4706fc1eae09c37081f9a580673a4477ff +0d4c32589468be6d7b8993e7576690004f50f5cc: + title: 'intel_th: pci: Add Meteor Lake-S support' + mainline: c4a30def564d75e84718b059d1a62cc79b137cf9 + upstream: 8af7cedc0edf1b9d3c29e2b72e7d643f64669ee4 +eac9744fef5c714c3201a0ab9c56e61ede318c29: + title: 'intel_th: pci: Add Lunar Lake support' + mainline: f866b65322bfbc8fcca13c25f49e1a5c5a93ae4d + upstream: 4780775da4957702ece226104b17d072e557a962 +948b6135a242e4147ee69d7d47e1df20f5951d7f: + title: 'nilfs2: fix potential kernel bug due to lack of writeback flag waiting' + mainline: a4ca369ca221bb7e06c725792ac107f0e48e82e7 + upstream: 95f6f81e50d858a7c9aa7c795ec14a0ac3819118 +22749c2b34a685511b52c8e1c52539519f0a46ec: + title: 'hv_utils: drain the timesync packets on onchannelcallback' + mainline: b46b4a8a57c377b72a98c7930a9f6969d2d4784e + upstream: 1af0a35eba1ee302fc30aea8cb621f6de8728785 +06d15f1e6c6dbb25aa2058c26a02bc3589dd87d7: + title: 'mm/hugetlb: add mmap() encodings for 32MB and 512MB page sizes' +bee6efedbf7b70baa442b7af575c6cc055c2bcef: + title: 'hugetlb_encode.h: fix undefined behaviour (34 << 26)' + mainline: 710bb68c2e3a24512e2d2bae470960d7488e97b1 + upstream: a33d99c8b213d16ad61bc68cb17aad1e2f484192 +ba2eacb9af4998743a14271e11fba297a8761497: + title: 'usb-storage: alauda: Check whether the media is initialized' + mainline: 16637fea001ab3c8df528a8995b3211906165a30 + upstream: e0aab7b07a9375337847c9d74a5ec044071e01c8 +d3d05ae427ca75738046af172544e4ad75bdf8aa: + title: 'rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment' + mainline: 8b9b443fa860276822b25057cb3ff3b28734dec0 + upstream: 6652029853316f4c273219145ef0e71b148bbe01 +5856f70943c52055ea24d8ee791308367cd1039a: + title: 'batman-adv: bypass empty buckets in batadv_purge_orig_ref()' + mainline: 40dc8ab605894acae1473e434944924a22cfaaa0 + upstream: 79636f636126775436a11ee9cf00a9253a33ac11 +f98f3237faf35d508d9c1b783385102a7be0abf2: + title: 'scsi: qedi: Fix crash while reading debugfs attribute' + mainline: 28027ec8e32ecbadcd67623edb290dad61e735b5 + upstream: 56bec63a7fc87ad50b3373a87517dc9770eef9e0 +476276b356c5d338435b82ecfe217a9422d7235f: + title: 'powerpc/pseries: Enforce hcall result buffer validity and size' + mainline: ff2e185cf73df480ec69675936c4ee75a445c3e4 + upstream: acf2b80c31c37acab040baa3cf5f19fbd5140b18 +8824c4818bf4e7a3b2c47f78c6a8ace368ebe2c5: + title: 'powerpc/io: Avoid clang null pointer arithmetic warnings' + mainline: 03c0f2c2b2220fc9cf8785cd7b61d3e71e24a366 + upstream: 7e1e8e86b0b62844b2c795549f65494e95b5983e +43cef40ed1b05181bab0553b15a699a4a3de9dc4: + title: 'usb: misc: uss720: check for incompatible versions of the Belkin F5U002' + mainline: 3295f1b866bfbcabd625511968e8a5c541f9ab32 + upstream: 02d13616ca30014ed96302e51a5b0e17664e58bc +20c569a7cff68ac7d507661d2cbb62dd6fffdc7d: + title: 'udf: Sanitize nanoseconds for time stamps' +04f8c1f355f2e1cdc8bc261bb903c85488dbb649: + title: 'udf: Simplify calls to udf_disk_stamp_to_time' +28e83fb606df2b620ca55001b6b1ec4669fff3fe: + title: 'udf: udftime: prevent overflow in udf_disk_stamp_to_time()' + mainline: 3b84adf460381169c085e4bc09e7b57e9e16db0a + upstream: 2f85b07bd802e86e155fd8496e3d105ec3a2ade9 +7bf7a1b84c85a21b7e9e7dc9136efd5c79d7b4ed: + title: 'MIPS: Octeon: Add PCIe link status check' + mainline: 29b83a64df3b42c88c0338696feb6fdcd7f1f3b7 + upstream: 6bff05aaa32c2f7e1f6e68e890876642159db419 +2401229809147c9144c4e7bbbcc43c7154cf1aba: + title: 'MIPS: Routerboard 532: Fix vendor retry check code' + mainline: ae9daffd9028f2500c9ac1517e46d4f2b57efb80 + upstream: acabc32a7b27f30a75ef01e873d8b65f5dc7d5d5 +2f46065f2784076d6c121eab1a21a8096fba6b13: + title: 'cipso: fix total option length computation' + mainline: 9f36169912331fa035d7b73a91252d7c2512eb1a + upstream: 5d3b9efa04c0d8967e00cbc4b6b5aab79952f5d1 +f5105aa1e9989b1deb6d87f9d080a7d0d917dc56: + title: 'netrom: Fix a memory leak in nr_heartbeat_expiry()' + mainline: 0b9130247f3b6a1122478471ff0e014ea96bb735 + upstream: d616876256b38ecf9a1a1c7d674192c5346bc69c +b71bbdc8869cbf604b55e27437b9d91d3dd909aa: + title: 'xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()' + mainline: d46401052c2d5614da8efea5788532f0401cb164 + upstream: c71761292d4d002a8eccb57b86792c4e3b3eb3c7 +e3d1b924da1c094e403381851f287d1cb6d430de: + title: 'virtio_net: checksum offloading handling fix' + mainline: 604141c036e1b636e2a71cf6e1aa09d1e45f40c2 + upstream: d0e99ad7721155aaa4e57b8b11bb70743da61491 +8bfba3c52500198a370f799501c232303b52817c: + title: 'net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings' + mainline: fba383985354e83474f95f36d7c65feb75dba19d + upstream: 88154e3329e1f47490ee98f8d32a0353d8d46550 +cc48980d16d92c2f4e6c9a1976bd2afdf9f30fa6: + title: 'regulator: core: Fix modpost error "regulator_get_regmap" undefined' + mainline: 3f60497c658d2072714d097a177612d34b34aa3d + upstream: bdc0a40accdf77080fed82d72e89d341001dcbf6 +d7e271c7c6269187a0c054ef781b1160398b119a: + title: 'dmaengine: ioatdma: Fix missing kmem_cache_destroy()' + mainline: 5422145d0b749ad554ada772133b9b20f9fb0ec8 + upstream: 0b346aa39e76de78be5e105dc338e190e80a5188 +ed44c23c974a4df0899e57a375eeb563a911b575: + title: 'ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."' + mainline: a83e1385b780d41307433ddbc86e3c528db031f0 + upstream: 435ecc978c3d5d0c4e172ec5b956dc1904061d98 +cc96770672dafa9b46038f64523c42ce3534e8ba: + title: 'drm/radeon: fix UBSAN warning in kv_dpm.c' + mainline: a498df5421fd737d11bfd152428ba6b1c8538321 + upstream: 07e8f15fa16695cf4c90e89854e59af4a760055b +cd513bd7a535592e2c65efc462a42866d507da3a: + title: 'gcov: add support for GCC 14' + mainline: c1558bc57b8e5b4da5d821537cd30e2e660861d8 + upstream: 48d5f4d66962fde59c78dd0a7cf6bd03b3f49c61 +5566df875aabd57002b81daf45d37d2f6c874d42: + title: 'ARM: dts: samsung: smdkv310: fix keypad no-autorepeat' + mainline: 87d8e522d6f5a004f0aa06c0def302df65aff296 + upstream: 1d1838ca012952f4914af6f6619bbdea6251039c +9b2697403d29b12ef06ab68f4f2232291dfed184: + title: 'ARM: dts: samsung: exynos4412-origen: fix keypad no-autorepeat' + mainline: 88208d3cd79821117fd3fb80d9bcab618467d37b + upstream: 77951f880a4b9e7f76460364ec0b931d1a59c9fb +d350b585ee4796a3868be5f4cd8a29877275c819: + title: 'ARM: dts: samsung: smdk4412: fix keypad no-autorepeat' + mainline: 4ac4c1d794e7ff454d191bbdab7585ed8dbf3758 + upstream: 4c70a7576ae14f804196ae0089f9deb6cbd77e1f +dcea2cf5d7cca146641b67b8cbcc153cbfdeb0c3: + title: 'PCI: Add PCI_ERROR_RESPONSE and related definitions' + mainline: 57bdeef4716689d9b0e3571034d65cf420f6efcd + upstream: 4c003aef56d5642aefd4d11ee9d7e6755d4c1a6e +f66ed725b522bfad043ec2dbcf50eff7ffc8feda: + title: 'x86/amd_nb: Check for invalid SMN reads' + mainline: c625dabbf1c4a8e77e4734014f2fde7aa9071a1f + upstream: d4e52b36c73f44d2b5f41d0cd3f57b3d2efbf180 +e8b7b4167c95a9e6976479edda683c1b13ca0832: + title: 'iio: dac: ad5592r-base: Replace indio_dev->mlock with own device lock' + mainline: 33c53cbf8f7bc8d62f6146a19da97c8594376ff0 + upstream: b576d7d08f26d40789313ec6a8acc966a149c37f +a28ae8f66b95e48a7ad69aa23382bd8486b6c529: + title: 'iio: dac: ad5592r: un-indent code-block for scale read' + mainline: b004fe33034cc64f72c20923be71cf1e6c9a624c + upstream: c101996c9dabd9d809c12f686547b7035c087f10 +d9b6601da0310953862e47ebc5fe28f9bf37033a: + title: 'iio: dac: ad5592r: fix temperature channel scaling value' + mainline: 279428df888319bf68f2686934897301a250bb84 + upstream: 9eaaefbae8f5ddbed0fce822042ad969f5f876c5 +675de54c63726a5b6316a7c3854219e10208f4ea: + title: 'scsi: mpt3sas: Add ioc_ logging macros' + mainline: 645a20c6821cd1ab58af8a1f99659e619c216efd + upstream: 229e75730c784f7b871ae9bd76f8bd506d20a304 +bd4e577402b93532aacc19b7f44c4963b763fafe: + title: 'scsi: mpt3sas: Gracefully handle online firmware update' + mainline: ffedeae1fa545a1d07e6827180c3923bf67af59f + upstream: 230c290c74b956a4c26926c94a5bf932ca234884 +165419d81604a14fb6d0b111fd2f96288ec9528b: + title: 'scsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory' + mainline: 4254dfeda82f20844299dca6c38cbffcfd499f41 + upstream: e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee +d9ea1dc07e87131c9ae5e3e1504c2cacbf2df74a: + title: 'usb: xhci: Remove ep_trb from xhci_cleanup_halted_endpoint()' +de371a2bb30d1695a5c07357bd207e5aadefcd51: + title: 'xhci: Use soft retry to recover faster from transaction errors' + mainline: f8f80be501aa2f10669585c3e328fad079d8cb3a + upstream: 8f667ee530a601449fede56370036e1d8d9a62dc +c73496b00b416467313ec64166d9d8d5d7e3a921: + title: 'xhci: Set correct transferred length for cancelled bulk transfers' + mainline: f0260589b439e2637ad54a2b25f00a516ef28a57 + upstream: ca0f0c5b0b991a71f61948bad09eb5f9e8cc4851 +3f74f1a0bd8b876661fb5263fa78048e2586065d: + title: 'usb: xhci: do not perform Soft Retry for some xHCI hosts' + mainline: a4a251f8c23518899d2078c320cf9ce2fa459c9f + upstream: 2a28c0f457c5563cef9fbad803d9445eee0c1e05 +d6636e9d955f53a9da4e40af4ddba67ab3391fbf: + title: 'pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER' + mainline: adec57ff8e66aee632f3dd1f93787c13d112b7a1 + upstream: e65a0dc2e85efb28e182aca50218e8a056d0ce04 +0b45b7f4f6ee46da3efc4858af96e1a86e536250: + title: 'pinctrl: rockchip: fix pinmux bits for RK3328 GPIO2-B pins' + mainline: e8448a6c817c2aa6c6af785b1d45678bd5977e8d + upstream: 860a562a61a838867c8d3f66d059a0fc7a67d1c9 +0d6d13a0bb379aa59f6475c1bb6df7aaed21857f: + title: 'pinctrl: rockchip: fix pinmux bits for RK3328 GPIO3-B pins' + mainline: 5ef6914e0bf578357b4c906ffe6b26e7eedb8ccf + upstream: f8426b53f59f88c637143ffa31276be73a3c9b27 +a1e6c61656a89e49007fd9847fe123acd15d31b9: + title: 'pinctrl: rockchip: fix pinmux reset in rockchip_pmx_set' + mainline: 4ea4d4808e342ddf89ba24b93ffa2057005aaced + upstream: 61c552e4ee1dbfa85d68997ab6e9d80690b401a7 +90340ac06eb8a83a320c3bf2a31cc67eaf333478: + title: 'drm/amdgpu: fix UBSAN warning in kv_dpm.c' + mainline: f0d576f840153392d04b2d52cf3adab8f62e8cb6 + upstream: 4ad7d49059358ceadd352b4e2511425bdb68f400 +f6658c76f5f0670445bebb35a9ccf3d5ae502806: + title: 'ASoC: fsl-asoc-card: set priv->pdev before using it' + mainline: 90f3feb24172185f1832636264943e8b5e289245 + upstream: ae81535ce2503aabc4adab3472f4338070cdeb6a +c01fc5238f6bb561e137d7b6e7df88c5107a263f: + title: 'netfilter: nf_tables: fully validate NFT_DATA_VALUE on store to data registers' + mainline: 7931d32955e09d0a11b1fe0b6aac1bfa061c005c + upstream: 40188a25a9847dbeb7ec67517174a835a677752f +9578df8a6b21442b2451be92ea5ce59b2cc38505: + title: 'net/iucv: Avoid explicit cpumask var allocation on stack' + mainline: be4e1304419c99a164b4c0e101c7c2a756b635b9 + upstream: 2b085521be5292016097b5e7ca81b26be3f7098d +bf4ffd90f46475894c7d758eb26aa0f8a31dc245: + title: 'ALSA: emux: improve patch ioctl data validation' + mainline: 89b32ccb12ae67e630c6453d778ec30a592a212f + upstream: 40d7def67841343c10f8642a41031fecbb248bab +728e947a35ba429d96e495c170367211583d760e: + title: 'media: dvbdev: Initialize sbuf' + mainline: 17d1316de0d7dc1bdc5d6e3ad4efd30a9bf1a381 + upstream: 1925c902159d686372d897c2fa8ee4ea91b62d14 +cf89c5861a3b88fcef8ce222edd384bb5cb44934: + title: 'soc: ti: wkup_m3_ipc: Send NULL dummy message instead of pointer message' + mainline: ddbf3204f600a4d1f153498f618369fca352ae00 + upstream: 671abe2b126e6e39d52eefbf53106650ef2dd904 +43bae0d9a7bd2f0a78a283b1440a74601b4a4f68: + title: 'nvme: fixup comment for nvme RDMA Provider Type' + mainline: f80a55fa90fa76d01e3fffaa5d0413e522ab9a00 + upstream: 277ea9f9bf1171f0f02836ded9b65b9b8684322d +b4951f8134444e1eb7b28ea2234463f8ed077745: + title: 'i2c: ocores: stop transfer on timeout' + mainline: e7663ef5ae0f02e3b902eb0305dec981333eb3e1 + upstream: c7999d372e7fe8bdfbc2226af1896e8bd328018a +4d73d79702f3c0872f20dfd8a05974c7b18ebc7f: + title: 'i2c: ocores: set IACK bit after core is enabled' + mainline: 5a72477273066b5b357801ab2d315ef14949d402 + upstream: 1f7e4dd58af1267db2970e5c2e98a4d0ff170047 +00eda93e9c842eecb76a1bc09b337e4f0cb043eb: + title: 'x86: stop playing stack games in profile_pc()' + mainline: 093d9603b60093a9aaae942db56107f6432a5dca + upstream: 65ebdde16e7f5da99dbf8a548fb635837d78384e +51e44a77a5ca50e7e1f0548960bbb9eea83ff139: + title: 'mmc: sdhci-pci: Convert PCIBIOS_* return codes to errnos' + mainline: ebc4fc34eae8ddfbef49f2bdaced1bf4167ef80d + upstream: bba83bf85fc6fcca1e827fd88bf3998be9ad0d24 +b23dedd4318672a4265f48d90f8760b41b6f7006: + title: 'iio: adc: ad7266: Fix variable checking bug' + mainline: a2b86132955268b2a1703082fbc2d4832fc001b8 + upstream: 75a024d3ab0d331fc1d0b640b00e63d31d556b1e +e4de596e5e18fb924bfe0048049cd04a285272f9: + title: 'net: usb: ax88179_178a: improve link status logs' + mainline: 058722ee350c0bdd664e467156feb2bf5d9cc271 + upstream: abb029e078e149d4d1f44a244cf833a6a1541447 +cbc92ffc360a7b6f16408d7092c71d72bb9e0382: + title: 'usb: gadget: printer: SS+ support' + mainline: fd80731e5e9d1402cb2f85022a6abf9b1982ec5f + upstream: a0886d04f1c7439b55c1c9daecd6b21ada2de5dd +7209de070ba2427bfa29373c649c6311b69580bc: + title: 'usb: musb: da8xx: fix a resource leak in probe()' + mainline: de644a4a86be04ed8a43ef8267d0f7d021941c5e + upstream: a93b97349ba92cdc8b63ad09d28a873a467e1d62 +4ddbe32a34bc9cc18c34282f88488d22c4178071: + title: 'usb: atm: cxacru: fix endpoint checking in cxacru_bind()' + mainline: 2eabb655a968b862bc0c31629a09f0fbf3c80d51 + upstream: 5159a81924311c1ec786ad9fdef784ead8676a6a +c6f828c51833c0dcdd53b79a4eb5c8d5f5ebd56b: + title: 'tty: mcf: MCF54418 has 10 UARTS' + mainline: 7c92a8bd53f24d50c8cf4aba53bb75505b382fed + upstream: 0929fbe8194db19bfeed22f8c7f9b24da9f08bb9 +87cc48eed0c10fc8f13907410db3f1c76c77826b: + title: 'hexagon: fix fadvise64_64 calling conventions' + mainline: 896842284c6ccba25ec9d78b7b6e62cdd507c083 + upstream: 72152ab85ae44e13df8b7a653b5f657b48fa3229 +2dc9769a951e305b690994008bcc32ee0d57f3e2: + title: 'drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes' + mainline: 66edf3fb331b6c55439b10f9862987b0916b3726 + upstream: 9289cd3450d1da3e271ef4b054d4d2932c41243e +e2f974a4f127e38e7a5ec7a7ab51bb59d4392f17: + title: 'drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes' + mainline: 6d411c8ccc0137a612e0044489030a194ff5c843 + upstream: ffabad4aa91e33ced3c6ae793fb37771b3e9cb51 +f8741253033be14a8f4297ba6c8ec7cd3ddf4def: + title: 'batman-adv: include gfp.h for GFP_* defines' +e6522330b7414dc7f96f547045bdc5db9de0cc3e: + title: 'batman-adv: Don''t accept TT entries for out-of-spec VIDs' + mainline: 537a350d14321c8cca5efbf0a33a404fec3a9f9e + upstream: 4d5a2d6b7a9a1140342c5229d1a427ec37a12fd4 +5696aad6bf4700041503e715bd2fb5d9dcf1fcc0: + title: 'ftruncate: pass a signed offset' + mainline: 4b8e88e563b5f666446d002ad0dc1e6e8e7102b0 + upstream: c329760749b5419769e57cb2be80955d2805f9c9 +7128fc9dcb40ffa3ca16cc92eeb4aa3f65639c87: + title: 'pwm: stm32: Refuse too small period requests' + mainline: c45fcf46ca2368dafe7e5c513a711a6f0f974308 + upstream: 19946741ea989605d12d2ffdbb006b9ca000dde8 +81d8db9302d30505f89d672e1a39c60ed71a1dda: + title: 'ipv6: annotate some data-races around sk->sk_prot' + mainline: 086d49058cd8471046ae9927524708820f5fd1c7 + upstream: 13bda7ac5801f501bed6e21717dbf3b0df773847 +0904f321c3a052af42b094f786f75fe32f5d8f2d: + title: 'ipv6: Fix data races around sk->sk_prot.' + mainline: 364f997b5cfe1db0d63a390fe7c801fa2b3115f6 + upstream: fda6d62642a9c544a293d7ad7cb058f8c7f8f3dd +1895f4d98247c54d045cd4a9c94c0802f3c270d5: + title: 'tcp: Fix data races around icsk->icsk_af_ops.' + mainline: f49cd2f4d6170d27a2c61f1fecb03d8a70c91f57 + upstream: 5bb642cc3355ffd3c8bca0a8bd8e6e65bcc2091c +6658230562d296ef2484a1156ff322c558d3c26a: + title: 'arm64: dts: rockchip: Add sound-dai-cells for RK3368' + mainline: 8d7ec44aa5d1eb94a30319074762a1740440cdc8 + upstream: f7fc312d1d750db0ea867e50e6c436e0679a5a65 +944720b778413cf71b70f8d697b94a357ea40e19: + title: 'SUNRPC: Fix RPC client cleaned up the freed pipefs dentries' + mainline: bfca5fb4e97c46503ddfc582335917b0cc228264 diff --git a/.elts/upstream/4.19.316.yaml b/.elts/upstream/4.19.316.yaml new file mode 100644 index 000000000000..a74d962d5a80 --- /dev/null +++ b/.elts/upstream/4.19.316.yaml @@ -0,0 +1,830 @@ +bfaadbda9b75e4726783f8ca55ceac1fedbf2deb: + title: 'x86/tsc: Trust initial offset in architectural TSC-adjust MSRs' + mainline: 455f9075f14484f358b3c1d6845b4a438de198a7 + skipped: commit did not cherry-pick cleanly +42f0a3f67158ed6b2908d2b9ffbf7e96d23fd358: + title: 'speakup: Fix sizeof() vs ARRAY_SIZE() bug' + mainline: 008ab3c53bc4f0b2f20013c8f6c204a3203d0b8b + backport: 8bb6ee62c33b1f281b98b2dd19f1d7249a1ee5ab +b50932ea673b5a089a4bb570a8a868d95c72854e: + title: 'ring-buffer: Fix a race between readers and resize checks' + mainline: c2274b908db05529980ec056359fae916939fdaa + backport: a43f1f02b3a93c9a2da8ea92e4d6509d0a61ebd8 +0ca720bd1834c4577426d1fb5a75faa19aa089bf: + title: 'net: smc91x: Fix m68k kernel compilation for ColdFire CPU' + mainline: 5eefb477d21a26183bc3499aeefa991198315a2d + skipped: fixes patch not in branch +072980bc50626c4557694ce54e3f6f2bde02b6e0: + title: 'nilfs2: fix unexpected freezing of nilfs_segctor_sync()' + mainline: 936184eadd82906992ff1f5ab3aada70cce44cee + backport: 39d470c1d65655756f7bc56eef30977466000040 +911d38be151921a5d152bb55e81fd752384c6830: + title: 'nilfs2: fix potential hang in nilfs_detach_log_writer()' + mainline: eb85dace897c5986bc2f36b3c783c6abb8a4292e + backport: 6696ef522ef729e48bb88e624f4b450cc48d0008 +9513d4148950b05bc99fa7314dc883cc0e1605e5: + title: 'tty: n_gsm: fix possible out-of-bounds in gsm0_receive()' + mainline: 47388e807f85948eefc403a8a5fdc5b406a65d5a + backport: 478b032b9b295f6e4d224766b1d74f3f8d8015f5 +5099e30dde0caffa9f0e2c41d7327fc3ed987fd5: + title: 'wifi: cfg80211: fix the order of arguments for trace events of the tx_rx_evt class' + mainline: 9ef369973cd2c97cce3388d2c0c7e3c056656e8a + backport: 0e454ea0aef962c0bc28aaec416c987c472ee16f +25468fffbbd2b0f06b4b12d79ff56cc5c40bfd1f: + title: 'net: usb: qmi_wwan: add Telit FN920C04 compositions' + mainline: 0b8fe5bd73249dc20be2e88a12041f8920797b59 + backport: 52bed87bdd7ff234fbf08cffb5805fec3753a574 +074218a00cf59abff526b79dcd34d461ce81ae4c: + title: 'drm/amd/display: Set color_mgmt_changed to true on unsuspend' + mainline: 2eb9dd497a698dc384c0dd3e0311d541eb2e13dd + skipped: file is not in 4.14.y +5c50d2e998143ce00c0629dcaabd73c3d962545c: + title: 'ASoC: rt5645: Fix the electric noise due to the CBJ contacts floating' + mainline: 103abab975087e1f01b76fcb54c91dbb65dbc249 + backport: 1de2264213019b0e94512027fedda73173da635e +5af06b6c57a9bbfa9bd5421e28bcd5c571c5821e: + title: 'ASoC: dt-bindings: rt5645: add cbj sleeve gpio property' + mainline: 306b38e3fa727d22454a148a364123709e356600 + backport: f5822a115c534c96bcde99428ab661088e193a09 +6d2d2aaae1faa64c2f803d6f11f4b2df3b3c2cff: + title: 'ASoC: da7219-aad: fix usage of device_get_named_child_node()' + mainline: e8a6a5ad73acbafd98e8fd3f0cbf6e379771bb76 + backport: 6c8dd658875782d45f021c5015b9ec9bf5f5ff87 +c256b616067bfd6d274c679c06986b78d2402434: + title: 'crypto: bcm - Fix pointer arithmetic' + mainline: 2b3460cbf454c6b03d7429e9ffc4fe09322eb1a9 + backport: 8355ba0b459240e847584f780402073b8236df46 +b7277844e7e367381b2377853afceb58427cf6fb: + title: 'firmware: raspberrypi: Use correct device for DMA mappings' + mainline: df518a0ae1b982a4dcf2235464016c0c4576a34d + backport: 09020d6f62421e7fd4240279ff30dde78a0300bc +1c125b9287e58f364d82174efb167414b92b11f1: + title: 'ecryptfs: Fix buffer size for tag 66 packet' + mainline: 85a6a1aff08ec9f5b929d345d066e2830e8818e5 + backport: 78f8f3e6cf95446a03837bb11a67c4c2569ced32 +7610fd35b74211ab8def4e124095e600a1ae945b: + title: 'nilfs2: fix out-of-range warning' + mainline: c473bcdd80d4ab2ae79a7a509a6712818366e32a + backport: 7ee6938a59b80751d7919f67a3c4fb585d3829f6 +63d5a72afbd1505f180e81bc72e056ceea28b43b: + title: 'parisc: add missing export of __cmpxchg_u8()' + mainline: c57e5dccb06decf3cb6c272ab138c033727149b5 + backport: 72d5387b60255610eb6fd5c18bb819fc39cc8917 +4b713a1581b17a94a21699165a20d82eb0eca2dc: + title: 'crypto: ccp - Remove forward declaration' + mainline: 3512dcb4e6c64733871202c01f0ec6b5d84d32ac + backport: 7eb7c75444aa358909836ea7ff4f692a53b199f9 +ce8f89223c9552d18b118596a85fd6cc237bc0e9: + title: 'crypto: ccp - drop platform ifdef checks' + mainline: 42c2d7d02977ef09d434b1f5b354f5bc6c1027ab + backport: afb1d97ca2b2cdfa5f46e8eb9fc37934349bc34e +77edda3c53d696fa30fa0352e18aad485716ffad: + title: 's390/cio: fix tracepoint subchannel type field' + mainline: 8692a24d0fae19f674d51726d179ad04ba95d958 + skipped: fixes patch not in branch +2904e1d9b64f72d291095e3cbb31634f08788b11: + title: 'jffs2: prevent xattr node from overflowing the eraseblock' + mainline: c6854e5a267c28300ff045480b5a7ee7f6f1d913 + backport: 7375909839424727552bd0bb2022ca3db5c6ffe8 +54ee1f7e2ea06e5c5341dc54255881fa5d11b312: + title: 'null_blk: Fix missing mutex_destroy() at module removal' + mainline: 07d1b99825f40f9c0d93e6b99d79a08d0717bac1 + backport: a28a74b9a53b5b25cde8cfbea4c071f7a1c9beed +d4b9c764d48fa41caa24cfb4275f3aa9fb4bd798: + title: 'md: fix resync softlockup when bitmap size is less than array size' + mainline: f0e729af2eb6bee9eb58c4df1087f14ebaefe26b + skipped: fixes patch not in branch +eb984e08100e42c20f05e425590ee1e78e092b9d: + title: 'power: supply: cros_usbpd: provide ID table for avoiding fallback match' + mainline: 0f8678c34cbfdc63569a9b0ede1fe235ec6ec693 + skipped: file is not in 4.14.y +52d3370e8022ce28cd8cf4d16c09245aa683d7fb: + title: 'nfsd: drop st_mutex before calling move_to_close_lru()' + mainline: 56c35f43eef013579c76c007ba1f386d8c2cac14 + backport: 520ccb81e3976c1c21d19d43265958faad0aee46 +54e3970b1848856e49f8cd08751dcb010ac3296b: + title: 'wifi: ath10k: poll service ready message before failing' + mainline: e57b7d62a1b2f496caf0beba81cec3c90fad80d5 + backport: 6faa6059493e8a857fe5c3b5e12a3ceec730cda3 +2487db16d4b9faead07b7825d33294e9e783791d: + title: 'x86/boot: Ignore relocations in .notes sections in walk_relocs() too' + mainline: 76e9762d66373354b45c33b60e9a53ef2a3c5ff2 + backport: a2c3254bc18b8f7bea19a00d8e7ea4ec52e941c1 +6780fe28e415c84f81ee7fc30027e57105f0b136: + title: 'qed: avoid truncating work queue length' + mainline: 954fd908f177604d4cce77e2a88cc50b29bad5ff + skipped: fixes patch not in branch +e6bfc88b60f0874a00b22f243a94a5e8601d5039: + title: 'scsi: ufs: qcom: Perform read back after writing reset bit' + mainline: c4d28e06b0c94636f6e35d003fa9ebac0a94e1ae + backport: 5b61b9cefdb45e69ab265050d603cdd30f3d089b +ea2cebd3b66bffa2630e413553776a4dbdca641a: + title: 'scsi: ufs: cleanup struct utp_task_req_desc' + mainline: 391e388f853dad5d1d7462a31bb50ff2446e37f0 + skipped: commit did not cherry-pick cleanly +359975cbf2551e40130cc604e2753f65585b68d0: + title: 'scsi: ufs: add a low-level __ufshcd_issue_tm_cmd helper' + mainline: c6049cd98212dfe39f67fb411d18d53df0ad9436 + skipped: commit did not cherry-pick cleanly +bf144a2e3b5048e5a9e3baf19f54d5e865d578b4: + title: 'scsi: ufs: core: Perform read back after disabling interrupts' + mainline: e4a628877119bd40164a651d20321247b6f94a8b + backport: 936e250e7ec6cb3bad3a8aa3a699a625e62cb5a6 +8dfd79c1c31660549a03439d42794c138efa5432: + title: 'scsi: ufs: core: Perform read back after disabling UIC_COMMAND_COMPL' + mainline: 4bf3855497b60765ca03b983d064b25e99b97657 + backport: c5a8d87d1f0792ab4f65cf240309a4effe22de01 +4654dfa98682444152aac9bcef50e0d5e114a135: + title: 'irqchip/alpine-msi: Fix off-by-one in allocation error path' + mainline: ff3669a71afa06208de58d6bea1cc49d5e3fcbd1 + backport: 94707145849c4be8019d4f7b2cce86402f9f9127 +2e816914b5ba234c3815ca80bffd2f3b3a7de6b0: + title: 'ACPI: disable -Wstringop-truncation' + mainline: a3403d304708f60565582d60af4316289d0316a0 + backport: 96f2e9bb5b58c10a84e2a0064c7dc88cdcfff4d8 +2d8f31aa03df040c58a2e4a0382b96269c1bf96a: + title: 'scsi: libsas: Fix the failure of adding phy with zero-address to port' + mainline: 06036a0a5db34642c5dbe22021a767141f010b7a + backport: 8734c83b6dae36fbe4d97f42409e04459426858c +9fc44d44b3b8eadd8b797462c733eb6c63598e6f: + title: 'scsi: hpsa: Fix allocation size for Scsi_Host private data' + mainline: 504e2bed5d50610c1836046c0c195b0a6dba9c72 + backport: 784e2dc0d9be9b2e2ff8e3d05713f4d82895a489 +8b434681a6e7b2cae1452f1932d59c069236e9d2: + title: 'x86/purgatory: Switch to the position-independent small code model' + mainline: cba786af84a0f9716204e09f518ce3b7ada8555e + skipped: fixes patch not in branch +569da482fdec15251ff113462717182d85bd1665: + title: 'wifi: ath10k: Fix an error code problem in ath10k_dbg_sta_write_peer_debug_trigger()' + mainline: c511a9c12674d246916bb16c479d496b76983193 + backport: 6541bba29a4584f20a372e98ca07659b1b971c3e +7020f6ad57cfd532a106542c2015710170270d21: + title: 'wifi: ath10k: populate board data for WCN3990' + mainline: f1f1b5b055c9f27a2f90fd0f0521f5920e9b3c18 + skipped: fixes patch not in branch +880897e8a5ade054a04575e5d8cc2666da415ab4: + title: 'macintosh/via-macii: Remove BUG_ON assertions' + mainline: 5f93d7081a47e1972031ccf57c4b2779eee162fb + backport: d85d76f39ef8f74c3ce4b2084bc1d56b90f808ce +d0aa752285c9a35ee1ae0f2a4da10c5ceb6c09b6: + title: 'macintosh/via-macii, macintosh/adb-iop: Clean up whitespace' + mainline: 47fd2060660e62b169990a6fcd9eb61bc1a85c5c + backport: fad0ed0dd7bf14e6c89489e1db0486828e45f563 +e4ff8bcfb2841fe4e17e5901578b632adb89036d: + title: 'macintosh/via-macii: Fix "BUG: sleeping function called from invalid context"' + mainline: d301a71c76ee4c384b4e03cdc320a55f5cf1df05 + backport: 82b5124ff8448c3b27d5cf963d835806a4ec8726 +eb0f2fc3ff5806cc572cd9055ce7c52a01e97645: + title: 'wifi: carl9170: add a proper sanity check for endpoints' + mainline: b6dd09b3dac89b45d1ea3e3bd035a3859c0369a0 + backport: e6c959db704b9f17b53d0d695ac791ddb180649b +79ddf5f2020fd593d50f1363bb5131283d74f78f: + title: 'wifi: ar5523: enable proper endpoint verification' + mainline: e120b6388d7d88635d67dcae6483f39c37111850 + backport: 0e282a437be278b5a28b5de56553710ca304877a +8ed15460d8bbc517bf54b24c7694e6c0ff174968: + title: 'sh: kprobes: Merge arch_copy_kprobe() into arch_prepare_kprobe()' + mainline: 1422ae080b66134fe192082d9b721ab7bd93fcc5 + backport: 08d55870d721795f5ca9affb641a9d77a5cde478 +3c37203af733254154602273a970cfb7400c223e: + title: 'Revert "sh: Handle calling csum_partial with misaligned data"' + mainline: b5319c96292ff877f6b58d349acf0a9dc8d3b454 + backport: 3d986276f8b5fa0dc170e1b35f0659b9ba4b2cd0 +481fc0c8617304a67649027c4a44723a139a0462: + title: 'scsi: bfa: Ensure the copied buf is NUL terminated' + mainline: 13d0cecb4626fae67c00c84d3c7851f6b62f7df3 + backport: 2461969d18d1b3a8ca40c5203819221813d2fa47 +1f84a2744ad813be23fc4be99fb74bfb24aadb95: + title: 'scsi: qedf: Ensure the copied buf is NUL terminated' + mainline: d0184a375ee797eb657d74861ba0935b6e405c62 + backport: c2d34a41a30021d6947d93dee2373e98416296b8 +6bc4e51e8d8451d40ec092d01119287af2acffcf: + title: 'wifi: mwl8k: initialize cmd->addr[] properly' + mainline: 1d60eabb82694e58543e2b6366dae3e7465892a5 + backport: ceee9c23ca78be8cbe0b677623554c14da4a8ffe +c0aff9978bb6ead0aec382a2645a563a3dd2df38: + title: 'net: usb: sr9700: stop lying about skb->truesize' + mainline: 05417aa9c0c038da2464a0c504b9d4f99814a23b + backport: 2341a1b273189a5673cfbb6a5badecca8e25d24a +2a8d1d95302c7d52c6ac8fa5cb4a6948ae0d3a14: + title: 'm68k: Fix spinlock race in kernel thread creation' + mainline: da89ce46f02470ef08f0f580755d14d547da59ed + backport: 314fdca9aa1eac5417fd9621bf4ebbacfd100e75 +c96430d59c71a0e5c641b5267ccf141c501fe15e: + title: 'm68k/mac: Use ''030 reset method on SE/30' + mainline: 9c0e91f6b701dce6902408d50c4df9cebe4744f5 + backport: 4e23b79c4b130dd3049e3c0001d4926dcfacded5 +8055e882c57031a5ca7fbf278796c19ded9f9d6f: + title: 'm68k: mac: Fix reboot hang on Mac IIci' + mainline: 265a3b322df9a973ff1fc63da70af456ab6ae1d6 + backport: 3d47f159d4991609f1a71bb15683f1b8cac8d2a8 +0a60bdd5ac8a51ac9c04bd19fee30c1c4f178dc3: + title: 'net: ethernet: cortina: Locking fixes' + mainline: 812552808f7ff71133fc59768cdc253c5b8ca1bf + skipped: fixes patch not in branch +fca6072e1a7b1e709ada5604b951513b89b4bd0a: + title: 'af_unix: Fix data races in unix_release_sock/unix_stream_sendmsg' + mainline: 540bf24fba16b88c1b3b9353927204b4f1074e25 + backport: be1d9f0e9de4ae6b3c0baed5547aa84be06f6548 +1010b50b2ebaaa863baeba7572267ac39bbb7adb: + title: 'net: usb: smsc95xx: stop lying about skb->truesize' + mainline: d50729f1d60bca822ef6d9c1a5fb28d486bd7593 + backport: 16d0a15317ccdd42565ee3b0b4414f7134f414ba +6a51ac92bf35d34b4996d6eb67e2fe469f573b11: + title: 'net: openvswitch: fix overwriting ct original tuple for ICMPv6' + mainline: 7c988176b6c16c516474f6fceebe0f055af5eb56 + backport: d84c07f0a36edfbb017f66723aff19b75408ec6a +9acb7ed4ff0e57b29326768aa8780f2ba2310090: + title: 'ipv6: sr: add missing seg6_local_exit' + mainline: 3321687e321307629c71b664225b861ebf3e5753 + backport: e990bf08d73df105508439d775a40706fa34e4da +d55cf7ced48c5054a79829a0b14203710006a277: + title: 'ipv6: sr: fix incorrect unregister order' + mainline: 6e370a771d2985107e82d0f6174381c1acb49c20 + backport: 32cc76dc98c3a167b25dfe1548848036fc07d834 +10610575a3ac2a702bf5c57aa931beaf847949c7: + title: 'ipv6: sr: fix invalid unregister error path' + mainline: 160e9d2752181fcf18c662e74022d77d3164cd45 + backport: a7eb748e89ec4c74a795fd32380019f21ae75895 +604c506ca43fce52bb882cff9c1fdf2ec3b4029c: + title: 'drm/amd/display: Fix potential index out of bounds in color transformation function' + mainline: 63ae548f1054a0b71678d0349c7dc9628ddd42ca + skipped: fixes patch not in branch +80850a39e2548988f4feae26f3fd66286b460278: + title: 'mtd: rawnand: hynix: fixed typo' + mainline: 6819db94e1cd3ce24a432f3616cd563ed0c4eaba + backport: 73bc0203a1791e5252c190a016d46502406d53f0 +f6100ea560ed320a397d99aad6ad6918f0f1a70a: + title: 'fbdev: shmobile: fix snprintf truncation' + mainline: 26c8cfb9d1e4b252336d23dd5127a8cbed414a32 + backport: 4ba8a5fa126c85d319a0f1c773a15c04dde7d74c +79078880795478d551a05acc41f957700030d364: + title: 'drm/mediatek: Add 0 size check to mtk_drm_gem_obj' + mainline: 1e4350095e8ab2577ee05f8c3b044e661b5af9a0 + backport: 43f9acac76b1661328292b13c57936252536a7ee +b798cfeea12ebfd74c4bba511deb02956c97789e: + title: 'powerpc/fsl-soc: hide unused const variable' + mainline: 01acaf3aa75e1641442cc23d8fe0a7bb4226efb1 + backport: 27a754ac9d1b146c6690b8cc566be4df02028430 +6891334b1458739701885fef2909daef754654fa: + title: 'fbdev: sisfb: hide unused variables' + mainline: 688cf598665851b9e8cb5083ff1d208ce43d10ff + skipped: fixes patch not in branch +7394bab35c51cead246ef50d8c2e699e36032aed: + title: 'media: ngene: Add dvb_ca_en50221_init return value check' + mainline: 9bb1fd7eddcab2d28cfc11eb20f1029154dac718 + backport: a36a6656bdcc519ee8206e91a484c9545e41c428 +cbc12c9693fad0545fb0e753d78979026ae0772a: + title: 'media: radio-shark2: Avoid led_names truncations' + mainline: 1820e16a3019b6258e6009d34432946a6ddd0a90 + backport: 83fe7e17269e69bb85c5dcde3543fe69a7d14907 +74bafc897cb6c83b29c66cb39e82936204a5e51f: + title: 'fbdev: sh7760fb: allow modular build' + mainline: 51084f89d687e14d96278241e5200cde4b0985c7 + backport: d1bafe8dbdd69b5b94c648616261b10f89e9e634 +b6cc5dd06336ed8bb3a7a1fc5aaf7d5e88bc0818: + title: 'drm/arm/malidp: fix a possible null pointer dereference' + mainline: a1f95aede6285dba6dd036d907196f35ae3a11ea + skipped: fixes patch not in branch +60c68092723ea420215e9c3d5530038bc6568739: + title: 'ASoC: tracing: Export SND_SOC_DAPM_DIR_OUT to its value' + mainline: 58300f8d6a48e58d1843199be743f819e2791ea3 + backport: 8b76f73f5124b83712d6cdcb3ef990263e40c5f0 +9b7b7f640f078cfe90319190b59efcde3acc1952: + title: 'RDMA/hns: Use complete parentheses in macros' + mainline: 4125269bb9b22e1d8cdf4412c81be8074dbc61ca + skipped: fixes patch not in branch +ef10bbdf4d59a98cf57ddf943756f14ef3cdbccd: + title: 'x86/insn: Fix PUSH instruction in x86 instruction decoder opcode map' + mainline: 59162e0c11d7257cde15f907d19fefe26da66692 + backport: e39747d5b28a334d3aa4a7d53db14f9f30390923 +1f9e32f9ea3454f79d80c8af7fac54843beba7f6: + title: 'ext4: avoid excessive credit estimate in ext4_tmpfile()' + mainline: 35a1f12f0ca857fee1d7a04ef52cbd5f1f84de13 + backport: 668cfe934e0081e60581269d5afab127489cdfda +ab8466d4e26806a4ae82c282762c4545eecf45ef: + title: 'SUNRPC: Fix gss_free_in_token_pages()' + mainline: bafa6b4d95d97877baa61883ff90f7e374427fae + skipped: fixes patch not in branch +32b0469d13ebeb008b39613eb5acf529a10e0bde: + title: 'selftests/kcmp: Make the test output consistent and clear' + mainline: ff682226a353d88ffa5db9c2a9b945066776311e + backport: 0f0c8dcfaaff549a0397d3e63ec093c2ff6d602d +24331545d6ff749a8dbfb09925af86e8cc50dad5: + title: 'selftests/kcmp: remove unused open mode' + mainline: eb59a58113717df04b8a8229befd8ab1e5dbf86e + backport: eea262830c62f8856fed4c532b5598f83c2972a9 +b469345f1fca84bed4dea3cae85faa401cf9bf3e: + title: 'RDMA/IPoIB: Fix format truncation compilation errors' + mainline: 49ca2b2ef3d003402584c68ae7b3055ba72e750a + backport: 183cb1a936e35c5ae205498945addd70a31a61e0 +b9d663fbf74290cb68fbc66ae4367bd56837ad1d: + title: 'netrom: fix possible dead-lock in nr_rt_ioctl()' + mainline: e03e7f20ebf7e1611d40d1fdc1bde900fd3335f6 + backport: 08f41b353c1621f65bd6f61aa5f5aed2fc1feb11 +4f3ae7d846b4565c0b80d65ed607c3277bc984d4: + title: 'af_packet: do not call packet_read_pending() from tpacket_destruct_skb()' + mainline: 581073f626e387d3e7eed55c48c8495584ead7ba + backport: 79417a25cb5eb9644fe89e5aae703a6b591669d5 +046daa54c348ccec12ab38b92923060dd09ef00b: + title: 'sched/topology: Don''t set SD_BALANCE_WAKE on cpuset domain relax' + mainline: 9ae7ab20b4835dbea0e5fc6a5c70171dc354a72e + backport: 03baaba21b3291e6300e4fafb8d2849f0389de3d +454de5ed81766fbbf4777c43392d8b0b35e7e16d: + title: 'sched/fair: Allow disabling sched_balance_newidle with sched_relax_domain_level' + mainline: a1fd0b9d751f840df23ef0e75b691fc00cfd4743 + backport: cd212b4b364b6efe32441d764cabaef2402c8eba +8f4a76d477f0cc3c54d512f07f6f88c8e1c1e07b: + title: 'greybus: lights: check return of get_channel_from_mode' + mainline: a1ba19a1ae7cd1e324685ded4ab563e78fe68648 + backport: 8d680792eafdefb9e3e547a305a505da085932ff +12c70cc851b263b8cc9479a23488992eeb4c35e6: + title: 'dmaengine: idma64: Add check for dma_set_max_seg_size' + mainline: 2b1c1cf08a0addb6df42f16b37133dc7a351de29 + backport: 0d0f766835c349005332fd8e7b296660a7d6a65a +20595142ca22ac2c8357564d9e7d52a0ffa471af: + title: 'firmware: dmi-id: add a release callback function' + mainline: cf770af5645a41a753c55a053fa1237105b0964a + backport: e9c8e448b86118386e2aed7e3bb0e02fdbb68d14 +44b38924135d2093e2ec1812969464845dd66dc9: + title: 'serial: max3100: Lock port->lock when calling uart_handle_cts_change()' + mainline: 77ab53371a2066fdf9b895246505f5ef5a4b5d47 + backport: bcbacbcfd59ba38747a001592ffb3aae1118e5de +21a61a7fbcfdd3493cede43ebc7c4dfae2147a8b: + title: 'serial: max3100: Update uart_driver_registered on driver removal' + mainline: 712a1fcb38dc7cac6da63ee79a88708fbf9c45ec + backport: c6cf8b544d9ca71186322b2ede24e7ded577381a +2ae8d5726526c05452aff0444b0f305fdf89a32d: + title: 'serial: max3100: Fix bitwise types' + mainline: e60955dbecb97f080848a57524827e2db29c70fd + backport: 647c442cedd75f319c8ce8dc039c2d7baec68317 +22e65ed6799f2bfd059d633890d6c7ebe46abc9b: + title: 'greybus: arche-ctrl: move device table to its right location' + mainline: 6a0b8c0da8d8d418cde6894a104cf74e6098ddfa + backport: 89f965ae0a3f751235963e2597c63fd9ce035113 +2822594f2dac6e493379885cef54fd179d8de8c5: + title: 'microblaze: Remove gcc flag for non existing early_printk.c file' + mainline: edc66cf0c4164aa3daf6cc55e970bb94383a6a57 + skipped: fixes patch not in branch +d481ddb83d2d92c31479cdfaa7fdd97a73697992: + title: 'microblaze: Remove early printk call from cpuinfo-static.c' + mainline: 58d647506c92ccd3cfa0c453c68ddd14f40bf06f + skipped: fixes patch not in branch +a646645af00f65db78fe4a60f753f2b07df35b6e: + title: 'usb: gadget: u_audio: Clear uac pointer when freed.' + mainline: a2cf936ebef291ef7395172b9e2f624779fb6dc0 + backport: 0328af15e33a89109f97c8abcce2119896607fb4 +6cc30ef8eb6d8f8d6df43152264bbf8835d99931: + title: 'stm class: Fix a double free in stm_register_device()' + mainline: 3df463865ba42b8f88a590326f4c9ea17a1ce459 + backport: 5bbc7d325cef8fbd593fd8e71f12343c47028be1 +1e4805ba1b7800f2acfdd0b2e6588e4b64d6c493: + title: 'ppdev: Remove usage of the deprecated ida_simple_xx() API' + mainline: d8407f71ebeaeb6f50bd89791837873e44609708 + skipped: new API does not exist in 4.14 +65cd017d43f4319a56747d38308b0a24cf57299e: + title: 'ppdev: Add an error check in register_device' + mainline: fbf740aeb86a4fe82ad158d26d711f2f3be79b3e + backport: 16e15c7fd21ec24f98668e5a7bf28ef5c1a0fcaa +b463819e3725b60c550145df952080b5d0fe85a7: + title: 'extcon: max8997: select IRQ_DOMAIN instead of depending on it' + mainline: b1781d0a1458070d40134e4f3412ec9d70099bec + backport: d1e6203d776319b888b57b1176df438ee85e67f7 +3506e1b893b5c2afa96922f36a01f018e4c4bbba: + title: 'f2fs: add error prints for debugging mount failure' + mainline: 9227d5227b8db354d386f592f159eaa44db1c0b8 + backport: 46dc390d5714351d5b798312f8edf666e327a1ef +bc14bb3ef307947fc3110bca8a34a85a63300b6c: + title: 'f2fs: fix to release node block count in error path of f2fs_new_node_page()' + mainline: 0fa4e57c1db263effd72d2149d4e21da0055c316 + skipped: fixes patch not in branch +82b6263b330a2b94a0b1d5c5d5543db7e24340ec: + title: 'serial: sh-sci: Extract sci_dma_rx_chan_invalidate()' + mainline: 11b3770d54b28dcd905155a6d4aa551187ff00eb + skipped: dependency for a patch not needed for 4.14.y +03023fd058fab714309a8d91ccdf1b3c5bb816d3: + title: 'serial: sh-sci: protect invalidating RXDMA on shutdown' + mainline: aae20f6e34cd0cbd67a1d0e5877561c40109a81b + skipped: fixes patch not in branch +3625187a973f16a3df59b803297816fe51d32400: + title: 'libsubcmd: Fix parse-options memory leak' + mainline: 230a7a71f92212e723fa435d4ca5922de33ec88a + backport: 3fa32fd0a2737a59698613854994f72051a6d4bb +502f295dcccf0ee7c4bddcf1ff2876987aaf89ca: + title: 'Input: ims-pcu - fix printf string overflow' + mainline: bf32bceedd0453c70d9d022e2e29f98e446d7161 + backport: 41c0d9061a68f5979e3244c26854cef37d91382b +fd4bb5284d34687c82356f07efe957af89ee51fe: + title: 'Input: pm8xxx-vibrator - correct VIB_MAX_LEVELS calculation' + mainline: 48c0687a322d54ac7e7a685c0b6db78d78f593af + backport: 7dfc577218ae7aeeadc5bdffe5727d57337904ee +732e700a1689fbdb8ac94faeb7765e81456b0a95: + title: 'drm/msm/dpu: use kms stored hw mdp block' + mainline: 57250ca5433306774e7f83b11503609ed1bf28cf + skipped: file is not in 4.14.y +d2640251f94078e1dcf0a26b1815601f6dbd5440: + title: 'um: Fix return value in ubd_init()' + mainline: 31a5990ed253a66712d7ddc29c92d297a991fdf2 + backport: bb75c00bad0d04025b00991fe16db2fc0504ce58 +66ea9a7c6824821476914bed21a476cd20094f33: + title: 'um: Add winch to winch_handlers before registering winch IRQ' + mainline: a0fbbd36c156b9f7b2276871d499c9943dfe5101 + backport: 330646466ce0f4978524457d109ac80ece62c547 +f6a392266276730bea893b55d12940e32a25f56a: + title: 'media: stk1160: fix bounds checking in stk1160_copy_video()' + mainline: faa4364bef2ec0060de381ff028d1d836600a381 + backport: b7d9420c157cdb207a95dfc4a40edd116dedf355 +f0f4cb4cc3f43324bab3b5541b27e79cbd15c8d1: + title: 'powerpc/pseries: Add failure related checks for h_get_mpp and h_get_ppp' + mainline: 6d4341638516bf97b9a34947e0bd95035a8230a5 + backport: cd05d6e21092d824ec4d37f39f7583310d0442fa +c08650c13bfc05794855480cc51075fdfcc388e0: + title: 'um: Fix the -Wmissing-prototypes warning for __switch_mm' + mainline: 2cbade17b18c0f0fd9963f26c9fc9b057eb1cb3a + backport: d6c506b111a38e5583e5bdd880cc0c04d7ef3948 +896dfd4d74f84c854d3a24d889e54a44329d313e: + title: 'media: cec: cec-adap: always cancel work in cec_transmit_msg_fh' + mainline: 9fe2816816a3c765dff3b88af5b5c3d9bbb911ce + skipped: fixes patch not in branch +d2cfbc5298add5e0c6cfe8b343f73dfdf01c8b1c: + title: 'media: cec: cec-api: add locking in cec_release()' + mainline: 42bcaacae924bf18ae387c3f78c202df0b739292 + backport: 75fd6535ba80c0726e31004af666d80a0b9c3df8 +7471d0be031ab830a0fa154437601cff98f7068b: + title: 'null_blk: Fix the WARNING: modpost: missing MODULE_DESCRIPTION()' + mainline: 9e6727f824edcdb8fdd3e6e8a0862eb49546e1cd + backport: 9da7f2b727fd54add9890e238847acf82d6807a1 +28a7a1f9571068bb2ddc8a11f0afe5dfa9863462: + title: 'x86/kconfig: Select ARCH_WANT_FRAME_POINTERS again when UNWINDER_FRAME_POINTER=y' + mainline: 66ee3636eddcc82ab82b539d08b85fb5ac1dff9b + backport: 4e00769cc5020fde90269bdd1e5c24302b0ba6ce +406cfac9debd4a6d3dc5d9258ee086372a8c08b6: + title: 'nfc: nci: Fix uninit-value in nci_rx_work' + mainline: e4a87abf588536d1cdfb128595e6e680af5cf3ed + backport: 3327ed68607e86e489af26305145830bf3f299a6 +afd5730969aec960a2fee4e5ee839a6014643976: + title: 'ipv6: sr: fix memleak in seg6_hmac_init_algo' + mainline: efb9f4f19f8e37fde43dfecebc80292d179f56c6 + backport: 2d5acfc9e45f4597b931857dd92d2f29d2382ad7 +459de98d7a6b3d504b5e8664f32f59a306dd425c: + title: 'params: lift param_set_uint_minmax to common code' + mainline: 2a14c9ae15a38148484a128b84bff7e9ffd90d68 + backport: 45e0b129726564750a58c06f1b4060b23f158960 +06d0fe049b51b0a92a70df8333fd85c4ba3eb2c6: + title: 'tcp: Fix shift-out-of-bounds in dctcp_update_alpha().' + mainline: 3ebc46ca8675de6378e3f8f40768e180bb8afa66 + backport: cf1096a1c8e1905df5e69949153c2598060457f0 +62a95de44a9bc006e01b0afa1b1e8868dc6de9d1: + title: 'openvswitch: Set the skbuff pkt_type for proper pmtud support.' + mainline: 30a92c9e3d6b073932762bef2ac66f4ee784c657 + backport: a629b0579dee6b041fdcad1859fa9f6a86da4ced +f221bd58db0f6ca087ac0392284f6bce21f4f8ea: + title: 'arm64: asm-bug: Add .align 2 to the end of __BUG_ENTRY' + mainline: ffbf4fb9b5c12ff878a10ea17997147ea4ebea6f + backport: 0374a08aa5206c6200a88e0a122500dfd1d195f0 +cb7a7c8144b434e06aba99b13b045a7efe859587: + title: 'virtio: delete vq in vp_find_vqs_msix() when request_irq() fails' + mainline: 89875151fccdd024d571aa884ea97a0128b968b6 + backport: 63c5945dbfcb8b6f4c260aef57172893a15ebbb3 +4e4efb8f1b275e85c5c7f69087e392dbae437a8d: + title: 'net: fec: avoid lock evasion when reading pps_enable' + mainline: 3b1c92f8e5371700fada307cc8fd2c51fa7bc8c1 + backport: 76ff93a5ccf6378571ba77875039f77752ac8a33 +c6c938ef515733a1c7af2c87dbc23138f402ba97: + title: 'nfc: nci: Fix kcov check in nci_rx_work()' + mainline: 19e35f24750ddf860c51e51c68cf07ea181b4881 + backport: 3267e236cb890a2ff6450ba831f3ad66386d6c4b +8f02d494cebae48dbd14c582ad4b36846e211b6a: + title: 'nfc: nci: Fix handling of zero-length payload packets in nci_rx_work()' + mainline: 6671e352497ca4bb07a96c48e03907065ff77d8a + backport: 1a7a9cc0bb2c966cb7edee4a47dc81053e9030d8 +8658bd777cbfcb0c13df23d0ea120e70517761b9: + title: 'netfilter: nfnetlink_queue: acquire rcu_read_lock() in instance_destroy_rcu()' + mainline: dc21c6cc3d6986d938efbf95de62473982c98dec + backport: ac335a5fe30958ed4c81fac6b76e4b6c77f6f95d +c7893975764ba3b7a58a186f63dae188f7eddb18: + title: 'spi: Don''t mark message DMA mapped when no transfer in it is' + mainline: 9f788ba457b45b0ce422943fcec9fa35c4587764 + backport: 0a359294f4d22e037ff38999b1fdaa688aab6e5f +36a935c8785a9ca95b094440a0450cd56b90e70c: + title: 'nvmet: fix ns enable/disable possible hang' + mainline: f97914e35fd98b2b18fb8a092e0a0799f73afdfe + backport: 5584ee5ae01187bdcb286738c27d8cecf7c2b92d +19f9b6cb94eebb4ef2a4a6bca0ef595039d73e04: + title: 'net/mlx5e: Use rx_missed_errors instead of rx_dropped for reporting buffer exhaustion' + mainline: 5c74195d5dd977e97556e6fa76909b831c241230 + backport: d6e67757cebbeb5857838f51e2c514a3c9fc5557 +1ff116f68560a25656933d5a18e7619cb6773d8a: + title: 'dma-buf/sw-sync: don''t enable IRQ from sync_print_obj()' + mainline: b794918961516f667b0c745aebdfebbb8a98df39 + backport: 5beeab6917b9b59ab2c15744b190b3ad93c58687 +2b649d7e0cb42a660f0260ef25fd55fdc9c6c600: + title: 'enic: Validate length of nl attributes in enic_set_vf_port' + mainline: e8021b94b0412c37bcc79027c2e382086b6ce449 + backport: 3d00c58ac6d7f0fa0882aafb5b1ca2c3c22838eb +eced17c8715d43ce16f61c5a6a49299fbf37c0a0: + title: 'smsc95xx: remove redundant function arguments' + mainline: 368be1ca28f66deba16627e2a02e78adedd023a6 + backport: d7936abfc24afa29d587b2bdd0829092dc478ebf +bcc526fec891dee22162082b1beeb9068b9eabb0: + title: 'smsc95xx: use usbnet->driver_priv' + mainline: ad90a73f0236c41f7a2dedc2e75c7b5a364eb93e + backport: 17ddb0fdf87c7f3f7c07e2721f688301411d2792 +85b6bcf9d5e332aa9c4b7820cb3aa748c3df6a80: + title: 'net: usb: smsc95xx: fix changing LED_SEL bit value updated from EEPROM' + mainline: 52a2f0608366a629d43dacd3191039c95fef74ba + backport: e0bd5cab3be56a1437e713a5411c458b80fa039c +416b0756721dcee2bb6227a4403e694011c32874: + title: 'net:fec: Add fec_enet_deinit()' + mainline: bf0497f53c8535f99b72041529d3f7708a6e2c0d + backport: 4c2d953d579bbc6018f916d7474ca42a0ea2471f +6bfda3ef7f6a2c1de30e70d67e901aa966f40c17: + title: 'kconfig: fix comparison to constant symbols, ''m'', ''n''' + mainline: aabdc960a283ba78086b0bf66ee74326f49e218e + backport: c00f30ffce7c99732b9610771908b84af2f7e95a +0049a623dfbbb49888de7f0c2f33a582b5ead989: + title: 'ipvlan: Dont Use skb->sk in ipvlan_process_v{4,6}_outbound' + mainline: b3dc6e8003b500861fa307e9a3400c52e78e4d3a + backport: 3a016fed8503f04152b170bc324fd7fbbfb155e4 +68396c825c43664b20a3a1ba546844deb2b4e48f: + title: 'ALSA: timer: Set lower bound of start tick time' + mainline: 4a63bd179fa8d3fcc44a0d9d71d941ddd62f0c4e + backport: 804b59ac965568b4ac7b1788ba8b3b324e362693 +a40209d355afe4ed6d533507838c9e5cd70a76d8: + title: 'genirq/cpuhotplug, x86/vector: Prevent vector leak during CPU offline' + mainline: a6c11c0a5235fb144a65e0cb2ffd360ddc1f6c32 + skipped: too risky to backport +57ff6c0a175930856213b2aa39f8c845a53e5b1c: + title: 'SUNRPC: Fix loop termination condition in gss_free_in_token_pages()' + mainline: 4a77c3dead97339478c7422eb07bf4bf63577008 + skipped: fixes patch not in branch +c437184be3c16f7123e5c59b4c85c1101f4dc96b: + title: 'binder: fix max_thread type inconsistency' + mainline: 42316941335644a98335f209daafa4c122f28983 + backport: f642f364e2b4e4302e6b41f1583603a9be83baef +bda1d354bef71be32aaf2c5e6b96eef854b3dd4e: + title: 'mmc: core: Do not force a retune before RPMB switch' + mainline: 67380251e8bbd3302c64fea07f95c31971b91c22 + backport: 5584cc5bd6c850f9738f7b249be3d298f0012a16 +822ae5a8eac30478578a75f7e064f0584931bf2d: + title: 'nilfs2: fix use-after-free of timer for log writer thread' + mainline: f5d4e04634c9cf68bdf23de08ada0bb92e8befe7 + backport: 705fabd9032429d644eee84edc1d45f740edcc81 +f6141cbc2b5af521b1711e95363302b858a38729: + title: 'vxlan: Fix regression when dropping packets due to invalid src addresses' + mainline: 1cd4bc987abb2823836cbb8f887026011ccddc8a + backport: 7e6f3eaf97955faec6cf408b6404a35cf2c82ea0 +f451d1a013fd585cbf70a65ca6b9cf3548bb039f: + title: 'neighbour: fix unaligned access to pneigh_entry' + mainline: ed779fe4c9b5a20b4ab4fd6f3e19807445bb78c7 + backport: 34358bf261de42b079db6cbd5ae3b074282cd00f +21604179f67bd484790c296565bdc38f7a40fe35: + title: 'ata: pata_legacy: make legacy_exit() work again' + mainline: d4a89339f17c87c4990070e9116462d16e75894f + backport: 792524d8e1b344cedcb40983a8756d4793a22e9e +40f76e72ec0ebe27dcff9bfd5de8e65e1a2b8939: + title: 'arm64: tegra: Correct Tegra132 I2C alias' + mainline: 2633c58e1354d7de2c8e7be8bdb6f68a0a01bad7 + backport: aa9c43942fc69f5e652d6b4f68e0e2bf75868c7e +b32aa95843cac6b12c2c014d40fca18aef24a347: + title: 'md/raid5: fix deadlock that raid5d() wait for itself to clear MD_SB_CHANGE_PENDING' + mainline: 151f66bb618d1fd0eeb84acb61b4a9fa5d8bb0fa + backport: d7263704edf4ee2783b116f64f407752d5b2f2bf +e9b77b537a198235a518f71a274348afd1288467: + title: 'wifi: rtl8xxxu: Fix the TX power of RTL8192CU, RTL8723AU' + mainline: 08b5d052d17a89bb8706b2888277d0b682dc1610 + skipped: u32_get_bits() does not build +26e62b983a31b304733fb21f4b576a4a1e171297: + title: 'arm64: dts: hi3798cv200: fix the size of GICR' + mainline: 428a575dc9038846ad259466d5ba109858c0a023 + backport: 964fdd7feb56e40a55b89328877b0a7103bb4084 +772f5e31ed2d6bc5e8698394e4d13b298060c74a: + title: 'media: mxl5xx: Move xpt structures off stack' + mainline: 526f4527545b2d4ce0733733929fac7b6da09ac6 + backport: 35d3fa1859980a84c64c51b04a2ac57ffe5af109 +1ea3de272f5cc7603610b96316f9ed07bec6c2d0: + title: 'media: v4l2-core: hold videodev_lock until dev reg, finishes' + mainline: 1ed4477f2ea4743e7c5e1f9f3722152d14e6eeb1 + backport: 2046df24d6472a520a62d52a72d84d180b3e363c +be754cbd77eaf2932408a4e18532e4945274a5c7: + title: 'fbdev: savage: Handle err return when savagefb_check_var failed' + mainline: 6ad959b6703e2c4c5d7af03b4cfd5ff608036339 + backport: 293140832f7230044b5f6888d0110714f51b554f +525561faa075cb49905783fd3e4e16b66b218846: + title: 'netfilter: nf_tables: pass context to nft_set_destroy()' + mainline: 0c2a85edd143162b3a698f31e94bf8cdc041da87 + backport: c4af59f2d8336214168c4e0778a1a0a62afcbdc4 +68b10f33a37e942bdc06b9cb313ad4e1b1f612e8: + title: 'netfilter: nftables: rename set element data activation/deactivation functions' + mainline: f8bb7889af58d8e74d2d61c76b1418230f1610fa + backport: b42c75cd69307b546b719cc59fb421a7c80a980f +bc9f791d2593f17e39f87c6e2b3a36549a3705b1: + title: 'netfilter: nf_tables: drop map element references from preparation phase' + mainline: 628bd3e49cba1c066228e23d71a852c23e26da73 + backport: 50bfcb0af95ae860d93c151604451b9a10af6e06 +c6d5477753caa9ab0c5c043bf5d0fad29d1e596d: + title: 'netfilter: nft_set_rbtree: allow loose matching of closing element in interval' + mainline: 3b18d5eba491b2328b31efa4235724a2354af010 + skipped: fixes patch not in branch +1302ba27fdc84ba0786301575dbcd2e1eddbcdc0: + title: 'netfilter: nft_set_rbtree: Add missing expired checks' + mainline: 340eaff651160234bdbce07ef34b92a8e45cd540 + skipped: fixes patch not in branch +7ab87a326f20c52ff4d9972052d085be951c704b: + title: 'netfilter: nft_set_rbtree: Switch to node list walk for overlap detection' + mainline: c9e6978e2725a7d4b6cd23b2facd3f11422c0643 + skipped: fixes patch not in branch +b76db53ee8802ee5683f8cb401d7e2ec6f9b3d56: + title: 'netfilter: nft_set_rbtree: fix null deref on element insertion' + mainline: 61ae320a29b0540c16931816299eb86bf2b66c08 + skipped: fixes patch not in branch +8284a79136c384059e85e278da2210b809730287: + title: 'netfilter: nft_set_rbtree: fix overlap expiration walk' + mainline: f718863aca469a109895cb855e6b81fff4827d71 + skipped: fixes patch not in branch +94313a196b44184b5b52c1876da6a537701b425a: + title: 'netfilter: nf_tables: don''t skip expired elements during walk' + mainline: 24138933b97b055d486e8064b4a1721702442a9b + backport: 4538b02484e4c2d0c016ca190c5219fd97f932fb +8da1b048f9a501d3d7d38c188ba09d7d0d5b8c27: + title: 'netfilter: nf_tables: GC transaction API to avoid race with control plane' + mainline: 5f68718b34a531a556f2f50300ead2862278da26 + skipped: too risky to backport +cb4d00b563675ba8ff6ef94b077f58d816f68ba3: + title: 'netfilter: nf_tables: adapt set backend to use GC transaction API' + mainline: f6c383b8c31a93752a52697f8430a71dcbc46adf + skipped: too risky to backport +a35a20e083be2b507c30cc216b59d1a57f381d9b: + title: 'netfilter: nf_tables: remove busy mark and gc batch API' + mainline: a2dd0233cbc4d8a0abb5f64487487ffc9265beb5 + skipped: too risky to backport +e7b86599fa945f3ce2bcbb95b4bbf1febbd3b087: + title: 'netfilter: nf_tables: fix GC transaction races with netns and netlink event exit path' + mainline: 6a33d8b73dfac0a41f3877894b38082bd0c9a5bc + skipped: too risky to backport +9a3f450ed90c72b6b80fd6e8974cbe8683c7365f: + title: 'netfilter: nf_tables: GC transaction race with netns dismantle' + mainline: 02c6c24402bf1c1e986899c14ba22a10b510916b + skipped: too risky to backport +f85ca36090cbb252bcbc95fc74c2853fc792694f: + title: 'netfilter: nf_tables: GC transaction race with abort path' + mainline: 720344340fb9be2765bbaab7b292ece0a4570eae + skipped: too risky to backport +9c22bd1ab442c552e9481f1157589362887a7f47: + title: 'netfilter: nf_tables: defer gc run if previous batch is still pending' + mainline: 8e51830e29e12670b4c10df070a4ea4c9593e961 + skipped: too risky to backport +9db9feb841f7449772f9393c16b9ef4536d8c127: + title: 'netfilter: nft_set_rbtree: skip sync GC for new elements in this transaction' + mainline: 2ee52ae94baabf7ee09cf2a8d854b990dac5d0e4 + skipped: too risky to backport +b3558703731028be2aee61baf341e53a3734e2a9: + title: 'netfilter: nft_set_rbtree: use read spinlock to avoid datapath contention' + mainline: 96b33300fba880ec0eafcf3d82486f3463b4b6da + skipped: too risky to backport +b6a744ba74f2388034c422f57568451bb6111d00: + title: 'netfilter: nft_set_hash: try later when GC hits EAGAIN on iteration' + mainline: b079155faae94e9b3ab9337e82100a914ebb4e8d + skipped: too risky to backport +7cf055b43756b10aa2b851c927c940f5ed652125: + title: 'netfilter: nf_tables: fix memleak when more than 255 elements expired' + mainline: cf5000a7787cbc10341091d37245a42c119d26c5 + skipped: too risky to backport +88c795491bf45a8c08a0f94c9ca4f13722e51013: + title: 'netfilter: nf_tables: unregister flowtable hooks on netns exit' + mainline: 6069da443bf65f513bb507bb21e2f87cfb1ad0b6 + skipped: fixes patch not in branch +c73955a09408e7374d9abfd0e78ce3de9cda0635: + title: 'netfilter: nf_tables: double hook unregistration in netns path' + mainline: f9a43007d3f7ba76d5e7f9421094f00f2ef202f8 + skipped: fixes patch not in branch +2565d90ab654f775d8865512f2a6aa3940182038: + title: 'netfilter: nftables: update table flags from the commit phase' + mainline: 0ce7cf4127f14078ca598ba9700d813178a59409 + skipped: too risky to backport +bf8083bbf8fa202e6e5316bbd99759ab82bfe7a3: + title: 'netfilter: nf_tables: fix table flag updates' + mainline: 179d9ba5559a756f4322583388b3213fe4e391b0 + skipped: too risky to backport +746523b4a3927fb922c82a6e997c4d1ba74c7f13: + title: 'netfilter: nf_tables: disable toggling dormant table state more than once' + mainline: c9bd26513b3a11b3adb3c2ed8a31a01a87173ff1 + skipped: too risky to backport +a118e0d82bb4b7760db8f704c05e2b8713b9bcc1: + title: 'netfilter: nf_tables: bogus EBUSY when deleting flowtable after flush (for 4.19)' +6a67f972de8994ee1c3092b19b6f5569b66b9904: + title: 'netfilter: nft_dynset: fix timeouts later than 23 days' + mainline: 917d80d376ffbaa9725fde9e3c0282f63643f278 + skipped: too risky to backport +28a97c43c9e32f437ebb8d6126f9bb7f3ca9521a: + title: 'netfilter: nftables: exthdr: fix 4-byte stack OOB write' + mainline: fd94d9dadee58e09b49075240fe83423eb1dcd36 + skipped: commit is already present in branch +c5c4746c8cd6d049dcbf39c811172c917ea6fb6e: + title: 'netfilter: nft_dynset: report EOPNOTSUPP on missing set feature' + mainline: 95cd4bca7b1f4a25810f3ddfc5e767fb46931789 + backport: ea71b10a3d18e5589f44b836a83003a6e741d6bb +79e98cd78610560a6a6cf85200eb31331602f9a9: + title: 'netfilter: nft_dynset: relax superfluous check on set updates' + mainline: 7b1394892de8d95748d05e3ee41e85edb4abbfa1 + backport: fa8b9918795f9be7f4ca95f5440acff86fe946db +451dc4678c1342fc5c3a2d23e1d8e120e58f6304: + title: 'netfilter: nf_tables: mark newset as dead on transaction abort' + mainline: 08e4c8c5919fd405a4d709b4ba43d836894a26eb + skipped: too risky to backport +18f1f50558e1736d34597fdf08554aee94f59405: + title: 'netfilter: nf_tables: skip dead set elements in netlink dump' + mainline: 6b1ca88e4bb63673dc9f9c7f23c899f22c3cb17a + skipped: too risky to backport +a5bbd579c81ffb9f65cb280fa89be9ec9c01029b: + title: 'netfilter: nf_tables: validate NFPROTO_* family' + mainline: d0009effa8862c20a13af4cb7475d9771b905693 + skipped: too risky to backport +c60d252949caf9aba537525195edae6bbabc35eb: + title: 'netfilter: nft_set_rbtree: skip end interval element from gc' + mainline: 60c0c230c6f046da536d3df8b39a20b9a9fd6af0 + skipped: fixes patch not in branch +a6411f3c48f991c19aaf9a24fce36865fbba28d7: + title: 'netfilter: nf_tables: set dormant flag on hook register failure' + mainline: bccebf64701735533c8db37773eeacc6566cc8ec + skipped: fixes issue not in 4.14 +d8853cfe273c181b2e45528db7300536e860b758: + title: 'netfilter: nf_tables: allow NFPROTO_INET in nft_(match/target)_validate()' + mainline: 7e0f122c65912740327e4c54472acaa5f85868cb + skipped: too risky to backport +845083249d6a392f3a88804e1669bdb936ee129f: + title: 'netfilter: nf_tables: do not compare internal table flags on updates' + mainline: 4a0e7f2decbf9bd72461226f1f5f7dcc4b08f139 + skipped: too risky to backport +d75a589bb92af1abf3b779cfcd1977ca11b27033: + title: 'netfilter: nf_tables: mark set as dead when unbinding anonymous set with timeout' + mainline: 552705a3650bbf46a22b1adedc1b04181490fc36 + skipped: too risky to backport +6d12f21f8bbe23fde25b77c2bf5973c136b8bef8: + title: 'netfilter: nf_tables: reject new basechain after table flag update' + mainline: 994209ddf4f430946f6247616b2e33d179243769 + skipped: too risky to backport +e75faf01e22ec7dc671640fa0e0968964fafd2fc: + title: 'netfilter: nf_tables: discard table flag update with pending basechain deletion' + mainline: 1bc83a019bbe268be3526406245ec28c2458a518 + skipped: too risky to backport +3c9ee8294728633e707c25fe0a321eeac1cc7515: + title: 'KVM: arm64: Allow AArch32 PSTATE.M to be restored as System mode' + mainline: dfe6d190f38fc5df5ff2614b463a5195a399c885 + backport: 6658c1ef0cb35d3d594507db800cb44a54db4f75 +0ce5964b82f212f4df6a9813f09a0b5de15bd9c8: + title: 'crypto: qat - Fix ADF_DEV_RESET_SYNC memory leak' + mainline: d3b17c6d9dddc2db3670bc9be628b122416a3d26 + backport: 9d5b95ce1488266fd3dc3951da6c8ce25c366ada +72c5d8e416ecc46af370a1340b3db5ff0b0cc867: + title: 'net/9p: fix uninit-value in p9_client_rpc()' + mainline: 25460d6f39024cc3b8241b14c7ccf0d6f11a736a + backport: 9a9a74f4cdb1295a5a854d2ca6cb87fc19048ef3 +58c0309c73fe1e9c477ed4cc5d02fc9015336979: + title: 'intel_th: pci: Add Meteor Lake-S CPU support' + mainline: a4f813c3ec9d1c32bc402becd1f011b3904dd699 + backport: 471ea347bb7d4b16dd62a6642efb111fa36f2da7 +180b2e4c1ba4f6e3e4c52d6664cb019f6eac02f8: + title: 'sparc64: Fix number of online CPUs' + mainline: 98937707fea8375e8acea0aaa0b68a956dd52719 + backport: 9f2edbc910b189e46e7ca3d17680e36fde63276d +fb824a99e148ff272a53d71d84122728b5f00992: + title: 'kdb: Fix buffer overflow during tab-complete' + mainline: e9730744bf3af04cda23799029342aa3cddbc454 + backport: f751d9a9f3d6c01908cf9bc9d966a35ecc1a2f64 +4edfbbaca46491b06af14e49dcb79ac661d0bbdc: + title: 'kdb: Use format-strings rather than ''\0'' injection in kdb_read()' + mainline: 09b35989421dfd5573f0b4683c7700a7483c71f9 + backport: f990953b6d8d752849e6f682628d4632f051b7de +21c068c1bbb4c336741749596d004b1965faab2c: + title: 'kdb: Fix console handling when editing and tab-completing commands' + mainline: db2f9c7dc29114f531df4a425d0867d01e1f1e28 + backport: fc2a098bc09c4f9968c93222902d72f518ec6953 +4a89182788f9af9a290c19098382fb972ebe2783: + title: 'kdb: Merge identical case statements in kdb_read()' + mainline: 6244917f377bf64719551b58592a02a0336a7439 + backport: 201f3d45deb9bcf1046483d72642d8457976c7a9 +2467f3f182eb35627534effd4956fceb2504c127: + title: 'kdb: Use format-specifiers rather than memset() for padding in kdb_read()' + mainline: c9b51ddb66b1d96e4d364c088da0f1dfb004c574 + backport: c89fb4fb7559ec8e3f74ecbc29ef856a47cc85d4 +051c0bde9f0450a2ec3d62a86d2a0d2fad117f13: + title: 'net: fix __dst_negative_advice() race' + mainline: 92f1655aa2b2294d0b49925f3b875a634bd3b59e + skipped: fixes patch not in branch +980a1cd6e092eab9398a78f517809a7dacaa0468: + title: 'sparc: move struct termio to asm/termios.h' + mainline: c32d18e7942d7589b62e301eb426b32623366565 + backport: 212ca5dd4286a76808254db293bd898a062b56e3 +9ad75e78747b5a50dc5a52f0f8e92e920a653f16: + title: 'ext4: fix mb_cache_entry''s e_refcnt leak in ext4_xattr_block_cache_find()' + mainline: 0c0b4a49d3e7f49690a6827a41faeffad5df7e21 + backport: 199f7d837409f78087fde12a33c486d4d866c16e +2062e3f1f2374102f8014d7ca286b9aa527bd558: + title: 's390/ap: Fix crash in AP internal function modify_bitmap()' + mainline: d4f9d5a99a3fd1b1c691b7a1a6f8f3f25f4116c9 + skipped: depends on missing commit 3d8f60d38e249f989a7fca9c2370c31c3d5487e1 +74ea538aa24490d7d259c881189bb58dbf1f692c: + title: 'nfs: fix undefined behavior in nfs_block_bits()' + mainline: 3c0a2e0b0ae661457c8505fecc7be5501aa7a715 + backport: 593e234893f02097b207840c7c31b4d91b64ca14 diff --git a/.elts/upstream/4.19.317.yaml b/.elts/upstream/4.19.317.yaml new file mode 100644 index 000000000000..f237f782b6f1 --- /dev/null +++ b/.elts/upstream/4.19.317.yaml @@ -0,0 +1,548 @@ +377dbb220edc8421b7960691876c5b3bef62f89b: + title: 'wifi: mac80211: mesh: Fix leak of mesh_preq_queue objects' + mainline: b7d7f11a291830fdf69d3301075dd0fb347ced84 + backport: a57e28b291e0ad50d1c6ceba6a7cb556fdf1faf6 +e51637e0c66a6f72d134d9f95daa47ea62b43c7e: + title: 'wifi: mac80211: Fix deadlock in ieee80211_sta_ps_deliver_wakeup()' + mainline: 44c06bbde6443de206b30f513100b5670b23fc5e + backport: 9feb2600c4ba32c9fb136d7b5e16ca06c853ea8c +a238de1c3413870b2f0d2e41a56b335ede1f5977: + title: 'wifi: iwlwifi: mvm: revert gen2 TX A-MPDU size to 64' + mainline: 4a7aace2899711592327463c1a29ffee44fcc66e + skipped: fixes patch not in branch +15b37c6fab9d5e40ac399fa1c725118588ed649c: + title: 'wifi: iwlwifi: mvm: don''t read past the mfuart notifcation' + mainline: 4bb95f4535489ed830cf9b34b0a891e384d1aee4 + backport: 79e590b3651e9074489976e737e7fc1255a6cd79 +6330fe95e59bc1de5ad3ebd89e379d785c7c6fc0: + title: 'ipv6: sr: block BH in seg6_output_core() and seg6_input_core()' + mainline: c0b98ac1cc104f48763cdb27b1e9ac25fd81fc90 + backport: 9ba19e227817b86f1032cc551912a049b62ba7e6 +ddd44dc20554c38450204df47f8422c7fec78f2d: + title: 'vxlan: Fix regression when dropping packets due to invalid src addresses' + mainline: 1cd4bc987abb2823836cbb8f887026011ccddc8a + backport: 7c79a301b097797b8edd46b11a888a287e281f98 +25dec34bfd770f444409b3228f90f64feb6804f6: + title: 'tcp: count CLOSE-WAIT sockets for TCP_MIB_CURRESTAB' + mainline: a46d0ea5c94205f40ecf912d1bb7806a8a64704f + backport: 54f3a87336ada67c8a8da26f7575d12c5ca85bfb +e468462fe0efdd233b6fd7b978e9911bb1eb8614: + title: 'ptp: Fix error message on failed pin verification' + mainline: 323a359f9b077f382f4483023d096a4d316fd135 + backport: 7a5ce9a4d73421a553e354ee6eb5de1a3bffeae5 +5c91a2f308cabf7cc0e30997455ac15926199987: + title: 'af_unix: Annotate data-race of sk->sk_state in unix_inq_len().' + mainline: 3a0f38eb285c8c2eead4b3230c7ac2983707599d + backport: 4379c4db8fa9f7d4adfdf7256277c96ac968a690 +6b4dffb64e98b9eacc7c214056146d32642f7e8a: + title: 'af_unix: Annotate data-races around sk->sk_state in unix_write_space() and poll().' + mainline: eb0718fb3e97ad0d6f4529b810103451c90adf94 + backport: 089da5e3914abb4806b03eff85aeb895c0ab860b +7cd9dd08be2482bd1015642b61d97a187af5a774: + title: 'af_unix: Annotate data-races around sk->sk_state in sendmsg() and recvmsg().' + mainline: 8a34d4e8d9742a24f74998f45a6a98edd923319b + backport: c6f96daa0536f49a7d624196dbc3defc536eacdb +123d798351c96a15456478558fccac0eb766f26d: + title: 'af_unix: Annotate data-races around sk->sk_state in UNIX_DIAG.' + mainline: 0aa3be7b3e1f8f997312cc4705f8165e02806f8f + backport: cab04acca50227f3f27fb5616bee123fea171762 +f5cf5e139ec736f1ac18cda8d5e5fc80d7eef787: + title: 'af_unix: Annotate data-race of net->unx.sysctl_max_dgram_qlen.' + mainline: bd9f2d05731f6a112d0c7391a0d537bfc588dbe6 + backport: 98e2f1cec1532524595d79af5c86ed370debd735 +b56ff0d20a4a60b9e6424d0609acccbbde573ea8: + title: 'af_unix: Use unix_recvq_full_lockless() in unix_stream_connect().' + mainline: 45d872f0e65593176d880ec148f41ad7c02e40a7 + backport: 15baad6e966a2478052b6e2efd0153a9e9a9e0c2 +141826272a2cd16436f9b6c241cf88b72feddb3b: + title: 'af_unix: Use skb_queue_len_lockless() in sk_diag_show_rqlen().' + mainline: 5d915e584d8408211d4567c22685aae8820bfc55 + backport: a8d1038ecf162678372a6f5686eabbf0c070ec91 +9c2d206ddc697595ceb0e8e356c64f9e845a0c2f: + title: 'af_unix: Annotate data-race of sk->sk_shutdown in sk_diag_fill().' + mainline: efaf24e30ec39ebbea9112227485805a48b0ceb1 + backport: 669958a2bdd8b94c6bbe1df7c83feae7b844afb3 +f71a53148ce34898fef099b75386a3a9f4449311: + title: 'usb: gadget: f_fs: Fix race between aio_cancel() and AIO request complete' + mainline: 24729b307eefcd7c476065cd7351c1a018082c19 + backport: 77067622d8f27240f3e5438767cce7317f8b9c34 +656068638e1da7728abde65760bc8e61106a9b34: + title: 'drm/amd/display: Handle Y carry-over in VCP X.Y calculation' + mainline: 3626a6aebe62ce7067cdc460c0c644e9445386bb + skipped: patched file is not in 4.14.y +9dcb6eb967fe778d1d985a709ac4030895603fc0: + title: 'serial: sc16is7xx: replace hardcoded divisor value with BIT() macro' + mainline: 2e57cefc4477659527f7adab1f87cdbf60ef1ae6 + backport: 6c20d50e094e8b67aab06f29f7e97351bbfef601 +2b14e818ef3e49741ee60a317554222c6af3a800: + title: 'serial: sc16is7xx: fix bug in sc16is7xx_set_baud() when using prescaler' + mainline: 8492bd91aa055907c67ef04f2b56f6dadd1f44bf + backport: f966c6e6aa0166c853782a705ae5389f8c6b24e7 +d3f6dc1155a09bc2c212b734c3ff01a046490e92: + title: 'media: mc: mark the media devnode as registered from the, start' + mainline: 4bc60736154bc9e0e39d3b88918f5d3762ebe5e0 + backport: 41d740fdbcb6d45f86ec6cd7238ba2ca38df8824 +62b71327cf1af11ceb4a3f53ebf0c85cb9ad3db8: + title: 'selftests/mm: compaction_test: fix incorrect write of zero to nr_hugepages' + mainline: 9ad665ef55eaad1ead1406a58a34f615a7c18b5e + backport: fe9a3e689a0275a21eae214693dd7ddbdbb63cec +4a4f88dcf8b688db0cf527362ebf4db0d272a3f6: + title: 'selftests/mm: conform test to TAP format output' + mainline: 9a21701edc41465de56f97914741bfb7bfc2517d + backport: 75614587972465759b313027993c87e60eeb446f +4d5f7ab71a24f17311d361f47c61cc49064e1dd0: + title: 'selftests/mm: compaction_test: fix bogus test success on Aarch64' + mainline: d4202e66a4b1fe6968f17f9f09bbc30d08f028a1 + backport: 6132af7d247da481d1f4e99c91f5fdc29961bce3 +c158e493640ce76e76241f0529cebe19770ba5b2: + title: 'nilfs2: Remove check for PageError' + mainline: 79ea65563ad8aaab309d61eeb4d5019dd6cf5fa0 + backport: 71bf6edd5d5c1384f56efcc445146a367f1e7c38 +7ed62ec616a3441aa3859150d50fadf5fd117aa8: + title: 'nilfs2: return the mapped address from nilfs_get_page()' + mainline: 09a46acb3697e50548bb265afa1d79163659dd85 + backport: 52c1c33e0dafbe82538c326d4a6144544e9501f4 +2ac8a2fe22bdde9eecce2a42cf5cab79333fb428: + title: 'nilfs2: fix nilfs_empty_dir() misjudgment and long loop on I/O errors' + mainline: 7373a51e7998b508af7136530f3a997b286ce81c + backport: c5682abd08cb2a8960de840d00ce1efc5066286e +217d1f44fff560b3995a685a60aa66e55a7f0f56: + title: 'USB: class: cdc-wdm: Fix CPU lockup caused by excessive log messages' + mainline: 22f00812862564b314784167a89f27b444f82a46 + backport: ac2c307a0180583e260719f923ba2edabddea919 +83c2321411d8bb8f832dbb482ea3387ac1322542: + title: 'mei: me: release irq in mei_me_pci_resume error path' + mainline: 283cb234ef95d94c61f59e1cd070cd9499b51292 + backport: 6f5dcde17cd2c15cb9812b4441ab1ba7088ccf0c +f0dedb5c511ed82cbaff4997a8decf2351ba549f: + title: 'jfs: xattr: fix buffer overflow for invalid xattr' + mainline: 7c55b78818cfb732680c4a72ab270cc2d2ee3d0f + backport: 79cb0bb1b0e2cbed9eaec6f1fb7ce81baf278a39 +a2ddc0475c4c6fff5b9eac0e0eb4726640925e1b: + title: 'xhci: Apply reset resume quirk to Etron EJ188 xHCI host' + mainline: 17bd54555c2aaecfdb38e2734149f684a73fa584 + backport: b8b14f255f86c39eee93bc4fbc4c8f6c3f9da875 +5c08d8bcc6f20965d665a6122a3fe60eba042e74: + title: 'xhci: Apply broken streams quirk to Etron EJ188 xHCI host' + mainline: 91f7a1524a92c70ffe264db8bdfa075f15bbbeb9 + backport: 41c568e13eb14e46c634292e403a4652603b2d46 +d9bbbbf1a2cac25fafa44ba09d2ab8f5365c0a06: + title: 'Input: try trimming too long modalias strings' + mainline: 0774d19038c496f0c3602fb505c43e1b2d8eed85 + backport: abe1fafad8d912b27028e91a0040650149ab4ab8 +beb99266830520e15fbc6ca8cc5a5240d76851fd: + title: 'xsk: validate user input for XDP_{UMEM|COMPLETION}_FILL_RING' + mainline: 237f3cf13b20db183d3706d997eedc3c49eacd44 + skipped: fixes patch not in branch +955b3764671f3f157215194972d9c01a3a4bd316: + title: 'HID: core: remove unnecessary WARN_ON() in implement()' + mainline: 4aa2dcfbad538adf7becd0034a3754e1bd01b2b5 + backport: c0be0c4967c8b988f9603c7b7cecc01379071c67 +7f66540fcf6f8f66784f739c33f79d2889e95106: + title: 'iommu/amd: Fix sysfs leak in iommu init' + mainline: a295ec52c8624883885396fde7b4df1a179627c3 + backport: 2cb6663051a21277c7bdf9695ad8a04fc6a5dc7a +87d6bdc006f0cbf297a3b2ad6e40ede4c3ee5dc2: + title: 'liquidio: Adjust a NULL pointer handling path in lio_vf_rep_copy_packet' + mainline: c44711b78608c98a3e6b49ce91678cd0917d5349 + skipped: fixes patch not in branch +3e0daaf28639c6fd22e96eb2f8772ad40e922ee7: + title: 'drm/bridge/panel: Fix runtime warning on panel bridge release' + mainline: ce62600c4dbee8d43b02277669dd91785a9b81d9 + backport: b4722a9d958fe8bd54d0358650bf07b11ab91d4b +06f208ae0670ef97b0bf253a5523863e113026b6: + title: 'tcp: fix race in tcp_v6_syn_recv_sock()' + mainline: d37fe4255abe8e7b419b90c5847e8ec2b8debb08 + backport: 291c8c1e9e291262f9179c0ba5cef2e49df4f142 +a1f9c8328219b9bb2c29846d6c74ea981e60b5a7: + title: 'Bluetooth: L2CAP: Fix rejecting L2CAP_CONN_PARAM_UPDATE_REQ' + mainline: 806a5198c05987b748b50f3d0c0cfb3d417381a4 + backport: 9ae3694d9677f29e0d8e5bbb86841f69baae279d +f00c343be6f25a6a3736fd6b332c918da57d81d8: + title: 'ipv6/route: Add a missing check on proc_dointvec' + mainline: f0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded + backport: fab190e5fcd0466de646405bf49ca7017bbdca31 +ebde6e8a52c68dc45b4ae354e279ba74788579e7: + title: 'net/ipv6: Fix the RT cache flush via sysctl using a previous delay' + mainline: 14a20e5b4ad998793c5f43b0330d9e1388446cf3 + backport: 04f57a8a33fef04d61ba56f8b4e830fe0cebc8f2 +bb3641a5831789d83a58a39ed4a928bcbece7080: + title: 'drivers: core: synchronize really_probe() and dev_uevent()' + mainline: c0a40097f0bc81deafc15f9195d1fb54595cd6d0 + backport: 82d942edbd8b21acbacd1d16eb3cb52d47404384 +540ca99729e28dbe902b01039a3b4bd74520a819: + title: 'drm/exynos/vidi: fix memory leak in .get_modes()' + mainline: 38e3825631b1f314b21e3ade00b5a4d737eb054e + backport: 126c475927adda67084f403fee8ec76a853b70fc +58730dfbd4ae01c1b022b0d234a8bf8c02cdfb81: + title: 'vmci: prevent speculation leaks by sanitizing event in event_deliver()' + mainline: 8003f00d895310d409b2bf9ef907c56b42a4e0f4 + backport: 37026b40b51170c1f9b052ef1b1cd19ec815c566 +7bdf1d550ddfcd9ab797087421f77b7aceddc8a7: + title: 'fs/proc: fix softlockup in __read_vmcore' + mainline: 5cbcb62dddf5346077feb82b7b0c9254222d3445 + backport: aaea44b590e4a5e853dcc48edbf8ffa6dc611490 +f882e853ea33c1e4f7107387f85879139682b720: + title: 'ocfs2: use coarse time for new created files' + mainline: b8cb324277ee16f3eca3055b96fce4735a5a41c6 + backport: c02663a1e56ea3793580a51e2ea012e198661ca1 +3c26b5d21b1239e9c7fd31ba7d9b2d7bdbaa68d9: + title: 'ocfs2: fix races between hole punching and AIO+DIO' + mainline: 952b023f06a24b2ad6ba67304c4c84d45bea2f18 + backport: db16f074c58fb04ccb5efd329bd001b3769662b2 +1b6047e27f9b6c79518076a480cdccecf0b6afed: + title: 'PCI: rockchip-ep: Remove wrong mask on subsys_vendor_id' + mainline: 2dba285caba53f309d6060fca911b43d63f41697 + skipped: fixes patch not in branch +5226e7062723bd5d4f1bd5e98ace7c1e6c015d57: + title: 'dmaengine: axi-dmac: fix possible race in remove()' + mainline: 1bc31444209c8efae98cb78818131950d9a6f4d6 + backport: 7932419ef19393d4fc9b05a04583d8c31c2785e3 +96185ee73d5cd28c2b19311c87536ffeeb653562: + title: 'intel_th: pci: Add Granite Rapids support' + mainline: e44937889bdf4ecd1f0c25762b7226406b9b7a69 + backport: c2986a4fcfa961be763f68bb7c55ff808dcbbc63 +04d47e1fd4e9a9b9c32e769b9106bbcbddeca756: + title: 'intel_th: pci: Add Granite Rapids SOC support' + mainline: 854afe461b009801a171b3a49c5f75ea43e4c04c + backport: fbda6dc2f8c85e96d6ae1f5243146a33e627ee9e +f9159b4706fc1eae09c37081f9a580673a4477ff: + title: 'intel_th: pci: Add Sapphire Rapids SOC support' + mainline: 2e1da7efabe05cb0cf0b358883b2bc89080ed0eb + backport: 97c26585440f81fc3832759721964719ae7a4802 +8af7cedc0edf1b9d3c29e2b72e7d643f64669ee4: + title: 'intel_th: pci: Add Meteor Lake-S support' + mainline: c4a30def564d75e84718b059d1a62cc79b137cf9 + backport: 0d4c32589468be6d7b8993e7576690004f50f5cc +4780775da4957702ece226104b17d072e557a962: + title: 'intel_th: pci: Add Lunar Lake support' + mainline: f866b65322bfbc8fcca13c25f49e1a5c5a93ae4d + backport: eac9744fef5c714c3201a0ab9c56e61ede318c29 +95f6f81e50d858a7c9aa7c795ec14a0ac3819118: + title: 'nilfs2: fix potential kernel bug due to lack of writeback flag waiting' + mainline: a4ca369ca221bb7e06c725792ac107f0e48e82e7 + backport: 948b6135a242e4147ee69d7d47e1df20f5951d7f +1af0a35eba1ee302fc30aea8cb621f6de8728785: + title: 'hv_utils: drain the timesync packets on onchannelcallback' + mainline: b46b4a8a57c377b72a98c7930a9f6969d2d4784e + backport: 22749c2b34a685511b52c8e1c52539519f0a46ec +a33d99c8b213d16ad61bc68cb17aad1e2f484192: + title: 'hugetlb_encode.h: fix undefined behaviour (34 << 26)' + mainline: 710bb68c2e3a24512e2d2bae470960d7488e97b1 + backport: bee6efedbf7b70baa442b7af575c6cc055c2bcef +e0aab7b07a9375337847c9d74a5ec044071e01c8: + title: 'usb-storage: alauda: Check whether the media is initialized' + mainline: 16637fea001ab3c8df528a8995b3211906165a30 + backport: ba2eacb9af4998743a14271e11fba297a8761497 +6652029853316f4c273219145ef0e71b148bbe01: + title: 'rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment' + mainline: 8b9b443fa860276822b25057cb3ff3b28734dec0 + backport: d3d05ae427ca75738046af172544e4ad75bdf8aa +79636f636126775436a11ee9cf00a9253a33ac11: + title: 'batman-adv: bypass empty buckets in batadv_purge_orig_ref()' + mainline: 40dc8ab605894acae1473e434944924a22cfaaa0 + backport: 5856f70943c52055ea24d8ee791308367cd1039a +56bec63a7fc87ad50b3373a87517dc9770eef9e0: + title: 'scsi: qedi: Fix crash while reading debugfs attribute' + mainline: 28027ec8e32ecbadcd67623edb290dad61e735b5 + backport: f98f3237faf35d508d9c1b783385102a7be0abf2 +acf2b80c31c37acab040baa3cf5f19fbd5140b18: + title: 'powerpc/pseries: Enforce hcall result buffer validity and size' + mainline: ff2e185cf73df480ec69675936c4ee75a445c3e4 + backport: 476276b356c5d338435b82ecfe217a9422d7235f +7e1e8e86b0b62844b2c795549f65494e95b5983e: + title: 'powerpc/io: Avoid clang null pointer arithmetic warnings' + mainline: 03c0f2c2b2220fc9cf8785cd7b61d3e71e24a366 + backport: 8824c4818bf4e7a3b2c47f78c6a8ace368ebe2c5 +02d13616ca30014ed96302e51a5b0e17664e58bc: + title: 'usb: misc: uss720: check for incompatible versions of the Belkin F5U002' + mainline: 3295f1b866bfbcabd625511968e8a5c541f9ab32 + backport: 43cef40ed1b05181bab0553b15a699a4a3de9dc4 +2f85b07bd802e86e155fd8496e3d105ec3a2ade9: + title: 'udf: udftime: prevent overflow in udf_disk_stamp_to_time()' + mainline: 3b84adf460381169c085e4bc09e7b57e9e16db0a + backport: 28e83fb606df2b620ca55001b6b1ec4669fff3fe +864a1e64802c2de46fe22b52ca87c5b409042803: + title: 'PCI/PM: Avoid D3cold for HP Pavilion 17 PC/1972 PCIe Ports' + mainline: 256df20c590bf0e4d63ac69330cf23faddac3e08 + skipped: commit did not cherry-pick cleanly +6bff05aaa32c2f7e1f6e68e890876642159db419: + title: 'MIPS: Octeon: Add PCIe link status check' + mainline: 29b83a64df3b42c88c0338696feb6fdcd7f1f3b7 + backport: 7bf7a1b84c85a21b7e9e7dc9136efd5c79d7b4ed +acabc32a7b27f30a75ef01e873d8b65f5dc7d5d5: + title: 'MIPS: Routerboard 532: Fix vendor retry check code' + mainline: ae9daffd9028f2500c9ac1517e46d4f2b57efb80 + backport: 2401229809147c9144c4e7bbbcc43c7154cf1aba +5d3b9efa04c0d8967e00cbc4b6b5aab79952f5d1: + title: 'cipso: fix total option length computation' + mainline: 9f36169912331fa035d7b73a91252d7c2512eb1a + backport: 2f46065f2784076d6c121eab1a21a8096fba6b13 +d616876256b38ecf9a1a1c7d674192c5346bc69c: + title: 'netrom: Fix a memory leak in nr_heartbeat_expiry()' + mainline: 0b9130247f3b6a1122478471ff0e014ea96bb735 + backport: f5105aa1e9989b1deb6d87f9d080a7d0d917dc56 +f0cda984e4e634b221dbf9642b8ecc5b4806b41e: + title: 'ipv6: prevent possible NULL dereference in rt6_probe()' + mainline: b86762dbe19a62e785c189f313cda5b989931f37 + skipped: prerequisite dcd1f572954f9d66d7b4a65df894ed5b4c467368 not in branch +c71761292d4d002a8eccb57b86792c4e3b3eb3c7: + title: 'xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()' + mainline: d46401052c2d5614da8efea5788532f0401cb164 + backport: b71bbdc8869cbf604b55e27437b9d91d3dd909aa +d0e99ad7721155aaa4e57b8b11bb70743da61491: + title: 'virtio_net: checksum offloading handling fix' + mainline: 604141c036e1b636e2a71cf6e1aa09d1e45f40c2 + backport: e3d1b924da1c094e403381851f287d1cb6d430de +88154e3329e1f47490ee98f8d32a0353d8d46550: + title: 'net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings' + mainline: fba383985354e83474f95f36d7c65feb75dba19d + backport: 8bfba3c52500198a370f799501c232303b52817c +bdc0a40accdf77080fed82d72e89d341001dcbf6: + title: 'regulator: core: Fix modpost error "regulator_get_regmap" undefined' + mainline: 3f60497c658d2072714d097a177612d34b34aa3d + backport: cc48980d16d92c2f4e6c9a1976bd2afdf9f30fa6 +0b346aa39e76de78be5e105dc338e190e80a5188: + title: 'dmaengine: ioatdma: Fix missing kmem_cache_destroy()' + mainline: 5422145d0b749ad554ada772133b9b20f9fb0ec8 + backport: d7e271c7c6269187a0c054ef781b1160398b119a +435ecc978c3d5d0c4e172ec5b956dc1904061d98: + title: 'ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."' + mainline: a83e1385b780d41307433ddbc86e3c528db031f0 + backport: ed44c23c974a4df0899e57a375eeb563a911b575 +07e8f15fa16695cf4c90e89854e59af4a760055b: + title: 'drm/radeon: fix UBSAN warning in kv_dpm.c' + mainline: a498df5421fd737d11bfd152428ba6b1c8538321 + backport: cc96770672dafa9b46038f64523c42ce3534e8ba +48d5f4d66962fde59c78dd0a7cf6bd03b3f49c61: + title: 'gcov: add support for GCC 14' + mainline: c1558bc57b8e5b4da5d821537cd30e2e660861d8 + backport: cd513bd7a535592e2c65efc462a42866d507da3a +1d1838ca012952f4914af6f6619bbdea6251039c: + title: 'ARM: dts: samsung: smdkv310: fix keypad no-autorepeat' + mainline: 87d8e522d6f5a004f0aa06c0def302df65aff296 + backport: 5566df875aabd57002b81daf45d37d2f6c874d42 +77951f880a4b9e7f76460364ec0b931d1a59c9fb: + title: 'ARM: dts: samsung: exynos4412-origen: fix keypad no-autorepeat' + mainline: 88208d3cd79821117fd3fb80d9bcab618467d37b + backport: 9b2697403d29b12ef06ab68f4f2232291dfed184 +4c70a7576ae14f804196ae0089f9deb6cbd77e1f: + title: 'ARM: dts: samsung: smdk4412: fix keypad no-autorepeat' + mainline: 4ac4c1d794e7ff454d191bbdab7585ed8dbf3758 + backport: d350b585ee4796a3868be5f4cd8a29877275c819 +6721b33aa934e8afd255db9a466868f74f5c5cb5: + title: 'selftests/ftrace: Fix checkbashisms errors' + mainline: 72ce3daf92ba4f5bae6e91095d40e67b367c6b2f + skipped: patched file is not in 4.14.y +876d7d009c528caea5af95a70ab998374cbc7c7f: + title: 'tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test' + mainline: 23748e3e0fbfe471eff5ce439921629f6a427828 + skipped: fixes patch not in branch +c23ead9986a17c793d39be11ce6c084904c9c44a: + title: 'perf/core: Fix missing wakeup when waiting for context reference' + mainline: 74751ef5c1912ebd3e65c3b65f45587e05ce5d36 + skipped: fixes patch not in branch +4c003aef56d5642aefd4d11ee9d7e6755d4c1a6e: + title: 'PCI: Add PCI_ERROR_RESPONSE and related definitions' + mainline: 57bdeef4716689d9b0e3571034d65cf420f6efcd + backport: dcea2cf5d7cca146641b67b8cbcc153cbfdeb0c3 +d4e52b36c73f44d2b5f41d0cd3f57b3d2efbf180: + title: 'x86/amd_nb: Check for invalid SMN reads' + mainline: c625dabbf1c4a8e77e4734014f2fde7aa9071a1f + backport: f66ed725b522bfad043ec2dbcf50eff7ffc8feda +b576d7d08f26d40789313ec6a8acc966a149c37f: + title: 'iio: dac: ad5592r-base: Replace indio_dev->mlock with own device lock' + mainline: 33c53cbf8f7bc8d62f6146a19da97c8594376ff0 + backport: e8b7b4167c95a9e6976479edda683c1b13ca0832 +c101996c9dabd9d809c12f686547b7035c087f10: + title: 'iio: dac: ad5592r: un-indent code-block for scale read' + mainline: b004fe33034cc64f72c20923be71cf1e6c9a624c + backport: a28ae8f66b95e48a7ad69aa23382bd8486b6c529 +9eaaefbae8f5ddbed0fce822042ad969f5f876c5: + title: 'iio: dac: ad5592r: fix temperature channel scaling value' + mainline: 279428df888319bf68f2686934897301a250bb84 + backport: d9b6601da0310953862e47ebc5fe28f9bf37033a +229e75730c784f7b871ae9bd76f8bd506d20a304: + title: 'scsi: mpt3sas: Add ioc_ logging macros' + mainline: 645a20c6821cd1ab58af8a1f99659e619c216efd + backport: 675de54c63726a5b6316a7c3854219e10208f4ea +230c290c74b956a4c26926c94a5bf932ca234884: + title: 'scsi: mpt3sas: Gracefully handle online firmware update' + mainline: ffedeae1fa545a1d07e6827180c3923bf67af59f + backport: bd4e577402b93532aacc19b7f44c4963b763fafe +e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee: + title: 'scsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory' + mainline: 4254dfeda82f20844299dca6c38cbffcfd499f41 + backport: 165419d81604a14fb6d0b111fd2f96288ec9528b +8f667ee530a601449fede56370036e1d8d9a62dc: + title: 'xhci: Use soft retry to recover faster from transaction errors' + mainline: f8f80be501aa2f10669585c3e328fad079d8cb3a + backport: de371a2bb30d1695a5c07357bd207e5aadefcd51 +ca0f0c5b0b991a71f61948bad09eb5f9e8cc4851: + title: 'xhci: Set correct transferred length for cancelled bulk transfers' + mainline: f0260589b439e2637ad54a2b25f00a516ef28a57 + backport: c73496b00b416467313ec64166d9d8d5d7e3a921 +2a28c0f457c5563cef9fbad803d9445eee0c1e05: + title: 'usb: xhci: do not perform Soft Retry for some xHCI hosts' + mainline: a4a251f8c23518899d2078c320cf9ce2fa459c9f + backport: 3f74f1a0bd8b876661fb5263fa78048e2586065d +e65a0dc2e85efb28e182aca50218e8a056d0ce04: + title: 'pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER' + mainline: adec57ff8e66aee632f3dd1f93787c13d112b7a1 + backport: d6636e9d955f53a9da4e40af4ddba67ab3391fbf +860a562a61a838867c8d3f66d059a0fc7a67d1c9: + title: 'pinctrl: rockchip: fix pinmux bits for RK3328 GPIO2-B pins' + mainline: e8448a6c817c2aa6c6af785b1d45678bd5977e8d + backport: 0b45b7f4f6ee46da3efc4858af96e1a86e536250 +f8426b53f59f88c637143ffa31276be73a3c9b27: + title: 'pinctrl: rockchip: fix pinmux bits for RK3328 GPIO3-B pins' + mainline: 5ef6914e0bf578357b4c906ffe6b26e7eedb8ccf + backport: 0d6d13a0bb379aa59f6475c1bb6df7aaed21857f +61c552e4ee1dbfa85d68997ab6e9d80690b401a7: + title: 'pinctrl: rockchip: fix pinmux reset in rockchip_pmx_set' + mainline: 4ea4d4808e342ddf89ba24b93ffa2057005aaced + backport: a1e6c61656a89e49007fd9847fe123acd15d31b9 +4ad7d49059358ceadd352b4e2511425bdb68f400: + title: 'drm/amdgpu: fix UBSAN warning in kv_dpm.c' + mainline: f0d576f840153392d04b2d52cf3adab8f62e8cb6 + backport: 90340ac06eb8a83a320c3bf2a31cc67eaf333478 +f696eaf675650cd57411020bb8b83f57e2de3f11: + title: 'netfilter: nf_tables: validate family when identifying table via handle' + mainline: f6e1532a2697b81da00bfb184e99d15e01e9d98c + skipped: fixes patch not in branch +ae81535ce2503aabc4adab3472f4338070cdeb6a: + title: 'ASoC: fsl-asoc-card: set priv->pdev before using it' + mainline: 90f3feb24172185f1832636264943e8b5e289245 + backport: f6658c76f5f0670445bebb35a9ccf3d5ae502806 +40188a25a9847dbeb7ec67517174a835a677752f: + title: 'netfilter: nf_tables: fully validate NFT_DATA_VALUE on store to data registers' + mainline: 7931d32955e09d0a11b1fe0b6aac1bfa061c005c + backport: c01fc5238f6bb561e137d7b6e7df88c5107a263f +b71348be1236398be2d04c5e145fd6eaae86a91b: + title: 'drm/panel: ilitek-ili9881c: Fix warning with GPIO controllers that sleep' + mainline: ee7860cd8b5763017f8dc785c2851fecb7a0c565 + skipped: patched file is not in 4.14.y +2b085521be5292016097b5e7ca81b26be3f7098d: + title: 'net/iucv: Avoid explicit cpumask var allocation on stack' + mainline: be4e1304419c99a164b4c0e101c7c2a756b635b9 + backport: 9578df8a6b21442b2451be92ea5ce59b2cc38505 +40d7def67841343c10f8642a41031fecbb248bab: + title: 'ALSA: emux: improve patch ioctl data validation' + mainline: 89b32ccb12ae67e630c6453d778ec30a592a212f + backport: bf4ffd90f46475894c7d758eb26aa0f8a31dc245 +1925c902159d686372d897c2fa8ee4ea91b62d14: + title: 'media: dvbdev: Initialize sbuf' + mainline: 17d1316de0d7dc1bdc5d6e3ad4efd30a9bf1a381 + backport: 728e947a35ba429d96e495c170367211583d760e +671abe2b126e6e39d52eefbf53106650ef2dd904: + title: 'soc: ti: wkup_m3_ipc: Send NULL dummy message instead of pointer message' + mainline: ddbf3204f600a4d1f153498f618369fca352ae00 + backport: cf89c5861a3b88fcef8ce222edd384bb5cb44934 +277ea9f9bf1171f0f02836ded9b65b9b8684322d: + title: 'nvme: fixup comment for nvme RDMA Provider Type' + mainline: f80a55fa90fa76d01e3fffaa5d0413e522ab9a00 + backport: 43bae0d9a7bd2f0a78a283b1440a74601b4a4f68 +a8d78984fdc105bc1a38b73e98d32b1bc4222684: + title: 'gpio: davinci: Validate the obtained number of IRQs' + mainline: 7aa9b96e9a73e4ec1771492d0527bd5fc5ef9164 + skipped: fixes patch not in branch +c7999d372e7fe8bdfbc2226af1896e8bd328018a: + title: 'i2c: ocores: stop transfer on timeout' + mainline: e7663ef5ae0f02e3b902eb0305dec981333eb3e1 + backport: b4951f8134444e1eb7b28ea2234463f8ed077745 +1f7e4dd58af1267db2970e5c2e98a4d0ff170047: + title: 'i2c: ocores: set IACK bit after core is enabled' + mainline: 5a72477273066b5b357801ab2d315ef14949d402 + backport: 4d73d79702f3c0872f20dfd8a05974c7b18ebc7f +65ebdde16e7f5da99dbf8a548fb635837d78384e: + title: 'x86: stop playing stack games in profile_pc()' + mainline: 093d9603b60093a9aaae942db56107f6432a5dca + backport: 00eda93e9c842eecb76a1bc09b337e4f0cb043eb +bba83bf85fc6fcca1e827fd88bf3998be9ad0d24: + title: 'mmc: sdhci-pci: Convert PCIBIOS_* return codes to errnos' + mainline: ebc4fc34eae8ddfbef49f2bdaced1bf4167ef80d + backport: 51e44a77a5ca50e7e1f0548960bbb9eea83ff139 +75a024d3ab0d331fc1d0b640b00e63d31d556b1e: + title: 'iio: adc: ad7266: Fix variable checking bug' + mainline: a2b86132955268b2a1703082fbc2d4832fc001b8 + backport: b23dedd4318672a4265f48d90f8760b41b6f7006 +272736d778a42a3cdb623d53665a0e6a85125b66: + title: 'iio: chemical: bme680: Fix pressure value output' + mainline: ae1f7b93b52095be6776d0f34957b4f35dda44d9 + skipped: fixes patch not in branch +d17f26afde5039c30297e9c6ffc273689e595154: + title: 'iio: chemical: bme680: Fix calibration data variable' + mainline: b47c0fee73a810c4503c4a94ea34858a1d865bba + skipped: fixes patch not in branch +6fa31bbe2ea8665ee970258eb8320cbf231dbe9e: + title: 'iio: chemical: bme680: Fix overflows in compensate() functions' + mainline: fdd478c3ae98c3f13628e110dce9b6cfb0d9b3c8 + skipped: fixes patch not in branch +2e2ee64a367e97d433d1f9f735efb69f2612472b: + title: 'iio: chemical: bme680: Fix sensor data read operation' + mainline: 4241665e6ea063a9c1d734de790121a71db763fc + skipped: fixes patch not in branch +abb029e078e149d4d1f44a244cf833a6a1541447: + title: 'net: usb: ax88179_178a: improve link status logs' + mainline: 058722ee350c0bdd664e467156feb2bf5d9cc271 + backport: e4de596e5e18fb924bfe0048049cd04a285272f9 +a0886d04f1c7439b55c1c9daecd6b21ada2de5dd: + title: 'usb: gadget: printer: SS+ support' + mainline: fd80731e5e9d1402cb2f85022a6abf9b1982ec5f + backport: cbc92ffc360a7b6f16408d7092c71d72bb9e0382 +a93b97349ba92cdc8b63ad09d28a873a467e1d62: + title: 'usb: musb: da8xx: fix a resource leak in probe()' + mainline: de644a4a86be04ed8a43ef8267d0f7d021941c5e + backport: 7209de070ba2427bfa29373c649c6311b69580bc +5159a81924311c1ec786ad9fdef784ead8676a6a: + title: 'usb: atm: cxacru: fix endpoint checking in cxacru_bind()' + mainline: 2eabb655a968b862bc0c31629a09f0fbf3c80d51 + backport: 4ddbe32a34bc9cc18c34282f88488d22c4178071 +0929fbe8194db19bfeed22f8c7f9b24da9f08bb9: + title: 'tty: mcf: MCF54418 has 10 UARTS' + mainline: 7c92a8bd53f24d50c8cf4aba53bb75505b382fed + backport: c6f828c51833c0dcdd53b79a4eb5c8d5f5ebd56b +72152ab85ae44e13df8b7a653b5f657b48fa3229: + title: 'hexagon: fix fadvise64_64 calling conventions' + mainline: 896842284c6ccba25ec9d78b7b6e62cdd507c083 + backport: 87cc48eed0c10fc8f13907410db3f1c76c77826b +9289cd3450d1da3e271ef4b054d4d2932c41243e: + title: 'drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes' + mainline: 66edf3fb331b6c55439b10f9862987b0916b3726 + backport: 2dc9769a951e305b690994008bcc32ee0d57f3e2 +ffabad4aa91e33ced3c6ae793fb37771b3e9cb51: + title: 'drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes' + mainline: 6d411c8ccc0137a612e0044489030a194ff5c843 + backport: e2f974a4f127e38e7a5ec7a7ab51bb59d4392f17 +4d5a2d6b7a9a1140342c5229d1a427ec37a12fd4: + title: 'batman-adv: Don''t accept TT entries for out-of-spec VIDs' + mainline: 537a350d14321c8cca5efbf0a33a404fec3a9f9e + backport: e6522330b7414dc7f96f547045bdc5db9de0cc3e +290073b2b557e4dc21ee74a1e403d9ae79e393a2: + title: 'ata: libata-core: Fix double free on error' + mainline: ab9e0c529eb7cafebdd31fe1644524e80a48b05d + skipped: fixes patch not in branch +c329760749b5419769e57cb2be80955d2805f9c9: + title: 'ftruncate: pass a signed offset' + mainline: 4b8e88e563b5f666446d002ad0dc1e6e8e7102b0 + backport: 5696aad6bf4700041503e715bd2fb5d9dcf1fcc0 +19946741ea989605d12d2ffdbb006b9ca000dde8: + title: 'pwm: stm32: Refuse too small period requests' + mainline: c45fcf46ca2368dafe7e5c513a711a6f0f974308 + backport: 7128fc9dcb40ffa3ca16cc92eeb4aa3f65639c87 +13bda7ac5801f501bed6e21717dbf3b0df773847: + title: 'ipv6: annotate some data-races around sk->sk_prot' + mainline: 086d49058cd8471046ae9927524708820f5fd1c7 + backport: 81d8db9302d30505f89d672e1a39c60ed71a1dda +fda6d62642a9c544a293d7ad7cb058f8c7f8f3dd: + title: 'ipv6: Fix data races around sk->sk_prot.' + mainline: 364f997b5cfe1db0d63a390fe7c801fa2b3115f6 + backport: 0904f321c3a052af42b094f786f75fe32f5d8f2d +5bb642cc3355ffd3c8bca0a8bd8e6e65bcc2091c: + title: 'tcp: Fix data races around icsk->icsk_af_ops.' + mainline: f49cd2f4d6170d27a2c61f1fecb03d8a70c91f57 + backport: 1895f4d98247c54d045cd4a9c94c0802f3c270d5 +f7fc312d1d750db0ea867e50e6c436e0679a5a65: + title: 'arm64: dts: rockchip: Add sound-dai-cells for RK3368' + mainline: 8d7ec44aa5d1eb94a30319074762a1740440cdc8 + backport: 6658230562d296ef2484a1156ff322c558d3c26a diff --git a/Documentation/devicetree/bindings/sound/rt5645.txt b/Documentation/devicetree/bindings/sound/rt5645.txt index 7cee1f518f59..525d36f7f50f 100644 --- a/Documentation/devicetree/bindings/sound/rt5645.txt +++ b/Documentation/devicetree/bindings/sound/rt5645.txt @@ -16,6 +16,11 @@ Optional properties: a GPIO spec for the external headphone detect pin. If jd-mode = 0, we will get the JD status by getting the value of hp-detect-gpios. +- cbj-sleeve-gpios: + a GPIO spec to control the external combo jack circuit to tie the sleeve/ring2 + contacts to the ground or floating. It could avoid some electric noise from the + active speaker jacks. + - realtek,in2-differential Boolean. Indicate MIC2 input are differential, rather than single-ended. @@ -64,6 +69,7 @@ codec: rt5650@1a { compatible = "realtek,rt5650"; reg = <0x1a>; hp-detect-gpios = <&gpio 19 0>; + cbj-sleeve-gpios = <&gpio 20 0>; interrupt-parent = <&gpio>; interrupts = <7 IRQ_TYPE_EDGE_FALLING>; realtek,dmic-en = "true"; diff --git a/Makefile b/Makefile index b5842ab8654e..adefb8f44abb 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 348 +SUBLEVEL = 350 EXTRAVERSION = -openela NAME = Petit Gorille diff --git a/arch/arm/boot/dts/exynos4210-smdkv310.dts b/arch/arm/boot/dts/exynos4210-smdkv310.dts index 9c98a3724396..80f8cf76dd2b 100644 --- a/arch/arm/boot/dts/exynos4210-smdkv310.dts +++ b/arch/arm/boot/dts/exynos4210-smdkv310.dts @@ -67,7 +67,7 @@ &keypad { samsung,keypad-num-rows = <2>; samsung,keypad-num-columns = <8>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-names = "default"; pinctrl-0 = <&keypad_rows &keypad_cols>; diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index 0224e1da66c5..72c5a946f7b0 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts @@ -440,7 +440,7 @@ &keypad { samsung,keypad-num-rows = <3>; samsung,keypad-num-columns = <2>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-0 = <&keypad_rows &keypad_cols>; pinctrl-names = "default"; diff --git a/arch/arm/boot/dts/exynos4412-smdk4412.dts b/arch/arm/boot/dts/exynos4412-smdk4412.dts index 7fcb43431b59..e1d34df4d82f 100644 --- a/arch/arm/boot/dts/exynos4412-smdk4412.dts +++ b/arch/arm/boot/dts/exynos4412-smdk4412.dts @@ -46,7 +46,7 @@ &keypad { samsung,keypad-num-rows = <3>; samsung,keypad-num-columns = <8>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-0 = <&keypad_rows &keypad_cols>; pinctrl-names = "default"; diff --git a/arch/arm64/boot/dts/hisilicon/hi3798cv200.dtsi b/arch/arm64/boot/dts/hisilicon/hi3798cv200.dtsi index 75865f8a862a..0ffdc9256502 100644 --- a/arch/arm64/boot/dts/hisilicon/hi3798cv200.dtsi +++ b/arch/arm64/boot/dts/hisilicon/hi3798cv200.dtsi @@ -58,7 +58,7 @@ gic: interrupt-controller@f1001000 { compatible = "arm,gic-400"; reg = <0x0 0xf1001000 0x0 0x1000>, /* GICD */ - <0x0 0xf1002000 0x0 0x100>; /* GICC */ + <0x0 0xf1002000 0x0 0x2000>; /* GICC */ #address-cells = <0>; #interrupt-cells = <3>; interrupt-controller; diff --git a/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts b/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts index a0385a386a3f..dc7bfc90d4c2 100644 --- a/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts +++ b/arch/arm64/boot/dts/nvidia/tegra132-norrin.dts @@ -9,8 +9,8 @@ compatible = "nvidia,norrin", "nvidia,tegra132", "nvidia,tegra124"; aliases { - rtc0 = "/i2c@7000d000/as3722@40"; - rtc1 = "/rtc@7000e000"; + rtc0 = &as3722; + rtc1 = &tegra_rtc; serial0 = &uarta; }; diff --git a/arch/arm64/boot/dts/nvidia/tegra132.dtsi b/arch/arm64/boot/dts/nvidia/tegra132.dtsi index fa5a7c4bc807..d99ffa4acd58 100644 --- a/arch/arm64/boot/dts/nvidia/tegra132.dtsi +++ b/arch/arm64/boot/dts/nvidia/tegra132.dtsi @@ -569,7 +569,7 @@ status = "disabled"; }; - rtc@7000e000 { + tegra_rtc: rtc@7000e000 { compatible = "nvidia,tegra124-rtc", "nvidia,tegra20-rtc"; reg = <0x0 0x7000e000 0x0 0x100>; interrupts = ; diff --git a/arch/arm64/boot/dts/rockchip/rk3368.dtsi b/arch/arm64/boot/dts/rockchip/rk3368.dtsi index 2313aea0e69e..469d5b99ce00 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3368.dtsi @@ -710,6 +710,7 @@ dma-names = "tx"; pinctrl-names = "default"; pinctrl-0 = <&spdif_tx>; + #sound-dai-cells = <0>; status = "disabled"; }; @@ -721,6 +722,7 @@ clocks = <&cru SCLK_I2S_2CH>, <&cru HCLK_I2S_2CH>; dmas = <&dmac_bus 6>, <&dmac_bus 7>; dma-names = "tx", "rx"; + #sound-dai-cells = <0>; status = "disabled"; }; @@ -734,6 +736,7 @@ dma-names = "tx", "rx"; pinctrl-names = "default"; pinctrl-0 = <&i2s_8ch_bus>; + #sound-dai-cells = <0>; status = "disabled"; }; diff --git a/arch/arm64/include/asm/asm-bug.h b/arch/arm64/include/asm/asm-bug.h index 636e755bcdca..63ea62fbf093 100644 --- a/arch/arm64/include/asm/asm-bug.h +++ b/arch/arm64/include/asm/asm-bug.h @@ -39,6 +39,7 @@ 0: .long 1f - 0b; \ _BUGVERBOSE_LOCATION(__FILE__, __LINE__) \ .short flags; \ + .align 2; \ .popsection; \ 1: #else diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c index 8ae0f408b89c..fdc98b9f8ac6 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -175,6 +175,7 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg) case COMPAT_PSR_MODE_SVC: case COMPAT_PSR_MODE_ABT: case COMPAT_PSR_MODE_UND: + case COMPAT_PSR_MODE_SYS: if (!vcpu_el1_is_32bit(vcpu)) return -EINVAL; break; diff --git a/arch/hexagon/include/asm/syscalls.h b/arch/hexagon/include/asm/syscalls.h new file mode 100644 index 000000000000..40f2d08bec92 --- /dev/null +++ b/arch/hexagon/include/asm/syscalls.h @@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include + +asmlinkage long sys_hexagon_fadvise64_64(int fd, int advice, + u32 a2, u32 a3, u32 a4, u32 a5); diff --git a/arch/hexagon/kernel/syscalltab.c b/arch/hexagon/kernel/syscalltab.c index 7024b1ddc08a..ad27d1ae49a5 100644 --- a/arch/hexagon/kernel/syscalltab.c +++ b/arch/hexagon/kernel/syscalltab.c @@ -27,6 +27,13 @@ #undef __SYSCALL #define __SYSCALL(nr, call) [nr] = (call), +SYSCALL_DEFINE6(hexagon_fadvise64_64, int, fd, int, advice, + SC_ARG64(offset), SC_ARG64(len)) +{ + return ksys_fadvise64_64(fd, SC_VAL64(loff_t, offset), SC_VAL64(loff_t, len), advice); +} +#define sys_fadvise64_64 sys_hexagon_fadvise64_64 + void *sys_call_table[__NR_syscalls] = { #include }; diff --git a/arch/m68k/include/asm/mac_iop.h b/arch/m68k/include/asm/mac_iop.h index 73dae2abeba3..32f1c79c818f 100644 --- a/arch/m68k/include/asm/mac_iop.h +++ b/arch/m68k/include/asm/mac_iop.h @@ -159,6 +159,7 @@ extern void iop_complete_message(struct iop_msg *); extern void iop_upload_code(uint, __u8 *, uint, __u16); extern void iop_download_code(uint, __u8 *, uint, __u16); extern __u8 *iop_compare_code(uint, __u8 *, uint, __u16); +extern void iop_ism_irq_poll(uint); extern void iop_register_interrupts(void); diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S index 9a66657773be..417d8f0e8962 100644 --- a/arch/m68k/kernel/entry.S +++ b/arch/m68k/kernel/entry.S @@ -425,7 +425,9 @@ resume: movec %a0,%dfc /* restore status register */ - movew %a1@(TASK_THREAD+THREAD_SR),%sr + movew %a1@(TASK_THREAD+THREAD_SR),%d0 + oriw #0x0700,%d0 + movew %d0,%sr rts diff --git a/arch/m68k/mac/iop.c b/arch/m68k/mac/iop.c index 0b94f6672c5f..9c80ed858a1c 100644 --- a/arch/m68k/mac/iop.c +++ b/arch/m68k/mac/iop.c @@ -589,3 +589,12 @@ irqreturn_t iop_ism_irq(int irq, void *dev_id) } return IRQ_HANDLED; } + +void iop_ism_irq_poll(uint iop_num) +{ + unsigned long flags; + + local_irq_save(flags); + iop_ism_irq(0, (void *)iop_num); + local_irq_restore(flags); +} diff --git a/arch/m68k/mac/misc.c b/arch/m68k/mac/misc.c index 4956edaac926..d4cb7b50a6b5 100644 --- a/arch/m68k/mac/misc.c +++ b/arch/m68k/mac/misc.c @@ -483,41 +483,19 @@ void mac_poweroff(void) void mac_reset(void) { - if (macintosh_config->adb_type == MAC_ADB_II) { - unsigned long flags; - - /* need ROMBASE in booter */ - /* indeed, plus need to MAP THE ROM !! */ - - if (mac_bi_data.rombase == 0) - mac_bi_data.rombase = 0x40800000; - - /* works on some */ - rom_reset = (void *) (mac_bi_data.rombase + 0xa); - - if (macintosh_config->ident == MAC_MODEL_SE30) { - /* - * MSch: Machines known to crash on ROM reset ... - */ - } else { - local_irq_save(flags); - - rom_reset(); - - local_irq_restore(flags); - } #ifdef CONFIG_ADB_CUDA - } else if (macintosh_config->adb_type == MAC_ADB_EGRET || - macintosh_config->adb_type == MAC_ADB_CUDA) { + if (macintosh_config->adb_type == MAC_ADB_EGRET || + macintosh_config->adb_type == MAC_ADB_CUDA) { cuda_restart(); + } else #endif #ifdef CONFIG_ADB_PMU68K - } else if (macintosh_config->adb_type == MAC_ADB_PB1 - || macintosh_config->adb_type == MAC_ADB_PB2) { + if (macintosh_config->adb_type == MAC_ADB_PB1 || + macintosh_config->adb_type == MAC_ADB_PB2) { pmu_restart(); + } else #endif - } else if (CPU_IS_030) { - + if (CPU_IS_030) { /* 030-specific reset routine. The idea is general, but the * specific registers to reset are '030-specific. Until I * have a non-030 machine, I can't test anything else. @@ -564,6 +542,18 @@ void mac_reset(void) "jmp %/a0@\n\t" /* jump to the reset vector */ ".chip 68k" : : "r" (offset), "a" (rombase) : "a0"); + } else { + /* need ROMBASE in booter */ + /* indeed, plus need to MAP THE ROM !! */ + + if (mac_bi_data.rombase == 0) + mac_bi_data.rombase = 0x40800000; + + /* works on some */ + rom_reset = (void *)(mac_bi_data.rombase + 0xa); + + local_irq_disable(); + rom_reset(); } /* should never get here */ diff --git a/arch/mips/pci/ops-rc32434.c b/arch/mips/pci/ops-rc32434.c index 874ed6df9768..34b9323bdabb 100644 --- a/arch/mips/pci/ops-rc32434.c +++ b/arch/mips/pci/ops-rc32434.c @@ -112,8 +112,8 @@ retry: * gives them time to settle */ if (where == PCI_VENDOR_ID) { - if (ret == 0xffffffff || ret == 0x00000000 || - ret == 0x0000ffff || ret == 0xffff0000) { + if (*val == 0xffffffff || *val == 0x00000000 || + *val == 0x0000ffff || *val == 0xffff0000) { if (delay > 4) return 0; delay *= 2; diff --git a/arch/mips/pci/pcie-octeon.c b/arch/mips/pci/pcie-octeon.c old mode 100644 new mode 100755 index fd2887415bc8..051ab9a1141f --- a/arch/mips/pci/pcie-octeon.c +++ b/arch/mips/pci/pcie-octeon.c @@ -232,12 +232,18 @@ static inline uint64_t __cvmx_pcie_build_config_addr(int pcie_port, int bus, { union cvmx_pcie_address pcie_addr; union cvmx_pciercx_cfg006 pciercx_cfg006; + union cvmx_pciercx_cfg032 pciercx_cfg032; pciercx_cfg006.u32 = cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG006(pcie_port)); if ((bus <= pciercx_cfg006.s.pbnum) && (dev != 0)) return 0; + pciercx_cfg032.u32 = + cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG032(pcie_port)); + if ((pciercx_cfg032.s.dlla == 0) || (pciercx_cfg032.s.lt == 1)) + return 0; + pcie_addr.u64 = 0; pcie_addr.config.upper = 2; pcie_addr.config.io = 1; diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c index 7baa2265d439..e0d4b7d20f67 100644 --- a/arch/parisc/kernel/parisc_ksyms.c +++ b/arch/parisc/kernel/parisc_ksyms.c @@ -34,6 +34,7 @@ EXPORT_SYMBOL(memset); #include EXPORT_SYMBOL(__xchg8); EXPORT_SYMBOL(__xchg32); +EXPORT_SYMBOL(__cmpxchg_u8); EXPORT_SYMBOL(__cmpxchg_u32); EXPORT_SYMBOL(__cmpxchg_u64); #ifdef CONFIG_SMP diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h index 15cef59092c7..5f010bb8c26c 100644 --- a/arch/powerpc/include/asm/hvcall.h +++ b/arch/powerpc/include/asm/hvcall.h @@ -381,7 +381,7 @@ long plpar_hcall_norets(unsigned long opcode, ...); * Used for all but the craziest of phyp interfaces (see plpar_hcall9) */ #define PLPAR_HCALL_BUFSIZE 4 -long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...); +long plpar_hcall(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL_BUFSIZE], ...); /** * plpar_hcall_raw: - Make a hypervisor call without calculating hcall stats @@ -395,7 +395,7 @@ long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...); * plpar_hcall, but plpar_hcall_raw works in real mode and does not * calculate hypervisor call statistics. */ -long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...); +long plpar_hcall_raw(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL_BUFSIZE], ...); /** * plpar_hcall9: - Make a pseries hypervisor call with up to 9 return arguments @@ -406,8 +406,8 @@ long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...); * PLPAR_HCALL9_BUFSIZE to size the return argument buffer. */ #define PLPAR_HCALL9_BUFSIZE 9 -long plpar_hcall9(unsigned long opcode, unsigned long *retbuf, ...); -long plpar_hcall9_raw(unsigned long opcode, unsigned long *retbuf, ...); +long plpar_hcall9(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE], ...); +long plpar_hcall9_raw(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE], ...); struct hvcall_mpp_data { unsigned long entitled_mem; @@ -422,7 +422,7 @@ struct hvcall_mpp_data { unsigned long backing_mem; }; -int h_get_mpp(struct hvcall_mpp_data *); +long h_get_mpp(struct hvcall_mpp_data *mpp_data); struct hvcall_mpp_x_data { unsigned long coalesced_bytes; diff --git a/arch/powerpc/include/asm/io.h b/arch/powerpc/include/asm/io.h index e6d33eed8202..e057e0236843 100644 --- a/arch/powerpc/include/asm/io.h +++ b/arch/powerpc/include/asm/io.h @@ -537,12 +537,12 @@ __do_out_asm(_rec_outl, "stwbrx") #define __do_inw(port) _rec_inw(port) #define __do_inl(port) _rec_inl(port) #else /* CONFIG_PPC32 */ -#define __do_outb(val, port) writeb(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_outw(val, port) writew(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_outl(val, port) writel(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_inb(port) readb((PCI_IO_ADDR)_IO_BASE + port); -#define __do_inw(port) readw((PCI_IO_ADDR)_IO_BASE + port); -#define __do_inl(port) readl((PCI_IO_ADDR)_IO_BASE + port); +#define __do_outb(val, port) writeb(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_outw(val, port) writew(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_outl(val, port) writel(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_inb(port) readb((PCI_IO_ADDR)(_IO_BASE + port)); +#define __do_inw(port) readw((PCI_IO_ADDR)(_IO_BASE + port)); +#define __do_inl(port) readl((PCI_IO_ADDR)(_IO_BASE + port)); #endif /* !CONFIG_PPC32 */ #ifdef CONFIG_EEH @@ -558,12 +558,12 @@ __do_out_asm(_rec_outl, "stwbrx") #define __do_writesw(a, b, n) _outsw(PCI_FIX_ADDR(a),(b),(n)) #define __do_writesl(a, b, n) _outsl(PCI_FIX_ADDR(a),(b),(n)) -#define __do_insb(p, b, n) readsb((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_insw(p, b, n) readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_insl(p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) -#define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) -#define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) +#define __do_insb(p, b, n) readsb((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_insw(p, b, n) readsw((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_insl(p, b, n) readsl((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) +#define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) +#define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) #define __do_memset_io(addr, c, n) \ _memset_io(PCI_FIX_ADDR(addr), c, n) diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 215b14a373cb..ae75f53ad15e 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c @@ -937,10 +937,10 @@ out: * h_get_mpp * H_GET_MPP hcall returns info in 7 parms */ -int h_get_mpp(struct hvcall_mpp_data *mpp_data) +long h_get_mpp(struct hvcall_mpp_data *mpp_data) { - int rc; - unsigned long retbuf[PLPAR_HCALL9_BUFSIZE]; + unsigned long retbuf[PLPAR_HCALL9_BUFSIZE] = {0}; + long rc; rc = plpar_hcall9(H_GET_MPP, retbuf); diff --git a/arch/powerpc/platforms/pseries/lparcfg.c b/arch/powerpc/platforms/pseries/lparcfg.c index f40dabf7d163..9324be19a5e2 100644 --- a/arch/powerpc/platforms/pseries/lparcfg.c +++ b/arch/powerpc/platforms/pseries/lparcfg.c @@ -112,8 +112,8 @@ struct hvcall_ppp_data { */ static unsigned int h_get_ppp(struct hvcall_ppp_data *ppp_data) { - unsigned long rc; - unsigned long retbuf[PLPAR_HCALL9_BUFSIZE]; + unsigned long retbuf[PLPAR_HCALL9_BUFSIZE] = {0}; + long rc; rc = plpar_hcall9(H_GET_PPP, retbuf); @@ -159,7 +159,7 @@ static void parse_ppp_data(struct seq_file *m) struct hvcall_ppp_data ppp_data; struct device_node *root; const __be32 *perf_level; - int rc; + long rc; rc = h_get_ppp(&ppp_data); if (rc) diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c index d43d3d1b27ed..6a686e570b1d 100644 --- a/arch/powerpc/sysdev/fsl_msi.c +++ b/arch/powerpc/sysdev/fsl_msi.c @@ -576,10 +576,12 @@ static const struct fsl_msi_feature ipic_msi_feature = { .msiir_offset = 0x38, }; +#ifdef CONFIG_EPAPR_PARAVIRT static const struct fsl_msi_feature vmpic_msi_feature = { .fsl_pic_ip = FSL_PIC_IP_VMPIC, .msiir_offset = 0, }; +#endif static const struct of_device_id fsl_of_msi_ids[] = { { diff --git a/arch/sh/kernel/kprobes.c b/arch/sh/kernel/kprobes.c index 52a5e11247d1..a65502940b01 100644 --- a/arch/sh/kernel/kprobes.c +++ b/arch/sh/kernel/kprobes.c @@ -47,17 +47,12 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p) if (OPCODE_RTE(opcode)) return -EFAULT; /* Bad breakpoint */ + memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); p->opcode = opcode; return 0; } -void __kprobes arch_copy_kprobe(struct kprobe *p) -{ - memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); - p->opcode = *p->addr; -} - void __kprobes arch_arm_kprobe(struct kprobe *p) { *p->addr = BREAKPOINT_INSTRUCTION; diff --git a/arch/sh/lib/checksum.S b/arch/sh/lib/checksum.S index 356c8ec92893..1fc361b64119 100644 --- a/arch/sh/lib/checksum.S +++ b/arch/sh/lib/checksum.S @@ -36,7 +36,8 @@ */ /* - * asmlinkage __wsum csum_partial(const void *buf, int len, __wsum sum); + * unsigned int csum_partial(const unsigned char *buf, int len, + * unsigned int sum); */ .text @@ -48,31 +49,11 @@ ENTRY(csum_partial) * Fortunately, it is easy to convert 2-byte alignment to 4-byte * alignment for the unrolled loop. */ + mov r5, r1 mov r4, r0 - tst #3, r0 ! Check alignment. - bt/s 2f ! Jump if alignment is ok. - mov r4, r7 ! Keep a copy to check for alignment + tst #2, r0 ! Check alignment. + bt 2f ! Jump if alignment is ok. ! - tst #1, r0 ! Check alignment. - bt 21f ! Jump if alignment is boundary of 2bytes. - - ! buf is odd - tst r5, r5 - add #-1, r5 - bt 9f - mov.b @r4+, r0 - extu.b r0, r0 - addc r0, r6 ! t=0 from previous tst - mov r6, r0 - shll8 r6 - shlr16 r0 - shlr8 r0 - or r0, r6 - mov r4, r0 - tst #2, r0 - bt 2f -21: - ! buf is 2 byte aligned (len could be 0) add #-2, r5 ! Alignment uses up two bytes. cmp/pz r5 ! bt/s 1f ! Jump if we had at least two bytes. @@ -80,17 +61,16 @@ ENTRY(csum_partial) bra 6f add #2, r5 ! r5 was < 2. Deal with it. 1: + mov r5, r1 ! Save new len for later use. mov.w @r4+, r0 extu.w r0, r0 addc r0, r6 bf 2f add #1, r6 2: - ! buf is 4 byte aligned (len could be 0) - mov r5, r1 mov #-5, r0 - shld r0, r1 - tst r1, r1 + shld r0, r5 + tst r5, r5 bt/s 4f ! if it's =0, go to 4f clrt .align 2 @@ -112,31 +92,30 @@ ENTRY(csum_partial) addc r0, r6 addc r2, r6 movt r0 - dt r1 + dt r5 bf/s 3b cmp/eq #1, r0 - ! here, we know r1==0 - addc r1, r6 ! add carry to r6 + ! here, we know r5==0 + addc r5, r6 ! add carry to r6 4: - mov r5, r0 + mov r1, r0 and #0x1c, r0 tst r0, r0 - bt 6f - ! 4 bytes or more remaining - mov r0, r1 - shlr2 r1 + bt/s 6f + mov r0, r5 + shlr2 r5 mov #0, r2 5: addc r2, r6 mov.l @r4+, r2 movt r0 - dt r1 + dt r5 bf/s 5b cmp/eq #1, r0 addc r2, r6 - addc r1, r6 ! r1==0 here, so it means add carry-bit + addc r5, r6 ! r5==0 here, so it means add carry-bit 6: - ! 3 bytes or less remaining + mov r1, r5 mov #3, r0 and r0, r5 tst r5, r5 @@ -162,16 +141,6 @@ ENTRY(csum_partial) mov #0, r0 addc r0, r6 9: - ! Check if the buffer was misaligned, if so realign sum - mov r7, r0 - tst #1, r0 - bt 10f - mov r6, r0 - shll8 r6 - shlr16 r0 - shlr8 r0 - or r0, r6 -10: rts mov r6, r0 diff --git a/arch/sparc/include/asm/smp_64.h b/arch/sparc/include/asm/smp_64.h index e75783b6abc4..16ab904616a0 100644 --- a/arch/sparc/include/asm/smp_64.h +++ b/arch/sparc/include/asm/smp_64.h @@ -47,7 +47,6 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask); int hard_smp_processor_id(void); #define raw_smp_processor_id() (current_thread_info()->cpu) -void smp_fill_in_cpu_possible_map(void); void smp_fill_in_sib_core_maps(void); void cpu_play_dead(void); @@ -77,7 +76,6 @@ void __cpu_die(unsigned int cpu); #define smp_fill_in_sib_core_maps() do { } while (0) #define smp_fetch_global_regs() do { } while (0) #define smp_fetch_global_pmu() do { } while (0) -#define smp_fill_in_cpu_possible_map() do { } while (0) #define smp_init_cpu_poke() do { } while (0) #define scheduler_poke() do { } while (0) diff --git a/arch/sparc/include/uapi/asm/termbits.h b/arch/sparc/include/uapi/asm/termbits.h index ce5ad5d0f105..0614e179bccc 100644 --- a/arch/sparc/include/uapi/asm/termbits.h +++ b/arch/sparc/include/uapi/asm/termbits.h @@ -13,16 +13,6 @@ typedef unsigned int tcflag_t; typedef unsigned long tcflag_t; #endif -#define NCC 8 -struct termio { - unsigned short c_iflag; /* input mode flags */ - unsigned short c_oflag; /* output mode flags */ - unsigned short c_cflag; /* control mode flags */ - unsigned short c_lflag; /* local mode flags */ - unsigned char c_line; /* line discipline */ - unsigned char c_cc[NCC]; /* control characters */ -}; - #define NCCS 17 struct termios { tcflag_t c_iflag; /* input mode flags */ diff --git a/arch/sparc/include/uapi/asm/termios.h b/arch/sparc/include/uapi/asm/termios.h index ee86f4093d83..cceb32260881 100644 --- a/arch/sparc/include/uapi/asm/termios.h +++ b/arch/sparc/include/uapi/asm/termios.h @@ -40,5 +40,14 @@ struct winsize { unsigned short ws_ypixel; }; +#define NCC 8 +struct termio { + unsigned short c_iflag; /* input mode flags */ + unsigned short c_oflag; /* output mode flags */ + unsigned short c_cflag; /* control mode flags */ + unsigned short c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCC]; /* control characters */ +}; #endif /* _UAPI_SPARC_TERMIOS_H */ diff --git a/arch/sparc/kernel/prom_64.c b/arch/sparc/kernel/prom_64.c index baeaeed64993..4bc082187b0e 100644 --- a/arch/sparc/kernel/prom_64.c +++ b/arch/sparc/kernel/prom_64.c @@ -479,7 +479,9 @@ static void *record_one_cpu(struct device_node *dp, int cpuid, int arg) ncpus_probed++; #ifdef CONFIG_SMP set_cpu_present(cpuid, true); - set_cpu_possible(cpuid, true); + + if (num_possible_cpus() < nr_cpu_ids) + set_cpu_possible(cpuid, true); #endif return NULL; } diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c index 34f7a533a74f..8210b499f42d 100644 --- a/arch/sparc/kernel/setup_64.c +++ b/arch/sparc/kernel/setup_64.c @@ -688,7 +688,6 @@ void __init setup_arch(char **cmdline_p) paging_init(); init_sparc64_elf_hwcap(); - smp_fill_in_cpu_possible_map(); /* * Once the OF device tree and MDESC have been setup and nr_cpus has * been parsed, we know the list of possible cpus. Therefore we can diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index 98825058e1df..4d8ffc11d05f 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c @@ -1213,20 +1213,6 @@ void __init smp_setup_processor_id(void) xcall_deliver_impl = hypervisor_xcall_deliver; } -void __init smp_fill_in_cpu_possible_map(void) -{ - int possible_cpus = num_possible_cpus(); - int i; - - if (possible_cpus > nr_cpu_ids) - possible_cpus = nr_cpu_ids; - - for (i = 0; i < possible_cpus; i++) - set_cpu_possible(i, true); - for (; i < NR_CPUS; i++) - set_cpu_possible(i, false); -} - void smp_fill_in_sib_core_maps(void) { unsigned int i; diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index 7e524efed584..71e26488dfde 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c @@ -683,24 +683,26 @@ void register_winch_irq(int fd, int tty_fd, int pid, struct tty_port *port, goto cleanup; } - *winch = ((struct winch) { .list = LIST_HEAD_INIT(winch->list), - .fd = fd, + *winch = ((struct winch) { .fd = fd, .tty_fd = tty_fd, .pid = pid, .port = port, .stack = stack }); + spin_lock(&winch_handler_lock); + list_add(&winch->list, &winch_handlers); + spin_unlock(&winch_handler_lock); + if (um_request_irq(WINCH_IRQ, fd, IRQ_READ, winch_interrupt, IRQF_SHARED, "winch", winch) < 0) { printk(KERN_ERR "register_winch_irq - failed to register " "IRQ\n"); + spin_lock(&winch_handler_lock); + list_del(&winch->list); + spin_unlock(&winch_handler_lock); goto out_free; } - spin_lock(&winch_handler_lock); - list_add(&winch->list, &winch_handlers); - spin_unlock(&winch_handler_lock); - return; out_free: diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index b55fe9bf5d3e..0a16ab92c252 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c @@ -1147,7 +1147,7 @@ static int __init ubd_init(void) if (irq_req_buffer == NULL) { printk(KERN_ERR "Failed to initialize ubd buffering\n"); - return -1; + return -ENOMEM; } io_req_buffer = kmalloc( sizeof(struct io_thread_req *) * UBD_REQ_BUFFER_SIZE, @@ -1158,7 +1158,7 @@ static int __init ubd_init(void) if (io_req_buffer == NULL) { printk(KERN_ERR "Failed to initialize ubd buffering\n"); - return -1; + return -ENOMEM; } platform_driver_register(&ubd_driver); mutex_lock(&ubd_lock); diff --git a/arch/um/include/asm/mmu.h b/arch/um/include/asm/mmu.h index da705448590f..21fbe5454dbd 100644 --- a/arch/um/include/asm/mmu.h +++ b/arch/um/include/asm/mmu.h @@ -15,8 +15,6 @@ typedef struct mm_context { struct page *stub_pages[2]; } mm_context_t; -extern void __switch_mm(struct mm_id * mm_idp); - /* Avoid tangled inclusion with asm/ldt.h */ extern long init_new_ldt(struct mm_context *to_mm, struct mm_context *from_mm); extern void free_ldt(struct mm_context *mm); diff --git a/arch/um/include/shared/skas/mm_id.h b/arch/um/include/shared/skas/mm_id.h index 48dd0989ddaa..169482ec95f9 100644 --- a/arch/um/include/shared/skas/mm_id.h +++ b/arch/um/include/shared/skas/mm_id.h @@ -14,4 +14,6 @@ struct mm_id { unsigned long stack; }; +void __switch_mm(struct mm_id *mm_idp); + #endif diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug index bec0952c5595..46906a01f815 100644 --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug @@ -384,6 +384,7 @@ config UNWINDER_ORC config UNWINDER_FRAME_POINTER bool "Frame pointer unwinder" + select ARCH_WANT_FRAME_POINTERS select FRAME_POINTER ---help--- This option enables the frame pointer unwinder for unwinding kernel @@ -411,8 +412,4 @@ config UNWINDER_GUESS endchoice -config FRAME_POINTER - depends on !UNWINDER_ORC && !UNWINDER_GUESS - bool - endmenu diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h index c373e44049b1..ec51eee2fe3f 100644 --- a/arch/x86/include/asm/kvm_para.h +++ b/arch/x86/include/asm/kvm_para.h @@ -6,7 +6,6 @@ #include #include -extern void kvmclock_init(void); extern int kvm_register_clock(char *txt); #ifdef CONFIG_KVM_GUEST @@ -86,13 +85,14 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1, } #ifdef CONFIG_KVM_GUEST +void kvmclock_init(void); +void kvmclock_disable(void); bool kvm_para_available(void); unsigned int kvm_arch_para_features(void); void __init kvm_guest_init(void); void kvm_async_pf_task_wait(u32 token, int interrupt_kernel); void kvm_async_pf_task_wake(u32 token); u32 kvm_read_and_reset_pf_reason(void); -extern void kvm_disable_steal_time(void); #ifdef CONFIG_PARAVIRT_SPINLOCKS void __init kvm_spinlock_init(void); @@ -122,10 +122,6 @@ static inline u32 kvm_read_and_reset_pf_reason(void) return 0; } -static inline void kvm_disable_steal_time(void) -{ - return; -} #endif #endif /* _ASM_X86_KVM_PARA_H */ diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c index c88e0b127810..975e88955f87 100644 --- a/arch/x86/kernel/amd_nb.c +++ b/arch/x86/kernel/amd_nb.c @@ -128,7 +128,14 @@ out: int amd_smn_read(u16 node, u32 address, u32 *value) { - return __amd_smn_rw(node, address, value, false); + int err = __amd_smn_rw(node, address, value, false); + + if (PCI_POSSIBLE_ERROR(*value)) { + err = -ENODEV; + *value = 0; + } + + return err; } EXPORT_SYMBOL_GPL(amd_smn_read); diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 5853eb50138e..c4c885b172d0 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -46,6 +47,7 @@ #include #include #include +#include static int kvmapf = 1; @@ -376,6 +378,14 @@ static void kvm_pv_disable_apf(void) smp_processor_id()); } +static void kvm_disable_steal_time(void) +{ + if (!has_steal_clock) + return; + + wrmsr(MSR_KVM_STEAL_TIME, 0, 0); +} + static void kvm_pv_guest_cpu_reboot(void *unused) { /* @@ -418,12 +428,25 @@ static u64 kvm_steal_clock(int cpu) return steal; } -void kvm_disable_steal_time(void) +static void kvm_guest_cpu_offline(bool shutdown) { - if (!has_steal_clock) - return; + kvm_disable_steal_time(); + if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) + wrmsrl(MSR_KVM_PV_EOI_EN, 0); + kvm_pv_disable_apf(); + if (!shutdown) + apf_task_wake_all(); + kvmclock_disable(); +} - wrmsr(MSR_KVM_STEAL_TIME, 0, 0); +static int kvm_cpu_online(unsigned int cpu) +{ + unsigned long flags; + + local_irq_save(flags); + kvm_guest_cpu_init(); + local_irq_restore(flags); + return 0; } #ifdef CONFIG_SMP @@ -434,37 +457,54 @@ static void __init kvm_smp_prepare_boot_cpu(void) kvm_spinlock_init(); } -static void kvm_guest_cpu_offline(void) -{ - kvm_disable_steal_time(); - if (kvm_para_has_feature(KVM_FEATURE_PV_EOI)) - wrmsrl(MSR_KVM_PV_EOI_EN, 0); - kvm_pv_disable_apf(); - apf_task_wake_all(); -} - -static int kvm_cpu_online(unsigned int cpu) -{ - local_irq_disable(); - kvm_guest_cpu_init(); - local_irq_enable(); - return 0; -} - static int kvm_cpu_down_prepare(unsigned int cpu) { - local_irq_disable(); - kvm_guest_cpu_offline(); - local_irq_enable(); + unsigned long flags; + + local_irq_save(flags); + kvm_guest_cpu_offline(false); + local_irq_restore(flags); return 0; } + #endif +static int kvm_suspend(void) +{ + kvm_guest_cpu_offline(false); + + return 0; +} + +static void kvm_resume(void) +{ + kvm_cpu_online(raw_smp_processor_id()); +} + +static struct syscore_ops kvm_syscore_ops = { + .suspend = kvm_suspend, + .resume = kvm_resume, +}; + static void __init kvm_apf_trap_init(void) { update_intr_gate(X86_TRAP_PF, async_page_fault); } +/* + * After a PV feature is registered, the host will keep writing to the + * registered memory location. If the guest happens to shutdown, this memory + * won't be valid. In cases like kexec, in which you install a new kernel, this + * means a random memory location will be kept being written. + */ +#ifdef CONFIG_KEXEC_CORE +static void kvm_crash_shutdown(struct pt_regs *regs) +{ + kvm_guest_cpu_offline(true); + native_machine_crash_shutdown(regs); +} +#endif + void __init kvm_guest_init(void) { int i; @@ -499,6 +539,12 @@ void __init kvm_guest_init(void) kvm_guest_cpu_init(); #endif +#ifdef CONFIG_KEXEC_CORE + machine_ops.crash_shutdown = kvm_crash_shutdown; +#endif + + register_syscore_ops(&kvm_syscore_ops); + /* * Hard lockup detection is enabled by default. Disable it, as guests * can get false positives too easily, for example if the host is diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 08806d64eacd..9b8524cb0346 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c @@ -28,7 +28,6 @@ #include #include -#include #include static int kvmclock __ro_after_init = 1; @@ -220,28 +219,9 @@ static void kvm_setup_secondary_clock(void) } #endif -/* - * After the clock is registered, the host will keep writing to the - * registered memory location. If the guest happens to shutdown, this memory - * won't be valid. In cases like kexec, in which you install a new kernel, this - * means a random memory location will be kept being written. So before any - * kind of shutdown from our side, we unregister the clock by writing anything - * that does not have the 'enable' bit set in the msr - */ -#ifdef CONFIG_KEXEC_CORE -static void kvm_crash_shutdown(struct pt_regs *regs) +void kvmclock_disable(void) { native_write_msr(msr_kvm_system_time, 0, 0); - kvm_disable_steal_time(); - native_machine_crash_shutdown(regs); -} -#endif - -static void kvm_shutdown(void) -{ - native_write_msr(msr_kvm_system_time, 0, 0); - kvm_disable_steal_time(); - native_machine_shutdown(); } void __init kvmclock_init(void) @@ -297,10 +277,6 @@ void __init kvmclock_init(void) #endif x86_platform.save_sched_clock_state = kvm_save_sched_clock_state; x86_platform.restore_sched_clock_state = kvm_restore_sched_clock_state; - machine_ops.shutdown = kvm_shutdown; -#ifdef CONFIG_KEXEC_CORE - machine_ops.crash_shutdown = kvm_crash_shutdown; -#endif kvm_get_preset_lpj(); clocksource_register_hz(&kvm_clock, NSEC_PER_SEC); pv_info.name = "KVM"; diff --git a/arch/x86/kernel/time.c b/arch/x86/kernel/time.c index 12f90f17f4f6..2cabfeece1a8 100644 --- a/arch/x86/kernel/time.c +++ b/arch/x86/kernel/time.c @@ -26,26 +26,7 @@ unsigned long profile_pc(struct pt_regs *regs) { - unsigned long pc = instruction_pointer(regs); - - if (!user_mode(regs) && in_lock_functions(pc)) { -#ifdef CONFIG_FRAME_POINTER - return *(unsigned long *)(regs->bp + sizeof(long)); -#else - unsigned long *sp = - (unsigned long *)kernel_stack_pointer(regs); - /* - * Return address is either directly at stack pointer - * or above a saved flags. Eflags has bits 22-31 zero, - * kernel addresses don't. - */ - if (sp[0] >> 22) - return sp[0]; - if (sp[1] >> 22) - return sp[1]; -#endif - } - return pc; + return instruction_pointer(regs); } EXPORT_SYMBOL(profile_pc); diff --git a/arch/x86/lib/x86-opcode-map.txt b/arch/x86/lib/x86-opcode-map.txt index 5cb9f009f2be..996a3a250026 100644 --- a/arch/x86/lib/x86-opcode-map.txt +++ b/arch/x86/lib/x86-opcode-map.txt @@ -148,7 +148,7 @@ AVXcode: 65: SEG=GS (Prefix) 66: Operand-Size (Prefix) 67: Address-Size (Prefix) -68: PUSH Iz (d64) +68: PUSH Iz 69: IMUL Gv,Ev,Iz 6a: PUSH Ib (d64) 6b: IMUL Gv,Ev,Ib diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index 2703ff6dde42..bb15d0a94f70 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -672,6 +672,15 @@ static void walk_relocs(int (*process)(struct section *sec, Elf_Rel *rel, if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) { continue; } + + /* + * Do not perform relocations in .notes sections; any + * values there are meant for pre-boot consumption (e.g. + * startup_xen). + */ + if (sec_applies->shdr.sh_type == SHT_NOTE) + continue; + sh_symtab = sec_symtab->symtab; sym_strtab = sec_symtab->link->strtab; for (j = 0; j < sec->shdr.sh_size/sizeof(Elf_Rel); j++) { diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c index eea987f5a429..0c9db7ec5331 100644 --- a/crypto/algif_aead.c +++ b/crypto/algif_aead.c @@ -568,12 +568,6 @@ static int aead_accept_parent_nokey(void *private, struct sock *sk) INIT_LIST_HEAD(&ctx->tsgl_list); ctx->len = len; - ctx->used = 0; - atomic_set(&ctx->rcvused, 0); - ctx->more = 0; - ctx->merge = 0; - ctx->enc = 0; - ctx->aead_assoclen = 0; af_alg_init_completion(&ctx->completion); ask->private = ctx; diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c index 8ce6f8cee0d0..0c5d64d205f9 100644 --- a/crypto/algif_skcipher.c +++ b/crypto/algif_skcipher.c @@ -371,6 +371,7 @@ static int skcipher_accept_parent_nokey(void *private, struct sock *sk) ctx = sock_kmalloc(sk, len, GFP_KERNEL); if (!ctx) return -ENOMEM; + memset(ctx, 0, len); ctx->iv = sock_kmalloc(sk, crypto_skcipher_ivsize(skcipher), GFP_KERNEL); @@ -378,16 +379,10 @@ static int skcipher_accept_parent_nokey(void *private, struct sock *sk) sock_kfree_s(sk, ctx, len); return -ENOMEM; } - memset(ctx->iv, 0, crypto_skcipher_ivsize(skcipher)); INIT_LIST_HEAD(&ctx->tsgl_list); ctx->len = len; - ctx->used = 0; - atomic_set(&ctx->rcvused, 0); - ctx->more = 0; - ctx->merge = 0; - ctx->enc = 0; af_alg_init_completion(&ctx->completion); ask->private = ctx; diff --git a/drivers/acpi/acpica/Makefile b/drivers/acpi/acpica/Makefile index 1e8e4e7a29cb..8410d09e0cbc 100644 --- a/drivers/acpi/acpica/Makefile +++ b/drivers/acpi/acpica/Makefile @@ -5,6 +5,7 @@ ccflags-y := -D_LINUX -DBUILDING_ACPICA ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT +CFLAGS_tbfind.o += $(call cc-disable-warning, stringop-truncation) # use acpi.o to put all files here into acpi.o modparam namespace obj-y += acpi.o diff --git a/drivers/acpi/acpica/exregion.c b/drivers/acpi/acpica/exregion.c index 7bcc9d809b7e..852a35b80a68 100644 --- a/drivers/acpi/acpica/exregion.c +++ b/drivers/acpi/acpica/exregion.c @@ -77,7 +77,6 @@ acpi_ex_system_memory_space_handler(u32 function, struct acpi_mem_space_context *mem_info = region_context; u32 length; acpi_size map_length; - acpi_size page_boundary_map_length; #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED u32 remainder; #endif @@ -154,26 +153,8 @@ acpi_ex_system_memory_space_handler(u32 function, map_length = (acpi_size) ((mem_info->address + mem_info->length) - address); - /* - * If mapping the entire remaining portion of the region will cross - * a page boundary, just map up to the page boundary, do not cross. - * On some systems, crossing a page boundary while mapping regions - * can cause warnings if the pages have different attributes - * due to resource management. - * - * This has the added benefit of constraining a single mapping to - * one page, which is similar to the original code that used a 4k - * maximum window. - */ - page_boundary_map_length = (acpi_size) - (ACPI_ROUND_UP(address, ACPI_DEFAULT_PAGE_SIZE) - address); - if (page_boundary_map_length == 0) { - page_boundary_map_length = ACPI_DEFAULT_PAGE_SIZE; - } - - if (map_length > page_boundary_map_length) { - map_length = page_boundary_map_length; - } + if (map_length > ACPI_DEFAULT_PAGE_SIZE) + map_length = ACPI_DEFAULT_PAGE_SIZE; /* Create a new mapping starting at the address given */ diff --git a/drivers/android/binder.c b/drivers/android/binder.c index ff0c5aa863e4..7fb70fa40fea 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -515,7 +515,7 @@ struct binder_proc { struct list_head todo; struct binder_stats stats; struct list_head delivered_death; - int max_threads; + u32 max_threads; int requested_threads; int requested_threads_started; atomic_t tmp_ref; @@ -5001,7 +5001,7 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) goto err; break; case BINDER_SET_MAX_THREADS: { - int max_threads; + u32 max_threads; if (copy_from_user(&max_threads, ubuf, sizeof(max_threads))) { diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c index c72d3cf903f1..9d898fc8e3a7 100644 --- a/drivers/ata/pata_legacy.c +++ b/drivers/ata/pata_legacy.c @@ -128,8 +128,6 @@ static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 }; static struct legacy_probe probe_list[NR_HOST]; static struct legacy_data legacy_data[NR_HOST]; static struct ata_host *legacy_host[NR_HOST]; -static int nr_legacy_host; - static int probe_all; /* Set to check all ISA port ranges */ static int ht6560a; /* HT 6560A on primary 1, second 2, both 3 */ @@ -1253,9 +1251,11 @@ static __exit void legacy_exit(void) { int i; - for (i = 0; i < nr_legacy_host; i++) { + for (i = 0; i < NR_HOST; i++) { struct legacy_data *ld = &legacy_data[i]; - ata_host_detach(legacy_host[i]); + + if (legacy_host[i]) + ata_host_detach(legacy_host[i]); platform_device_unregister(ld->platform_dev); } } diff --git a/drivers/base/core.c b/drivers/base/core.c index 8499f536a9e2..110da991653a 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -1004,8 +1004,11 @@ static ssize_t uevent_show(struct device *dev, struct device_attribute *attr, if (!env) return -ENOMEM; + /* Synchronize with really_probe() */ + device_lock(dev); /* let the kset specific function add its keys */ retval = kset->uevent_ops->uevent(kset, &dev->kobj, env); + device_unlock(dev); if (retval) goto out; diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c index b499e72b2847..a0ff9ecaf771 100644 --- a/drivers/block/null_blk.c +++ b/drivers/block/null_blk.c @@ -2053,10 +2053,13 @@ static void __exit null_exit(void) blk_mq_free_tag_set(&tag_set); kmem_cache_destroy(ppa_cache); + + mutex_destroy(&lock); } module_init(null_init); module_exit(null_exit); MODULE_AUTHOR("Jens Axboe "); +MODULE_DESCRIPTION("multi queue aware block test driver"); MODULE_LICENSE("GPL"); diff --git a/drivers/char/ppdev.c b/drivers/char/ppdev.c index 0023bde4d4ff..a673c727a97d 100644 --- a/drivers/char/ppdev.c +++ b/drivers/char/ppdev.c @@ -300,28 +300,35 @@ static int register_device(int minor, struct pp_struct *pp) if (!port) { pr_warn("%s: no associated port!\n", name); rc = -ENXIO; - goto err; + goto err_free_name; } index = ida_simple_get(&ida_index, 0, 0, GFP_KERNEL); + if (index < 0) { + pr_warn("%s: failed to get index!\n", name); + rc = index; + goto err_put_port; + } + memset(&ppdev_cb, 0, sizeof(ppdev_cb)); ppdev_cb.irq_func = pp_irq; ppdev_cb.flags = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0; ppdev_cb.private = pp; pdev = parport_register_dev_model(port, name, &ppdev_cb, index); - parport_put_port(port); if (!pdev) { pr_warn("%s: failed to register device!\n", name); rc = -ENXIO; ida_simple_remove(&ida_index, index); - goto err; + goto err_put_port; } pp->pdev = pdev; pp->index = index; dev_dbg(&pdev->dev, "registered pardevice\n"); -err: +err_put_port: + parport_put_port(port); +err_free_name: kfree(name); return rc; } diff --git a/drivers/crypto/bcm/spu2.c b/drivers/crypto/bcm/spu2.c index bf7ac621c591..0f6023347cc8 100644 --- a/drivers/crypto/bcm/spu2.c +++ b/drivers/crypto/bcm/spu2.c @@ -506,7 +506,7 @@ static void spu2_dump_omd(u8 *omd, u16 hash_key_len, u16 ciph_key_len, if (hash_iv_len) { packet_log(" Hash IV Length %u bytes\n", hash_iv_len); packet_dump(" hash IV: ", ptr, hash_iv_len); - ptr += ciph_key_len; + ptr += hash_iv_len; } if (ciph_iv_len) { diff --git a/drivers/crypto/ccp/sp-platform.c b/drivers/crypto/ccp/sp-platform.c index 71734f254fd1..8494f7d8912c 100644 --- a/drivers/crypto/ccp/sp-platform.c +++ b/drivers/crypto/ccp/sp-platform.c @@ -33,30 +33,47 @@ struct sp_platform { unsigned int irq_count; }; -static const struct acpi_device_id sp_acpi_match[]; -static const struct of_device_id sp_of_match[]; +static const struct sp_dev_vdata dev_vdata[] = { + { + .bar = 0, +#ifdef CONFIG_CRYPTO_DEV_SP_CCP + .ccp_vdata = &ccpv3_platform, +#endif + }, +}; + +static const struct acpi_device_id sp_acpi_match[] = { + { "AMDI0C00", (kernel_ulong_t)&dev_vdata[0] }, + { }, +}; +MODULE_DEVICE_TABLE(acpi, sp_acpi_match); + +static const struct of_device_id sp_of_match[] = { + { .compatible = "amd,ccp-seattle-v1a", + .data = (const void *)&dev_vdata[0] }, + { }, +}; +MODULE_DEVICE_TABLE(of, sp_of_match); static struct sp_dev_vdata *sp_get_of_version(struct platform_device *pdev) { -#ifdef CONFIG_OF const struct of_device_id *match; match = of_match_node(sp_of_match, pdev->dev.of_node); if (match && match->data) return (struct sp_dev_vdata *)match->data; -#endif + return NULL; } static struct sp_dev_vdata *sp_get_acpi_version(struct platform_device *pdev) { -#ifdef CONFIG_ACPI const struct acpi_device_id *match; match = acpi_match_device(sp_acpi_match, &pdev->dev); if (match && match->driver_data) return (struct sp_dev_vdata *)match->driver_data; -#endif + return NULL; } @@ -201,41 +218,11 @@ static int sp_platform_resume(struct platform_device *pdev) } #endif -static const struct sp_dev_vdata dev_vdata[] = { - { - .bar = 0, -#ifdef CONFIG_CRYPTO_DEV_SP_CCP - .ccp_vdata = &ccpv3_platform, -#endif - }, -}; - -#ifdef CONFIG_ACPI -static const struct acpi_device_id sp_acpi_match[] = { - { "AMDI0C00", (kernel_ulong_t)&dev_vdata[0] }, - { }, -}; -MODULE_DEVICE_TABLE(acpi, sp_acpi_match); -#endif - -#ifdef CONFIG_OF -static const struct of_device_id sp_of_match[] = { - { .compatible = "amd,ccp-seattle-v1a", - .data = (const void *)&dev_vdata[0] }, - { }, -}; -MODULE_DEVICE_TABLE(of, sp_of_match); -#endif - static struct platform_driver sp_platform_driver = { .driver = { .name = "ccp", -#ifdef CONFIG_ACPI .acpi_match_table = sp_acpi_match, -#endif -#ifdef CONFIG_OF .of_match_table = sp_of_match, -#endif }, .probe = sp_platform_probe, .remove = sp_platform_remove, diff --git a/drivers/crypto/qat/qat_common/adf_aer.c b/drivers/crypto/qat/qat_common/adf_aer.c index b41c29abb140..e3f85e037153 100644 --- a/drivers/crypto/qat/qat_common/adf_aer.c +++ b/drivers/crypto/qat/qat_common/adf_aer.c @@ -139,8 +139,7 @@ static void adf_device_reset_worker(struct work_struct *work) if (adf_dev_init(accel_dev) || adf_dev_start(accel_dev)) { /* The device hanged and we can't restart it so stop here */ dev_err(&GET_DEV(accel_dev), "Restart device failed\n"); - if (reset_data->mode == ADF_DEV_RESET_ASYNC || - completion_done(&reset_data->compl)) + if (reset_data->mode == ADF_DEV_RESET_ASYNC) kfree(reset_data); WARN(1, "QAT: device restart failed. Device is unusable\n"); return; @@ -148,16 +147,8 @@ static void adf_device_reset_worker(struct work_struct *work) adf_dev_restarted_notify(accel_dev); clear_bit(ADF_STATUS_RESTARTING, &accel_dev->status); - /* - * The dev is back alive. Notify the caller if in sync mode - * - * If device restart will take a more time than expected, - * the schedule_reset() function can timeout and exit. This can be - * detected by calling the completion_done() function. In this case - * the reset_data structure needs to be freed here. - */ - if (reset_data->mode == ADF_DEV_RESET_ASYNC || - completion_done(&reset_data->compl)) + /* The dev is back alive. Notify the caller if in sync mode */ + if (reset_data->mode == ADF_DEV_RESET_ASYNC) kfree(reset_data); else complete(&reset_data->compl); @@ -192,10 +183,10 @@ static int adf_dev_aer_schedule_reset(struct adf_accel_dev *accel_dev, if (!timeout) { dev_err(&GET_DEV(accel_dev), "Reset device timeout expired\n"); + cancel_work_sync(&reset_data->reset_work); ret = -EFAULT; - } else { - kfree(reset_data); } + kfree(reset_data); return ret; } return 0; diff --git a/drivers/dma-buf/sync_debug.c b/drivers/dma-buf/sync_debug.c index c4c8ecb24aa9..cfe31e52d78d 100644 --- a/drivers/dma-buf/sync_debug.c +++ b/drivers/dma-buf/sync_debug.c @@ -119,12 +119,12 @@ static void sync_print_obj(struct seq_file *s, struct sync_timeline *obj) seq_printf(s, "%s: %d\n", obj->name, obj->value); - spin_lock_irq(&obj->lock); + spin_lock(&obj->lock); /* Caller already disabled IRQ. */ list_for_each(pos, &obj->pt_list) { struct sync_pt *pt = container_of(pos, struct sync_pt, link); sync_print_fence(s, &pt->base, false); } - spin_unlock_irq(&obj->lock); + spin_unlock(&obj->lock); } static void sync_print_sync_file(struct seq_file *s, diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c index 9887f2a14aa9..0cc03cd3ef8f 100644 --- a/drivers/dma/dma-axi-dmac.c +++ b/drivers/dma/dma-axi-dmac.c @@ -675,8 +675,8 @@ static int axi_dmac_remove(struct platform_device *pdev) { struct axi_dmac *dmac = platform_get_drvdata(pdev); - of_dma_controller_free(pdev->dev.of_node); free_irq(dmac->irq, dmac); + of_dma_controller_free(pdev->dev.of_node); tasklet_kill(&dmac->chan.vchan.task); dma_async_device_unregister(&dmac->dma_dev); clk_disable_unprepare(dmac->clk); diff --git a/drivers/dma/idma64.c b/drivers/dma/idma64.c index 0e0737ce54c8..bd32286a9db3 100644 --- a/drivers/dma/idma64.c +++ b/drivers/dma/idma64.c @@ -595,7 +595,9 @@ static int idma64_probe(struct idma64_chip *chip) idma64->dma.dev = chip->sysdev; - dma_set_max_seg_size(idma64->dma.dev, IDMA64C_CTLH_BLOCK_TS_MASK); + ret = dma_set_max_seg_size(idma64->dma.dev, IDMA64C_CTLH_BLOCK_TS_MASK); + if (ret) + return ret; ret = dma_async_device_register(&idma64->dma); if (ret) diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c index 9103a0425f75..88bd06704ecc 100644 --- a/drivers/dma/ioat/init.c +++ b/drivers/dma/ioat/init.c @@ -1429,6 +1429,7 @@ module_init(ioat_init_module); static void __exit ioat_exit_module(void) { pci_unregister_driver(&ioat_pci_driver); + kmem_cache_destroy(ioat_sed_cache); kmem_cache_destroy(ioat_cache); } module_exit(ioat_exit_module); diff --git a/drivers/extcon/Kconfig b/drivers/extcon/Kconfig index a7bca4207f44..a0361073e33e 100644 --- a/drivers/extcon/Kconfig +++ b/drivers/extcon/Kconfig @@ -100,7 +100,8 @@ config EXTCON_MAX77843 config EXTCON_MAX8997 tristate "Maxim MAX8997 EXTCON Support" - depends on MFD_MAX8997 && IRQ_DOMAIN + depends on MFD_MAX8997 + select IRQ_DOMAIN help If you say yes here you get support for the MUIC device of Maxim MAX8997 PMIC. The MAX8997 MUIC is a USB port accessory diff --git a/drivers/firmware/dmi-id.c b/drivers/firmware/dmi-id.c index 951b6c79f166..13563a97b1f6 100644 --- a/drivers/firmware/dmi-id.c +++ b/drivers/firmware/dmi-id.c @@ -160,9 +160,14 @@ static int dmi_dev_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static void dmi_dev_release(struct device *dev) +{ + kfree(dev); +} + static struct class dmi_class = { .name = "dmi", - .dev_release = (void(*)(struct device *)) kfree, + .dev_release = dmi_dev_release, .dev_uevent = dmi_dev_uevent, }; diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c index dd506cd3a5b8..a1bb471e4f51 100644 --- a/drivers/firmware/raspberrypi.c +++ b/drivers/firmware/raspberrypi.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -88,8 +89,8 @@ int rpi_firmware_property_list(struct rpi_firmware *fw, if (size & 3) return -EINVAL; - buf = dma_alloc_coherent(fw->cl.dev, PAGE_ALIGN(size), &bus_addr, - GFP_ATOMIC); + buf = dma_alloc_coherent(fw->chan->mbox->dev, PAGE_ALIGN(size), + &bus_addr, GFP_ATOMIC); if (!buf) return -ENOMEM; @@ -117,7 +118,7 @@ int rpi_firmware_property_list(struct rpi_firmware *fw, ret = -EINVAL; } - dma_free_coherent(fw->cl.dev, PAGE_ALIGN(size), buf, bus_addr); + dma_free_coherent(fw->chan->mbox->dev, PAGE_ALIGN(size), buf, bus_addr); return ret; } diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c index a4c9a326e9f5..e8b2635ecb14 100644 --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c @@ -165,6 +165,8 @@ static void sumo_construct_vid_mapping_table(struct amdgpu_device *adev, for (i = 0; i < SUMO_MAX_HARDWARE_POWERLEVELS; i++) { if (table[i].ulSupportedSCLK != 0) { + if (table[i].usVoltageIndex >= SUMO_MAX_NUMBER_VOLTAGES) + continue; vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit = table[i].usVoltageID; vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit = diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index e0cca19b4044..71611e1fdd22 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -197,9 +197,12 @@ EXPORT_SYMBOL(drm_panel_bridge_remove); static void devm_drm_panel_bridge_release(struct device *dev, void *res) { - struct drm_bridge **bridge = res; + struct drm_bridge *bridge = *(struct drm_bridge **)res; - drm_panel_bridge_remove(*bridge); + if (!bridge) + return; + + drm_bridge_remove(bridge); } struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev, diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index f36d4df4d481..e1b6b0cc4fcc 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -302,6 +302,7 @@ static int vidi_get_modes(struct drm_connector *connector) struct vidi_context *ctx = ctx_from_connector(connector); struct edid *edid; int edid_len; + int count; /* * the edid data comes from user side and it would be set @@ -321,7 +322,11 @@ static int vidi_get_modes(struct drm_connector *connector) drm_mode_connector_update_edid_property(connector, edid); - return drm_add_edid_modes(connector, edid); + count = drm_add_edid_modes(connector, edid); + + kfree(edid); + + return count; } static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = { diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c index 1818980dafce..46436e6777b8 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.c @@ -26,6 +26,9 @@ static struct mtk_drm_gem_obj *mtk_drm_gem_init(struct drm_device *dev, size = round_up(size, PAGE_SIZE); + if (size == 0) + return ERR_PTR(-EINVAL); + mtk_gem_obj = kzalloc(sizeof(*mtk_gem_obj), GFP_KERNEL); if (!mtk_gem_obj) return ERR_PTR(-ENOMEM); diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c index 4bc8e9fe3095..166e020a9335 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c @@ -208,6 +208,8 @@ static int nv17_tv_get_ld_modes(struct drm_encoder *encoder, struct drm_display_mode *mode; mode = drm_mode_duplicate(encoder->dev, tv_mode); + if (!mode) + continue; mode->clock = tv_norm->tv_enc_mode.vrefresh * mode->htotal / 1000 * @@ -257,6 +259,8 @@ static int nv17_tv_get_hd_modes(struct drm_encoder *encoder, if (modes[i].hdisplay == output_mode->hdisplay && modes[i].vdisplay == output_mode->vdisplay) { mode = drm_mode_duplicate(encoder->dev, output_mode); + if (!mode) + continue; mode->type |= DRM_MODE_TYPE_PREFERRED; } else { @@ -264,6 +268,8 @@ static int nv17_tv_get_hd_modes(struct drm_encoder *encoder, modes[i].vdisplay, 60, false, (output_mode->flags & DRM_MODE_FLAG_INTERLACE), false); + if (!mode) + continue; } /* CVT modes are sometimes unsuitable... */ diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c index 258cca4ae59b..b6f78ab073d3 100644 --- a/drivers/gpu/drm/radeon/sumo_dpm.c +++ b/drivers/gpu/drm/radeon/sumo_dpm.c @@ -1621,6 +1621,8 @@ void sumo_construct_vid_mapping_table(struct radeon_device *rdev, for (i = 0; i < SUMO_MAX_HARDWARE_POWERLEVELS; i++) { if (table[i].ulSupportedSCLK != 0) { + if (table[i].usVoltageIndex >= SUMO_MAX_NUMBER_VOLTAGES) + continue; vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit = table[i].usVoltageID; vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit = diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 2100ed7cee7b..26ca8447bfa1 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1258,7 +1258,6 @@ static void implement(const struct hid_device *hid, u8 *report, hid_warn(hid, "%s() called with too large value %d (n: %d)! (%s)\n", __func__, value, n, current->comm); - WARN_ON(1); value &= m; } } diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c index 8b2ebcab1518..8a5fdcbd2095 100644 --- a/drivers/hv/hv_util.c +++ b/drivers/hv/hv_util.c @@ -294,10 +294,23 @@ static void timesync_onchannelcallback(void *context) struct ictimesync_ref_data *refdata; u8 *time_txf_buf = util_timesynch.recv_buffer; - vmbus_recvpacket(channel, time_txf_buf, - PAGE_SIZE, &recvlen, &requestid); + /* + * Drain the ring buffer and use the last packet to update + * host_ts + */ + while (1) { + int ret = vmbus_recvpacket(channel, time_txf_buf, + PAGE_SIZE, &recvlen, + &requestid); + if (ret) { + pr_warn_once("TimeSync IC pkt recv failed (Err: %d)\n", + ret); + break; + } + + if (!recvlen) + break; - if (recvlen > 0) { icmsghdrp = (struct icmsg_hdr *)&time_txf_buf[ sizeof(struct vmbuspipe_hdr)]; diff --git a/drivers/hwtracing/intel_th/pci.c b/drivers/hwtracing/intel_th/pci.c index 3c5eba924e3b..22cda2742b55 100644 --- a/drivers/hwtracing/intel_th/pci.c +++ b/drivers/hwtracing/intel_th/pci.c @@ -258,6 +258,16 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa76f), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { + /* Meteor Lake-S CPU */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xae24), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { + /* Meteor Lake-S */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7f26), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, { /* Raptor Lake-S */ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7a26), @@ -268,6 +278,26 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7e24), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { + /* Granite Rapids */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0963), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { + /* Granite Rapids SOC */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x3256), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { + /* Sapphire Rapids SOC */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x3456), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { + /* Lunar Lake */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa824), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, { /* Rocket Lake CPU */ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4c19), diff --git a/drivers/hwtracing/stm/core.c b/drivers/hwtracing/stm/core.c index 222a8cc4a052..be515512d0d4 100644 --- a/drivers/hwtracing/stm/core.c +++ b/drivers/hwtracing/stm/core.c @@ -714,8 +714,11 @@ int stm_register_device(struct device *parent, struct stm_data *stm_data, return -ENOMEM; stm->major = register_chrdev(0, stm_data->name, &stm_fops); - if (stm->major < 0) - goto err_free; + if (stm->major < 0) { + err = stm->major; + vfree(stm); + return err; + } device_initialize(&stm->dev); stm->dev.devt = MKDEV(stm->major, 0); @@ -759,10 +762,8 @@ int stm_register_device(struct device *parent, struct stm_data *stm_data, err_device: unregister_chrdev(stm->major, stm_data->name); - /* matches device_initialize() above */ + /* calls stm_device_release() */ put_device(&stm->dev); -err_free: - vfree(stm); return err; } diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c index 8c42ca7107b2..cf59196807ea 100644 --- a/drivers/i2c/busses/i2c-ocores.c +++ b/drivers/i2c/busses/i2c-ocores.c @@ -25,7 +25,12 @@ #include #include #include +#include +/** + * @process_lock: protect I2C transfer process. + * ocores_process() and ocores_process_timeout() can't run in parallel. + */ struct ocores_i2c { void __iomem *base; u32 reg_shift; @@ -36,6 +41,7 @@ struct ocores_i2c { int pos; int nmsgs; int state; /* see STATE_ */ + spinlock_t process_lock; struct clk *clk; int ip_clock_khz; int bus_clock_khz; @@ -141,19 +147,26 @@ static void ocores_process(struct ocores_i2c *i2c) { struct i2c_msg *msg = i2c->msg; u8 stat = oc_getreg(i2c, OCI2C_STATUS); + unsigned long flags; + + /* + * If we spin here is because we are in timeout, so we are going + * to be in STATE_ERROR. See ocores_process_timeout() + */ + spin_lock_irqsave(&i2c->process_lock, flags); if ((i2c->state == STATE_DONE) || (i2c->state == STATE_ERROR)) { /* stop has been sent */ oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); wake_up(&i2c->wait); - return; + goto out; } /* error? */ if (stat & OCI2C_STAT_ARBLOST) { i2c->state = STATE_ERROR; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } if ((i2c->state == STATE_START) || (i2c->state == STATE_WRITE)) { @@ -163,7 +176,7 @@ static void ocores_process(struct ocores_i2c *i2c) if (stat & OCI2C_STAT_NACK) { i2c->state = STATE_ERROR; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } } else msg->buf[i2c->pos++] = oc_getreg(i2c, OCI2C_DATA); @@ -184,14 +197,14 @@ static void ocores_process(struct ocores_i2c *i2c) oc_setreg(i2c, OCI2C_DATA, addr); oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); - return; + goto out; } else i2c->state = (msg->flags & I2C_M_RD) ? STATE_READ : STATE_WRITE; } else { i2c->state = STATE_DONE; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } } @@ -202,6 +215,9 @@ static void ocores_process(struct ocores_i2c *i2c) oc_setreg(i2c, OCI2C_DATA, msg->buf[i2c->pos++]); oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_WRITE); } + +out: + spin_unlock_irqrestore(&i2c->process_lock, flags); } static irqreturn_t ocores_isr(int irq, void *dev_id) @@ -213,9 +229,24 @@ static irqreturn_t ocores_isr(int irq, void *dev_id) return IRQ_HANDLED; } +/** + * Process timeout event + * @i2c: ocores I2C device instance + */ +static void ocores_process_timeout(struct ocores_i2c *i2c) +{ + unsigned long flags; + + spin_lock_irqsave(&i2c->process_lock, flags); + i2c->state = STATE_ERROR; + oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); + spin_unlock_irqrestore(&i2c->process_lock, flags); +} + static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) { struct ocores_i2c *i2c = i2c_get_adapdata(adap); + int ret; i2c->msg = msgs; i2c->pos = 0; @@ -228,11 +259,14 @@ static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); - if (wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || - (i2c->state == STATE_DONE), HZ)) - return (i2c->state == STATE_DONE) ? num : -EIO; - else + ret = wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || + (i2c->state == STATE_DONE), HZ); + if (ret == 0) { + ocores_process_timeout(i2c); return -ETIMEDOUT; + } + + return (i2c->state == STATE_DONE) ? num : -EIO; } static int ocores_init(struct device *dev, struct ocores_i2c *i2c) @@ -259,8 +293,8 @@ static int ocores_init(struct device *dev, struct ocores_i2c *i2c) oc_setreg(i2c, OCI2C_PREHIGH, prescale >> 8); /* Init the device */ - oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); oc_setreg(i2c, OCI2C_CONTROL, ctrl | OCI2C_CTRL_IEN | OCI2C_CTRL_EN); + oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); return 0; } @@ -425,6 +459,8 @@ static int ocores_i2c_probe(struct platform_device *pdev) if (!i2c) return -ENOMEM; + spin_lock_init(&i2c->process_lock); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); i2c->base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(i2c->base)) diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c index b8d5cfd57ec4..fb2d2432e49c 100644 --- a/drivers/iio/adc/ad7266.c +++ b/drivers/iio/adc/ad7266.c @@ -160,6 +160,8 @@ static int ad7266_read_raw(struct iio_dev *indio_dev, ret = ad7266_read_single(st, val, chan->address); iio_device_release_direct_mode(indio_dev); + if (ret < 0) + return ret; *val = (*val >> 2) & 0xfff; if (chan->scan_type.sign == 's') *val = sign_extend32(*val, 11); diff --git a/drivers/iio/dac/ad5592r-base.c b/drivers/iio/dac/ad5592r-base.c index 126bb8349363..9736cc8e6a27 100644 --- a/drivers/iio/dac/ad5592r-base.c +++ b/drivers/iio/dac/ad5592r-base.c @@ -158,7 +158,6 @@ static void ad5592r_gpio_cleanup(struct ad5592r_state *st) static int ad5592r_reset(struct ad5592r_state *st) { struct gpio_desc *gpio; - struct iio_dev *iio_dev = iio_priv_to_dev(st); gpio = devm_gpiod_get_optional(st->dev, "reset", GPIOD_OUT_LOW); if (IS_ERR(gpio)) @@ -168,10 +167,10 @@ static int ad5592r_reset(struct ad5592r_state *st) udelay(1); gpiod_set_value(gpio, 1); } else { - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); /* Writing this magic value resets the device */ st->ops->reg_write(st, AD5592R_REG_RESET, 0xdac); - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); } udelay(250); @@ -199,7 +198,6 @@ static int ad5592r_set_channel_modes(struct ad5592r_state *st) const struct ad5592r_rw_ops *ops = st->ops; int ret; unsigned i; - struct iio_dev *iio_dev = iio_priv_to_dev(st); u8 pulldown = 0, tristate = 0, dac = 0, adc = 0; u16 read_back; @@ -249,7 +247,7 @@ static int ad5592r_set_channel_modes(struct ad5592r_state *st) } } - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); /* Pull down unused pins to GND */ ret = ops->reg_write(st, AD5592R_REG_PULLDOWN, pulldown); @@ -287,7 +285,7 @@ static int ad5592r_set_channel_modes(struct ad5592r_state *st) ret = -EIO; err_unlock: - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -316,11 +314,11 @@ static int ad5592r_write_raw(struct iio_dev *iio_dev, if (!chan->output) return -EINVAL; - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); ret = st->ops->write_dac(st, chan->channel, val); if (!ret) st->cached_dac[chan->channel] = val; - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; case IIO_CHAN_INFO_SCALE: if (chan->type == IIO_VOLTAGE) { @@ -335,12 +333,12 @@ static int ad5592r_write_raw(struct iio_dev *iio_dev, else return -EINVAL; - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); ret = st->ops->reg_read(st, AD5592R_REG_CTRL, &st->cached_gp_ctrl); if (ret < 0) { - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -362,7 +360,7 @@ static int ad5592r_write_raw(struct iio_dev *iio_dev, ret = st->ops->reg_write(st, AD5592R_REG_CTRL, st->cached_gp_ctrl); - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -380,11 +378,11 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev, { struct ad5592r_state *st = iio_priv(iio_dev); u16 read_val; - int ret; + int ret, mult; switch (m) { case IIO_CHAN_INFO_RAW: - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); if (!chan->output) { ret = st->ops->read_adc(st, chan->channel, &read_val); @@ -417,29 +415,27 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev, s64 tmp = *val * (3767897513LL / 25LL); *val = div_s64_rem(tmp, 1000000000LL, val2); - return IIO_VAL_INT_PLUS_MICRO; - } else { - int mult; - - mutex_lock(&iio_dev->mlock); - - if (chan->output) - mult = !!(st->cached_gp_ctrl & - AD5592R_REG_CTRL_DAC_RANGE); - else - mult = !!(st->cached_gp_ctrl & - AD5592R_REG_CTRL_ADC_RANGE); - - *val *= ++mult; - - *val2 = chan->scan_type.realbits; - ret = IIO_VAL_FRACTIONAL_LOG2; + return IIO_VAL_INT_PLUS_NANO; } + + mutex_lock(&st->lock); + + if (chan->output) + mult = !!(st->cached_gp_ctrl & + AD5592R_REG_CTRL_DAC_RANGE); + else + mult = !!(st->cached_gp_ctrl & + AD5592R_REG_CTRL_ADC_RANGE); + + *val *= ++mult; + + *val2 = chan->scan_type.realbits; + ret = IIO_VAL_FRACTIONAL_LOG2; break; case IIO_CHAN_INFO_OFFSET: ret = ad5592r_get_vref(st); - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); if (st->cached_gp_ctrl & AD5592R_REG_CTRL_ADC_RANGE) *val = (-34365 * 25) / ret; @@ -452,7 +448,7 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev, } unlock: - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -627,6 +623,8 @@ int ad5592r_probe(struct device *dev, const char *name, iio_dev->info = &ad5592r_info; iio_dev->modes = INDIO_DIRECT_MODE; + mutex_init(&st->lock); + ad5592r_init_scales(st, ad5592r_get_vref(st)); ret = ad5592r_reset(st); diff --git a/drivers/iio/dac/ad5592r-base.h b/drivers/iio/dac/ad5592r-base.h index 841457e93f85..046936068b63 100644 --- a/drivers/iio/dac/ad5592r-base.h +++ b/drivers/iio/dac/ad5592r-base.h @@ -53,6 +53,7 @@ struct ad5592r_state { struct regulator *reg; struct gpio_chip gpiochip; struct mutex gpio_lock; /* Protect cached gpio_out, gpio_val, etc. */ + struct mutex lock; unsigned int num_channels; const struct ad5592r_rw_ops *ops; int scale_avail[2][2]; diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c index 0e85b3445c07..945e2096f3b5 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c @@ -362,7 +362,7 @@ static int ipoib_cm_nonsrq_init_rx(struct net_device *dev, struct ib_cm_id *cm_i if (!rx->rx_ring) return -ENOMEM; - t = kmalloc(sizeof *t, GFP_KERNEL); + t = kmalloc(sizeof(*t), GFP_KERNEL); if (!t) { ret = -ENOMEM; goto err_free_1; @@ -431,7 +431,7 @@ static int ipoib_cm_send_rep(struct net_device *dev, struct ib_cm_id *cm_id, data.mtu = cpu_to_be32(IPOIB_CM_BUF_SIZE); rep.private_data = &data; - rep.private_data_len = sizeof data; + rep.private_data_len = sizeof(data); rep.flow_control = 0; rep.rnr_retry_count = req->rnr_retry_count; rep.srq = ipoib_cm_has_srq(dev); @@ -449,7 +449,7 @@ static int ipoib_cm_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even int ret; ipoib_dbg(priv, "REQ arrived\n"); - p = kzalloc(sizeof *p, GFP_KERNEL); + p = kzalloc(sizeof(*p), GFP_KERNEL); if (!p) return -ENOMEM; p->dev = dev; @@ -656,7 +656,7 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc) } ipoib_cm_dma_unmap_rx(priv, frags, rx_ring[wr_id].mapping); - memcpy(rx_ring[wr_id].mapping, mapping, (frags + 1) * sizeof *mapping); + memcpy(rx_ring[wr_id].mapping, mapping, (frags + 1) * sizeof(*mapping)); ipoib_dbg_data(priv, "received %d bytes, SLID 0x%04x\n", wc->byte_len, wc->slid); @@ -1086,7 +1086,7 @@ static int ipoib_cm_send_req(struct net_device *dev, req.qp_num = qp->qp_num; req.qp_type = qp->qp_type; req.private_data = &data; - req.private_data_len = sizeof data; + req.private_data_len = sizeof(data); req.flow_control = 0; req.starting_psn = 0; /* FIXME */ @@ -1143,7 +1143,7 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn, ret = -ENOMEM; goto err_tx; } - memset(p->tx_ring, 0, ipoib_sendq_size * sizeof *p->tx_ring); + memset(p->tx_ring, 0, ipoib_sendq_size * sizeof(*p->tx_ring)); p->qp = ipoib_cm_create_tx_qp(p->dev, p); memalloc_noio_restore(noio_flag); @@ -1295,7 +1295,7 @@ struct ipoib_cm_tx *ipoib_cm_create_tx(struct net_device *dev, struct ipoib_path struct ipoib_dev_priv *priv = ipoib_priv(dev); struct ipoib_cm_tx *tx; - tx = kzalloc(sizeof *tx, GFP_ATOMIC); + tx = kzalloc(sizeof(*tx), GFP_ATOMIC); if (!tx) return NULL; @@ -1360,7 +1360,7 @@ static void ipoib_cm_tx_start(struct work_struct *work) neigh->daddr + QPN_AND_OPTIONS_OFFSET); goto free_neigh; } - memcpy(&pathrec, &p->path->pathrec, sizeof pathrec); + memcpy(&pathrec, &p->path->pathrec, sizeof(pathrec)); spin_unlock_irqrestore(&priv->lock, flags); netif_tx_unlock_bh(dev); diff --git a/drivers/infiniband/ulp/ipoib/ipoib_fs.c b/drivers/infiniband/ulp/ipoib/ipoib_fs.c index 11f74cbe6660..23152450ba0a 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_fs.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_fs.c @@ -262,15 +262,15 @@ static const struct file_operations ipoib_path_fops = { void ipoib_create_debug_files(struct net_device *dev) { struct ipoib_dev_priv *priv = ipoib_priv(dev); - char name[IFNAMSIZ + sizeof "_path"]; + char name[IFNAMSIZ + sizeof("_path")]; - snprintf(name, sizeof name, "%s_mcg", dev->name); + snprintf(name, sizeof(name), "%s_mcg", dev->name); priv->mcg_dentry = debugfs_create_file(name, S_IFREG | S_IRUGO, ipoib_root, dev, &ipoib_mcg_fops); if (!priv->mcg_dentry) ipoib_warn(priv, "failed to create mcg debug file\n"); - snprintf(name, sizeof name, "%s_path", dev->name); + snprintf(name, sizeof(name), "%s_path", dev->name); priv->path_dentry = debugfs_create_file(name, S_IFREG | S_IRUGO, ipoib_root, dev, &ipoib_path_fops); if (!priv->path_dentry) diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index 8e1f48fe6f2e..d30387e32f77 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c @@ -57,7 +57,7 @@ struct ipoib_ah *ipoib_create_ah(struct net_device *dev, struct ipoib_ah *ah; struct ib_ah *vah; - ah = kmalloc(sizeof *ah, GFP_KERNEL); + ah = kmalloc(sizeof(*ah), GFP_KERNEL); if (!ah) return ERR_PTR(-ENOMEM); @@ -202,7 +202,7 @@ static void ipoib_ib_handle_rx_wc(struct net_device *dev, struct ib_wc *wc) } memcpy(mapping, priv->rx_ring[wr_id].mapping, - IPOIB_UD_RX_SG * sizeof *mapping); + IPOIB_UD_RX_SG * sizeof(*mapping)); /* * If we can't allocate a new RX buffer, dump diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index caae4bfab950..86044aa948ea 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c @@ -636,7 +636,7 @@ struct ipoib_path_iter *ipoib_path_iter_init(struct net_device *dev) { struct ipoib_path_iter *iter; - iter = kmalloc(sizeof *iter, GFP_KERNEL); + iter = kmalloc(sizeof(*iter), GFP_KERNEL); if (!iter) return NULL; @@ -866,7 +866,7 @@ static struct ipoib_path *path_rec_create(struct net_device *dev, void *gid) if (!priv->broadcast) return NULL; - path = kzalloc(sizeof *path, GFP_ATOMIC); + path = kzalloc(sizeof(*path), GFP_ATOMIC); if (!path) return NULL; @@ -1184,7 +1184,7 @@ static int ipoib_hard_header(struct sk_buff *skb, { struct ipoib_header *header; - header = skb_push(skb, sizeof *header); + header = skb_push(skb, sizeof(*header)); header->proto = htons(type); header->reserved = 0; @@ -1352,7 +1352,7 @@ static struct ipoib_neigh *ipoib_neigh_ctor(u8 *daddr, { struct ipoib_neigh *neigh; - neigh = kzalloc(sizeof *neigh, GFP_ATOMIC); + neigh = kzalloc(sizeof(*neigh), GFP_ATOMIC); if (!neigh) return NULL; @@ -2329,7 +2329,7 @@ static void ipoib_add_one(struct ib_device *device) int p; int count = 0; - dev_list = kmalloc(sizeof *dev_list, GFP_KERNEL); + dev_list = kmalloc(sizeof(*dev_list), GFP_KERNEL); if (!dev_list) return; diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c index 25d7d9219591..d3ecda2931d2 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c @@ -140,7 +140,7 @@ static struct ipoib_mcast *ipoib_mcast_alloc(struct net_device *dev, { struct ipoib_mcast *mcast; - mcast = kzalloc(sizeof *mcast, can_sleep ? GFP_KERNEL : GFP_ATOMIC); + mcast = kzalloc(sizeof(*mcast), can_sleep ? GFP_KERNEL : GFP_ATOMIC); if (!mcast) return NULL; @@ -916,7 +916,7 @@ void ipoib_mcast_restart_task(struct work_struct *work) if (!ipoib_mcast_addr_is_valid(ha->addr, dev->broadcast)) continue; - memcpy(mgid.raw, ha->addr + 4, sizeof mgid); + memcpy(mgid.raw, ha->addr + 4, sizeof(mgid)); mcast = __ipoib_mcast_find(dev, &mgid); if (!mcast || test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags)) { @@ -997,7 +997,7 @@ struct ipoib_mcast_iter *ipoib_mcast_iter_init(struct net_device *dev) { struct ipoib_mcast_iter *iter; - iter = kmalloc(sizeof *iter, GFP_KERNEL); + iter = kmalloc(sizeof(*iter), GFP_KERNEL); if (!iter) return NULL; diff --git a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c index bb64baf25309..0dd6b48d0b90 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c @@ -52,7 +52,7 @@ int ipoib_mcast_attach(struct net_device *dev, struct ib_device *hca, if (set_qkey) { ret = -ENOMEM; - qp_attr = kmalloc(sizeof *qp_attr, GFP_KERNEL); + qp_attr = kmalloc(sizeof(*qp_attr), GFP_KERNEL); if (!qp_attr) goto out; diff --git a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c index 55a9b71ed05a..248eb734d29d 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c @@ -130,8 +130,12 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey) if (test_bit(IPOIB_FLAG_GOING_DOWN, &ppriv->flags)) return -EPERM; - snprintf(intf_name, sizeof intf_name, "%s.%04x", - ppriv->dev->name, pkey); + /* If you increase IFNAMSIZ, update snprintf below + * to allow longer names. + */ + BUILD_BUG_ON(IFNAMSIZ != 16); + snprintf(intf_name, sizeof(intf_name), "%.10s.%04x", ppriv->dev->name, + pkey); if (!mutex_trylock(&ppriv->sysfs_mutex)) return restart_syscall(); diff --git a/drivers/input/input.c b/drivers/input/input.c index f9f3d6261dc5..85e9c9649da8 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -1337,19 +1337,19 @@ static int input_print_modalias_bits(char *buf, int size, char name, unsigned long *bm, unsigned int min_bit, unsigned int max_bit) { - int len = 0, i; + int bit = min_bit; + int len = 0; len += snprintf(buf, max(size, 0), "%c", name); - for (i = min_bit; i < max_bit; i++) - if (bm[BIT_WORD(i)] & BIT_MASK(i)) - len += snprintf(buf + len, max(size - len, 0), "%X,", i); + for_each_set_bit_from(bit, bm, max_bit) + len += snprintf(buf + len, max(size - len, 0), "%X,", bit); return len; } -static int input_print_modalias(char *buf, int size, struct input_dev *id, - int add_cr) +static int input_print_modalias_parts(char *buf, int size, int full_len, + struct input_dev *id) { - int len; + int len, klen, remainder, space; len = snprintf(buf, max(size, 0), "input:b%04Xv%04Xp%04Xe%04X-", @@ -1358,8 +1358,49 @@ static int input_print_modalias(char *buf, int size, struct input_dev *id, len += input_print_modalias_bits(buf + len, size - len, 'e', id->evbit, 0, EV_MAX); - len += input_print_modalias_bits(buf + len, size - len, + + /* + * Calculate the remaining space in the buffer making sure we + * have place for the terminating 0. + */ + space = max(size - (len + 1), 0); + + klen = input_print_modalias_bits(buf + len, size - len, 'k', id->keybit, KEY_MIN_INTERESTING, KEY_MAX); + len += klen; + + /* + * If we have more data than we can fit in the buffer, check + * if we can trim key data to fit in the rest. We will indicate + * that key data is incomplete by adding "+" sign at the end, like + * this: * "k1,2,3,45,+,". + * + * Note that we shortest key info (if present) is "k+," so we + * can only try to trim if key data is longer than that. + */ + if (full_len && size < full_len + 1 && klen > 3) { + remainder = full_len - len; + /* + * We can only trim if we have space for the remainder + * and also for at least "k+," which is 3 more characters. + */ + if (remainder <= space - 3) { + int i; + /* + * We are guaranteed to have 'k' in the buffer, so + * we need at least 3 additional bytes for storing + * "+," in addition to the remainder. + */ + for (i = size - 1 - remainder - 3; i >= 0; i--) { + if (buf[i] == 'k' || buf[i] == ',') { + strcpy(buf + i + 1, "+,"); + len = i + 3; /* Not counting '\0' */ + break; + } + } + } + } + len += input_print_modalias_bits(buf + len, size - len, 'r', id->relbit, 0, REL_MAX); len += input_print_modalias_bits(buf + len, size - len, @@ -1375,12 +1416,25 @@ static int input_print_modalias(char *buf, int size, struct input_dev *id, len += input_print_modalias_bits(buf + len, size - len, 'w', id->swbit, 0, SW_MAX); - if (add_cr) - len += snprintf(buf + len, max(size - len, 0), "\n"); - return len; } +static int input_print_modalias(char *buf, int size, struct input_dev *id) +{ + int full_len; + + /* + * Printing is done in 2 passes: first one figures out total length + * needed for the modalias string, second one will try to trim key + * data in case when buffer is too small for the entire modalias. + * If the buffer is too small regardless, it will fill as much as it + * can (without trimming key data) into the buffer and leave it to + * the caller to figure out what to do with the result. + */ + full_len = input_print_modalias_parts(NULL, 0, 0, id); + return input_print_modalias_parts(buf, size, full_len, id); +} + static ssize_t input_dev_show_modalias(struct device *dev, struct device_attribute *attr, char *buf) @@ -1388,7 +1442,9 @@ static ssize_t input_dev_show_modalias(struct device *dev, struct input_dev *id = to_input_dev(dev); ssize_t len; - len = input_print_modalias(buf, PAGE_SIZE, id, 1); + len = input_print_modalias(buf, PAGE_SIZE, id); + if (len < PAGE_SIZE - 2) + len += snprintf(buf + len, PAGE_SIZE - len, "\n"); return min_t(int, len, PAGE_SIZE); } @@ -1561,6 +1617,23 @@ static int input_add_uevent_bm_var(struct kobj_uevent_env *env, return 0; } +/* + * This is a pretty gross hack. When building uevent data the driver core + * may try adding more environment variables to kobj_uevent_env without + * telling us, so we have no idea how much of the buffer we can use to + * avoid overflows/-ENOMEM elsewhere. To work around this let's artificially + * reduce amount of memory we will use for the modalias environment variable. + * + * The potential additions are: + * + * SEQNUM=18446744073709551615 - (%llu - 28 bytes) + * HOME=/ (6 bytes) + * PATH=/sbin:/bin:/usr/sbin:/usr/bin (34 bytes) + * + * 68 bytes total. Allow extra buffer - 96 bytes + */ +#define UEVENT_ENV_EXTRA_LEN 96 + static int input_add_uevent_modalias_var(struct kobj_uevent_env *env, struct input_dev *dev) { @@ -1570,9 +1643,11 @@ static int input_add_uevent_modalias_var(struct kobj_uevent_env *env, return -ENOMEM; len = input_print_modalias(&env->buf[env->buflen - 1], - sizeof(env->buf) - env->buflen, - dev, 0); - if (len >= (sizeof(env->buf) - env->buflen)) + (int)sizeof(env->buf) - env->buflen - + UEVENT_ENV_EXTRA_LEN, + dev); + if (len >= ((int)sizeof(env->buf) - env->buflen - + UEVENT_ENV_EXTRA_LEN)) return -ENOMEM; env->buflen += len; diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c index ae473123583b..9629cfa71ddd 100644 --- a/drivers/input/misc/ims-pcu.c +++ b/drivers/input/misc/ims-pcu.c @@ -47,8 +47,8 @@ struct ims_pcu_backlight { #define IMS_PCU_PART_NUMBER_LEN 15 #define IMS_PCU_SERIAL_NUMBER_LEN 8 #define IMS_PCU_DOM_LEN 8 -#define IMS_PCU_FW_VERSION_LEN (9 + 1) -#define IMS_PCU_BL_VERSION_LEN (9 + 1) +#define IMS_PCU_FW_VERSION_LEN 16 +#define IMS_PCU_BL_VERSION_LEN 16 #define IMS_PCU_BL_RESET_REASON_LEN (2 + 1) #define IMS_PCU_PCU_B_DEVICE_ID 5 diff --git a/drivers/input/misc/pm8xxx-vibrator.c b/drivers/input/misc/pm8xxx-vibrator.c index 27b3db154a33..97bf7d94e8c6 100644 --- a/drivers/input/misc/pm8xxx-vibrator.c +++ b/drivers/input/misc/pm8xxx-vibrator.c @@ -22,7 +22,8 @@ #define VIB_MAX_LEVEL_mV (3100) #define VIB_MIN_LEVEL_mV (1200) -#define VIB_MAX_LEVELS (VIB_MAX_LEVEL_mV - VIB_MIN_LEVEL_mV) +#define VIB_PER_STEP_mV (100) +#define VIB_MAX_LEVELS (VIB_MAX_LEVEL_mV - VIB_MIN_LEVEL_mV + VIB_PER_STEP_mV) #define MAX_FF_SPEED 0xff @@ -126,10 +127,10 @@ static void pm8xxx_work_handler(struct work_struct *work) vib->active = true; vib->level = ((VIB_MAX_LEVELS * vib->speed) / MAX_FF_SPEED) + VIB_MIN_LEVEL_mV; - vib->level /= 100; + vib->level /= VIB_PER_STEP_mV; } else { vib->active = false; - vib->level = VIB_MIN_LEVEL_mV / 100; + vib->level = VIB_MIN_LEVEL_mV / VIB_PER_STEP_mV; } pm8xxx_vib_set(vib, vib->active); diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index 2cbf32172b88..1ad1a3d76058 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -1392,8 +1392,17 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu, return 0; } +static void __init free_sysfs(struct amd_iommu *iommu) +{ + if (iommu->iommu.dev) { + iommu_device_unregister(&iommu->iommu); + iommu_device_sysfs_remove(&iommu->iommu); + } +} + static void __init free_iommu_one(struct amd_iommu *iommu) { + free_sysfs(iommu); free_command_buffer(iommu); free_event_buffer(iommu); free_ppr_log(iommu); diff --git a/drivers/irqchip/irq-alpine-msi.c b/drivers/irqchip/irq-alpine-msi.c index 5e03574e1c5f..2d8177055a0e 100644 --- a/drivers/irqchip/irq-alpine-msi.c +++ b/drivers/irqchip/irq-alpine-msi.c @@ -165,7 +165,7 @@ static int alpine_msix_middle_domain_alloc(struct irq_domain *domain, return 0; err_sgi: - irq_domain_free_irqs_parent(domain, virq, i - 1); + irq_domain_free_irqs_parent(domain, virq, i); alpine_msix_free_sgi(priv, sgi, nr_irqs); return err; } diff --git a/drivers/macintosh/adb-iop.c b/drivers/macintosh/adb-iop.c index dbc4a3e63396..9febd84e4548 100644 --- a/drivers/macintosh/adb-iop.c +++ b/drivers/macintosh/adb-iop.c @@ -20,18 +20,16 @@ #include #include -#include -#include +#include +#include #include #include #include -#include +#include /*#define DEBUG_ADB_IOP*/ -extern void iop_ism_irq(int, void *); - static struct adb_request *current_req; static struct adb_request *last_req; #if 0 @@ -40,9 +38,9 @@ static unsigned char *reply_ptr; #endif static enum adb_iop_state { - idle, - sending, - awaiting_reply + idle, + sending, + awaiting_reply } adb_iop_state; static void adb_iop_start(void); @@ -68,7 +66,8 @@ static void adb_iop_end_req(struct adb_request *req, int state) { req->complete = 1; current_req = req->next; - if (req->done) (*req->done)(req); + if (req->done) + (*req->done)(req); adb_iop_state = state; } @@ -102,7 +101,7 @@ static void adb_iop_complete(struct iop_msg *msg) static void adb_iop_listen(struct iop_msg *msg) { - struct adb_iopmsg *amsg = (struct adb_iopmsg *) msg->message; + struct adb_iopmsg *amsg = (struct adb_iopmsg *)msg->message; struct adb_request *req; unsigned long flags; #ifdef DEBUG_ADB_IOP @@ -115,9 +114,9 @@ static void adb_iop_listen(struct iop_msg *msg) #ifdef DEBUG_ADB_IOP printk("adb_iop_listen %p: rcvd packet, %d bytes: %02X %02X", req, - (uint) amsg->count + 2, (uint) amsg->flags, (uint) amsg->cmd); + (uint)amsg->count + 2, (uint)amsg->flags, (uint)amsg->cmd); for (i = 0; i < amsg->count; i++) - printk(" %02X", (uint) amsg->data[i]); + printk(" %02X", (uint)amsg->data[i]); printk("\n"); #endif @@ -170,14 +169,15 @@ static void adb_iop_start(void) /* get the packet to send */ req = current_req; - if (!req) return; + if (!req) + return; local_irq_save(flags); #ifdef DEBUG_ADB_IOP printk("adb_iop_start %p: sending packet, %d bytes:", req, req->nbytes); - for (i = 0 ; i < req->nbytes ; i++) - printk(" %02X", (uint) req->data[i]); + for (i = 0; i < req->nbytes; i++) + printk(" %02X", (uint)req->data[i]); printk("\n"); #endif @@ -198,13 +198,14 @@ static void adb_iop_start(void) /* Now send it. The IOP manager will call adb_iop_complete */ /* when the packet has been sent. */ - iop_send_message(ADB_IOP, ADB_CHAN, req, - sizeof(amsg), (__u8 *) &amsg, adb_iop_complete); + iop_send_message(ADB_IOP, ADB_CHAN, req, sizeof(amsg), (__u8 *)&amsg, + adb_iop_complete); } int adb_iop_probe(void) { - if (!iop_ism_present) return -ENODEV; + if (!iop_ism_present) + return -ENODEV; return 0; } @@ -220,10 +221,12 @@ int adb_iop_send_request(struct adb_request *req, int sync) int err; err = adb_iop_write(req); - if (err) return err; + if (err) + return err; if (sync) { - while (!req->complete) adb_iop_poll(); + while (!req->complete) + adb_iop_poll(); } return 0; } @@ -253,7 +256,9 @@ static int adb_iop_write(struct adb_request *req) } local_irq_restore(flags); - if (adb_iop_state == idle) adb_iop_start(); + + if (adb_iop_state == idle) + adb_iop_start(); return 0; } @@ -265,8 +270,9 @@ int adb_iop_autopoll(int devs) void adb_iop_poll(void) { - if (adb_iop_state == idle) adb_iop_start(); - iop_ism_irq(0, (void *) ADB_IOP); + if (adb_iop_state == idle) + adb_iop_start(); + iop_ism_irq_poll(ADB_IOP); } int adb_iop_reset_bus(void) diff --git a/drivers/macintosh/via-macii.c b/drivers/macintosh/via-macii.c index 4ba06a1695ea..552d60fd855d 100644 --- a/drivers/macintosh/via-macii.c +++ b/drivers/macintosh/via-macii.c @@ -12,7 +12,7 @@ * * 1999-08-02 (jmt) - Initial rewrite for Unified ADB. * 2000-03-29 Tony Mantler - * - Big overhaul, should actually work now. + * - Big overhaul, should actually work now. * 2006-12-31 Finn Thain - Another overhaul. * * Suggested reading: @@ -23,7 +23,7 @@ * Apple's "ADB Analyzer" bus sniffer is invaluable: * ftp://ftp.apple.com/developer/Tool_Chest/Devices_-_Hardware/Apple_Desktop_Bus/ */ - + #include #include #include @@ -77,7 +77,7 @@ static volatile unsigned char *via; #define ST_ODD 0x20 /* ADB state: odd data byte */ #define ST_IDLE 0x30 /* ADB state: idle, nothing to send */ -static int macii_init_via(void); +static int macii_init_via(void); static void macii_start(void); static irqreturn_t macii_interrupt(int irq, void *arg); static void macii_queue_poll(void); @@ -120,27 +120,11 @@ static int srq_asserted; /* have to poll for the device that asserted it */ static int command_byte; /* the most recent command byte transmitted */ static int autopoll_devs; /* bits set are device addresses to be polled */ -/* Sanity check for request queue. Doesn't check for cycles. */ -static int request_is_queued(struct adb_request *req) { - struct adb_request *cur; - unsigned long flags; - local_irq_save(flags); - cur = current_req; - while (cur) { - if (cur == req) { - local_irq_restore(flags); - return 1; - } - cur = cur->next; - } - local_irq_restore(flags); - return 0; -} - /* Check for MacII style ADB */ static int macii_probe(void) { - if (macintosh_config->adb_type != MAC_ADB_II) return -ENODEV; + if (macintosh_config->adb_type != MAC_ADB_II) + return -ENODEV; via = via1; @@ -151,25 +135,22 @@ static int macii_probe(void) /* Initialize the driver */ int macii_init(void) { - unsigned long flags; int err; - - local_irq_save(flags); - + err = macii_init_via(); - if (err) goto out; + if (err) + return err; err = request_irq(IRQ_MAC_ADB, macii_interrupt, 0, "ADB", macii_interrupt); - if (err) goto out; + if (err) + return err; macii_state = idle; -out: - local_irq_restore(flags); - return err; + return 0; } -/* initialize the hardware */ +/* initialize the hardware */ static int macii_init_via(void) { unsigned char x; @@ -179,7 +160,7 @@ static int macii_init_via(void) /* Set up state: idle */ via[B] |= ST_IDLE; - last_status = via[B] & (ST_MASK|CTLR_IRQ); + last_status = via[B] & (ST_MASK | CTLR_IRQ); /* Shift register on input */ via[ACR] = (via[ACR] & ~SR_CTRL) | SR_EXT; @@ -205,7 +186,8 @@ static void macii_queue_poll(void) int next_device; static struct adb_request req; - if (!autopoll_devs) return; + if (!autopoll_devs) + return; device_mask = (1 << (((command_byte & 0xF0) >> 4) + 1)) - 1; if (autopoll_devs & ~device_mask) @@ -213,10 +195,7 @@ static void macii_queue_poll(void) else next_device = ffs(autopoll_devs) - 1; - BUG_ON(request_is_queued(&req)); - - adb_request(&req, NULL, ADBREQ_NOSEND, 1, - ADB_READREG(next_device, 0)); + adb_request(&req, NULL, ADBREQ_NOSEND, 1, ADB_READREG(next_device, 0)); req.sent = 0; req.complete = 0; @@ -237,18 +216,13 @@ static int macii_send_request(struct adb_request *req, int sync) int err; unsigned long flags; - BUG_ON(request_is_queued(req)); - local_irq_save(flags); err = macii_write(req); local_irq_restore(flags); - if (!err && sync) { - while (!req->complete) { + if (!err && sync) + while (!req->complete) macii_poll(); - } - BUG_ON(request_is_queued(req)); - } return err; } @@ -260,7 +234,7 @@ static int macii_write(struct adb_request *req) req->complete = 1; return -EINVAL; } - + req->next = NULL; req->sent = 0; req->complete = 0; @@ -272,7 +246,8 @@ static int macii_write(struct adb_request *req) } else { current_req = req; last_req = req; - if (macii_state == idle) macii_start(); + if (macii_state == idle) + macii_start(); } return 0; } @@ -287,7 +262,8 @@ static int macii_autopoll(int devs) /* bit 1 == device 1, and so on. */ autopoll_devs = devs & 0xFFFE; - if (!autopoll_devs) return 0; + if (!autopoll_devs) + return 0; local_irq_save(flags); @@ -304,7 +280,8 @@ static int macii_autopoll(int devs) return err; } -static inline int need_autopoll(void) { +static inline int need_autopoll(void) +{ /* Was the last command Talk Reg 0 * and is the target on the autopoll list? */ @@ -326,9 +303,6 @@ static void macii_poll(void) static int macii_reset_bus(void) { static struct adb_request req; - - if (request_is_queued(&req)) - return 0; /* Command = 0, Address = ignored */ adb_request(&req, NULL, 0, 1, ADB_BUSRESET); @@ -346,10 +320,6 @@ static void macii_start(void) req = current_req; - BUG_ON(req == NULL); - - BUG_ON(macii_state != idle); - /* Now send it. Be careful though, that first byte of the request * is actually ADB_PACKET; the real data begins at index 1! * And req->nbytes is the number of bytes of real data plus one. @@ -375,7 +345,7 @@ static void macii_start(void) * to be activity on the ADB bus. The chip will poll to achieve this. * * The basic ADB state machine was left unchanged from the original MacII code - * by Alan Cox, which was based on the CUDA driver for PowerMac. + * by Alan Cox, which was based on the CUDA driver for PowerMac. * The syntax of the ADB status lines is totally different on MacII, * though. MacII uses the states Command -> Even -> Odd -> Even ->...-> Idle * for sending and Idle -> Even -> Odd -> Even ->...-> Idle for receiving. @@ -387,7 +357,6 @@ static void macii_start(void) static irqreturn_t macii_interrupt(int irq, void *arg) { int x; - static int entered; struct adb_request *req; if (!arg) { @@ -398,153 +367,150 @@ static irqreturn_t macii_interrupt(int irq, void *arg) return IRQ_NONE; } - BUG_ON(entered++); - last_status = status; - status = via[B] & (ST_MASK|CTLR_IRQ); + status = via[B] & (ST_MASK | CTLR_IRQ); switch (macii_state) { - case idle: - if (reading_reply) { - reply_ptr = current_req->reply; - } else { - BUG_ON(current_req != NULL); - reply_ptr = reply_buf; - } + case idle: + if (reading_reply) { + reply_ptr = current_req->reply; + } else { + WARN_ON(current_req); + reply_ptr = reply_buf; + } - x = via[SR]; + x = via[SR]; - if ((status & CTLR_IRQ) && (x == 0xFF)) { - /* Bus timeout without SRQ sequence: - * data is "FF" while CTLR_IRQ is "H" - */ - reply_len = 0; - srq_asserted = 0; - macii_state = read_done; - } else { - macii_state = reading; - *reply_ptr = x; - reply_len = 1; - } - - /* set ADB state = even for first data byte */ - via[B] = (via[B] & ~ST_MASK) | ST_EVEN; - break; - - case sending: - req = current_req; - if (data_index >= req->nbytes) { - req->sent = 1; - macii_state = idle; - - if (req->reply_expected) { - reading_reply = 1; - } else { - req->complete = 1; - current_req = req->next; - if (req->done) (*req->done)(req); - - if (current_req) - macii_start(); - else - if (need_autopoll()) - macii_autopoll(autopoll_devs); - } - - if (macii_state == idle) { - /* reset to shift in */ - via[ACR] &= ~SR_OUT; - x = via[SR]; - /* set ADB state idle - might get SRQ */ - via[B] = (via[B] & ~ST_MASK) | ST_IDLE; - } - } else { - via[SR] = req->data[data_index++]; - - if ( (via[B] & ST_MASK) == ST_CMD ) { - /* just sent the command byte, set to EVEN */ - via[B] = (via[B] & ~ST_MASK) | ST_EVEN; - } else { - /* invert state bits, toggle ODD/EVEN */ - via[B] ^= ST_MASK; - } - } - break; - - case reading: - x = via[SR]; - BUG_ON((status & ST_MASK) == ST_CMD || - (status & ST_MASK) == ST_IDLE); - - /* Bus timeout with SRQ sequence: - * data is "XX FF" while CTLR_IRQ is "L L" - * End of packet without SRQ sequence: - * data is "XX...YY 00" while CTLR_IRQ is "L...H L" - * End of packet SRQ sequence: - * data is "XX...YY 00" while CTLR_IRQ is "L...L L" - * (where XX is the first response byte and - * YY is the last byte of valid response data.) + if ((status & CTLR_IRQ) && (x == 0xFF)) { + /* Bus timeout without SRQ sequence: + * data is "FF" while CTLR_IRQ is "H" */ - + reply_len = 0; srq_asserted = 0; - if (!(status & CTLR_IRQ)) { - if (x == 0xFF) { - if (!(last_status & CTLR_IRQ)) { - macii_state = read_done; - reply_len = 0; - srq_asserted = 1; - } - } else if (x == 0x00) { - macii_state = read_done; - if (!(last_status & CTLR_IRQ)) - srq_asserted = 1; - } - } + macii_state = read_done; + } else { + macii_state = reading; + *reply_ptr = x; + reply_len = 1; + } - if (macii_state == reading) { - BUG_ON(reply_len > 15); - reply_ptr++; - *reply_ptr = x; - reply_len++; - } - - /* invert state bits, toggle ODD/EVEN */ - via[B] ^= ST_MASK; - break; - - case read_done: - x = via[SR]; - - if (reading_reply) { - reading_reply = 0; - req = current_req; - req->reply_len = reply_len; - req->complete = 1; - current_req = req->next; - if (req->done) (*req->done)(req); - } else if (reply_len && autopoll_devs) - adb_input(reply_buf, reply_len, 0); + /* set ADB state = even for first data byte */ + via[B] = (via[B] & ~ST_MASK) | ST_EVEN; + break; + case sending: + req = current_req; + if (data_index >= req->nbytes) { + req->sent = 1; macii_state = idle; - /* SRQ seen before, initiate poll now */ - if (srq_asserted) - macii_queue_poll(); + if (req->reply_expected) { + reading_reply = 1; + } else { + req->complete = 1; + current_req = req->next; + if (req->done) + (*req->done)(req); - if (current_req) - macii_start(); - else - if (need_autopoll()) + if (current_req) + macii_start(); + else if (need_autopoll()) macii_autopoll(autopoll_devs); + } - if (macii_state == idle) + if (macii_state == idle) { + /* reset to shift in */ + via[ACR] &= ~SR_OUT; + x = via[SR]; + /* set ADB state idle - might get SRQ */ via[B] = (via[B] & ~ST_MASK) | ST_IDLE; - break; + } + } else { + via[SR] = req->data[data_index++]; - default: + if ((via[B] & ST_MASK) == ST_CMD) { + /* just sent the command byte, set to EVEN */ + via[B] = (via[B] & ~ST_MASK) | ST_EVEN; + } else { + /* invert state bits, toggle ODD/EVEN */ + via[B] ^= ST_MASK; + } + } + break; + + case reading: + x = via[SR]; + WARN_ON((status & ST_MASK) == ST_CMD || + (status & ST_MASK) == ST_IDLE); + + /* Bus timeout with SRQ sequence: + * data is "XX FF" while CTLR_IRQ is "L L" + * End of packet without SRQ sequence: + * data is "XX...YY 00" while CTLR_IRQ is "L...H L" + * End of packet SRQ sequence: + * data is "XX...YY 00" while CTLR_IRQ is "L...L L" + * (where XX is the first response byte and + * YY is the last byte of valid response data.) + */ + + srq_asserted = 0; + if (!(status & CTLR_IRQ)) { + if (x == 0xFF) { + if (!(last_status & CTLR_IRQ)) { + macii_state = read_done; + reply_len = 0; + srq_asserted = 1; + } + } else if (x == 0x00) { + macii_state = read_done; + if (!(last_status & CTLR_IRQ)) + srq_asserted = 1; + } + } + + if (macii_state == reading && + reply_len < ARRAY_SIZE(reply_buf)) { + reply_ptr++; + *reply_ptr = x; + reply_len++; + } + + /* invert state bits, toggle ODD/EVEN */ + via[B] ^= ST_MASK; + break; + + case read_done: + x = via[SR]; + + if (reading_reply) { + reading_reply = 0; + req = current_req; + req->reply_len = reply_len; + req->complete = 1; + current_req = req->next; + if (req->done) + (*req->done)(req); + } else if (reply_len && autopoll_devs) + adb_input(reply_buf, reply_len, 0); + + macii_state = idle; + + /* SRQ seen before, initiate poll now */ + if (srq_asserted) + macii_queue_poll(); + + if (current_req) + macii_start(); + else if (need_autopoll()) + macii_autopoll(autopoll_devs); + + if (macii_state == idle) + via[B] = (via[B] & ~ST_MASK) | ST_IDLE; + break; + + default: break; } - entered--; return IRQ_HANDLED; } diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index d2ac3d189410..a8b3beb0aa3a 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -44,7 +44,6 @@ */ #include -#include #include #include #include @@ -6273,6 +6272,9 @@ static void raid5d(struct md_thread *thread) int batch_size, released; unsigned int offset; + if (test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags)) + break; + released = release_stripe_list(conf, conf->temp_inactive_list); if (released) clear_bit(R5_DID_ALLOC, &conf->cache_state); @@ -6309,18 +6311,7 @@ static void raid5d(struct md_thread *thread) spin_unlock_irq(&conf->device_lock); md_check_recovery(mddev); spin_lock_irq(&conf->device_lock); - - /* - * Waiting on MD_SB_CHANGE_PENDING below may deadlock - * seeing md_check_recovery() is needed to clear - * the flag when using mdmon. - */ - continue; } - - wait_event_lock_irq(mddev->sb_wait, - !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags), - conf->device_lock); } pr_debug("%d stripes handled\n", handled); diff --git a/drivers/media/cec/cec-api.c b/drivers/media/cec/cec-api.c index 66ef06f4670c..65297cd32dd1 100644 --- a/drivers/media/cec/cec-api.c +++ b/drivers/media/cec/cec-api.c @@ -645,6 +645,8 @@ static int cec_release(struct inode *inode, struct file *filp) list_del(&data->xfer_list); } mutex_unlock(&adap->lock); + + mutex_lock(&fh->lock); while (!list_empty(&fh->msgs)) { struct cec_msg_entry *entry = list_first_entry(&fh->msgs, struct cec_msg_entry, list); @@ -662,6 +664,7 @@ static int cec_release(struct inode *inode, struct file *filp) kfree(entry); } } + mutex_unlock(&fh->lock); kfree(fh); cec_put_device(devnode); diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c index fd59027ed95c..e655b6698736 100644 --- a/drivers/media/dvb-core/dvbdev.c +++ b/drivers/media/dvb-core/dvbdev.c @@ -953,7 +953,7 @@ int dvb_usercopy(struct file *file, int (*func)(struct file *file, unsigned int cmd, void *arg)) { - char sbuf[128]; + char sbuf[128] = {}; void *mbuf = NULL; void *parg = NULL; int err = -EINVAL; diff --git a/drivers/media/dvb-frontends/mxl5xx.c b/drivers/media/dvb-frontends/mxl5xx.c index 676c96c216c3..802d402d546e 100644 --- a/drivers/media/dvb-frontends/mxl5xx.c +++ b/drivers/media/dvb-frontends/mxl5xx.c @@ -1367,57 +1367,57 @@ static int config_ts(struct mxl *state, enum MXL_HYDRA_DEMOD_ID_E demod_id, u32 nco_count_min = 0; u32 clk_type = 0; - struct MXL_REG_FIELD_T xpt_sync_polarity[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_sync_polarity[MXL_HYDRA_DEMOD_MAX] = { {0x90700010, 8, 1}, {0x90700010, 9, 1}, {0x90700010, 10, 1}, {0x90700010, 11, 1}, {0x90700010, 12, 1}, {0x90700010, 13, 1}, {0x90700010, 14, 1}, {0x90700010, 15, 1} }; - struct MXL_REG_FIELD_T xpt_clock_polarity[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_clock_polarity[MXL_HYDRA_DEMOD_MAX] = { {0x90700010, 16, 1}, {0x90700010, 17, 1}, {0x90700010, 18, 1}, {0x90700010, 19, 1}, {0x90700010, 20, 1}, {0x90700010, 21, 1}, {0x90700010, 22, 1}, {0x90700010, 23, 1} }; - struct MXL_REG_FIELD_T xpt_valid_polarity[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_valid_polarity[MXL_HYDRA_DEMOD_MAX] = { {0x90700014, 0, 1}, {0x90700014, 1, 1}, {0x90700014, 2, 1}, {0x90700014, 3, 1}, {0x90700014, 4, 1}, {0x90700014, 5, 1}, {0x90700014, 6, 1}, {0x90700014, 7, 1} }; - struct MXL_REG_FIELD_T xpt_ts_clock_phase[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_ts_clock_phase[MXL_HYDRA_DEMOD_MAX] = { {0x90700018, 0, 3}, {0x90700018, 4, 3}, {0x90700018, 8, 3}, {0x90700018, 12, 3}, {0x90700018, 16, 3}, {0x90700018, 20, 3}, {0x90700018, 24, 3}, {0x90700018, 28, 3} }; - struct MXL_REG_FIELD_T xpt_lsb_first[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_lsb_first[MXL_HYDRA_DEMOD_MAX] = { {0x9070000C, 16, 1}, {0x9070000C, 17, 1}, {0x9070000C, 18, 1}, {0x9070000C, 19, 1}, {0x9070000C, 20, 1}, {0x9070000C, 21, 1}, {0x9070000C, 22, 1}, {0x9070000C, 23, 1} }; - struct MXL_REG_FIELD_T xpt_sync_byte[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_sync_byte[MXL_HYDRA_DEMOD_MAX] = { {0x90700010, 0, 1}, {0x90700010, 1, 1}, {0x90700010, 2, 1}, {0x90700010, 3, 1}, {0x90700010, 4, 1}, {0x90700010, 5, 1}, {0x90700010, 6, 1}, {0x90700010, 7, 1} }; - struct MXL_REG_FIELD_T xpt_enable_output[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_enable_output[MXL_HYDRA_DEMOD_MAX] = { {0x9070000C, 0, 1}, {0x9070000C, 1, 1}, {0x9070000C, 2, 1}, {0x9070000C, 3, 1}, {0x9070000C, 4, 1}, {0x9070000C, 5, 1}, {0x9070000C, 6, 1}, {0x9070000C, 7, 1} }; - struct MXL_REG_FIELD_T xpt_err_replace_sync[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_err_replace_sync[MXL_HYDRA_DEMOD_MAX] = { {0x9070000C, 24, 1}, {0x9070000C, 25, 1}, {0x9070000C, 26, 1}, {0x9070000C, 27, 1}, {0x9070000C, 28, 1}, {0x9070000C, 29, 1}, {0x9070000C, 30, 1}, {0x9070000C, 31, 1} }; - struct MXL_REG_FIELD_T xpt_err_replace_valid[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_err_replace_valid[MXL_HYDRA_DEMOD_MAX] = { {0x90700014, 8, 1}, {0x90700014, 9, 1}, {0x90700014, 10, 1}, {0x90700014, 11, 1}, {0x90700014, 12, 1}, {0x90700014, 13, 1}, {0x90700014, 14, 1}, {0x90700014, 15, 1} }; - struct MXL_REG_FIELD_T xpt_continuous_clock[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_continuous_clock[MXL_HYDRA_DEMOD_MAX] = { {0x907001D4, 0, 1}, {0x907001D4, 1, 1}, {0x907001D4, 2, 1}, {0x907001D4, 3, 1}, {0x907001D4, 4, 1}, {0x907001D4, 5, 1}, {0x907001D4, 6, 1}, {0x907001D4, 7, 1} }; - struct MXL_REG_FIELD_T xpt_nco_clock_rate[MXL_HYDRA_DEMOD_MAX] = { + static const struct MXL_REG_FIELD_T xpt_nco_clock_rate[MXL_HYDRA_DEMOD_MAX] = { {0x90700044, 16, 80}, {0x90700044, 16, 81}, {0x90700044, 16, 82}, {0x90700044, 16, 83}, {0x90700044, 16, 84}, {0x90700044, 16, 85}, diff --git a/drivers/media/media-devnode.c b/drivers/media/media-devnode.c index 423248f577b6..7b044d7189d3 100644 --- a/drivers/media/media-devnode.c +++ b/drivers/media/media-devnode.c @@ -253,15 +253,14 @@ int __must_check media_devnode_register(struct media_device *mdev, devnode->cdev.owner = owner; /* Part 3: Add the media and char device */ + set_bit(MEDIA_FLAG_REGISTERED, &devnode->flags); ret = cdev_device_add(&devnode->cdev, &devnode->dev); if (ret < 0) { + clear_bit(MEDIA_FLAG_REGISTERED, &devnode->flags); pr_err("%s: cdev_device_add failed\n", __func__); goto cdev_add_error; } - /* Part 4: Activate this minor. The char device can now be used. */ - set_bit(MEDIA_FLAG_REGISTERED, &devnode->flags); - return 0; cdev_add_error: diff --git a/drivers/media/pci/ngene/ngene-core.c b/drivers/media/pci/ngene/ngene-core.c index 96d0cbffa77c..714096b3ea4a 100644 --- a/drivers/media/pci/ngene/ngene-core.c +++ b/drivers/media/pci/ngene/ngene-core.c @@ -1499,7 +1499,9 @@ static int init_channel(struct ngene_channel *chan) } if (dev->ci.en && (io & NGENE_IO_TSOUT)) { - dvb_ca_en50221_init(adapter, dev->ci.en, 0, 1); + ret = dvb_ca_en50221_init(adapter, dev->ci.en, 0, 1); + if (ret != 0) + goto err; set_transfer(chan, 1); chan->dev->channel[2].DataFormatFlags = DF_SWAP32; set_transfer(&chan->dev->channel[2], 1); diff --git a/drivers/media/radio/radio-shark2.c b/drivers/media/radio/radio-shark2.c index 5356941f54ae..fda988139fa4 100644 --- a/drivers/media/radio/radio-shark2.c +++ b/drivers/media/radio/radio-shark2.c @@ -62,7 +62,7 @@ struct shark_device { #ifdef SHARK_USE_LEDS struct work_struct led_work; struct led_classdev leds[NO_LEDS]; - char led_names[NO_LEDS][32]; + char led_names[NO_LEDS][64]; atomic_t brightness[NO_LEDS]; unsigned long brightness_new; #endif diff --git a/drivers/media/usb/stk1160/stk1160-video.c b/drivers/media/usb/stk1160/stk1160-video.c index 8a6cdbc36a08..4f16e15ef965 100644 --- a/drivers/media/usb/stk1160/stk1160-video.c +++ b/drivers/media/usb/stk1160/stk1160-video.c @@ -109,7 +109,7 @@ void stk1160_buffer_done(struct stk1160 *dev) static inline void stk1160_copy_video(struct stk1160 *dev, u8 *src, int len) { - int linesdone, lineoff, lencopy; + int linesdone, lineoff, lencopy, offset; int bytesperline = dev->width * 2; struct stk1160_buffer *buf = dev->isoc_ctl.buf; u8 *dst = buf->mem; @@ -149,8 +149,13 @@ void stk1160_copy_video(struct stk1160 *dev, u8 *src, int len) * Check if we have enough space left in the buffer. * In that case, we force loop exit after copy. */ - if (lencopy > buf->bytesused - buf->length) { - lencopy = buf->bytesused - buf->length; + offset = dst - (u8 *)buf->mem; + if (offset > buf->length) { + dev_warn_ratelimited(dev->dev, "out of bounds offset\n"); + return; + } + if (lencopy > buf->length - offset) { + lencopy = buf->length - offset; remain = lencopy; } @@ -192,8 +197,13 @@ void stk1160_copy_video(struct stk1160 *dev, u8 *src, int len) * Check if we have enough space left in the buffer. * In that case, we force loop exit after copy. */ - if (lencopy > buf->bytesused - buf->length) { - lencopy = buf->bytesused - buf->length; + offset = dst - (u8 *)buf->mem; + if (offset > buf->length) { + dev_warn_ratelimited(dev->dev, "offset out of bounds\n"); + return; + } + if (lencopy > buf->length - offset) { + lencopy = buf->length - offset; remain = lencopy; } diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c index c647ba648805..13754460f5a0 100644 --- a/drivers/media/v4l2-core/v4l2-dev.c +++ b/drivers/media/v4l2-core/v4l2-dev.c @@ -969,8 +969,10 @@ int __video_register_device(struct video_device *vdev, int type, int nr, vdev->dev.devt = MKDEV(VIDEO_MAJOR, vdev->minor); vdev->dev.parent = vdev->dev_parent; dev_set_name(&vdev->dev, "%s%d", name_base, vdev->num); + mutex_lock(&videodev_lock); ret = device_register(&vdev->dev); if (ret < 0) { + mutex_unlock(&videodev_lock); printk(KERN_ERR "%s: device_register failed\n", __func__); goto cleanup; } @@ -990,6 +992,7 @@ int __video_register_device(struct video_device *vdev, int type, int nr, /* Part 6: Activate this minor. The char device can now be used. */ set_bit(V4L2_FL_REGISTERED, &vdev->flags); + mutex_unlock(&videodev_lock); return 0; diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index 04bf2dd134d0..c6abe176dc7e 100644 --- a/drivers/misc/mei/pci-me.c +++ b/drivers/misc/mei/pci-me.c @@ -372,8 +372,10 @@ static int mei_me_pci_resume(struct device *device) } err = mei_restart(dev); - if (err) + if (err) { + free_irq(pdev->irq, dev); return err; + } /* Start timer if stopped in suspend */ schedule_delayed_work(&dev->timer_work, HZ); diff --git a/drivers/misc/vmw_vmci/vmci_event.c b/drivers/misc/vmw_vmci/vmci_event.c index 84258a48029d..da24cb341a7f 100644 --- a/drivers/misc/vmw_vmci/vmci_event.c +++ b/drivers/misc/vmw_vmci/vmci_event.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -94,9 +95,12 @@ static void event_deliver(struct vmci_event_msg *event_msg) { struct vmci_subscription *cur; struct list_head *subscriber_list; + u32 sanitized_event, max_vmci_event; rcu_read_lock(); - subscriber_list = &subscriber_array[event_msg->event_data.event]; + max_vmci_event = ARRAY_SIZE(subscriber_array); + sanitized_event = array_index_nospec(event_msg->event_data.event, max_vmci_event); + subscriber_list = &subscriber_array[sanitized_event]; list_for_each_entry_rcu(cur, subscriber_list, node) { cur->callback(cur->id, &event_msg->event_data, cur->callback_data); diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c index 0ebb99925afc..41785ac33d9d 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c @@ -394,13 +394,12 @@ EXPORT_SYMBOL(mmc_retune_enable); /* * Pause re-tuning for a small set of operations. The pause begins after the - * next command and after first doing re-tuning. + * next command. */ void mmc_retune_pause(struct mmc_host *host) { if (!host->retune_paused) { host->retune_paused = 1; - mmc_retune_needed(host); mmc_retune_hold(host); } } diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c index 3f069926e4a3..987501d1f34e 100644 --- a/drivers/mmc/host/sdhci-pci-core.c +++ b/drivers/mmc/host/sdhci-pci-core.c @@ -846,7 +846,7 @@ static int jmicron_pmos(struct sdhci_pci_chip *chip, int on) ret = pci_read_config_byte(chip->pdev, 0xAE, &scratch); if (ret) - return ret; + goto fail; /* * Turn PMOS on [bit 0], set over current detection to 2.4 V @@ -857,7 +857,10 @@ static int jmicron_pmos(struct sdhci_pci_chip *chip, int on) else scratch &= ~0x47; - return pci_write_config_byte(chip->pdev, 0xAE, scratch); + ret = pci_write_config_byte(chip->pdev, 0xAE, scratch); + +fail: + return pcibios_err_to_errno(ret); } static int jmicron_probe(struct sdhci_pci_chip *chip) @@ -1718,7 +1721,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, ret = pci_read_config_byte(pdev, PCI_SLOT_INFO, &slots); if (ret) - return ret; + return pcibios_err_to_errno(ret); slots = PCI_SLOT_INFO_SLOTS(slots) + 1; dev_dbg(&pdev->dev, "found %d slot(s)\n", slots); @@ -1729,7 +1732,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, ret = pci_read_config_byte(pdev, PCI_SLOT_INFO, &first_bar); if (ret) - return ret; + return pcibios_err_to_errno(ret); first_bar &= PCI_SLOT_INFO_FIRST_BAR_MASK; diff --git a/drivers/mtd/nand/nand_hynix.c b/drivers/mtd/nand/nand_hynix.c index 985751eda317..9863701b4c6b 100644 --- a/drivers/mtd/nand/nand_hynix.c +++ b/drivers/mtd/nand/nand_hynix.c @@ -359,7 +359,7 @@ static int hynix_nand_rr_init(struct nand_chip *chip) if (ret) pr_warn("failed to initialize read-retry infrastructure"); - return 0; + return ret; } static void hynix_nand_extract_oobsize(struct nand_chip *chip, diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index f0bbc0fdeddc..fa882e973a51 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c @@ -1108,18 +1108,30 @@ static int enic_set_vf_port(struct net_device *netdev, int vf, pp->request = nla_get_u8(port[IFLA_PORT_REQUEST]); if (port[IFLA_PORT_PROFILE]) { + if (nla_len(port[IFLA_PORT_PROFILE]) != PORT_PROFILE_MAX) { + memcpy(pp, &prev_pp, sizeof(*pp)); + return -EINVAL; + } pp->set |= ENIC_SET_NAME; memcpy(pp->name, nla_data(port[IFLA_PORT_PROFILE]), PORT_PROFILE_MAX); } if (port[IFLA_PORT_INSTANCE_UUID]) { + if (nla_len(port[IFLA_PORT_INSTANCE_UUID]) != PORT_UUID_MAX) { + memcpy(pp, &prev_pp, sizeof(*pp)); + return -EINVAL; + } pp->set |= ENIC_SET_INSTANCE; memcpy(pp->instance_uuid, nla_data(port[IFLA_PORT_INSTANCE_UUID]), PORT_UUID_MAX); } if (port[IFLA_PORT_HOST_UUID]) { + if (nla_len(port[IFLA_PORT_HOST_UUID]) != PORT_UUID_MAX) { + memcpy(pp, &prev_pp, sizeof(*pp)); + return -EINVAL; + } pp->set |= ENIC_SET_HOST; memcpy(pp->host_uuid, nla_data(port[IFLA_PORT_HOST_UUID]), PORT_UUID_MAX); diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 4b169890d301..22cec349dead 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -3224,6 +3224,14 @@ static int fec_enet_init(struct net_device *ndev) return 0; } +static void fec_enet_deinit(struct net_device *ndev) +{ + struct fec_enet_private *fep = netdev_priv(ndev); + + netif_napi_del(&fep->napi); + fec_enet_free_queue(ndev); +} + #ifdef CONFIG_OF static int fec_reset_phy(struct platform_device *pdev) { @@ -3536,6 +3544,7 @@ failed_register: fec_enet_mii_remove(fep); failed_mii_init: failed_irq: + fec_enet_deinit(ndev); failed_init: fec_ptp_stop(pdev); failed_reset: @@ -3596,6 +3605,7 @@ fec_drv_remove(struct platform_device *pdev) pm_runtime_put_noidle(&pdev->dev); pm_runtime_disable(&pdev->dev); + fec_enet_deinit(ndev); free_netdev(ndev); return 0; } diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c index e22a69f02186..b42c68833292 100644 --- a/drivers/net/ethernet/freescale/fec_ptp.c +++ b/drivers/net/ethernet/freescale/fec_ptp.c @@ -111,7 +111,6 @@ static int fec_ptp_enable_pps(struct fec_enet_private *fep, uint enable) { unsigned long flags; u32 val, tempval; - int inc; struct timespec64 ts; u64 ns; val = 0; @@ -121,15 +120,13 @@ static int fec_ptp_enable_pps(struct fec_enet_private *fep, uint enable) return -EINVAL; } - if (fep->pps_enable == enable) - return 0; - - fep->pps_channel = DEFAULT_PPS_CHANNEL; - fep->reload_period = PPS_OUPUT_RELOAD_PERIOD; - inc = fep->ptp_inc; - spin_lock_irqsave(&fep->tmreg_lock, flags); + if (fep->pps_enable == enable) { + spin_unlock_irqrestore(&fep->tmreg_lock, flags); + return 0; + } + if (enable) { /* clear capture or output compare interrupt status if have. */ @@ -462,6 +459,9 @@ static int fec_ptp_enable(struct ptp_clock_info *ptp, int ret = 0; if (rq->type == PTP_CLK_REQ_PPS) { + fep->pps_channel = DEFAULT_PPS_CHANNEL; + fep->reload_period = PPS_OUPUT_RELOAD_PERIOD; + ret = fec_ptp_enable_pps(fep, on); return ret; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index 14bab8a5550d..75c491ab6127 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -3152,7 +3152,7 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats) stats->tx_dropped = sstats->tx_queue_dropped; } - stats->rx_dropped = priv->stats.qcnt.rx_out_of_buffer; + stats->rx_missed_errors = priv->stats.qcnt.rx_out_of_buffer; stats->rx_length_errors = PPORT_802_3_GET(pstats, a_in_range_length_errors) + diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c index 6283cbc9f6ed..ab9beca09ca5 100644 --- a/drivers/net/ipvlan/ipvlan_core.c +++ b/drivers/net/ipvlan/ipvlan_core.c @@ -369,7 +369,7 @@ static struct ipvl_addr *ipvlan_addr_lookup(struct ipvl_port *port, return addr; } -static int ipvlan_process_v4_outbound(struct sk_buff *skb) +static noinline_for_stack int ipvlan_process_v4_outbound(struct sk_buff *skb) { const struct iphdr *ip4h = ip_hdr(skb); struct net_device *dev = skb->dev; @@ -397,26 +397,23 @@ static int ipvlan_process_v4_outbound(struct sk_buff *skb) memset(IPCB(skb), 0, sizeof(*IPCB(skb))); - err = ip_local_out(net, skb->sk, skb); + err = ip_local_out(net, NULL, skb); if (unlikely(net_xmit_eval(err))) - dev->stats.tx_errors++; + DEV_STATS_INC(dev, tx_errors); else ret = NET_XMIT_SUCCESS; goto out; err: - dev->stats.tx_errors++; + DEV_STATS_INC(dev, tx_errors); kfree_skb(skb); out: return ret; } -static int ipvlan_process_v6_outbound(struct sk_buff *skb) +static noinline_for_stack int +ipvlan_route_v6_outbound(struct net_device *dev, struct sk_buff *skb) { const struct ipv6hdr *ip6h = ipv6_hdr(skb); - struct net_device *dev = skb->dev; - struct net *net = dev_net(dev); - struct dst_entry *dst; - int err, ret = NET_XMIT_DROP; struct flowi6 fl6 = { .flowi6_oif = dev->ifindex, .daddr = ip6h->daddr, @@ -426,27 +423,38 @@ static int ipvlan_process_v6_outbound(struct sk_buff *skb) .flowi6_mark = skb->mark, .flowi6_proto = ip6h->nexthdr, }; + struct dst_entry *dst; + int err; - dst = ip6_route_output(net, NULL, &fl6); - if (dst->error) { - ret = dst->error; + dst = ip6_route_output(dev_net(dev), NULL, &fl6); + err = dst->error; + if (err) { dst_release(dst); - goto err; + return err; } skb_dst_set(skb, dst); + return 0; +} + +static int ipvlan_process_v6_outbound(struct sk_buff *skb) +{ + struct net_device *dev = skb->dev; + int err, ret = NET_XMIT_DROP; + + err = ipvlan_route_v6_outbound(dev, skb); + if (unlikely(err)) { + DEV_STATS_INC(dev, tx_errors); + kfree_skb(skb); + return err; + } memset(IP6CB(skb), 0, sizeof(*IP6CB(skb))); - err = ip6_local_out(net, skb->sk, skb); + err = ip6_local_out(dev_net(dev), NULL, skb); if (unlikely(net_xmit_eval(err))) - dev->stats.tx_errors++; + DEV_STATS_INC(dev, tx_errors); else ret = NET_XMIT_SUCCESS; - goto out; -err: - dev->stats.tx_errors++; - kfree_skb(skb); -out: return ret; } diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c index 11b7006142ce..70131c4f1aae 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c @@ -388,6 +388,7 @@ static void ipvlan_get_stats64(struct net_device *dev, s->rx_dropped = rx_errs; s->tx_dropped = tx_drps; } + s->tx_errors = DEV_STATS_READ(dev, tx_errors); } static int ipvlan_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 04a1fec0c99a..1af8b2af14ac 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -3254,8 +3254,8 @@ static void macsec_get_stats64(struct net_device *dev, s->tx_bytes += tmp.tx_bytes; } - s->rx_dropped = dev->stats.rx_dropped; - s->tx_dropped = dev->stats.tx_dropped; + s->rx_dropped = DEV_STATS_READ(dev, rx_dropped); + s->tx_dropped = DEV_STATS_READ(dev, tx_dropped); } static int macsec_get_iflink(const struct net_device *dev) diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c index 8ac2bfcdba66..98c21667f388 100644 --- a/drivers/net/usb/ax88179_178a.c +++ b/drivers/net/usb/ax88179_178a.c @@ -357,7 +357,8 @@ static void ax88179_status(struct usbnet *dev, struct urb *urb) if (netif_carrier_ok(dev->net) != link) { usbnet_link_change(dev, link, 1); - netdev_info(dev->net, "ax88179 - Link status is: %d\n", link); + if (!link) + netdev_info(dev->net, "ax88179 - Link status is: 0\n"); } } @@ -1549,6 +1550,7 @@ static int ax88179_link_reset(struct usbnet *dev) GMII_PHY_PHYSR, 2, &tmp16); if (!(tmp16 & GMII_PHY_PHYSR_LINK)) { + netdev_info(dev->net, "ax88179 - Link status is: 0\n"); return 0; } else if (GMII_PHY_PHYSR_GIGA == (tmp16 & GMII_PHY_PHYSR_SMASK)) { mode |= AX_MEDIUM_GIGAMODE | AX_MEDIUM_EN_125MHZ; @@ -1586,6 +1588,8 @@ static int ax88179_link_reset(struct usbnet *dev) netif_carrier_on(dev->net); + netdev_info(dev->net, "ax88179 - Link status is: 1\n"); + return 0; } diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 5560c08e44fa..ec09ef974302 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c @@ -1315,6 +1315,9 @@ static const struct usb_device_id products[] = { {QMI_QUIRK_SET_DTR(0x1bc7, 0x1060, 2)}, /* Telit LN920 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1070, 2)}, /* Telit FN990 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1080, 2)}, /* Telit FE990 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a0, 0)}, /* Telit FN920C04 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a4, 0)}, /* Telit FN920C04 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a9, 0)}, /* Telit FN920C04 */ {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */ {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */ {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */ diff --git a/drivers/net/usb/rtl8150.c b/drivers/net/usb/rtl8150.c index 3f4fc78498e0..4cde752f0ee7 100644 --- a/drivers/net/usb/rtl8150.c +++ b/drivers/net/usb/rtl8150.c @@ -803,7 +803,8 @@ static int rtl8150_get_link_ksettings(struct net_device *netdev, struct ethtool_link_ksettings *ecmd) { rtl8150_t *dev = netdev_priv(netdev); - short lpa, bmcr; + short lpa = 0; + short bmcr = 0; u32 supported; supported = (SUPPORTED_10baseT_Half | diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index e70eac578f5e..038a221e4acc 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -273,16 +273,18 @@ done: mutex_unlock(&dev->phy_mutex); } -static int smsc95xx_mdio_read_nopm(struct net_device *netdev, int phy_id, - int idx) +static int smsc95xx_mdio_read_nopm(struct usbnet *dev, int idx) { - return __smsc95xx_mdio_read(netdev, phy_id, idx, 1); + struct mii_if_info *mii = &dev->mii; + + return __smsc95xx_mdio_read(dev->net, mii->phy_id, idx, 1); } -static void smsc95xx_mdio_write_nopm(struct net_device *netdev, int phy_id, - int idx, int regval) +static void smsc95xx_mdio_write_nopm(struct usbnet *dev, int idx, int regval) { - __smsc95xx_mdio_write(netdev, phy_id, idx, regval, 1); + struct mii_if_info *mii = &dev->mii; + + __smsc95xx_mdio_write(dev->net, mii->phy_id, idx, regval, 1); } static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx) @@ -467,7 +469,7 @@ static unsigned int smsc95xx_hash(char addr[ETH_ALEN]) static void smsc95xx_set_multicast(struct net_device *netdev) { struct usbnet *dev = netdev_priv(netdev); - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; unsigned long flags; int ret; @@ -562,7 +564,7 @@ static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, static int smsc95xx_link_reset(struct usbnet *dev) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; struct mii_if_info *mii = &dev->mii; struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET }; unsigned long flags; @@ -632,7 +634,7 @@ static void smsc95xx_status(struct usbnet *dev, struct urb *urb) static void set_carrier(struct usbnet *dev, bool link) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; if (pdata->link_ok == link) return; @@ -761,7 +763,7 @@ static void smsc95xx_ethtool_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) { struct usbnet *dev = netdev_priv(net); - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; wolinfo->supported = SUPPORTED_WAKE; wolinfo->wolopts = pdata->wolopts; @@ -771,7 +773,7 @@ static int smsc95xx_ethtool_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) { struct usbnet *dev = netdev_priv(net); - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; int ret; if (wolinfo->wolopts & ~SUPPORTED_WAKE) @@ -810,7 +812,7 @@ static int get_mdix_status(struct net_device *net) static void set_mdix_status(struct net_device *net, __u8 mdix_ctrl) { struct usbnet *dev = netdev_priv(net); - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; int buf; if ((pdata->chip_id == ID_REV_CHIP_ID_9500A_) || @@ -859,7 +861,7 @@ static int smsc95xx_get_link_ksettings(struct net_device *net, struct ethtool_link_ksettings *cmd) { struct usbnet *dev = netdev_priv(net); - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; int retval; retval = usbnet_get_link_ksettings(net, cmd); @@ -874,7 +876,7 @@ static int smsc95xx_set_link_ksettings(struct net_device *net, const struct ethtool_link_ksettings *cmd) { struct usbnet *dev = netdev_priv(net); - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; int retval; if (pdata->mdix_ctrl != cmd->base.eth_tp_mdix_ctrl) @@ -956,7 +958,7 @@ static int smsc95xx_set_mac_address(struct usbnet *dev) /* starts the TX path */ static int smsc95xx_start_tx_path(struct usbnet *dev) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; unsigned long flags; int ret; @@ -976,7 +978,7 @@ static int smsc95xx_start_tx_path(struct usbnet *dev) /* Starts the Receive path */ static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; unsigned long flags; spin_lock_irqsave(&pdata->mac_cr_lock, flags); @@ -1033,8 +1035,8 @@ static int smsc95xx_phy_initialize(struct usbnet *dev) static int smsc95xx_reset(struct usbnet *dev) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); - u32 read_buf, write_buf, burst_cap; + struct smsc95xx_priv *pdata = dev->driver_priv; + u32 read_buf, burst_cap; int ret = 0, timeout; netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n"); @@ -1176,10 +1178,13 @@ static int smsc95xx_reset(struct usbnet *dev) return ret; netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf); + ret = smsc95xx_read_reg(dev, LED_GPIO_CFG, &read_buf); + if (ret < 0) + return ret; /* Configure GPIO pins as LED outputs */ - write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED | - LED_GPIO_CFG_FDX_LED; - ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf); + read_buf |= LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED | + LED_GPIO_CFG_FDX_LED; + ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, read_buf); if (ret < 0) return ret; @@ -1261,7 +1266,7 @@ static const struct net_device_ops smsc95xx_netdev_ops = { static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) { - struct smsc95xx_priv *pdata = NULL; + struct smsc95xx_priv *pdata; u32 val; int ret; @@ -1273,13 +1278,12 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) return ret; } - dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc95xx_priv), - GFP_KERNEL); - - pdata = (struct smsc95xx_priv *)(dev->data[0]); + pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); if (!pdata) return -ENOMEM; + dev->driver_priv = pdata; + spin_lock_init(&pdata->mac_cr_lock); /* LAN95xx devices do not alter the computed checksum of 0 to 0xffff. @@ -1342,15 +1346,11 @@ free_pdata: static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; - if (pdata) { - cancel_delayed_work_sync(&pdata->carrier_check); - netif_dbg(dev, ifdown, dev->net, "free pdata\n"); - kfree(pdata); - pdata = NULL; - dev->data[0] = 0; - } + cancel_delayed_work_sync(&pdata->carrier_check); + netif_dbg(dev, ifdown, dev->net, "free pdata\n"); + kfree(pdata); } static u32 smsc_crc(const u8 *buffer, size_t len, int filter) @@ -1361,39 +1361,37 @@ static u32 smsc_crc(const u8 *buffer, size_t len, int filter) static int smsc95xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask) { - struct mii_if_info *mii = &dev->mii; int ret; netdev_dbg(dev->net, "enabling PHY wakeup interrupts\n"); /* read to clear */ - ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC); + ret = smsc95xx_mdio_read_nopm(dev, PHY_INT_SRC); if (ret < 0) return ret; /* enable interrupt source */ - ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK); + ret = smsc95xx_mdio_read_nopm(dev, PHY_INT_MASK); if (ret < 0) return ret; ret |= mask; - smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_INT_MASK, ret); + smsc95xx_mdio_write_nopm(dev, PHY_INT_MASK, ret); return 0; } static int smsc95xx_link_ok_nopm(struct usbnet *dev) { - struct mii_if_info *mii = &dev->mii; int ret; /* first, a dummy read, needed to latch some MII phys */ - ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); + ret = smsc95xx_mdio_read_nopm(dev, MII_BMSR); if (ret < 0) return ret; - ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); + ret = smsc95xx_mdio_read_nopm(dev, MII_BMSR); if (ret < 0) return ret; @@ -1402,7 +1400,7 @@ static int smsc95xx_link_ok_nopm(struct usbnet *dev) static int smsc95xx_enter_suspend0(struct usbnet *dev) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; u32 val; int ret; @@ -1441,8 +1439,7 @@ static int smsc95xx_enter_suspend0(struct usbnet *dev) static int smsc95xx_enter_suspend1(struct usbnet *dev) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); - struct mii_if_info *mii = &dev->mii; + struct smsc95xx_priv *pdata = dev->driver_priv; u32 val; int ret; @@ -1450,17 +1447,17 @@ static int smsc95xx_enter_suspend1(struct usbnet *dev) * compatibility with non-standard link partners */ if (pdata->features & FEATURE_PHY_NLP_CROSSOVER) - smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_EDPD_CONFIG, - PHY_EDPD_CONFIG_DEFAULT); + smsc95xx_mdio_write_nopm(dev, PHY_EDPD_CONFIG, + PHY_EDPD_CONFIG_DEFAULT); /* enable energy detect power-down mode */ - ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS); + ret = smsc95xx_mdio_read_nopm(dev, PHY_MODE_CTRL_STS); if (ret < 0) return ret; ret |= MODE_CTRL_STS_EDPWRDOWN_; - smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS, ret); + smsc95xx_mdio_write_nopm(dev, PHY_MODE_CTRL_STS, ret); /* enter SUSPEND1 mode */ ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); @@ -1489,7 +1486,7 @@ static int smsc95xx_enter_suspend1(struct usbnet *dev) static int smsc95xx_enter_suspend2(struct usbnet *dev) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; u32 val; int ret; @@ -1511,7 +1508,7 @@ static int smsc95xx_enter_suspend2(struct usbnet *dev) static int smsc95xx_enter_suspend3(struct usbnet *dev) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; u32 val; int ret; @@ -1550,7 +1547,7 @@ static int smsc95xx_enter_suspend3(struct usbnet *dev) static int smsc95xx_autosuspend(struct usbnet *dev, u32 link_up) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; int ret; if (!netif_running(dev->net)) { @@ -1598,7 +1595,7 @@ static int smsc95xx_autosuspend(struct usbnet *dev, u32 link_up) static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) { struct usbnet *dev = usb_get_intfdata(intf); - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; u32 val, link_up; int ret; @@ -1869,7 +1866,7 @@ static int smsc95xx_resume(struct usb_interface *intf) u32 val; BUG_ON(!dev); - pdata = (struct smsc95xx_priv *)(dev->data[0]); + pdata = dev->driver_priv; suspend_flags = pdata->suspend_flags; netdev_dbg(dev->net, "resume suspend_flags=0x%02x\n", suspend_flags); @@ -1924,9 +1921,11 @@ static int smsc95xx_reset_resume(struct usb_interface *intf) static void smsc95xx_rx_csum_offload(struct sk_buff *skb) { - skb->csum = *(u16 *)(skb_tail_pointer(skb) - 2); + u16 *csum_ptr = (u16 *)(skb_tail_pointer(skb) - 2); + + skb->csum = (__force __wsum)get_unaligned(csum_ptr); skb->ip_summed = CHECKSUM_COMPLETE; - skb_trim(skb, skb->len - 2); + skb_trim(skb, skb->len - 2); /* remove csum */ } static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) @@ -1985,25 +1984,22 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) if (dev->net->features & NETIF_F_RXCSUM) smsc95xx_rx_csum_offload(skb); skb_trim(skb, skb->len - 4); /* remove fcs */ - skb->truesize = size + sizeof(struct sk_buff); return 1; } - ax_skb = skb_clone(skb, GFP_ATOMIC); + ax_skb = netdev_alloc_skb_ip_align(dev->net, size); if (unlikely(!ax_skb)) { netdev_warn(dev->net, "Error allocating skb\n"); return 0; } - ax_skb->len = size; - ax_skb->data = packet; - skb_set_tail_pointer(ax_skb, size); + skb_put(ax_skb, size); + memcpy(ax_skb->data, packet, size); if (dev->net->features & NETIF_F_RXCSUM) smsc95xx_rx_csum_offload(ax_skb); skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */ - ax_skb->truesize = size + sizeof(struct sk_buff); usbnet_skb_return(dev, ax_skb); } @@ -2081,7 +2077,7 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, static int smsc95xx_manage_power(struct usbnet *dev, int on) { - struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); + struct smsc95xx_priv *pdata = dev->driver_priv; dev->intf->needs_remote_wakeup = on; diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c index dbdb027abe47..4a723696103b 100644 --- a/drivers/net/usb/sr9700.c +++ b/drivers/net/usb/sr9700.c @@ -418,19 +418,15 @@ static int sr9700_rx_fixup(struct usbnet *dev, struct sk_buff *skb) skb_pull(skb, 3); skb->len = len; skb_set_tail_pointer(skb, len); - skb->truesize = len + sizeof(struct sk_buff); return 2; } - /* skb_clone is used for address align */ - sr_skb = skb_clone(skb, GFP_ATOMIC); + sr_skb = netdev_alloc_skb_ip_align(dev->net, len); if (!sr_skb) return 0; - sr_skb->len = len; - sr_skb->data = skb->data + 3; - skb_set_tail_pointer(sr_skb, len); - sr_skb->truesize = len + sizeof(struct sk_buff); + skb_put(sr_skb, len); + memcpy(sr_skb->data, skb->data + 3, len); usbnet_skb_return(dev, sr_skb); skb_pull(skb, len + SR_RX_OVERHEAD); diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 8e1a3c523b09..f90b95b0c2e8 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -2568,8 +2568,15 @@ static int virtnet_probe(struct virtio_device *vdev) dev->features |= dev->hw_features & NETIF_F_ALL_TSO; /* (!csum && gso) case will be fixed by register_netdev() */ } - if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_CSUM)) - dev->features |= NETIF_F_RXCSUM; + + /* 1. With VIRTIO_NET_F_GUEST_CSUM negotiation, the driver doesn't + * need to calculate checksums for partially checksummed packets, + * as they're considered valid by the upper layer. + * 2. Without VIRTIO_NET_F_GUEST_CSUM negotiation, the driver only + * receives fully checksummed packets. The device may assist in + * validating these packets' checksums, so the driver won't have to. + */ + dev->features |= NETIF_F_RXCSUM; dev->vlan_features = dev->features; diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 1c0e0694c7e7..3aa49417cdfd 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -1013,6 +1013,10 @@ static bool vxlan_snoop(struct net_device *dev, struct vxlan_fdb *f; u32 ifindex = 0; + /* Ignore packets from invalid src-address */ + if (!is_valid_ether_addr(src_mac)) + return true; + #if IS_ENABLED(CONFIG_IPV6) if (src_ip->sa.sa_family == AF_INET6 && (ipv6_addr_type(&src_ip->sin6.sin6_addr) & IPV6_ADDR_LINKLOCAL)) @@ -1322,10 +1326,6 @@ static bool vxlan_set_mac(struct vxlan_dev *vxlan, if (ether_addr_equal(eth_hdr(skb)->h_source, vxlan->dev->dev_addr)) return false; - /* Ignore packets from invalid src-address */ - if (!is_valid_ether_addr(eth_hdr(skb)->h_source)) - return false; - /* Get address from the outer IP header */ if (vxlan_get_sk_family(vs) == AF_INET) { saddr.sin.sin_addr.s_addr = ip_hdr(skb)->saddr; diff --git a/drivers/net/wireless/ath/ar5523/ar5523.c b/drivers/net/wireless/ath/ar5523/ar5523.c index 74f23e4ded1c..0c1a7f60b84e 100644 --- a/drivers/net/wireless/ath/ar5523/ar5523.c +++ b/drivers/net/wireless/ath/ar5523/ar5523.c @@ -1590,6 +1590,20 @@ static int ar5523_probe(struct usb_interface *intf, struct ar5523 *ar; int error = -ENOMEM; + static const u8 bulk_ep_addr[] = { + AR5523_CMD_TX_PIPE | USB_DIR_OUT, + AR5523_DATA_TX_PIPE | USB_DIR_OUT, + AR5523_CMD_RX_PIPE | USB_DIR_IN, + AR5523_DATA_RX_PIPE | USB_DIR_IN, + 0}; + + if (!usb_check_bulk_endpoints(intf, bulk_ep_addr)) { + dev_err(&dev->dev, + "Could not find all expected endpoints\n"); + error = -ENODEV; + goto out; + } + /* * Load firmware if the device requires it. This will return * -ENXIO on success and we'll get called back afer the usb diff --git a/drivers/net/wireless/ath/ath10k/debugfs_sta.c b/drivers/net/wireless/ath/ath10k/debugfs_sta.c index b260b09dd4d3..b4e6eb2e477f 100644 --- a/drivers/net/wireless/ath/ath10k/debugfs_sta.c +++ b/drivers/net/wireless/ath/ath10k/debugfs_sta.c @@ -331,7 +331,7 @@ ath10k_dbg_sta_write_peer_debug_trigger(struct file *file, } out: mutex_unlock(&ar->conf_mutex); - return count; + return ret ?: count; } static const struct file_operations fops_peer_debug_trigger = { diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c index 1d0b8f26afa1..1a3c338ce4a5 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.c +++ b/drivers/net/wireless/ath/ath10k/wmi.c @@ -1709,12 +1709,32 @@ void ath10k_wmi_put_wmi_channel(struct wmi_channel *ch, int ath10k_wmi_wait_for_service_ready(struct ath10k *ar) { - unsigned long time_left; + unsigned long time_left, i; time_left = wait_for_completion_timeout(&ar->wmi.service_ready, WMI_SERVICE_READY_TIMEOUT_HZ); - if (!time_left) - return -ETIMEDOUT; + if (!time_left) { + /* Sometimes the PCI HIF doesn't receive interrupt + * for the service ready message even if the buffer + * was completed. PCIe sniffer shows that it's + * because the corresponding CE ring doesn't fires + * it. Workaround here by polling CE rings once. + */ + ath10k_warn(ar, "failed to receive service ready completion, polling..\n"); + + for (i = 0; i < CE_COUNT; i++) + ath10k_hif_send_complete_check(ar, i, 1); + + time_left = wait_for_completion_timeout(&ar->wmi.service_ready, + WMI_SERVICE_READY_TIMEOUT_HZ); + if (!time_left) { + ath10k_warn(ar, "polling timed out\n"); + return -ETIMEDOUT; + } + + ath10k_warn(ar, "service ready completion received, continuing normally\n"); + } + return 0; } diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c index 99f1897a775d..738f43b17e95 100644 --- a/drivers/net/wireless/ath/carl9170/usb.c +++ b/drivers/net/wireless/ath/carl9170/usb.c @@ -1069,6 +1069,38 @@ static int carl9170_usb_probe(struct usb_interface *intf, ar->usb_ep_cmd_is_bulk = true; } + /* Verify that all expected endpoints are present */ + if (ar->usb_ep_cmd_is_bulk) { + u8 bulk_ep_addr[] = { + AR9170_USB_EP_RX | USB_DIR_IN, + AR9170_USB_EP_TX | USB_DIR_OUT, + AR9170_USB_EP_CMD | USB_DIR_OUT, + 0}; + u8 int_ep_addr[] = { + AR9170_USB_EP_IRQ | USB_DIR_IN, + 0}; + if (!usb_check_bulk_endpoints(intf, bulk_ep_addr) || + !usb_check_int_endpoints(intf, int_ep_addr)) + err = -ENODEV; + } else { + u8 bulk_ep_addr[] = { + AR9170_USB_EP_RX | USB_DIR_IN, + AR9170_USB_EP_TX | USB_DIR_OUT, + 0}; + u8 int_ep_addr[] = { + AR9170_USB_EP_IRQ | USB_DIR_IN, + AR9170_USB_EP_CMD | USB_DIR_OUT, + 0}; + if (!usb_check_bulk_endpoints(intf, bulk_ep_addr) || + !usb_check_int_endpoints(intf, int_ep_addr)) + err = -ENODEV; + } + + if (err) { + carl9170_free(ar); + return err; + } + usb_set_intfdata(intf, ar); SET_IEEE80211_DEV(ar->hw, &intf->dev); diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c index 754dcc1c1f40..dcc425727957 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c @@ -149,20 +149,10 @@ void iwl_mvm_mfu_assert_dump_notif(struct iwl_mvm *mvm, { struct iwl_rx_packet *pkt = rxb_addr(rxb); struct iwl_mfu_assert_dump_notif *mfu_dump_notif = (void *)pkt->data; - __le32 *dump_data = mfu_dump_notif->data; - int n_words = le32_to_cpu(mfu_dump_notif->data_size) / sizeof(__le32); - int i; if (mfu_dump_notif->index_num == 0) IWL_INFO(mvm, "MFUART assert id 0x%x occurred\n", le32_to_cpu(mfu_dump_notif->assert_id)); - - for (i = 0; i < n_words; i++) - IWL_DEBUG_INFO(mvm, - "MFUART assert dump, dword %u: 0x%08x\n", - le16_to_cpu(mfu_dump_notif->index_num) * - n_words + i, - le32_to_cpu(dump_data[i])); } static bool iwl_alive_fn(struct iwl_notif_wait_data *notif_wait, diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c index d5f766044221..95454eca7a01 100644 --- a/drivers/net/wireless/marvell/mwl8k.c +++ b/drivers/net/wireless/marvell/mwl8k.c @@ -2706,7 +2706,7 @@ __mwl8k_cmd_mac_multicast_adr(struct ieee80211_hw *hw, int allmulti, cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_MULTICAST); cmd->numaddr = cpu_to_le16(mc_count); netdev_hw_addr_list_for_each(ha, mc_list) { - memcpy(cmd->addr[i], ha->addr, ETH_ALEN); + memcpy(cmd->addr[i++], ha->addr, ETH_ALEN); } } diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c index b6aeb1d70951..3635a38f1f12 100644 --- a/drivers/nvme/target/configfs.c +++ b/drivers/nvme/target/configfs.c @@ -396,10 +396,18 @@ static ssize_t nvmet_ns_enable_store(struct config_item *item, if (strtobool(page, &enable)) return -EINVAL; + /* + * take a global nvmet_config_sem because the disable routine has a + * window where it releases the subsys-lock, giving a chance to + * a parallel enable to concurrently execute causing the disable to + * have a misaccounting of the ns percpu_ref. + */ + down_write(&nvmet_config_sem); if (enable) ret = nvmet_ns_enable(ns); else nvmet_ns_disable(ns); + up_write(&nvmet_config_sem); return ret ? ret : count; } diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index ee2666d87287..5a6e23c74c22 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c @@ -1050,8 +1050,8 @@ static struct pinctrl *create_pinctrl(struct device *dev, * an -EPROBE_DEFER later, as that is the worst case. */ if (ret == -EPROBE_DEFER) { - pinctrl_free(p, false); mutex_unlock(&pinctrl_maps_mutex); + pinctrl_free(p, false); return ERR_PTR(ret); } } diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index 1f4b9fc9e278..f7e5b02867a8 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -658,23 +658,68 @@ static struct rockchip_mux_recalced_data rk3128_mux_recalced_data[] = { static struct rockchip_mux_recalced_data rk3328_mux_recalced_data[] = { { - .num = 2, - .pin = 12, - .reg = 0x24, - .bit = 8, - .mask = 0x3 - }, { + /* gpio2_b7_sel */ .num = 2, .pin = 15, .reg = 0x28, .bit = 0, .mask = 0x7 }, { + /* gpio2_c7_sel */ .num = 2, .pin = 23, .reg = 0x30, .bit = 14, .mask = 0x3 + }, { + /* gpio3_b1_sel */ + .num = 3, + .pin = 9, + .reg = 0x44, + .bit = 2, + .mask = 0x3 + }, { + /* gpio3_b2_sel */ + .num = 3, + .pin = 10, + .reg = 0x44, + .bit = 4, + .mask = 0x3 + }, { + /* gpio3_b3_sel */ + .num = 3, + .pin = 11, + .reg = 0x44, + .bit = 6, + .mask = 0x3 + }, { + /* gpio3_b4_sel */ + .num = 3, + .pin = 12, + .reg = 0x44, + .bit = 8, + .mask = 0x3 + }, { + /* gpio3_b5_sel */ + .num = 3, + .pin = 13, + .reg = 0x44, + .bit = 10, + .mask = 0x3 + }, { + /* gpio3_b6_sel */ + .num = 3, + .pin = 14, + .reg = 0x44, + .bit = 12, + .mask = 0x3 + }, { + /* gpio3_b7_sel */ + .num = 3, + .pin = 15, + .reg = 0x44, + .bit = 14, + .mask = 0x3 }, }; @@ -1976,8 +2021,10 @@ static int rockchip_pmx_set(struct pinctrl_dev *pctldev, unsigned selector, if (ret) { /* revert the already done pin settings */ - for (cnt--; cnt >= 0; cnt--) + for (cnt--; cnt >= 0; cnt--) { + bank = pin_to_bank(info, pins[cnt]); rockchip_set_mux(bank, pins[cnt] - bank->pin_base, 0); + } return ret; } @@ -3416,7 +3463,7 @@ static struct rockchip_pin_bank rk3328_pin_banks[] = { PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", 0, 0, 0, 0), PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", 0, 0, 0, 0), PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", 0, - IOMUX_WIDTH_3BIT, + 0, IOMUX_WIDTH_3BIT, 0), PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c index a08d555963f8..4570f914582d 100644 --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -97,7 +97,8 @@ int ptp_set_pinfunc(struct ptp_clock *ptp, unsigned int pin, } if (info->verify(info, pin, func, chan)) { - pr_err("driver cannot use function %u on pin %u\n", func, chan); + pr_err("driver cannot use function %u and channel %u on pin %u\n", + func, chan, pin); return -EOPNOTSUPP; } diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c index 6139512aab7b..5668e3a2f0ea 100644 --- a/drivers/pwm/pwm-stm32.c +++ b/drivers/pwm/pwm-stm32.c @@ -84,6 +84,9 @@ static int stm32_pwm_config(struct stm32_pwm *priv, int ch, prd = div; + if (!prd) + return -EINVAL; + if (prescaler > MAX_TIM_PSC) return -EINVAL; diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 0d9db5239034..8b5481423b29 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -2618,6 +2618,7 @@ struct regmap *regulator_get_regmap(struct regulator *regulator) return map ? map : ERR_PTR(-EOPNOTSUPP); } +EXPORT_SYMBOL_GPL(regulator_get_regmap); /** * regulator_get_hardware_vsel_register - get the HW voltage selector register diff --git a/drivers/scsi/bfa/bfad_debugfs.c b/drivers/scsi/bfa/bfad_debugfs.c index 05f523971348..89b8aa93eda5 100644 --- a/drivers/scsi/bfa/bfad_debugfs.c +++ b/drivers/scsi/bfa/bfad_debugfs.c @@ -262,7 +262,7 @@ bfad_debugfs_write_regrd(struct file *file, const char __user *buf, unsigned long flags; void *kern_buf; - kern_buf = memdup_user(buf, nbytes); + kern_buf = memdup_user_nul(buf, nbytes); if (IS_ERR(kern_buf)) return PTR_ERR(kern_buf); @@ -329,7 +329,7 @@ bfad_debugfs_write_regwr(struct file *file, const char __user *buf, unsigned long flags; void *kern_buf; - kern_buf = memdup_user(buf, nbytes); + kern_buf = memdup_user_nul(buf, nbytes); if (IS_ERR(kern_buf)) return PTR_ERR(kern_buf); diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index 34434b7107ee..f903d21dcdb7 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -5627,7 +5627,7 @@ static int hpsa_scsi_host_alloc(struct ctlr_info *h) { struct Scsi_Host *sh; - sh = scsi_host_alloc(&hpsa_driver_template, sizeof(struct ctlr_info)); + sh = scsi_host_alloc(&hpsa_driver_template, sizeof(struct ctlr_info *)); if (sh == NULL) { dev_err(&h->pdev->dev, "scsi_host_alloc failed\n"); return -ENOMEM; diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c index f77d72f01da9..f84679036908 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -269,8 +269,7 @@ static void sas_set_ex_phy(struct domain_device *dev, int phy_id, void *rsp) /* help some expanders that fail to zero sas_address in the 'no * device' case */ - if (phy->attached_dev_type == SAS_PHY_UNUSED || - phy->linkrate < SAS_LINK_RATE_1_5_GBPS) + if (phy->attached_dev_type == SAS_PHY_UNUSED) memset(phy->attached_sas_addr, 0, SAS_ADDR_SIZE); else memcpy(phy->attached_sas_addr, dr->attached_sas_addr, SAS_ADDR_SIZE); diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index 8c53c87b9e28..17c75293ad19 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c @@ -5438,6 +5438,12 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) ioc->pd_handles_sz = (ioc->facts.MaxDevHandle / 8); if (ioc->facts.MaxDevHandle % 8) ioc->pd_handles_sz++; + /* + * pd_handles_sz should have, at least, the minimal room for + * set_bit()/test_bit(), otherwise out-of-memory touch may occur. + */ + ioc->pd_handles_sz = ALIGN(ioc->pd_handles_sz, sizeof(unsigned long)); + ioc->pd_handles = kzalloc(ioc->pd_handles_sz, GFP_KERNEL); if (!ioc->pd_handles) { @@ -5455,6 +5461,13 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) ioc->pend_os_device_add_sz = (ioc->facts.MaxDevHandle / 8); if (ioc->facts.MaxDevHandle % 8) ioc->pend_os_device_add_sz++; + + /* + * pend_os_device_add_sz should have, at least, the minimal room for + * set_bit()/test_bit(), otherwise out-of-memory may occur. + */ + ioc->pend_os_device_add_sz = ALIGN(ioc->pend_os_device_add_sz, + sizeof(unsigned long)); ioc->pend_os_device_add = kzalloc(ioc->pend_os_device_add_sz, GFP_KERNEL); if (!ioc->pend_os_device_add) { @@ -5537,6 +5550,13 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) if (r) goto out_free_resources; + /* + * Copy current copy of IOCFacts in prev_fw_facts + * and it will be used during online firmware upgrade. + */ + memcpy(&ioc->prev_fw_facts, &ioc->facts, + sizeof(struct mpt3sas_facts)); + ioc->non_operational_loop = 0; ioc->got_task_abort_from_ioctl = 0; return 0; @@ -5705,6 +5725,91 @@ mpt3sas_wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc) wait_event_timeout(ioc->reset_wq, ioc->pending_io_count == 0, 10 * HZ); } +/** + * _base_check_ioc_facts_changes - Look for increase/decrease of IOCFacts + * attributes during online firmware upgrade and update the corresponding + * IOC variables accordingly. + * + * @ioc: Pointer to MPT_ADAPTER structure + */ +static int +_base_check_ioc_facts_changes(struct MPT3SAS_ADAPTER *ioc) +{ + u16 pd_handles_sz; + void *pd_handles = NULL, *blocking_handles = NULL; + void *pend_os_device_add = NULL, *device_remove_in_progress = NULL; + struct mpt3sas_facts *old_facts = &ioc->prev_fw_facts; + + if (ioc->facts.MaxDevHandle > old_facts->MaxDevHandle) { + pd_handles_sz = (ioc->facts.MaxDevHandle / 8); + if (ioc->facts.MaxDevHandle % 8) + pd_handles_sz++; + + /* + * pd_handles should have, at least, the minimal room for + * set_bit()/test_bit(), otherwise out-of-memory touch may + * occur. + */ + pd_handles_sz = ALIGN(pd_handles_sz, sizeof(unsigned long)); + pd_handles = krealloc(ioc->pd_handles, pd_handles_sz, + GFP_KERNEL); + if (!pd_handles) { + ioc_info(ioc, + "Unable to allocate the memory for pd_handles of sz: %d\n", + pd_handles_sz); + return -ENOMEM; + } + memset(pd_handles + ioc->pd_handles_sz, 0, + (pd_handles_sz - ioc->pd_handles_sz)); + ioc->pd_handles = pd_handles; + + blocking_handles = krealloc(ioc->blocking_handles, + pd_handles_sz, GFP_KERNEL); + if (!blocking_handles) { + ioc_info(ioc, + "Unable to allocate the memory for " + "blocking_handles of sz: %d\n", + pd_handles_sz); + return -ENOMEM; + } + memset(blocking_handles + ioc->pd_handles_sz, 0, + (pd_handles_sz - ioc->pd_handles_sz)); + ioc->blocking_handles = blocking_handles; + ioc->pd_handles_sz = pd_handles_sz; + + pend_os_device_add = krealloc(ioc->pend_os_device_add, + pd_handles_sz, GFP_KERNEL); + if (!pend_os_device_add) { + ioc_info(ioc, + "Unable to allocate the memory for pend_os_device_add of sz: %d\n", + pd_handles_sz); + return -ENOMEM; + } + memset(pend_os_device_add + ioc->pend_os_device_add_sz, 0, + (pd_handles_sz - ioc->pend_os_device_add_sz)); + ioc->pend_os_device_add = pend_os_device_add; + ioc->pend_os_device_add_sz = pd_handles_sz; + + device_remove_in_progress = krealloc( + ioc->device_remove_in_progress, pd_handles_sz, GFP_KERNEL); + if (!device_remove_in_progress) { + ioc_info(ioc, + "Unable to allocate the memory for " + "device_remove_in_progress of sz: %d\n " + , pd_handles_sz); + return -ENOMEM; + } + memset(device_remove_in_progress + + ioc->device_remove_in_progress_sz, 0, + (pd_handles_sz - ioc->device_remove_in_progress_sz)); + ioc->device_remove_in_progress = device_remove_in_progress; + ioc->device_remove_in_progress_sz = pd_handles_sz; + } + + memcpy(&ioc->prev_fw_facts, &ioc->facts, sizeof(struct mpt3sas_facts)); + return 0; +} + /** * mpt3sas_base_hard_reset_handler - reset controller * @ioc: Pointer to MPT_ADAPTER structure @@ -5777,6 +5882,13 @@ mpt3sas_base_hard_reset_handler(struct MPT3SAS_ADAPTER *ioc, if (r) goto out; + r = _base_check_ioc_facts_changes(ioc); + if (r) { + ioc_info(ioc, + "Some of the parameters got changed in this new firmware" + " image and it requires system reboot\n"); + goto out; + } if (ioc->rdpq_array_enable && !ioc->rdpq_array_capable) panic("%s: Issue occurred with flashing controller firmware." "Please reboot the system and ensure that the correct" diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h index 2948cb7e9ae6..afd6134ecd26 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.h +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h @@ -142,6 +142,15 @@ */ #define MPT3SAS_FMT "%s: " +#define ioc_err(ioc, fmt, ...) \ + pr_err("%s: " fmt, (ioc)->name, ##__VA_ARGS__) +#define ioc_notice(ioc, fmt, ...) \ + pr_notice("%s: " fmt, (ioc)->name, ##__VA_ARGS__) +#define ioc_warn(ioc, fmt, ...) \ + pr_warn("%s: " fmt, (ioc)->name, ##__VA_ARGS__) +#define ioc_info(ioc, fmt, ...) \ + pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__) + /* * WarpDrive Specific Log codes */ @@ -872,6 +881,7 @@ typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *ioc); * @event_log: event log pointer * @event_masks: events that are masked * @facts: static facts data + * @prev_fw_facts: previous fw facts data * @pfacts: static port facts data * @manu_pg0: static manufacturing page 0 * @manu_pg10: static manufacturing page 10 @@ -1064,6 +1074,7 @@ struct MPT3SAS_ADAPTER { /* static config pages */ struct mpt3sas_facts facts; + struct mpt3sas_facts prev_fw_facts; struct mpt3sas_port_facts *pfacts; Mpi2ManufacturingPage0_t manu_pg0; struct Mpi2ManufacturingPage10_t manu_pg10; diff --git a/drivers/scsi/qedf/qedf_debugfs.c b/drivers/scsi/qedf/qedf_debugfs.c index 41fa846f0bdb..2a3a2d456b47 100644 --- a/drivers/scsi/qedf/qedf_debugfs.c +++ b/drivers/scsi/qedf/qedf_debugfs.c @@ -190,7 +190,7 @@ qedf_dbg_debug_cmd_write(struct file *filp, const char __user *buffer, if (!count || *ppos) return 0; - kern_buf = memdup_user(buffer, count); + kern_buf = memdup_user_nul(buffer, count); if (IS_ERR(kern_buf)) return PTR_ERR(kern_buf); diff --git a/drivers/scsi/qedi/qedi_debugfs.c b/drivers/scsi/qedi/qedi_debugfs.c index 39d77818a677..d5460fc17bab 100644 --- a/drivers/scsi/qedi/qedi_debugfs.c +++ b/drivers/scsi/qedi/qedi_debugfs.c @@ -136,15 +136,11 @@ static ssize_t qedi_dbg_do_not_recover_cmd_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos) { - size_t cnt = 0; + char buf[64]; + int len; - if (*ppos) - return 0; - - cnt = sprintf(buffer, "do_not_recover=%d\n", qedi_do_not_recover); - cnt = min_t(int, count, cnt - *ppos); - *ppos += cnt; - return cnt; + len = sprintf(buf, "do_not_recover=%d\n", qedi_do_not_recover); + return simple_read_from_buffer(buffer, count, ppos, buf, len); } static int diff --git a/drivers/scsi/ufs/ufs-qcom.h b/drivers/scsi/ufs/ufs-qcom.h index 34140f91437d..7529582bd2ad 100644 --- a/drivers/scsi/ufs/ufs-qcom.h +++ b/drivers/scsi/ufs/ufs-qcom.h @@ -196,10 +196,10 @@ static inline void ufs_qcom_assert_reset(struct ufs_hba *hba) 1 << OFFSET_UFS_PHY_SOFT_RESET, REG_UFS_CFG1); /* - * Make sure assertion of ufs phy reset is written to - * register before returning + * Dummy read to ensure the write takes effect before doing any sort + * of delay */ - mb(); + ufshcd_readl(hba, REG_UFS_CFG1); } static inline void ufs_qcom_deassert_reset(struct ufs_hba *hba) @@ -208,10 +208,10 @@ static inline void ufs_qcom_deassert_reset(struct ufs_hba *hba) 0 << OFFSET_UFS_PHY_SOFT_RESET, REG_UFS_CFG1); /* - * Make sure de-assertion of ufs phy reset is written to - * register before returning + * Dummy read to ensure the write takes effect before doing any sort + * of delay */ - mb(); + ufshcd_readl(hba, REG_UFS_CFG1); } struct ufs_qcom_bus_vote { diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 5f52f9add006..91eef04e1f66 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5114,7 +5114,7 @@ static int ufshcd_uic_pwr_ctrl(struct ufs_hba *hba, struct uic_command *cmd) * Make sure UIC command completion interrupt is disabled before * issuing UIC command. */ - wmb(); + ufshcd_readl(hba, REG_INTERRUPT_ENABLE); reenable_intr = true; } ret = __ufshcd_send_uic_cmd(hba, cmd, false); @@ -11231,7 +11231,7 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq) * Make sure that UFS interrupts are disabled and any pending interrupt * status is cleared before registering UFS interrupt handler. */ - mb(); + ufshcd_readl(hba, REG_INTERRUPT_ENABLE); /* IRQ registration */ err = devm_request_irq(dev, irq, ufshcd_intr, IRQF_SHARED, diff --git a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup_m3_ipc.c index 1223eed329ea..afe4fed15618 100644 --- a/drivers/soc/ti/wkup_m3_ipc.c +++ b/drivers/soc/ti/wkup_m3_ipc.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -140,7 +139,6 @@ static irqreturn_t wkup_m3_txev_handler(int irq, void *ipc_data) static int wkup_m3_ping(struct wkup_m3_ipc *m3_ipc) { struct device *dev = m3_ipc->dev; - mbox_msg_t dummy_msg = 0; int ret; if (!m3_ipc->mbox) { @@ -156,7 +154,7 @@ static int wkup_m3_ping(struct wkup_m3_ipc *m3_ipc) * the RX callback to avoid multiple interrupts being received * by the CM3. */ - ret = mbox_send_message(m3_ipc->mbox, &dummy_msg); + ret = mbox_send_message(m3_ipc->mbox, NULL); if (ret < 0) { dev_err(dev, "%s: mbox_send_message() failed: %d\n", __func__, ret); @@ -178,7 +176,6 @@ static int wkup_m3_ping(struct wkup_m3_ipc *m3_ipc) static int wkup_m3_ping_noirq(struct wkup_m3_ipc *m3_ipc) { struct device *dev = m3_ipc->dev; - mbox_msg_t dummy_msg = 0; int ret; if (!m3_ipc->mbox) { @@ -187,7 +184,7 @@ static int wkup_m3_ping_noirq(struct wkup_m3_ipc *m3_ipc) return -EIO; } - ret = mbox_send_message(m3_ipc->mbox, &dummy_msg); + ret = mbox_send_message(m3_ipc->mbox, NULL); if (ret < 0) { dev_err(dev, "%s: mbox_send_message() failed: %d\n", __func__, ret); diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 1031c8e38144..f51fa1d0ec1b 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -861,6 +861,7 @@ static int __spi_map_msg(struct spi_controller *ctlr, struct spi_message *msg) else rx_dev = ctlr->dev.parent; + ret = -ENOMSG; list_for_each_entry(xfer, &msg->transfers, transfer_list) { if (!ctlr->can_dma(ctlr, msg->spi, xfer)) continue; @@ -884,6 +885,9 @@ static int __spi_map_msg(struct spi_controller *ctlr, struct spi_message *msg) } } } + /* No transfer has been mapped, bail out with success */ + if (ret) + return 0; ctlr->cur_msg_mapped = true; diff --git a/drivers/staging/greybus/arche-apb-ctrl.c b/drivers/staging/greybus/arche-apb-ctrl.c index 0412f3d06efb..fc723ebfeaea 100644 --- a/drivers/staging/greybus/arche-apb-ctrl.c +++ b/drivers/staging/greybus/arche-apb-ctrl.c @@ -499,6 +499,7 @@ static const struct of_device_id arche_apb_ctrl_of_match[] = { { .compatible = "usbffff,2", }, { }, }; +MODULE_DEVICE_TABLE(of, arche_apb_ctrl_of_match); static struct platform_driver arche_apb_ctrl_device_driver = { .probe = arche_apb_ctrl_probe, diff --git a/drivers/staging/greybus/arche-platform.c b/drivers/staging/greybus/arche-platform.c index 21ac92d0f533..e7351e187606 100644 --- a/drivers/staging/greybus/arche-platform.c +++ b/drivers/staging/greybus/arche-platform.c @@ -663,14 +663,7 @@ static const struct of_device_id arche_platform_of_match[] = { { .compatible = "google,arche-platform", }, { }, }; - -static const struct of_device_id arche_combined_id[] = { - /* Use PID/VID of SVC device */ - { .compatible = "google,arche-platform", }, - { .compatible = "usbffff,2", }, - { }, -}; -MODULE_DEVICE_TABLE(of, arche_combined_id); +MODULE_DEVICE_TABLE(of, arche_platform_of_match); static struct platform_driver arche_platform_device_driver = { .probe = arche_platform_probe, diff --git a/drivers/staging/greybus/light.c b/drivers/staging/greybus/light.c index 031a91614552..9744c13baa49 100644 --- a/drivers/staging/greybus/light.c +++ b/drivers/staging/greybus/light.c @@ -150,6 +150,9 @@ static int __gb_lights_flash_brightness_set(struct gb_channel *channel) channel = get_channel_from_mode(channel->light, GB_CHANNEL_MODE_TORCH); + if (!channel) + return -EINVAL; + /* For not flash we need to convert brightness to intensity */ intensity = channel->intensity_uA.min + (channel->intensity_uA.step * channel->led->brightness); @@ -553,7 +556,10 @@ static int gb_lights_light_v4l2_register(struct gb_light *light) } channel_flash = get_channel_from_mode(light, GB_CHANNEL_MODE_FLASH); - WARN_ON(!channel_flash); + if (!channel_flash) { + dev_err(dev, "failed to get flash channel from mode\n"); + return -EINVAL; + } fled = &channel_flash->fled; diff --git a/drivers/staging/lustre/lnet/libcfs/debug.c b/drivers/staging/lustre/lnet/libcfs/debug.c index 1ab394c1fabc..8a36845bee9c 100644 --- a/drivers/staging/lustre/lnet/libcfs/debug.c +++ b/drivers/staging/lustre/lnet/libcfs/debug.c @@ -167,22 +167,6 @@ static const struct kernel_param_ops param_ops_console_min_delay = { module_param(libcfs_console_min_delay, console_min_delay, 0644); MODULE_PARM_DESC(libcfs_console_min_delay, "Lustre kernel debug console min delay (jiffies)"); -static int param_set_uint_minmax(const char *val, - const struct kernel_param *kp, - unsigned int min, unsigned int max) -{ - unsigned int num; - int ret; - - if (!val) - return -EINVAL; - ret = kstrtouint(val, 0, &num); - if (ret < 0 || num < min || num > max) - return -EINVAL; - *((unsigned int *)kp->arg) = num; - return 0; -} - static int param_set_uintpos(const char *val, const struct kernel_param *kp) { return param_set_uint_minmax(val, kp, 1, -1); diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c index 767f362c6e5a..00e9b87cf1c1 100644 --- a/drivers/staging/speakup/main.c +++ b/drivers/staging/speakup/main.c @@ -582,7 +582,7 @@ static u_long get_word(struct vc_data *vc) } attr_ch = get_char(vc, (u_short *)tmp_pos, &spk_attr); buf[cnt++] = attr_ch; - while (tmpx < vc->vc_cols - 1 && cnt < sizeof(buf) - 1) { + while (tmpx < vc->vc_cols - 1 && cnt < ARRAY_SIZE(buf) - 1) { tmp_pos += 2; tmpx++; ch = get_char(vc, (u_short *)tmp_pos, &temp); diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c index e3f08c982151..7e87d952bb7a 100644 --- a/drivers/target/target_core_configfs.c +++ b/drivers/target/target_core_configfs.c @@ -3211,8 +3211,6 @@ static int __init target_core_init_configfs(void) { struct configfs_subsystem *subsys = &target_core_fabrics; struct t10_alua_lu_gp *lu_gp; - struct cred *kern_cred; - const struct cred *old_cred; int ret; pr_debug("TARGET_CORE[0]: Loading Generic Kernel Storage" @@ -3289,20 +3287,9 @@ static int __init target_core_init_configfs(void) if (ret < 0) goto out; - /* We use the kernel credentials to access the target directory */ - kern_cred = prepare_kernel_cred(&init_task); - if (!kern_cred) { - ret = -ENOMEM; - goto out; - } - old_cred = override_creds(kern_cred); - revert_creds(old_cred); - put_cred(kern_cred); - return 0; out: - target_xcopy_release_pt(); configfs_unregister_subsystem(subsys); core_dev_release_virtual_lun0(); rd_module_exit(); diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index a60d4b5a6161..f7c8b0fe7192 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -1986,8 +1986,12 @@ static void gsm0_receive(struct gsm_mux *gsm, unsigned char c) break; case GSM_DATA: /* Data */ gsm->buf[gsm->count++] = c; - if (gsm->count == gsm->len) + if (gsm->count >= MAX_MRU) { + gsm->bad_size++; + gsm->state = GSM_SEARCH; + } else if (gsm->count >= gsm->len) { gsm->state = GSM_FCS; + } break; case GSM_FCS: /* FCS follows the packet */ gsm->received_fcs = c; @@ -2067,7 +2071,7 @@ static void gsm1_receive(struct gsm_mux *gsm, unsigned char c) gsm->state = GSM_DATA; break; case GSM_DATA: /* Data */ - if (gsm->count > gsm->mru) { /* Allow one for the FCS */ + if (gsm->count > gsm->mru || gsm->count > MAX_MRU) { /* Allow one for the FCS */ gsm->state = GSM_OVERRUN; gsm->bad_size++; } else diff --git a/drivers/tty/serial/max3100.c b/drivers/tty/serial/max3100.c index ace82645b123..3584101e3f8a 100644 --- a/drivers/tty/serial/max3100.c +++ b/drivers/tty/serial/max3100.c @@ -50,6 +50,9 @@ #include #include #include +#include + +#include #include @@ -196,7 +199,7 @@ static void max3100_timeout(unsigned long data) static int max3100_sr(struct max3100_port *s, u16 tx, u16 *rx) { struct spi_message message; - u16 etx, erx; + __be16 etx, erx; int status; struct spi_transfer tran = { .tx_buf = &etx, @@ -218,7 +221,7 @@ static int max3100_sr(struct max3100_port *s, u16 tx, u16 *rx) return 0; } -static int max3100_handlerx(struct max3100_port *s, u16 rx) +static int max3100_handlerx_unlocked(struct max3100_port *s, u16 rx) { unsigned int ch, flg, status = 0; int ret = 0, cts; @@ -258,6 +261,17 @@ static int max3100_handlerx(struct max3100_port *s, u16 rx) return ret; } +static int max3100_handlerx(struct max3100_port *s, u16 rx) +{ + unsigned long flags; + int ret; + + uart_port_lock_irqsave(&s->port, &flags); + ret = max3100_handlerx_unlocked(s, rx); + uart_port_unlock_irqrestore(&s->port, flags); + return ret; +} + static void max3100_work(struct work_struct *w) { struct max3100_port *s = container_of(w, struct max3100_port, work); @@ -750,13 +764,14 @@ static int max3100_probe(struct spi_device *spi) mutex_lock(&max3100s_lock); if (!uart_driver_registered) { - uart_driver_registered = 1; retval = uart_register_driver(&max3100_uart_driver); if (retval) { printk(KERN_ERR "Couldn't register max3100 uart driver\n"); mutex_unlock(&max3100s_lock); return retval; } + + uart_driver_registered = 1; } for (i = 0; i < MAX_MAX3100; i++) @@ -844,6 +859,7 @@ static int max3100_remove(struct spi_device *spi) } pr_debug("removing max3100 driver\n"); uart_unregister_driver(&max3100_uart_driver); + uart_driver_registered = 0; mutex_unlock(&max3100s_lock); return 0; diff --git a/drivers/tty/serial/mcf.c b/drivers/tty/serial/mcf.c index 02eb32217685..eacce82b971d 100644 --- a/drivers/tty/serial/mcf.c +++ b/drivers/tty/serial/mcf.c @@ -483,7 +483,7 @@ static const struct uart_ops mcf_uart_ops = { .verify_port = mcf_verify_port, }; -static struct mcf_uart mcf_ports[4]; +static struct mcf_uart mcf_ports[10]; #define MCF_MAXPORTS ARRAY_SIZE(mcf_ports) diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c index f8f3a1168b0c..da67ddecd195 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c @@ -494,16 +494,28 @@ static bool sc16is7xx_regmap_precious(struct device *dev, unsigned int reg) return false; } +/* + * Configure programmable baud rate generator (divisor) according to the + * desired baud rate. + * + * From the datasheet, the divisor is computed according to: + * + * XTAL1 input frequency + * ----------------------- + * prescaler + * divisor = --------------------------- + * baud-rate x sampling-rate + */ static int sc16is7xx_set_baud(struct uart_port *port, int baud) { struct sc16is7xx_port *s = dev_get_drvdata(port->dev); u8 lcr; - u8 prescaler = 0; + unsigned int prescaler = 1; unsigned long clk = port->uartclk, div = clk / 16 / baud; - if (div > 0xffff) { - prescaler = SC16IS7XX_MCR_CLKSEL_BIT; - div /= 4; + if (div >= BIT(16)) { + prescaler = 4; + div /= prescaler; } /* In an amazing feat of design, the Enhanced Features Register shares @@ -538,9 +550,10 @@ static int sc16is7xx_set_baud(struct uart_port *port, int baud) mutex_unlock(&s->efr_lock); + /* If bit MCR_CLKSEL is set, the divide by 4 prescaler is activated. */ sc16is7xx_port_update(port, SC16IS7XX_MCR_REG, SC16IS7XX_MCR_CLKSEL_BIT, - prescaler); + prescaler == 1 ? 0 : SC16IS7XX_MCR_CLKSEL_BIT); /* Open the LCR divisors for configuration */ sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, @@ -555,7 +568,7 @@ static int sc16is7xx_set_baud(struct uart_port *port, int baud) /* Put LCR back to the normal mode */ sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, lcr); - return DIV_ROUND_CLOSEST(clk / 16, div); + return DIV_ROUND_CLOSEST((clk / prescaler) / 16, div); } static void sc16is7xx_handle_rx(struct uart_port *port, unsigned int rxlen, diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c index 5160a4a966b3..a317d4d3fa51 100644 --- a/drivers/usb/atm/cxacru.c +++ b/drivers/usb/atm/cxacru.c @@ -1134,6 +1134,7 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, struct cxacru_data *instance; struct usb_device *usb_dev = interface_to_usbdev(intf); struct usb_host_endpoint *cmd_ep = usb_dev->ep_in[CXACRU_EP_CMD]; + struct usb_endpoint_descriptor *in, *out; int ret; /* instance init */ @@ -1180,6 +1181,19 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, goto fail; } + if (usb_endpoint_xfer_int(&cmd_ep->desc)) + ret = usb_find_common_endpoints(intf->cur_altsetting, + NULL, NULL, &in, &out); + else + ret = usb_find_common_endpoints(intf->cur_altsetting, + &in, &out, NULL, NULL); + + if (ret) { + usb_err(usbatm_instance, "cxacru_bind: interface has incorrect endpoints\n"); + ret = -ENODEV; + goto fail; + } + if ((cmd_ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT) { usb_fill_int_urb(instance->rcv_urb, diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c index daa696e61ee4..a612ca628cef 100644 --- a/drivers/usb/class/cdc-wdm.c +++ b/drivers/usb/class/cdc-wdm.c @@ -249,14 +249,14 @@ static void wdm_int_callback(struct urb *urb) dev_err(&desc->intf->dev, "Stall on int endpoint\n"); goto sw; /* halt is cleared in work */ default: - dev_err(&desc->intf->dev, + dev_err_ratelimited(&desc->intf->dev, "nonzero urb status received: %d\n", status); break; } } if (urb->actual_length < sizeof(struct usb_cdc_notification)) { - dev_err(&desc->intf->dev, "wdm_int_callback - %d bytes\n", + dev_err_ratelimited(&desc->intf->dev, "wdm_int_callback - %d bytes\n", urb->actual_length); goto exit; } diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index 64880a2cbf34..3d55cf1a0cf1 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -817,6 +817,7 @@ static void ffs_user_copy_worker(struct work_struct *work) int ret = io_data->req->status ? io_data->req->status : io_data->req->actual; bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD; + unsigned long flags; ffs_log("enter: ret %d for %s", ret, io_data->read ? "read" : "write"); @@ -835,7 +836,10 @@ static void ffs_user_copy_worker(struct work_struct *work) if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd) eventfd_signal(io_data->ffs->ffs_eventfd, 1); + spin_lock_irqsave(&io_data->ffs->eps_lock, flags); usb_ep_free_request(io_data->ep, io_data->req); + io_data->req = NULL; + spin_unlock_irqrestore(&io_data->ffs->eps_lock, flags); if (io_data->read) kfree(io_data->to_free); diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c index 830cc2bb0fdf..fa28f2d3a8f7 100644 --- a/drivers/usb/gadget/function/f_printer.c +++ b/drivers/usb/gadget/function/f_printer.c @@ -212,6 +212,7 @@ static inline struct usb_endpoint_descriptor *ep_desc(struct usb_gadget *gadget, struct usb_endpoint_descriptor *ss) { switch (gadget->speed) { + case USB_SPEED_SUPER_PLUS: case USB_SPEED_SUPER: return ss; case USB_SPEED_HIGH: diff --git a/drivers/usb/gadget/function/u_audio.c b/drivers/usb/gadget/function/u_audio.c index 8ac508bb6701..97921f5ecfe3 100644 --- a/drivers/usb/gadget/function/u_audio.c +++ b/drivers/usb/gadget/function/u_audio.c @@ -638,6 +638,8 @@ void g_audio_cleanup(struct g_audio *g_audio) return; uac = g_audio->uac; + g_audio->uac = NULL; + card = uac->card; if (card) snd_card_free_when_closed(card); diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index b9cb8daf9705..f9de602a0c00 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -43,6 +43,7 @@ #define PCI_VENDOR_ID_ETRON 0x1b6f #define PCI_DEVICE_ID_EJ168 0x7023 +#define PCI_DEVICE_ID_EJ188 0x7052 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI 0x8c31 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 @@ -224,6 +225,12 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) xhci->quirks |= XHCI_TRUST_TX_LENGTH; xhci->quirks |= XHCI_BROKEN_STREAMS; } + if (pdev->vendor == PCI_VENDOR_ID_ETRON && + pdev->device == PCI_DEVICE_ID_EJ188) { + xhci->quirks |= XHCI_RESET_ON_RESUME; + xhci->quirks |= XHCI_BROKEN_STREAMS; + } + if (pdev->vendor == PCI_VENDOR_ID_RENESAS && pdev->device == 0x0014) xhci->quirks |= XHCI_TRUST_TX_LENGTH; @@ -270,6 +277,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == 0x9026) xhci->quirks |= XHCI_RESET_PLL_ON_DISCONNECT; + if (pdev->vendor == PCI_VENDOR_ID_AMD && + (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_2 || + pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4)) + xhci->quirks |= XHCI_NO_SOFT_RETRY; + if (xhci->quirks & XHCI_RESET_ON_RESUME) xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, "QUIRK: Resetting on resume"); diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index e27e54244725..d712b13a5ae2 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -1227,6 +1227,10 @@ static void xhci_handle_cmd_reset_ep(struct xhci_hcd *xhci, int slot_id, /* Clear our internal halted state */ ep->ep_state &= ~EP_HALTED; } + + /* if this was a soft reset, then restart */ + if ((le32_to_cpu(trb->generic.field[3])) & TRB_TSP) + ring_doorbell_for_active_rings(xhci, slot_id, ep_index); } static void xhci_handle_cmd_enable_slot(struct xhci_hcd *xhci, int slot_id, @@ -1920,8 +1924,7 @@ struct xhci_segment *trb_in_td(struct xhci_hcd *xhci, static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci, unsigned int slot_id, unsigned int ep_index, - unsigned int stream_id, - struct xhci_td *td, union xhci_trb *ep_trb, + unsigned int stream_id, struct xhci_td *td, enum xhci_ep_reset_type reset_type) { struct xhci_virt_ep *ep = &xhci->devs[slot_id]->eps[ep_index]; @@ -2064,8 +2067,7 @@ static int finish_td(struct xhci_hcd *xhci, struct xhci_td *td, * The class driver clears the device side halt later. */ xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index, - ep_ring->stream_id, td, ep_trb, - EP_HARD_RESET); + ep_ring->stream_id, td, EP_HARD_RESET); } else { /* Update ring dequeue pointer */ while (ep_ring->dequeue != td->last_trb) @@ -2317,10 +2319,16 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, union xhci_trb *ep_trb, struct xhci_transfer_event *event, struct xhci_virt_ep *ep, int *status) { + struct xhci_slot_ctx *slot_ctx; struct xhci_ring *ep_ring; u32 trb_comp_code; u32 remaining, requested, ep_trb_len; + unsigned int slot_id; + int ep_index; + slot_id = TRB_TO_SLOT_ID(le32_to_cpu(event->flags)); + slot_ctx = xhci_get_slot_ctx(xhci, xhci->devs[slot_id]->out_ctx); + ep_index = TRB_TO_EP_ID(le32_to_cpu(event->flags)) - 1; ep_ring = xhci_dma_to_transfer_ring(ep, le64_to_cpu(event->buffer)); trb_comp_code = GET_COMP_CODE(le32_to_cpu(event->transfer_len)); remaining = EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)); @@ -2329,6 +2337,7 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, switch (trb_comp_code) { case COMP_SUCCESS: + ep_ring->err_count = 0; /* handle success with untransferred data as short packet */ if (ep_trb != td->last_trb || remaining) { xhci_warn(xhci, "WARN Successful completion on short TX\n"); @@ -2349,9 +2358,17 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, goto finish_td; case COMP_STOPPED_LENGTH_INVALID: /* stopped on ep trb with invalid length, exclude it */ - ep_trb_len = 0; - remaining = 0; - break; + td->urb->actual_length = sum_trb_lengths(xhci, ep_ring, ep_trb); + goto finish_td; + case COMP_USB_TRANSACTION_ERROR: + if (xhci->quirks & XHCI_NO_SOFT_RETRY || + (ep_ring->err_count++ > MAX_SOFT_RETRY) || + le32_to_cpu(slot_ctx->tt_info) & TT_SLOT) + break; + *status = 0; + xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index, + ep_ring->stream_id, td, EP_SOFT_RESET); + return 0; default: /* do nothing */ break; @@ -2426,7 +2443,7 @@ static int handle_tx_event(struct xhci_hcd *xhci, case COMP_INVALID_STREAM_TYPE_ERROR: case COMP_INVALID_STREAM_ID_ERROR: xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index, 0, - NULL, NULL, EP_SOFT_RESET); + NULL, EP_SOFT_RESET); goto cleanup; case COMP_RING_UNDERRUN: case COMP_RING_OVERRUN: @@ -2694,8 +2711,7 @@ static int handle_tx_event(struct xhci_hcd *xhci, xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index, ep_ring->stream_id, - td, ep_trb, - EP_HARD_RESET); + td, EP_HARD_RESET); goto cleanup; } diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 1a0b294b0b7f..99cc51d2d931 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1506,6 +1506,7 @@ static inline const char *xhci_trb_type_string(u8 type) /* How much data is left before the 64KB boundary? */ #define TRB_BUFF_LEN_UP_TO_BOUNDARY(addr) (TRB_MAX_BUFF_SIZE - \ (addr & (TRB_MAX_BUFF_SIZE - 1))) +#define MAX_SOFT_RETRY 3 struct xhci_segment { union xhci_trb *trbs; @@ -1593,6 +1594,7 @@ struct xhci_ring { * if we own the TRB (if we are the consumer). See section 4.9.1. */ u32 cycle_state; + unsigned int err_count; unsigned int stream_id; unsigned int num_segs; unsigned int num_trbs_free; @@ -1853,6 +1855,7 @@ struct xhci_hcd { #define XHCI_INTEL_USB_ROLE_SW BIT_ULL(31) #define XHCI_RESET_PLL_ON_DISCONNECT BIT_ULL(34) #define XHCI_SNPS_BROKEN_SUSPEND BIT_ULL(35) +#define XHCI_NO_SOFT_RETRY BIT_ULL(40) unsigned int num_active_eps; unsigned int limit_active_eps; diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c index de73f33dc739..e08019b0e2d4 100644 --- a/drivers/usb/misc/uss720.c +++ b/drivers/usb/misc/uss720.c @@ -690,7 +690,7 @@ static int uss720_probe(struct usb_interface *intf, struct parport_uss720_private *priv; struct parport *pp; unsigned char reg; - int i; + int ret; dev_dbg(&intf->dev, "probe: vendor id 0x%x, device id 0x%x\n", le16_to_cpu(usbdev->descriptor.idVendor), @@ -701,8 +701,8 @@ static int uss720_probe(struct usb_interface *intf, usb_put_dev(usbdev); return -ENODEV; } - i = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2); - dev_dbg(&intf->dev, "set interface result %d\n", i); + ret = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2); + dev_dbg(&intf->dev, "set interface result %d\n", ret); interface = intf->cur_altsetting; @@ -738,12 +738,18 @@ static int uss720_probe(struct usb_interface *intf, set_1284_register(pp, 7, 0x00, GFP_KERNEL); set_1284_register(pp, 6, 0x30, GFP_KERNEL); /* PS/2 mode */ set_1284_register(pp, 2, 0x0c, GFP_KERNEL); - /* debugging */ - get_1284_register(pp, 0, ®, GFP_KERNEL); - dev_dbg(&intf->dev, "reg: %7ph\n", priv->reg); - i = usb_find_last_int_in_endpoint(interface, &epd); - if (!i) { + /* The Belkin F5U002 Rev 2 P80453-B USB parallel port adapter shares the + * device ID 050d:0002 with some other device that works with this + * driver, but it itself does not. Detect and handle the bad cable + * here. */ + ret = get_1284_register(pp, 0, ®, GFP_KERNEL); + dev_dbg(&intf->dev, "reg: %7ph\n", priv->reg); + if (ret < 0) + return ret; + + ret = usb_find_last_int_in_endpoint(interface, &epd); + if (!ret) { dev_dbg(&intf->dev, "epaddr %d interval %d\n", epd->bEndpointAddress, epd->bInterval); } diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 972bf4210189..ffeaa2208123 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -580,7 +580,7 @@ static int da8xx_probe(struct platform_device *pdev) ret = of_platform_populate(pdev->dev.of_node, NULL, da8xx_auxdata_lookup, &pdev->dev); if (ret) - return ret; + goto err_unregister_phy; memset(musb_resources, 0x00, sizeof(*musb_resources) * ARRAY_SIZE(musb_resources)); @@ -606,9 +606,13 @@ static int da8xx_probe(struct platform_device *pdev) ret = PTR_ERR_OR_ZERO(glue->musb); if (ret) { dev_err(&pdev->dev, "failed to register musb device: %d\n", ret); - usb_phy_generic_unregister(glue->usb_phy); + goto err_unregister_phy; } + return 0; + +err_unregister_phy: + usb_phy_generic_unregister(glue->usb_phy); return ret; } diff --git a/drivers/usb/storage/alauda.c b/drivers/usb/storage/alauda.c index 263847bf1fe5..e181dbe88f85 100644 --- a/drivers/usb/storage/alauda.c +++ b/drivers/usb/storage/alauda.c @@ -117,6 +117,8 @@ struct alauda_info { unsigned char sense_key; unsigned long sense_asc; /* additional sense code */ unsigned long sense_ascq; /* additional sense code qualifier */ + + bool media_initialized; }; #define short_pack(lsb,msb) ( ((u16)(lsb)) | ( ((u16)(msb))<<8 ) ) @@ -488,11 +490,12 @@ static int alauda_check_media(struct us_data *us) } /* Check for media change */ - if (status[0] & 0x08) { + if (status[0] & 0x08 || !info->media_initialized) { usb_stor_dbg(us, "Media change detected\n"); alauda_free_maps(&MEDIA_INFO(us)); - alauda_init_media(us); - + rc = alauda_init_media(us); + if (rc == USB_STOR_TRANSPORT_GOOD) + info->media_initialized = true; info->sense_key = UNIT_ATTENTION; info->sense_asc = 0x28; info->sense_ascq = 0x00; diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig index bed3abbbd4ef..9fb9aa7b06d6 100644 --- a/drivers/video/fbdev/Kconfig +++ b/drivers/video/fbdev/Kconfig @@ -2196,8 +2196,8 @@ config FB_COBALT depends on FB && MIPS_COBALT config FB_SH7760 - bool "SH7760/SH7763/SH7720/SH7721 LCDC support" - depends on FB=y && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \ + tristate "SH7760/SH7763/SH7720/SH7721 LCDC support" + depends on FB && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \ || CPU_SUBTYPE_SH7720 || CPU_SUBTYPE_SH7721) select FB_CFB_FILLRECT select FB_CFB_COPYAREA diff --git a/drivers/video/fbdev/savage/savagefb_driver.c b/drivers/video/fbdev/savage/savagefb_driver.c index a4f15b9de2b6..13e9d70017cf 100644 --- a/drivers/video/fbdev/savage/savagefb_driver.c +++ b/drivers/video/fbdev/savage/savagefb_driver.c @@ -2271,7 +2271,10 @@ static int savagefb_probe(struct pci_dev *dev, const struct pci_device_id *id) if (info->var.xres_virtual > 0x1000) info->var.xres_virtual = 0x1000; #endif - savagefb_check_var(&info->var, info); + err = savagefb_check_var(&info->var, info); + if (err) + goto failed; + savagefb_set_fix(info); /* diff --git a/drivers/video/fbdev/sh_mobile_lcdcfb.c b/drivers/video/fbdev/sh_mobile_lcdcfb.c index c3a46506e47e..f4d1f94ad43d 100644 --- a/drivers/video/fbdev/sh_mobile_lcdcfb.c +++ b/drivers/video/fbdev/sh_mobile_lcdcfb.c @@ -1718,7 +1718,7 @@ sh_mobile_lcdc_overlay_fb_init(struct sh_mobile_lcdc_overlay *ovl) */ info->fix = sh_mobile_lcdc_overlay_fix; snprintf(info->fix.id, sizeof(info->fix.id), - "SH Mobile LCDC Overlay %u", ovl->index); + "SHMobile ovl %u", ovl->index); info->fix.smem_start = ovl->dma_handle; info->fix.smem_len = ovl->fb_size; info->fix.line_length = ovl->pitch; diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c index 924554b7010d..313b6f856c47 100644 --- a/drivers/virtio/virtio_pci_common.c +++ b/drivers/virtio/virtio_pci_common.c @@ -341,8 +341,10 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned nvqs, vring_interrupt, 0, vp_dev->msix_names[msix_vec], vqs[i]); - if (err) + if (err) { + vp_del_vq(vqs[i]); goto error_find; + } } return 0; diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c index b134315fb69d..ceb1c1188a7a 100644 --- a/fs/ecryptfs/keystore.c +++ b/fs/ecryptfs/keystore.c @@ -314,9 +314,11 @@ write_tag_66_packet(char *signature, u8 cipher_code, * | Key Identifier Size | 1 or 2 bytes | * | Key Identifier | arbitrary | * | File Encryption Key Size | 1 or 2 bytes | + * | Cipher Code | 1 byte | * | File Encryption Key | arbitrary | + * | Checksum | 2 bytes | */ - data_len = (5 + ECRYPTFS_SIG_SIZE_HEX + crypt_stat->key_size); + data_len = (8 + ECRYPTFS_SIG_SIZE_HEX + crypt_stat->key_size); *packet = kmalloc(data_len, GFP_KERNEL); message = *packet; if (!message) { diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index aaee4f85dad5..fda8cc749d90 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -2818,7 +2818,7 @@ retry: inode = ext4_new_inode_start_handle(dir, mode, NULL, 0, NULL, EXT4_HT_DIR, - EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) + + EXT4_MAXQUOTAS_TRANS_BLOCKS(dir->i_sb) + 4 + EXT4_XATTR_TRANS_BLOCKS); handle = ext4_journal_current_handle(); err = PTR_ERR(inode); diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 11b7b8b89f5e..f529ced0b692 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -3090,8 +3090,10 @@ ext4_xattr_block_cache_find(struct inode *inode, bh = ext4_sb_bread(inode->i_sb, ce->e_value, REQ_PRIO); if (IS_ERR(bh)) { - if (PTR_ERR(bh) == -ENOMEM) + if (PTR_ERR(bh) == -ENOMEM) { + mb_cache_entry_put(ea_block_cache, ce); return NULL; + } bh = NULL; EXT4_ERROR_INODE(inode, "block %lu read error", (unsigned long)ce->e_value); diff --git a/fs/jffs2/xattr.c b/fs/jffs2/xattr.c index acb4492f5970..5a31220f96f5 100644 --- a/fs/jffs2/xattr.c +++ b/fs/jffs2/xattr.c @@ -1111,6 +1111,9 @@ int do_jffs2_setxattr(struct inode *inode, int xprefix, const char *xname, return rc; request = PAD(sizeof(struct jffs2_raw_xattr) + strlen(xname) + 1 + size); + if (request > c->sector_size - c->cleanmarker_size) + return -ERANGE; + rc = jffs2_reserve_space(c, request, &length, ALLOC_NORMAL, JFFS2_SUMMARY_XATTR_SIZE); if (rc) { diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index a6797986b625..e8b12e708428 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c @@ -570,9 +570,11 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) size_check: if (EALIST_SIZE(ea_buf->xattr) != ea_size) { + int size = min_t(int, EALIST_SIZE(ea_buf->xattr), ea_size); + printk(KERN_ERR "ea_get: invalid extended attribute\n"); print_hex_dump(KERN_ERR, "", DUMP_PREFIX_ADDRESS, 16, 1, - ea_buf->xattr, ea_size, 1); + ea_buf->xattr, size, 1); ea_release(inode, ea_buf); rc = -EIO; goto clean_up; diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 6f3dc6a5cc7f..5a4fc865ca7b 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -615,9 +615,9 @@ unsigned long nfs_block_bits(unsigned long bsize, unsigned char *nrbitsp) if ((bsize & (bsize - 1)) || nrbitsp) { unsigned char nrbits; - for (nrbits = 31; nrbits && !(bsize & (1 << nrbits)); nrbits--) + for (nrbits = 31; nrbits && !(bsize & (1UL << nrbits)); nrbits--) ; - bsize = 1 << nrbits; + bsize = 1UL << nrbits; if (nrbitsp) *nrbitsp = nrbits; } diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index e2de156849fd..e612b71205a4 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -5454,7 +5454,7 @@ out: return status; } -static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s) +static bool nfsd4_close_open_stateid(struct nfs4_ol_stateid *s) { struct nfs4_client *clp = s->st_stid.sc_client; bool unhashed; @@ -5468,11 +5468,11 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s) put_ol_stateid_locked(s, &reaplist); spin_unlock(&clp->cl_lock); free_ol_stateid_reaplist(&reaplist); + return false; } else { spin_unlock(&clp->cl_lock); free_ol_stateid_reaplist(&reaplist); - if (unhashed) - move_to_close_lru(s, clp->net); + return unhashed; } } @@ -5488,6 +5488,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfs4_ol_stateid *stp; struct net *net = SVC_NET(rqstp); struct nfsd_net *nn = net_generic(net, nfsd_net_id); + bool need_move_to_close_list; dprintk("NFSD: nfsd4_close on file %pd\n", cstate->current_fh.fh_dentry); @@ -5503,8 +5504,10 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, stp->st_stid.sc_type = NFS4_CLOSED_STID; nfs4_inc_and_copy_stateid(&close->cl_stateid, &stp->st_stid); - nfsd4_close_open_stateid(stp); + need_move_to_close_list = nfsd4_close_open_stateid(stp); mutex_unlock(&stp->st_mutex); + if (need_move_to_close_list) + move_to_close_lru(stp, net); /* See RFC5661 sectionm 18.2.4 */ if (stp->st_stid.sc_client->cl_minorversion) diff --git a/fs/nilfs2/dir.c b/fs/nilfs2/dir.c index 7f3931f79e21..eed73d59ec08 100644 --- a/fs/nilfs2/dir.c +++ b/fs/nilfs2/dir.c @@ -195,19 +195,24 @@ fail: return false; } -static struct page *nilfs_get_page(struct inode *dir, unsigned long n) +static void *nilfs_get_page(struct inode *dir, unsigned long n, + struct page **pagep) { struct address_space *mapping = dir->i_mapping; struct page *page = read_mapping_page(mapping, n, NULL); + void *kaddr; - if (!IS_ERR(page)) { - kmap(page); - if (unlikely(!PageChecked(page))) { - if (PageError(page) || !nilfs_check_page(page)) - goto fail; - } + if (IS_ERR(page)) + return page; + + kaddr = kmap(page); + if (unlikely(!PageChecked(page))) { + if (!nilfs_check_page(page)) + goto fail; } - return page; + + *pagep = page; + return kaddr; fail: nilfs_put_page(page); @@ -284,14 +289,14 @@ static int nilfs_readdir(struct file *file, struct dir_context *ctx) for ( ; n < npages; n++, offset = 0) { char *kaddr, *limit; struct nilfs_dir_entry *de; - struct page *page = nilfs_get_page(inode, n); + struct page *page; - if (IS_ERR(page)) { + kaddr = nilfs_get_page(inode, n, &page); + if (IS_ERR(kaddr)) { nilfs_error(sb, "bad page in #%lu", inode->i_ino); ctx->pos += PAGE_SIZE - offset; return -EIO; } - kaddr = page_address(page); de = (struct nilfs_dir_entry *)(kaddr + offset); limit = kaddr + nilfs_last_byte(inode, n) - NILFS_DIR_REC_LEN(1); @@ -354,11 +359,9 @@ nilfs_find_entry(struct inode *dir, const struct qstr *qstr, start = 0; n = start; do { - char *kaddr; + char *kaddr = nilfs_get_page(dir, n, &page); - page = nilfs_get_page(dir, n); - if (!IS_ERR(page)) { - kaddr = page_address(page); + if (!IS_ERR(kaddr)) { de = (struct nilfs_dir_entry *)kaddr; kaddr += nilfs_last_byte(dir, n) - reclen; while ((char *) de <= kaddr) { @@ -396,15 +399,11 @@ found: struct nilfs_dir_entry *nilfs_dotdot(struct inode *dir, struct page **p) { - struct page *page = nilfs_get_page(dir, 0); - struct nilfs_dir_entry *de = NULL; + struct nilfs_dir_entry *de = nilfs_get_page(dir, 0, p); - if (!IS_ERR(page)) { - de = nilfs_next_entry( - (struct nilfs_dir_entry *)page_address(page)); - *p = page; - } - return de; + if (IS_ERR(de)) + return NULL; + return nilfs_next_entry(de); } ino_t nilfs_inode_by_name(struct inode *dir, const struct qstr *qstr) @@ -468,12 +467,11 @@ int nilfs_add_link(struct dentry *dentry, struct inode *inode) for (n = 0; n <= npages; n++) { char *dir_end; - page = nilfs_get_page(dir, n); - err = PTR_ERR(page); - if (IS_ERR(page)) + kaddr = nilfs_get_page(dir, n, &page); + err = PTR_ERR(kaddr); + if (IS_ERR(kaddr)) goto out; lock_page(page); - kaddr = page_address(page); dir_end = kaddr + nilfs_last_byte(dir, n); de = (struct nilfs_dir_entry *)kaddr; kaddr += PAGE_SIZE - reclen; @@ -636,11 +634,10 @@ int nilfs_empty_dir(struct inode *inode) char *kaddr; struct nilfs_dir_entry *de; - page = nilfs_get_page(inode, i); - if (IS_ERR(page)) - continue; + kaddr = nilfs_get_page(inode, i, &page); + if (IS_ERR(kaddr)) + return 0; - kaddr = page_address(page); de = (struct nilfs_dir_entry *)kaddr; kaddr += nilfs_last_byte(inode, i) - NILFS_DIR_REC_LEN(1); diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c index 1d63a2953099..f6d887ba09aa 100644 --- a/fs/nilfs2/ioctl.c +++ b/fs/nilfs2/ioctl.c @@ -68,7 +68,7 @@ static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs, if (argv->v_nmembs == 0) return 0; - if (argv->v_size > PAGE_SIZE) + if ((size_t)argv->v_size > PAGE_SIZE) return -EINVAL; /* diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index fc6175bf766b..32e5095e4c77 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c @@ -1701,6 +1701,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) if (bh->b_page != bd_page) { if (bd_page) { lock_page(bd_page); + wait_on_page_writeback(bd_page); clear_page_dirty_for_io(bd_page); set_page_writeback(bd_page); unlock_page(bd_page); @@ -1714,6 +1715,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) if (bh == segbuf->sb_super_root) { if (bh->b_page != bd_page) { lock_page(bd_page); + wait_on_page_writeback(bd_page); clear_page_dirty_for_io(bd_page); set_page_writeback(bd_page); unlock_page(bd_page); @@ -1730,6 +1732,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) } if (bd_page) { lock_page(bd_page); + wait_on_page_writeback(bd_page); clear_page_dirty_for_io(bd_page); set_page_writeback(bd_page); unlock_page(bd_page); @@ -2168,8 +2171,10 @@ static void nilfs_segctor_start_timer(struct nilfs_sc_info *sci) { spin_lock(&sci->sc_state_lock); if (!(sci->sc_state & NILFS_SEGCTOR_COMMIT)) { - sci->sc_timer.expires = jiffies + sci->sc_interval; - add_timer(&sci->sc_timer); + if (sci->sc_task) { + sci->sc_timer.expires = jiffies + sci->sc_interval; + add_timer(&sci->sc_timer); + } sci->sc_state |= NILFS_SEGCTOR_COMMIT; } spin_unlock(&sci->sc_state_lock); @@ -2216,19 +2221,36 @@ static int nilfs_segctor_sync(struct nilfs_sc_info *sci) struct nilfs_segctor_wait_request wait_req; int err = 0; - spin_lock(&sci->sc_state_lock); init_wait(&wait_req.wq); wait_req.err = 0; atomic_set(&wait_req.done, 0); + init_waitqueue_entry(&wait_req.wq, current); + + /* + * To prevent a race issue where completion notifications from the + * log writer thread are missed, increment the request sequence count + * "sc_seq_request" and insert a wait queue entry using the current + * sequence number into the "sc_wait_request" queue at the same time + * within the lock section of "sc_state_lock". + */ + spin_lock(&sci->sc_state_lock); wait_req.seq = ++sci->sc_seq_request; + add_wait_queue(&sci->sc_wait_request, &wait_req.wq); spin_unlock(&sci->sc_state_lock); - init_waitqueue_entry(&wait_req.wq, current); - add_wait_queue(&sci->sc_wait_request, &wait_req.wq); - set_current_state(TASK_INTERRUPTIBLE); wake_up(&sci->sc_wait_daemon); for (;;) { + set_current_state(TASK_INTERRUPTIBLE); + + /* + * Synchronize only while the log writer thread is alive. + * Leave flushing out after the log writer thread exits to + * the cleanup work in nilfs_segctor_destroy(). + */ + if (!sci->sc_task) + break; + if (atomic_read(&wait_req.done)) { err = wait_req.err; break; @@ -2244,7 +2266,7 @@ static int nilfs_segctor_sync(struct nilfs_sc_info *sci) return err; } -static void nilfs_segctor_wakeup(struct nilfs_sc_info *sci, int err) +static void nilfs_segctor_wakeup(struct nilfs_sc_info *sci, int err, bool force) { struct nilfs_segctor_wait_request *wrq, *n; unsigned long flags; @@ -2252,7 +2274,7 @@ static void nilfs_segctor_wakeup(struct nilfs_sc_info *sci, int err) spin_lock_irqsave(&sci->sc_wait_request.lock, flags); list_for_each_entry_safe(wrq, n, &sci->sc_wait_request.head, wq.entry) { if (!atomic_read(&wrq->done) && - nilfs_cnt32_ge(sci->sc_seq_done, wrq->seq)) { + (force || nilfs_cnt32_ge(sci->sc_seq_done, wrq->seq))) { wrq->err = err; atomic_set(&wrq->done, 1); } @@ -2372,10 +2394,21 @@ int nilfs_construct_dsync_segment(struct super_block *sb, struct inode *inode, */ static void nilfs_segctor_accept(struct nilfs_sc_info *sci) { + bool thread_is_alive; + spin_lock(&sci->sc_state_lock); sci->sc_seq_accepted = sci->sc_seq_request; + thread_is_alive = (bool)sci->sc_task; spin_unlock(&sci->sc_state_lock); - del_timer_sync(&sci->sc_timer); + + /* + * This function does not race with the log writer thread's + * termination. Therefore, deleting sc_timer, which should not be + * done after the log writer thread exits, can be done safely outside + * the area protected by sc_state_lock. + */ + if (thread_is_alive) + del_timer_sync(&sci->sc_timer); } /** @@ -2392,7 +2425,7 @@ static void nilfs_segctor_notify(struct nilfs_sc_info *sci, int mode, int err) if (mode == SC_LSEG_SR) { sci->sc_state &= ~NILFS_SEGCTOR_COMMIT; sci->sc_seq_done = sci->sc_seq_accepted; - nilfs_segctor_wakeup(sci, err); + nilfs_segctor_wakeup(sci, err, false); sci->sc_flush_request = 0; } else { if (mode == SC_FLUSH_FILE) @@ -2401,7 +2434,7 @@ static void nilfs_segctor_notify(struct nilfs_sc_info *sci, int mode, int err) sci->sc_flush_request &= ~FLUSH_DAT_BIT; /* re-enable timer if checkpoint creation was not done */ - if ((sci->sc_state & NILFS_SEGCTOR_COMMIT) && + if ((sci->sc_state & NILFS_SEGCTOR_COMMIT) && sci->sc_task && time_before(jiffies, sci->sc_timer.expires)) add_timer(&sci->sc_timer); } @@ -2448,11 +2481,11 @@ static int nilfs_segctor_construct(struct nilfs_sc_info *sci, int mode) return err; } -static void nilfs_construction_timeout(unsigned long data) +static void nilfs_construction_timeout(struct timer_list *t) { - struct task_struct *p = (struct task_struct *)data; + struct nilfs_sc_info *sci = from_timer(sci, t, sc_timer); - wake_up_process(p); + wake_up_process(sci->sc_timer_task); } static void @@ -2590,8 +2623,8 @@ static int nilfs_segctor_thread(void *arg) struct the_nilfs *nilfs = sci->sc_super->s_fs_info; int timeout = 0; - sci->sc_timer.data = (unsigned long)current; - sci->sc_timer.function = nilfs_construction_timeout; + sci->sc_timer_task = current; + timer_setup(&sci->sc_timer, nilfs_construction_timeout, 0); /* start sync. */ sci->sc_task = current; @@ -2658,6 +2691,7 @@ static int nilfs_segctor_thread(void *arg) end_thread: /* end sync. */ sci->sc_task = NULL; + del_timer_sync(&sci->sc_timer); wake_up(&sci->sc_wait_task); /* for nilfs_segctor_kill_thread() */ spin_unlock(&sci->sc_state_lock); return 0; @@ -2721,7 +2755,6 @@ static struct nilfs_sc_info *nilfs_segctor_new(struct super_block *sb, INIT_LIST_HEAD(&sci->sc_gc_inodes); INIT_LIST_HEAD(&sci->sc_iput_queue); INIT_WORK(&sci->sc_iput_work, nilfs_iput_work_func); - init_timer(&sci->sc_timer); sci->sc_interval = HZ * NILFS_SC_DEFAULT_TIMEOUT; sci->sc_mjcp_freq = HZ * NILFS_SC_DEFAULT_SR_FREQ; @@ -2775,6 +2808,13 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci) || sci->sc_seq_request != sci->sc_seq_done); spin_unlock(&sci->sc_state_lock); + /* + * Forcibly wake up tasks waiting in nilfs_segctor_sync(), which can + * be called from delayed iput() via nilfs_evict_inode() and can race + * with the above log writer thread termination. + */ + nilfs_segctor_wakeup(sci, 0, true); + if (flush_work(&sci->sc_iput_work)) flag = true; @@ -2800,7 +2840,6 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci) down_write(&nilfs->ns_segctor_sem); - del_timer_sync(&sci->sc_timer); kfree(sci); } diff --git a/fs/nilfs2/segment.h b/fs/nilfs2/segment.h index 1060949d7dd2..84084a4d9b3e 100644 --- a/fs/nilfs2/segment.h +++ b/fs/nilfs2/segment.h @@ -180,6 +180,7 @@ struct nilfs_sc_info { unsigned long sc_watermark; struct timer_list sc_timer; + struct task_struct *sc_timer_task; struct task_struct *sc_task; }; diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 60b7098f7a11..d8924de8da27 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -1946,6 +1946,8 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode, inode_lock(inode); + /* Wait all existing dio workers, newcomers will block on i_rwsem */ + inode_dio_wait(inode); /* * This prevents concurrent writes on other nodes */ diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index f36a338bf727..89d0f6360693 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c @@ -570,7 +570,7 @@ static int __ocfs2_mknod_locked(struct inode *dir, fe->i_last_eb_blk = 0; strcpy(fe->i_signature, OCFS2_INODE_SIGNATURE); fe->i_flags |= cpu_to_le32(OCFS2_VALID_FL); - ktime_get_real_ts64(&ts); + ts = current_kernel_time64(); fe->i_atime = fe->i_ctime = fe->i_mtime = cpu_to_le64(ts.tv_sec); fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec = diff --git a/fs/open.c b/fs/open.c index 0628bd1ae2ad..f9b82c7e238f 100644 --- a/fs/open.c +++ b/fs/open.c @@ -219,13 +219,13 @@ out: return error; } -SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length) +SYSCALL_DEFINE2(ftruncate, unsigned int, fd, off_t, length) { return do_sys_ftruncate(fd, length, 1); } #ifdef CONFIG_COMPAT -COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length) +COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_off_t, length) { return do_sys_ftruncate(fd, length, 1); } diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 0bfd71bec7f2..33976fa7f078 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -242,6 +242,8 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos, /* leave now if filled buffer already */ if (buflen == 0) return acc; + + cond_resched(); } list_for_each_entry(m, &vmcore_list, list) { diff --git a/fs/udf/inode.c b/fs/udf/inode.c index a9fef5bb9d25..f402189909d2 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -1471,15 +1471,9 @@ reread: inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) << (inode->i_sb->s_blocksize_bits - 9); - if (!udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime)) - inode->i_atime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&inode->i_mtime, - fe->modificationTime)) - inode->i_mtime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime)) - inode->i_ctime = sbi->s_record_time; + udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime); + udf_disk_stamp_to_time(&inode->i_mtime, fe->modificationTime); + udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime); iinfo->i_unique = le64_to_cpu(fe->uniqueID); iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr); @@ -1489,18 +1483,10 @@ reread: inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << (inode->i_sb->s_blocksize_bits - 9); - if (!udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime)) - inode->i_atime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&inode->i_mtime, - efe->modificationTime)) - inode->i_mtime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime)) - iinfo->i_crtime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime)) - inode->i_ctime = sbi->s_record_time; + udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime); + udf_disk_stamp_to_time(&inode->i_mtime, efe->modificationTime); + udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime); + udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime); iinfo->i_unique = le64_to_cpu(efe->uniqueID); iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr); diff --git a/fs/udf/super.c b/fs/udf/super.c index 70b56011b823..236bf6f14f62 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c @@ -887,6 +887,9 @@ static int udf_load_pvoldesc(struct super_block *sb, sector_t block) struct buffer_head *bh; uint16_t ident; int ret = -ENOMEM; +#ifdef UDFFS_DEBUG + struct timestamp *ts; +#endif outstr = kmalloc(128, GFP_NOFS); if (!outstr) @@ -905,15 +908,15 @@ static int udf_load_pvoldesc(struct super_block *sb, sector_t block) pvoldesc = (struct primaryVolDesc *)bh->b_data; - if (udf_disk_stamp_to_time(&UDF_SB(sb)->s_record_time, - pvoldesc->recordingDateAndTime)) { + udf_disk_stamp_to_time(&UDF_SB(sb)->s_record_time, + pvoldesc->recordingDateAndTime); #ifdef UDFFS_DEBUG - struct timestamp *ts = &pvoldesc->recordingDateAndTime; - udf_debug("recording time %04u/%02u/%02u %02u:%02u (%x)\n", - le16_to_cpu(ts->year), ts->month, ts->day, ts->hour, - ts->minute, le16_to_cpu(ts->typeAndTimezone)); + ts = &pvoldesc->recordingDateAndTime; + udf_debug("recording time %04u/%02u/%02u %02u:%02u (%x)\n", + le16_to_cpu(ts->year), ts->month, ts->day, ts->hour, + ts->minute, le16_to_cpu(ts->typeAndTimezone)); #endif - } + ret = udf_dstrCS0toUTF8(outstr, 31, pvoldesc->volIdent, 32); if (ret < 0) { diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 76ac3f8bc405..e61361f49403 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -244,8 +244,8 @@ extern struct long_ad *udf_get_filelongad(uint8_t *, int, uint32_t *, int); extern struct short_ad *udf_get_fileshortad(uint8_t *, int, uint32_t *, int); /* udftime.c */ -extern struct timespec *udf_disk_stamp_to_time(struct timespec *dest, +extern void udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src); -extern struct timestamp *udf_time_to_disk_stamp(struct timestamp *dest, struct timespec src); +extern void udf_time_to_disk_stamp(struct timestamp *dest, struct timespec src); #endif /* __UDF_DECL_H */ diff --git a/fs/udf/udftime.c b/fs/udf/udftime.c index 14626b34d13e..8708b653c760 100644 --- a/fs/udf/udftime.c +++ b/fs/udf/udftime.c @@ -40,7 +40,7 @@ #include #include -struct timespec * +void udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src) { u16 typeAndTimezone = le16_to_cpu(src.typeAndTimezone); @@ -60,12 +60,21 @@ udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src) dest->tv_sec = mktime64(year, src.month, src.day, src.hour, src.minute, src.second); dest->tv_sec -= offset * 60; - dest->tv_nsec = 1000 * (src.centiseconds * 10000 + + + /* + * Sanitize nanosecond field since reportedly some filesystems are + * recorded with bogus sub-second values. + */ + if (src.centiseconds < 100 && src.hundredsOfMicroseconds < 100 && + src.microseconds < 100) { + dest->tv_nsec = 1000 * (src.centiseconds * 10000 + src.hundredsOfMicroseconds * 100 + src.microseconds); - return dest; + } else { + dest->tv_nsec = 0; + } } -struct timestamp * +void udf_time_to_disk_stamp(struct timestamp *dest, struct timespec ts) { long seconds; @@ -74,9 +83,6 @@ udf_time_to_disk_stamp(struct timestamp *dest, struct timespec ts) offset = -sys_tz.tz_minuteswest; - if (!dest) - return NULL; - dest->typeAndTimezone = cpu_to_le16(0x1000 | (offset & 0x0FFF)); seconds = ts.tv_sec + offset * 60; @@ -92,7 +98,6 @@ udf_time_to_disk_stamp(struct timestamp *dest, struct timespec ts) dest->centiseconds * 10000) / 100; dest->microseconds = (ts.tv_nsec / 1000 - dest->centiseconds * 10000 - dest->hundredsOfMicroseconds * 100); - return dest; } /* EOF */ diff --git a/include/linux/compat.h b/include/linux/compat.h index cec96d4794d0..3380faebda3f 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -563,7 +563,7 @@ asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, struct file_handle __user *handle, int flags); asmlinkage long compat_sys_truncate(const char __user *, compat_off_t); -asmlinkage long compat_sys_ftruncate(unsigned int, compat_ulong_t); +asmlinkage long compat_sys_ftruncate(unsigned int, compat_off_t); asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, compat_ulong_t __user *outp, compat_ulong_t __user *exp, diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index ba36506db4fb..dee4c402c040 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h @@ -361,6 +361,8 @@ extern int param_get_int(char *buffer, const struct kernel_param *kp); extern const struct kernel_param_ops param_ops_uint; extern int param_set_uint(const char *val, const struct kernel_param *kp); extern int param_get_uint(char *buffer, const struct kernel_param *kp); +int param_set_uint_minmax(const char *val, const struct kernel_param *kp, + unsigned int min, unsigned int max); #define param_check_uint(name, p) __param_check(name, p, unsigned int) extern const struct kernel_param_ops param_ops_long; diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 2e3d9af3f8c7..65fc849d2c5f 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -4568,5 +4568,6 @@ do { \ #define DEV_STATS_INC(DEV, FIELD) atomic_long_inc(&(DEV)->stats.__##FIELD) #define DEV_STATS_ADD(DEV, FIELD, VAL) \ atomic_long_add((VAL), &(DEV)->stats.__##FIELD) +#define DEV_STATS_READ(DEV, FIELD) atomic_long_read(&(DEV)->stats.__##FIELD) #endif /* _LINUX_NETDEVICE_H */ diff --git a/include/linux/nvme.h b/include/linux/nvme.h index 9310ce77d8e1..5812e2abf659 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h @@ -71,8 +71,8 @@ enum { NVMF_RDMA_QPTYPE_DATAGRAM = 2, /* Reliable Datagram */ }; -/* RDMA QP Service Type codes for Discovery Log Page entry TSAS - * RDMA_QPTYPE field +/* RDMA Provider Type codes for Discovery Log Page entry TSAS + * RDMA_PRTYPE field */ enum { NVMF_RDMA_PRTYPE_NOT_SPECIFIED = 1, /* No Provider Specified */ diff --git a/include/linux/pci.h b/include/linux/pci.h index 3d5db4f53636..f03a05a026f6 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -125,6 +125,15 @@ enum pci_interrupt_pin { /* The number of legacy PCI INTx interrupts */ #define PCI_NUM_INTX 4 +/* + * Reading from a device that doesn't respond typically returns ~0. A + * successful read from a device may also return ~0, so you need additional + * information to reliably identify errors. + */ +#define PCI_ERROR_RESPONSE (~0ULL) +#define PCI_SET_ERROR_RESPONSE(val) (*(val) = ((typeof(*(val))) PCI_ERROR_RESPONSE)) +#define PCI_POSSIBLE_ERROR(val) ((val) == ((typeof(val)) PCI_ERROR_RESPONSE)) + /* * pci_power_t values must match the bits in the Capabilities PME_Support * and Control/Status PowerState fields in the Power Management capability. diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 166fc4e76df6..b324adc24bee 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -70,6 +70,7 @@ struct rpc_clnt { struct dentry *cl_debugfs; /* debugfs directory */ #endif struct rpc_xprt_iter cl_xpi; + struct super_block *pipefs_sb; }; /* diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 816532c7c17e..bfee92f3d16b 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -426,7 +426,7 @@ asmlinkage long sys_mount(char __user *dev_name, char __user *dir_name, asmlinkage long sys_umount(char __user *name, int flags); asmlinkage long sys_oldumount(char __user *name); asmlinkage long sys_truncate(const char __user *path, long length); -asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length); +asmlinkage long sys_ftruncate(unsigned int fd, off_t length); asmlinkage long sys_stat(const char __user *filename, struct __old_kernel_stat __user *statbuf); asmlinkage long sys_statfs(const char __user * path, diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index bac3d79139b2..71f6311b09a8 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -1395,18 +1395,46 @@ static inline int hci_check_conn_params(u16 min, u16 max, u16 latency, { u16 max_latency; - if (min > max || min < 6 || max > 3200) + if (min > max) { + BT_WARN("min %d > max %d", min, max); return -EINVAL; + } - if (to_multiplier < 10 || to_multiplier > 3200) + if (min < 6) { + BT_WARN("min %d < 6", min); return -EINVAL; + } - if (max >= to_multiplier * 8) + if (max > 3200) { + BT_WARN("max %d > 3200", max); return -EINVAL; + } + + if (to_multiplier < 10) { + BT_WARN("to_multiplier %d < 10", to_multiplier); + return -EINVAL; + } + + if (to_multiplier > 3200) { + BT_WARN("to_multiplier %d > 3200", to_multiplier); + return -EINVAL; + } + + if (max >= to_multiplier * 8) { + BT_WARN("max %d >= to_multiplier %d * 8", max, to_multiplier); + return -EINVAL; + } max_latency = (to_multiplier * 4 / max) - 1; - if (latency > 499 || latency > max_latency) + if (latency > 499) { + BT_WARN("latency %d > 499", latency); return -EINVAL; + } + + if (latency > max_latency) { + BT_WARN("latency %d > max_latency %d", latency, max_latency); + return -EINVAL; + } return 0; } diff --git a/include/net/neighbour.h b/include/net/neighbour.h index fc5edec32b4b..35df33c3815b 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h @@ -173,7 +173,7 @@ struct pneigh_entry { possible_net_t net; struct net_device *dev; u8 flags; - u8 key[0]; + u32 key[0]; }; /* diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h index e71e155f3b88..b94bd16796a7 100644 --- a/include/net/netfilter/nf_tables.h +++ b/include/net/netfilter/nf_tables.h @@ -366,7 +366,8 @@ struct nft_set_ops { int (*init)(const struct nft_set *set, const struct nft_set_desc *desc, const struct nlattr * const nla[]); - void (*destroy)(const struct nft_set *set); + void (*destroy)(const struct nft_ctx *ctx, + const struct nft_set *set); unsigned int elemsize; u32 features; @@ -382,6 +383,7 @@ void nft_unregister_set(struct nft_set_type *type); * @list: table set list node * @bindings: list of set bindings * @table: table this set belongs to + * @net: netnamespace this set belongs to * @name: name of the set * @ktype: key type (numeric type defined by userspace, not used in the kernel) * @dtype: data type (verdict or numeric type defined by userspace) @@ -406,6 +408,7 @@ struct nft_set { struct list_head list; struct list_head bindings; struct nft_table *table; + possible_net_t net; char *name; u32 ktype; u32 dtype; @@ -421,7 +424,8 @@ struct nft_set { unsigned char *udata; /* runtime data below here */ const struct nft_set_ops *ops ____cacheline_aligned; - u16 flags:14, + u16 flags:13, + bound:1, genmask:2; u8 klen; u8 dlen; @@ -429,11 +433,21 @@ struct nft_set { __attribute__((aligned(__alignof__(u64)))); }; +static inline bool nft_set_is_anonymous(const struct nft_set *set) +{ + return set->flags & NFT_SET_ANONYMOUS; +} + static inline void *nft_set_priv(const struct nft_set *set) { return (void *)set->data; } +static inline enum nft_data_types nft_set_datatype(const struct nft_set *set) +{ + return set->dtype == NFT_DATA_VERDICT ? NFT_DATA_VERDICT : NFT_DATA_VALUE; +} + static inline struct nft_set *nft_set_container_of(const void *priv) { return (void *)priv - offsetof(struct nft_set, data); @@ -638,6 +652,8 @@ void *nft_set_elem_init(const struct nft_set *set, u64 timeout, gfp_t gfp); void nft_set_elem_destroy(const struct nft_set *set, void *elem, bool destroy_expr); +void nf_tables_set_elem_destroy(const struct nft_ctx *ctx, + const struct nft_set *set, void *elem); /** * struct nft_set_gc_batch_head - nf_tables set garbage collection batch @@ -1332,15 +1348,12 @@ struct nft_trans_rule { struct nft_trans_set { struct nft_set *set; u32 set_id; - bool bound; }; #define nft_trans_set(trans) \ (((struct nft_trans_set *)trans->data)->set) #define nft_trans_set_id(trans) \ (((struct nft_trans_set *)trans->data)->set_id) -#define nft_trans_set_bound(trans) \ - (((struct nft_trans_set *)trans->data)->bound) struct nft_trans_chain { bool update; diff --git a/include/trace/events/asoc.h b/include/trace/events/asoc.h index ccd1a3bdff46..e7bfe62c1210 100644 --- a/include/trace/events/asoc.h +++ b/include/trace/events/asoc.h @@ -11,6 +11,8 @@ #define DAPM_DIRECT "(direct)" #define DAPM_ARROW(dir) (((dir) == SND_SOC_DAPM_DIR_OUT) ? "->" : "<-") +TRACE_DEFINE_ENUM(SND_SOC_DAPM_DIR_OUT); + struct snd_soc_jack; struct snd_soc_codec; struct snd_soc_card; diff --git a/include/uapi/asm-generic/hugetlb_encode.h b/include/uapi/asm-generic/hugetlb_encode.h index e4732d3c2998..14a3aacfca4a 100644 --- a/include/uapi/asm-generic/hugetlb_encode.h +++ b/include/uapi/asm-generic/hugetlb_encode.h @@ -20,15 +20,17 @@ #define HUGETLB_FLAG_ENCODE_SHIFT 26 #define HUGETLB_FLAG_ENCODE_MASK 0x3f -#define HUGETLB_FLAG_ENCODE_64KB (16 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_512KB (19 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1MB (20 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_64KB (16U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512KB (19U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1MB (20U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2MB (21U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_8MB (23U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16MB (24U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_32MB (25U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_256MB (28U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512MB (29U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1GB (30U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2GB (31U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16GB (34U << HUGETLB_FLAG_ENCODE_SHIFT) #endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */ diff --git a/include/uapi/linux/memfd.h b/include/uapi/linux/memfd.h index 015a4c0bbb47..7a8a26751c23 100644 --- a/include/uapi/linux/memfd.h +++ b/include/uapi/linux/memfd.h @@ -25,7 +25,9 @@ #define MFD_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB #define MFD_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB #define MFD_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB +#define MFD_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB #define MFD_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB +#define MFD_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB #define MFD_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB #define MFD_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB #define MFD_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB diff --git a/include/uapi/linux/mman.h b/include/uapi/linux/mman.h index bfd5938fede6..d0f515d53299 100644 --- a/include/uapi/linux/mman.h +++ b/include/uapi/linux/mman.h @@ -28,7 +28,9 @@ #define MAP_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB #define MAP_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB #define MAP_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB +#define MAP_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB #define MAP_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB +#define MAP_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB #define MAP_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB #define MAP_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB #define MAP_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB diff --git a/include/uapi/linux/shm.h b/include/uapi/linux/shm.h index 4de12a39b075..7c4ab1e6b49e 100644 --- a/include/uapi/linux/shm.h +++ b/include/uapi/linux/shm.h @@ -65,7 +65,9 @@ struct shmid_ds { #define SHM_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB #define SHM_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB #define SHM_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB +#define SHM_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB #define SHM_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB +#define SHM_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB #define SHM_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB #define SHM_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB #define SHM_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index 4b098de99f9c..e57b922478e7 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -1296,7 +1296,7 @@ int current_cpuset_is_being_rebound(void) static int update_relax_domain_level(struct cpuset *cs, s64 val) { #ifdef CONFIG_SMP - if (val < -1 || val >= sched_domain_level_max) + if (val < -1 || val > sched_domain_level_max + 1) return -EINVAL; #endif diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c index e3f27e4b9d00..40d01c78fa4b 100644 --- a/kernel/debug/kdb/kdb_io.c +++ b/kernel/debug/kdb/kdb_io.c @@ -170,6 +170,33 @@ static int kdb_read_get_key(char *buffer, size_t bufsize) return key; } +/** + * kdb_position_cursor() - Place cursor in the correct horizontal position + * @prompt: Nil-terminated string containing the prompt string + * @buffer: Nil-terminated string containing the entire command line + * @cp: Cursor position, pointer the character in buffer where the cursor + * should be positioned. + * + * The cursor is positioned by sending a carriage-return and then printing + * the content of the line until we reach the correct cursor position. + * + * There is some additional fine detail here. + * + * Firstly, even though kdb_printf() will correctly format zero-width fields + * we want the second call to kdb_printf() to be conditional. That keeps things + * a little cleaner when LOGGING=1. + * + * Secondly, we can't combine everything into one call to kdb_printf() since + * that renders into a fixed length buffer and the combined print could result + * in unwanted truncation. + */ +static void kdb_position_cursor(char *prompt, char *buffer, char *cp) +{ + kdb_printf("\r%s", kdb_prompt_str); + if (cp > buffer) + kdb_printf("%.*s", (int)(cp - buffer), buffer); +} + /* * kdb_read * @@ -208,7 +235,6 @@ static char *kdb_read(char *buffer, size_t bufsize) * and null byte */ char *lastchar; char *p_tmp; - char tmp; static char tmpbuffer[CMD_BUFLEN]; int len = strlen(buffer); int len_tmp; @@ -250,12 +276,8 @@ poll_again: } *(--lastchar) = '\0'; --cp; - kdb_printf("\b%s \r", cp); - tmp = *cp; - *cp = '\0'; - kdb_printf(kdb_prompt_str); - kdb_printf("%s", buffer); - *cp = tmp; + kdb_printf("\b%s ", cp); + kdb_position_cursor(kdb_prompt_str, buffer, cp); } break; case 10: /* new line */ @@ -277,19 +299,14 @@ poll_again: memcpy(tmpbuffer, cp+1, lastchar - cp - 1); memcpy(cp, tmpbuffer, lastchar - cp - 1); *(--lastchar) = '\0'; - kdb_printf("%s \r", cp); - tmp = *cp; - *cp = '\0'; - kdb_printf(kdb_prompt_str); - kdb_printf("%s", buffer); - *cp = tmp; + kdb_printf("%s ", cp); + kdb_position_cursor(kdb_prompt_str, buffer, cp); } break; case 1: /* Home */ if (cp > buffer) { - kdb_printf("\r"); - kdb_printf(kdb_prompt_str); cp = buffer; + kdb_position_cursor(kdb_prompt_str, buffer, cp); } break; case 5: /* End */ @@ -305,11 +322,10 @@ poll_again: } break; case 14: /* Down */ - memset(tmpbuffer, ' ', - strlen(kdb_prompt_str) + (lastchar-buffer)); - *(tmpbuffer+strlen(kdb_prompt_str) + - (lastchar-buffer)) = '\0'; - kdb_printf("\r%s\r", tmpbuffer); + case 16: /* Up */ + kdb_printf("\r%*c\r", + (int)(strlen(kdb_prompt_str) + (lastchar - buffer)), + ' '); *lastchar = (char)key; *(lastchar+1) = '\0'; return lastchar; @@ -319,15 +335,6 @@ poll_again: ++cp; } break; - case 16: /* Up */ - memset(tmpbuffer, ' ', - strlen(kdb_prompt_str) + (lastchar-buffer)); - *(tmpbuffer+strlen(kdb_prompt_str) + - (lastchar-buffer)) = '\0'; - kdb_printf("\r%s\r", tmpbuffer); - *lastchar = (char)key; - *(lastchar+1) = '\0'; - return lastchar; case 9: /* Tab */ if (tab < 2) ++tab; @@ -371,15 +378,25 @@ poll_again: kdb_printf("\n"); kdb_printf(kdb_prompt_str); kdb_printf("%s", buffer); + if (cp != lastchar) + kdb_position_cursor(kdb_prompt_str, buffer, cp); } else if (tab != 2 && count > 0) { - len_tmp = strlen(p_tmp); - strncpy(p_tmp+len_tmp, cp, lastchar-cp+1); - len_tmp = strlen(p_tmp); - strncpy(cp, p_tmp+len, len_tmp-len + 1); - len = len_tmp - len; - kdb_printf("%s", cp); - cp += len; - lastchar += len; + /* How many new characters do we want from tmpbuffer? */ + len_tmp = strlen(p_tmp) - len; + if (lastchar + len_tmp >= bufend) + len_tmp = bufend - lastchar; + + if (len_tmp) { + /* + 1 ensures the '\0' is memmove'd */ + memmove(cp+len_tmp, cp, (lastchar-cp) + 1); + memcpy(cp, p_tmp+len, len_tmp); + kdb_printf("%s", cp); + cp += len_tmp; + lastchar += len_tmp; + if (cp != lastchar) + kdb_position_cursor(kdb_prompt_str, + buffer, cp); + } } kdb_nextline = 1; /* reset output line number */ break; @@ -390,13 +407,9 @@ poll_again: memcpy(cp+1, tmpbuffer, lastchar - cp); *++lastchar = '\0'; *cp = key; - kdb_printf("%s\r", cp); + kdb_printf("%s", cp); ++cp; - tmp = *cp; - *cp = '\0'; - kdb_printf(kdb_prompt_str); - kdb_printf("%s", buffer); - *cp = tmp; + kdb_position_cursor(kdb_prompt_str, buffer, cp); } else { *++lastchar = '\0'; *cp++ = key; diff --git a/kernel/gcov/gcc_4_7.c b/kernel/gcov/gcc_4_7.c index 0f8a7af5d591..88e128c1221b 100644 --- a/kernel/gcov/gcc_4_7.c +++ b/kernel/gcov/gcc_4_7.c @@ -19,7 +19,9 @@ #include #include "gcov.h" -#if (__GNUC__ >= 10) +#if (__GNUC__ >= 14) +#define GCOV_COUNTERS 9 +#elif (__GNUC__ >= 10) #define GCOV_COUNTERS 8 #elif (__GNUC__ >= 7) #define GCOV_COUNTERS 9 diff --git a/kernel/params.c b/kernel/params.c index cc9108c2a1fd..395cb9753ef9 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -245,6 +245,24 @@ STANDARD_PARAM_DEF(long, long, "%li", kstrtol); STANDARD_PARAM_DEF(ulong, unsigned long, "%lu", kstrtoul); STANDARD_PARAM_DEF(ullong, unsigned long long, "%llu", kstrtoull); +int param_set_uint_minmax(const char *val, const struct kernel_param *kp, + unsigned int min, unsigned int max) +{ + unsigned int num; + int ret; + + if (!val) + return -EINVAL; + ret = kstrtouint(val, 0, &num); + if (ret) + return ret; + if (num < min || num > max) + return -EINVAL; + *((unsigned int *)kp->arg) = num; + return 0; +} +EXPORT_SYMBOL_GPL(param_set_uint_minmax); + int param_set_charp(const char *val, const struct kernel_param *kp) { if (strlen(val) > 1024) { diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index f0c599bf4058..c9031fa8f1d1 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -1112,7 +1112,8 @@ static void rcu_torture_timer(unsigned long unused) preempt_disable(); pipe_count = p->rtort_pipe_count; if (pipe_count > RCU_TORTURE_PIPE_LEN) { - /* Should not happen, but... */ + // Should not happen in a correct RCU implementation, + // happens quite often for torture_type=busted. pipe_count = RCU_TORTURE_PIPE_LEN; } completed = cur_ops->completed(); diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index 1cdd04254592..2f1a0e17a260 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -1137,16 +1137,13 @@ static void set_domain_attribute(struct sched_domain *sd, if (!attr || attr->relax_domain_level < 0) { if (default_relax_domain_level < 0) return; - else - request = default_relax_domain_level; + request = default_relax_domain_level; } else request = attr->relax_domain_level; - if (request < sd->level) { + + if (sd->level >= request) { /* Turn off idle balance on this domain: */ sd->flags &= ~(SD_BALANCE_WAKE|SD_BALANCE_NEWIDLE); - } else { - /* Turn on idle balance on this domain: */ - sd->flags |= (SD_BALANCE_WAKE|SD_BALANCE_NEWIDLE); } } diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 8c09e8ca1561..1e9045f7a75c 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -1101,6 +1101,11 @@ static int rb_check_list(struct ring_buffer_per_cpu *cpu_buffer, * * As a safety measure we check to make sure the data pages have not * been corrupted. + * + * Callers of this function need to guarantee that the list of pages doesn't get + * modified during the check. In particular, if it's possible that the function + * is invoked with concurrent readers which can swap in a new reader page then + * the caller should take cpu_buffer->reader_lock. */ static int rb_check_pages(struct ring_buffer_per_cpu *cpu_buffer) { @@ -1779,8 +1784,12 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size, */ synchronize_sched(); for_each_buffer_cpu(buffer, cpu) { + unsigned long flags; + cpu_buffer = buffer->buffers[cpu]; + raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); rb_check_pages(cpu_buffer); + raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); } atomic_dec(&buffer->record_disabled); } diff --git a/net/9p/client.c b/net/9p/client.c index 8b1ec2f61b5c..09f7ddb5fd77 100644 --- a/net/9p/client.c +++ b/net/9p/client.c @@ -243,6 +243,8 @@ static struct p9_fcall *p9_fcall_alloc(int alloc_msize) if (!fc) return NULL; fc->capacity = alloc_msize; + fc->id = 0; + fc->tag = P9_NOTAG; fc->sdata = (char *) fc + sizeof(struct p9_fcall); return fc; } diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c index 3ec16c48e768..984f9876811a 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index 58e8470b160e..ffb68f0319cf 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c index fc5a9e1968e8..efbf19c6d627 100644 --- a/net/batman-adv/bat_v_ogm.c +++ b/net/batman-adv/bat_v_ogm.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c index 89afb90458f4..f7fb02ce8005 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c index 8e838b6647e4..ef7ab8b707d8 100644 --- a/net/batman-adv/distributed-arp-table.c +++ b/net/batman-adv/distributed-arp-table.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c index a50c87329bc5..aec26167a00b 100644 --- a/net/batman-adv/fragmentation.c +++ b/net/batman-adv/fragmentation.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c index 056af2eec4a2..167b53fb87b9 100644 --- a/net/batman-adv/gateway_client.c +++ b/net/batman-adv/gateway_client.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c index f104002e1052..3aaa0411100b 100644 --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/hash.c b/net/batman-adv/hash.c index b5f7e13918ac..f7dd7402e14c 100644 --- a/net/batman-adv/hash.c +++ b/net/batman-adv/hash.c @@ -18,7 +18,7 @@ #include "hash.h" #include "main.h" -#include +#include #include #include diff --git a/net/batman-adv/icmp_socket.c b/net/batman-adv/icmp_socket.c index 8ead292886d1..1f57e6ec1fda 100644 --- a/net/batman-adv/icmp_socket.c +++ b/net/batman-adv/icmp_socket.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c index b61ce96ae1d3..d4056c588be9 100644 --- a/net/batman-adv/log.c +++ b/net/batman-adv/log.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c index c93a75f70f01..3867739f5531 100644 --- a/net/batman-adv/main.c +++ b/net/batman-adv/main.c @@ -22,8 +22,8 @@ #include #include #include -#include #include +#include #include #include #include diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c index fc62f325f9ec..56c6d9a07ae5 100644 --- a/net/batman-adv/multicast.c +++ b/net/batman-adv/multicast.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c index edb35bcc046d..af053a897156 100644 --- a/net/batman-adv/netlink.c +++ b/net/batman-adv/netlink.c @@ -23,8 +23,8 @@ #include #include #include -#include #include +#include #include #include #include diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c index 400e31ace4d0..9b8fff4d12e9 100644 --- a/net/batman-adv/network-coding.c +++ b/net/batman-adv/network-coding.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c index 653eaadcfefb..400253d1853b 100644 --- a/net/batman-adv/originator.c +++ b/net/batman-adv/originator.c @@ -21,7 +21,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -103,6 +104,29 @@ batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node, return vlan; } +/** + * batadv_vlan_id_valid() - check if vlan id is in valid batman-adv encoding + * @vid: the VLAN identifier + * + * Return: true when either no vlan is set or if VLAN is in correct range, + * false otherwise + */ +static bool batadv_vlan_id_valid(unsigned short vid) +{ + unsigned short non_vlan = vid & ~(BATADV_VLAN_HAS_TAG | VLAN_VID_MASK); + + if (vid == 0) + return true; + + if (!(vid & BATADV_VLAN_HAS_TAG)) + return false; + + if (non_vlan) + return false; + + return true; +} + /** * batadv_orig_node_vlan_new - search and possibly create an orig_node_vlan * object @@ -121,6 +145,9 @@ batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node, { struct batadv_orig_node_vlan *vlan; + if (!batadv_vlan_id_valid(vid)) + return NULL; + spin_lock_bh(&orig_node->vlan_list_lock); /* first look if an object for this vid already exists */ @@ -1304,6 +1331,8 @@ static void _batadv_purge_orig(struct batadv_priv *bat_priv) /* for all origins... */ for (i = 0; i < hash->size; i++) { head = &hash->table[i]; + if (hlist_empty(head)) + continue; list_lock = &hash->list_locks[i]; spin_lock_bh(list_lock); diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c index 054a65e6eb68..0580a3c918b8 100644 --- a/net/batman-adv/send.c +++ b/net/batman-adv/send.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c index 7a04ac96b121..ef84ec3f646f 100644 --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c index ed789845d195..54a627294821 100644 --- a/net/batman-adv/sysfs.c +++ b/net/batman-adv/sysfs.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c index bfe8effe9238..92333e855c68 100644 --- a/net/batman-adv/tp_meter.c +++ b/net/batman-adv/tp_meter.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c index 70b7c65b611b..e9c7685e872a 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/tvlv.c b/net/batman-adv/tvlv.c index d6d6d95e48aa..5448781a9565 100644 --- a/net/batman-adv/tvlv.c +++ b/net/batman-adv/tvlv.c @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index b36d2e455f28..4886a37a4811 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -5316,13 +5316,7 @@ static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn, memset(&rsp, 0, sizeof(rsp)); - if (max > hcon->le_conn_max_interval) { - BT_DBG("requested connection interval exceeds current bounds."); - err = -EINVAL; - } else { - err = hci_check_conn_params(min, max, latency, to_multiplier); - } - + err = hci_check_conn_params(min, max, latency, to_multiplier); if (err) rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED); else diff --git a/net/core/sock.c b/net/core/sock.c index b44969953abe..d22bfddeffbc 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -2987,7 +2987,8 @@ int sock_common_getsockopt(struct socket *sock, int level, int optname, { struct sock *sk = sock->sk; - return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + return READ_ONCE(sk->sk_prot)->getsockopt(sk, level, optname, optval, optlen); } EXPORT_SYMBOL(sock_common_getsockopt); @@ -3028,7 +3029,8 @@ int sock_common_setsockopt(struct socket *sock, int level, int optname, { struct sock *sk = sock->sk; - return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + return READ_ONCE(sk->sk_prot)->setsockopt(sk, level, optname, optval, optlen); } EXPORT_SYMBOL(sock_common_setsockopt); diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 4874407526e1..c4ae1f11739b 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -529,15 +529,20 @@ int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags) { struct sock *sk = sock->sk; + const struct proto *prot; if (addr_len < sizeof(uaddr->sa_family)) return -EINVAL; + + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + if (uaddr->sa_family == AF_UNSPEC) - return sk->sk_prot->disconnect(sk, flags); + return prot->disconnect(sk, flags); if (!inet_sk(sk)->inet_num && inet_autobind(sk)) return -EAGAIN; - return sk->sk_prot->connect(sk, uaddr, addr_len); + return prot->connect(sk, uaddr, addr_len); } EXPORT_SYMBOL(inet_dgram_connect); @@ -692,10 +697,11 @@ EXPORT_SYMBOL(inet_stream_connect); int inet_accept(struct socket *sock, struct socket *newsock, int flags, bool kern) { - struct sock *sk1 = sock->sk; + struct sock *sk1 = sock->sk, *sk2; int err = -EINVAL; - struct sock *sk2 = sk1->sk_prot->accept(sk1, flags, &err, kern); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + sk2 = READ_ONCE(sk1->sk_prot)->accept(sk1, flags, &err, kern); if (!sk2) goto do_err; @@ -751,15 +757,19 @@ EXPORT_SYMBOL(inet_getname); int inet_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) { struct sock *sk = sock->sk; + const struct proto *prot; sock_rps_record_flow(sk); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + /* We may need to bind the socket. */ - if (!inet_sk(sk)->inet_num && !sk->sk_prot->no_autobind && + if (!inet_sk(sk)->inet_num && !prot->no_autobind && inet_autobind(sk)) return -EAGAIN; - return sk->sk_prot->sendmsg(sk, msg, size); + return prot->sendmsg(sk, msg, size); } EXPORT_SYMBOL(inet_sendmsg); @@ -767,6 +777,7 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags) { struct sock *sk = sock->sk; + const struct proto *prot; sock_rps_record_flow(sk); @@ -775,8 +786,10 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset, inet_autobind(sk)) return -EAGAIN; - if (sk->sk_prot->sendpage) - return sk->sk_prot->sendpage(sk, page, offset, size, flags); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + if (prot->sendpage) + return prot->sendpage(sk, page, offset, size, flags); return sock_no_sendpage(sock, page, offset, size, flags); } EXPORT_SYMBOL(inet_sendpage); @@ -785,13 +798,16 @@ int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; + const struct proto *prot; int addr_len = 0; int err; sock_rps_record_flow(sk); - err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT, - flags & ~MSG_DONTWAIT, &addr_len); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + err = prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT, + flags & ~MSG_DONTWAIT, &addr_len); if (err >= 0) msg->msg_namelen = addr_len; return err; diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c index 8dcf9aec7b77..4a86cf05a348 100644 --- a/net/ipv4/cipso_ipv4.c +++ b/net/ipv4/cipso_ipv4.c @@ -2029,12 +2029,16 @@ static int cipso_v4_delopt(struct ip_options_rcu __rcu **opt_ptr) * from there we can determine the new total option length */ iter = 0; optlen_new = 0; - while (iter < opt->opt.optlen) - if (opt->opt.__data[iter] != IPOPT_NOP) { + while (iter < opt->opt.optlen) { + if (opt->opt.__data[iter] == IPOPT_END) { + break; + } else if (opt->opt.__data[iter] == IPOPT_NOP) { + iter++; + } else { iter += opt->opt.__data[iter + 1]; optlen_new = iter; - } else - iter++; + } + } hdr_delta = opt->opt.optlen; opt->opt.optlen = (optlen_new + 3) & ~3; hdr_delta -= opt->opt.optlen; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 770292843c6c..b657fc1b3413 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2048,6 +2048,10 @@ void tcp_set_state(struct sock *sk, int state) if (oldstate != TCP_ESTABLISHED) TCP_INC_STATS(sock_net(sk), TCP_MIB_CURRESTAB); break; + case TCP_CLOSE_WAIT: + if (oldstate == TCP_SYN_RECV) + TCP_INC_STATS(sock_net(sk), TCP_MIB_CURRESTAB); + break; case TCP_CLOSE: if (oldstate == TCP_CLOSE_WAIT || oldstate == TCP_ESTABLISHED) @@ -2059,7 +2063,7 @@ void tcp_set_state(struct sock *sk, int state) inet_put_port(sk); /* fall through */ default: - if (oldstate == TCP_ESTABLISHED) + if (oldstate == TCP_ESTABLISHED || oldstate == TCP_CLOSE_WAIT) TCP_DEC_STATS(sock_net(sk), TCP_MIB_CURRESTAB); } @@ -2838,8 +2842,9 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval, const struct inet_connection_sock *icsk = inet_csk(sk); if (level != SOL_TCP) - return icsk->icsk_af_ops->setsockopt(sk, level, optname, - optval, optlen); + /* Paired with WRITE_ONCE() in do_ipv6_setsockopt() and tcp_v6_connect() */ + return READ_ONCE(icsk->icsk_af_ops)->setsockopt(sk, level, optname, + optval, optlen); return do_tcp_setsockopt(sk, level, optname, optval, optlen); } EXPORT_SYMBOL(tcp_setsockopt); @@ -3269,8 +3274,9 @@ int tcp_getsockopt(struct sock *sk, int level, int optname, char __user *optval, struct inet_connection_sock *icsk = inet_csk(sk); if (level != SOL_TCP) - return icsk->icsk_af_ops->getsockopt(sk, level, optname, - optval, optlen); + /* Paired with WRITE_ONCE() in do_ipv6_setsockopt() and tcp_v6_connect() */ + return READ_ONCE(icsk->icsk_af_ops)->getsockopt(sk, level, optname, + optval, optlen); return do_tcp_getsockopt(sk, level, optname, optval, optlen); } EXPORT_SYMBOL(tcp_getsockopt); diff --git a/net/ipv4/tcp_dctcp.c b/net/ipv4/tcp_dctcp.c index f0de9fb92f0d..ff720fc6d88f 100644 --- a/net/ipv4/tcp_dctcp.c +++ b/net/ipv4/tcp_dctcp.c @@ -59,7 +59,18 @@ struct dctcp { }; static unsigned int dctcp_shift_g __read_mostly = 4; /* g = 1/2^4 */ -module_param(dctcp_shift_g, uint, 0644); + +static int dctcp_shift_g_set(const char *val, const struct kernel_param *kp) +{ + return param_set_uint_minmax(val, kp, 0, 10); +} + +static const struct kernel_param_ops dctcp_shift_g_ops = { + .set = dctcp_shift_g_set, + .get = param_get_uint, +}; + +module_param_cb(dctcp_shift_g, &dctcp_shift_g_ops, &dctcp_shift_g, 0644); MODULE_PARM_DESC(dctcp_shift_g, "parameter g for updating dctcp_alpha"); static unsigned int dctcp_alpha_on_init __read_mostly = DCTCP_MAX_ALPHA; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index d68cbe3704c5..966d3b2a61d5 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -3127,6 +3127,7 @@ void tcp_send_fin(struct sock *sk) * as TCP stack thinks it has already been transmitted. */ if (tskb && (tcp_send_head(sk) || tcp_under_memory_pressure(sk))) { +coalesce: TCP_SKB_CB(tskb)->tcp_flags |= TCPHDR_FIN; TCP_SKB_CB(tskb)->end_seq++; tp->write_seq++; @@ -3144,9 +3145,11 @@ void tcp_send_fin(struct sock *sk) skb = alloc_skb_fclone(MAX_TCP_HEADER, sk_gfp_mask(sk, GFP_ATOMIC | __GFP_NOWARN)); - if (unlikely(!skb)) + if (unlikely(!skb)) { + if (tskb) + goto coalesce; return; - + } skb_reserve(skb, MAX_TCP_HEADER); sk_forced_mem_schedule(sk, skb->truesize); /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */ diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 44199a3f0380..888650b0fae8 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -285,6 +285,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) { struct sockaddr_in6 *addr = (struct sockaddr_in6 *)uaddr; struct sock *sk = sock->sk; + const struct proto *prot; struct inet_sock *inet = inet_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk); struct net *net = sock_net(sk); @@ -294,9 +295,11 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) int addr_type = 0; int err = 0; + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); /* If the socket has its own bind function then use it. */ - if (sk->sk_prot->bind) - return sk->sk_prot->bind(sk, uaddr, addr_len); + if (prot->bind) + return prot->bind(sk, uaddr, addr_len); if (addr_len < SIN6_LEN_RFC2133) return -EINVAL; @@ -536,6 +539,7 @@ int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) { struct sock *sk = sock->sk; struct net *net = sock_net(sk); + const struct proto *prot; switch (cmd) { case SIOCGSTAMP: @@ -556,9 +560,11 @@ int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) case SIOCSIFDSTADDR: return addrconf_set_dstaddr(net, (void __user *) arg); default: - if (!sk->sk_prot->ioctl) + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + if (!prot->ioctl) return -ENOIOCTLCMD; - return sk->sk_prot->ioctl(sk, cmd, arg); + return prot->ioctl(sk, cmd, arg); } /*NOTREACHED*/ return 0; diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 434a277fb628..2c9657c205ae 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -224,8 +224,10 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, sock_prot_inuse_add(net, sk->sk_prot, -1); sock_prot_inuse_add(net, &tcp_prot, 1); local_bh_enable(); - sk->sk_prot = &tcp_prot; - icsk->icsk_af_ops = &ipv4_specific; + /* Paired with READ_ONCE(sk->sk_prot) in inet6_stream_ops */ + WRITE_ONCE(sk->sk_prot, &tcp_prot); + /* Paired with READ_ONCE() in tcp_(get|set)sockopt() */ + WRITE_ONCE(icsk->icsk_af_ops, &ipv4_specific); sk->sk_socket->ops = &inet_stream_ops; sk->sk_family = PF_INET; tcp_sync_mss(sk, icsk->icsk_pmtu_cookie); @@ -238,7 +240,8 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, sock_prot_inuse_add(net, sk->sk_prot, -1); sock_prot_inuse_add(net, prot, 1); local_bh_enable(); - sk->sk_prot = prot; + /* Paired with READ_ONCE(sk->sk_prot) in inet6_dgram_ops */ + WRITE_ONCE(sk->sk_prot, prot); sk->sk_socket->ops = &inet_dgram_ops; sk->sk_family = PF_INET; } diff --git a/net/ipv6/route.c b/net/ipv6/route.c index fadc94462e8d..69288fc80a02 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3903,12 +3903,16 @@ int ipv6_sysctl_rtcache_flush(struct ctl_table *ctl, int write, { struct net *net; int delay; + int ret; if (!write) return -EINVAL; + ret = proc_dointvec(ctl, write, buffer, lenp, ppos); + if (ret) + return ret; + net = (struct net *)ctl->extra1; delay = net->ipv6.sysctl.flush_delay; - proc_dointvec(ctl, write, buffer, lenp, ppos); fib6_run_gc(delay <= 0 ? 0 : (unsigned long)delay, net, delay > 0); return 0; } diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c index b785bf569049..00d8f7693e8e 100644 --- a/net/ipv6/seg6.c +++ b/net/ipv6/seg6.c @@ -486,6 +486,8 @@ out_unregister_iptun: #endif #ifdef CONFIG_IPV6_SEG6_LWTUNNEL out_unregister_genl: +#endif +#if IS_ENABLED(CONFIG_IPV6_SEG6_LWTUNNEL) || IS_ENABLED(CONFIG_IPV6_SEG6_HMAC) genl_unregister_family(&seg6_genl_family); #endif out_unregister_pernet: @@ -499,8 +501,9 @@ void seg6_exit(void) seg6_hmac_exit(); #endif #ifdef CONFIG_IPV6_SEG6_LWTUNNEL + seg6_local_exit(); seg6_iptunnel_exit(); #endif - unregister_pernet_subsys(&ip6_segments_ops); genl_unregister_family(&seg6_genl_family); + unregister_pernet_subsys(&ip6_segments_ops); } diff --git a/net/ipv6/seg6_hmac.c b/net/ipv6/seg6_hmac.c index 73ef23dae184..1e609e94c967 100644 --- a/net/ipv6/seg6_hmac.c +++ b/net/ipv6/seg6_hmac.c @@ -360,6 +360,7 @@ static int seg6_hmac_init_algo(void) struct crypto_shash *tfm; struct shash_desc *shash; int i, alg_count, cpu; + int ret = -ENOMEM; alg_count = ARRAY_SIZE(hmac_algos); @@ -370,12 +371,14 @@ static int seg6_hmac_init_algo(void) algo = &hmac_algos[i]; algo->tfms = alloc_percpu(struct crypto_shash *); if (!algo->tfms) - return -ENOMEM; + goto error_out; for_each_possible_cpu(cpu) { tfm = crypto_alloc_shash(algo->name, 0, 0); - if (IS_ERR(tfm)) - return PTR_ERR(tfm); + if (IS_ERR(tfm)) { + ret = PTR_ERR(tfm); + goto error_out; + } p_tfm = per_cpu_ptr(algo->tfms, cpu); *p_tfm = tfm; } @@ -387,18 +390,22 @@ static int seg6_hmac_init_algo(void) algo->shashs = alloc_percpu(struct shash_desc *); if (!algo->shashs) - return -ENOMEM; + goto error_out; for_each_possible_cpu(cpu) { shash = kzalloc_node(shsize, GFP_KERNEL, cpu_to_node(cpu)); if (!shash) - return -ENOMEM; + goto error_out; *per_cpu_ptr(algo->shashs, cpu) = shash; } } return 0; + +error_out: + seg6_hmac_exit(); + return ret; } int __init seg6_hmac_init(void) @@ -418,22 +425,29 @@ int __net_init seg6_hmac_net_init(struct net *net) void seg6_hmac_exit(void) { struct seg6_hmac_algo *algo = NULL; + struct crypto_shash *tfm; + struct shash_desc *shash; int i, alg_count, cpu; alg_count = ARRAY_SIZE(hmac_algos); for (i = 0; i < alg_count; i++) { algo = &hmac_algos[i]; - for_each_possible_cpu(cpu) { - struct crypto_shash *tfm; - struct shash_desc *shash; - shash = *per_cpu_ptr(algo->shashs, cpu); - kfree(shash); - tfm = *per_cpu_ptr(algo->tfms, cpu); - crypto_free_shash(tfm); + if (algo->shashs) { + for_each_possible_cpu(cpu) { + shash = *per_cpu_ptr(algo->shashs, cpu); + kfree(shash); + } + free_percpu(algo->shashs); + } + + if (algo->tfms) { + for_each_possible_cpu(cpu) { + tfm = *per_cpu_ptr(algo->tfms, cpu); + crypto_free_shash(tfm); + } + free_percpu(algo->tfms); } - free_percpu(algo->tfms); - free_percpu(algo->shashs); } } EXPORT_SYMBOL(seg6_hmac_exit); diff --git a/net/ipv6/seg6_iptunnel.c b/net/ipv6/seg6_iptunnel.c index 3f43a4688602..205e0a3c0146 100644 --- a/net/ipv6/seg6_iptunnel.c +++ b/net/ipv6/seg6_iptunnel.c @@ -293,9 +293,8 @@ static int seg6_input(struct sk_buff *skb) slwt = seg6_lwt_lwtunnel(orig_dst->lwtstate); - preempt_disable(); + local_bh_disable(); dst = dst_cache_get(&slwt->cache); - preempt_enable(); skb_dst_drop(skb); @@ -303,14 +302,13 @@ static int seg6_input(struct sk_buff *skb) ip6_route_input(skb); dst = skb_dst(skb); if (!dst->error) { - preempt_disable(); dst_cache_set_ip6(&slwt->cache, dst, &ipv6_hdr(skb)->saddr); - preempt_enable(); } } else { skb_dst_set(skb, dst); } + local_bh_enable(); err = skb_cow_head(skb, LL_RESERVED_SPACE(dst->dev)); if (unlikely(err)) @@ -332,9 +330,9 @@ static int seg6_output(struct net *net, struct sock *sk, struct sk_buff *skb) slwt = seg6_lwt_lwtunnel(orig_dst->lwtstate); - preempt_disable(); + local_bh_disable(); dst = dst_cache_get(&slwt->cache); - preempt_enable(); + local_bh_enable(); if (unlikely(!dst)) { struct ipv6hdr *hdr = ipv6_hdr(skb); @@ -354,9 +352,9 @@ static int seg6_output(struct net *net, struct sock *sk, struct sk_buff *skb) goto drop; } - preempt_disable(); + local_bh_disable(); dst_cache_set_ip6(&slwt->cache, dst, &fl6.saddr); - preempt_enable(); + local_bh_enable(); } skb_dst_drop(skb); diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 4c5773a46ad9..27e67bc36c41 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -213,7 +213,8 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, sin.sin_port = usin->sin6_port; sin.sin_addr.s_addr = usin->sin6_addr.s6_addr32[3]; - icsk->icsk_af_ops = &ipv6_mapped; + /* Paired with READ_ONCE() in tcp_(get|set)sockopt() */ + WRITE_ONCE(icsk->icsk_af_ops, &ipv6_mapped); sk->sk_backlog_rcv = tcp_v4_do_rcv; #ifdef CONFIG_TCP_MD5SIG tp->af_specific = &tcp_sock_ipv6_mapped_specific; @@ -223,7 +224,8 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, if (err) { icsk->icsk_ext_hdr_len = exthdrlen; - icsk->icsk_af_ops = &ipv6_specific; + /* Paired with READ_ONCE() in tcp_(get|set)sockopt() */ + WRITE_ONCE(icsk->icsk_af_ops, &ipv6_specific); sk->sk_backlog_rcv = tcp_v6_do_rcv; #ifdef CONFIG_TCP_MD5SIG tp->af_specific = &tcp_sock_ipv6_specific; @@ -1151,7 +1153,6 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff * */ newsk->sk_gso_type = SKB_GSO_TCPV6; - ip6_dst_store(newsk, dst, NULL, NULL); inet6_sk_rx_dst_set(newsk, skb); newtcp6sk = (struct tcp6_sock *)newsk; @@ -1163,6 +1164,8 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff * memcpy(newnp, np, sizeof(struct ipv6_pinfo)); + ip6_dst_store(newsk, dst, NULL, NULL); + newsk->sk_v6_daddr = ireq->ir_v6_rmt_addr; newnp->saddr = ireq->ir_v6_loc_addr; newsk->sk_v6_rcv_saddr = ireq->ir_v6_loc_addr; diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index 44d616d0bd00..3e4aa4def9f8 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c @@ -60,12 +60,18 @@ static int xfrm6_get_saddr(struct net *net, int oif, { struct dst_entry *dst; struct net_device *dev; + struct inet6_dev *idev; dst = xfrm6_dst_lookup(net, 0, oif, NULL, daddr, mark); if (IS_ERR(dst)) return -EHOSTUNREACH; - dev = ip6_dst_idev(dst)->dev; + idev = ip6_dst_idev(dst); + if (!idev) { + dst_release(dst); + return -EHOSTUNREACH; + } + dev = idev->dev; ipv6_dev_get_saddr(dev_net(dev), dev, &daddr->in6, 0, &saddr->in6); dst_release(dst); return 0; diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c index 7d670ec17a7e..ae76f1aa1104 100644 --- a/net/iucv/iucv.c +++ b/net/iucv/iucv.c @@ -578,7 +578,7 @@ static void iucv_setmask_mp(void) */ static void iucv_setmask_up(void) { - cpumask_t cpumask; + static cpumask_t cpumask; int cpu; /* Disable all cpu but the first in cpu_irq_cpumask. */ @@ -686,23 +686,33 @@ static int iucv_cpu_online(unsigned int cpu) static int iucv_cpu_down_prep(unsigned int cpu) { - cpumask_t cpumask; + cpumask_var_t cpumask; + int ret = 0; if (!iucv_path_table) return 0; - cpumask_copy(&cpumask, &iucv_buffer_cpumask); - cpumask_clear_cpu(cpu, &cpumask); - if (cpumask_empty(&cpumask)) + if (!alloc_cpumask_var(&cpumask, GFP_KERNEL)) + return -ENOMEM; + + cpumask_copy(cpumask, &iucv_buffer_cpumask); + cpumask_clear_cpu(cpu, cpumask); + if (cpumask_empty(cpumask)) { /* Can't offline last IUCV enabled cpu. */ - return -EINVAL; + ret = -EINVAL; + goto __free_cpumask; + } iucv_retrieve_cpu(NULL); if (!cpumask_empty(&iucv_irq_cpumask)) - return 0; + goto __free_cpumask; + smp_call_function_single(cpumask_first(&iucv_buffer_cpumask), iucv_allow_cpu, NULL, 1); - return 0; + +__free_cpumask: + free_cpumask_var(cpumask); + return ret; } /** diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c index e4c62b0a3fdb..f79996fc2d63 100644 --- a/net/mac80211/mesh_pathtbl.c +++ b/net/mac80211/mesh_pathtbl.c @@ -806,10 +806,23 @@ void mesh_path_discard_frame(struct ieee80211_sub_if_data *sdata, */ void mesh_path_flush_pending(struct mesh_path *mpath) { + struct ieee80211_sub_if_data *sdata = mpath->sdata; + struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; + struct mesh_preq_queue *preq, *tmp; struct sk_buff *skb; while ((skb = skb_dequeue(&mpath->frame_queue)) != NULL) mesh_path_discard_frame(mpath->sdata, skb); + + spin_lock_bh(&ifmsh->mesh_preq_queue_lock); + list_for_each_entry_safe(preq, tmp, &ifmsh->preq_queue.list, list) { + if (ether_addr_equal(mpath->dst, preq->dst)) { + list_del(&preq->list); + kfree(preq); + --ifmsh->preq_queue_len; + } + } + spin_unlock_bh(&ifmsh->mesh_preq_queue_lock); } /** diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index f2663c0a1e6f..22164cb6e373 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -1249,7 +1249,7 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) skb_queue_head_init(&pending); /* sync with ieee80211_tx_h_unicast_ps_buf */ - spin_lock(&sta->ps_lock); + spin_lock_bh(&sta->ps_lock); /* Send all buffered frames to the station */ for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { int count = skb_queue_len(&pending), tmp; @@ -1278,7 +1278,7 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) */ clear_sta_flag(sta, WLAN_STA_PSPOLL); clear_sta_flag(sta, WLAN_STA_UAPSD); - spin_unlock(&sta->ps_lock); + spin_unlock_bh(&sta->ps_lock); atomic_dec(&ps->num_sta_ps); diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index 17ba662aadcf..0d71f607a4c6 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -148,18 +148,18 @@ static void __nft_set_trans_bind(const struct nft_ctx *ctx, struct nft_set *set, struct net *net = ctx->net; struct nft_trans *trans; - if (!(set->flags & NFT_SET_ANONYMOUS)) + if (!nft_set_is_anonymous(set)) return; list_for_each_entry_reverse(trans, &net->nft.commit_list, list) { switch (trans->msg_type) { case NFT_MSG_NEWSET: if (nft_trans_set(trans) == set) - nft_trans_set_bound(trans) = bind; + set->bound = true; break; case NFT_MSG_NEWSETELEM: if (nft_trans_elem_set(trans) == set) - nft_trans_elem_set_bound(trans) = bind; + set->bound = true; break; } } @@ -371,6 +371,31 @@ static int nft_trans_set_add(const struct nft_ctx *ctx, int msg_type, return 0; } +static void nft_setelem_data_deactivate(const struct net *net, + const struct nft_set *set, + struct nft_set_elem *elem); + +static int nft_mapelem_deactivate(const struct nft_ctx *ctx, + struct nft_set *set, + const struct nft_set_iter *iter, + struct nft_set_elem *elem) +{ + nft_setelem_data_deactivate(ctx->net, set, elem); + + return 0; +} + +static void nft_map_deactivate(const struct nft_ctx *ctx, struct nft_set *set) +{ + struct nft_set_iter iter = { + .genmask = nft_genmask_next(ctx->net), + .fn = nft_mapelem_deactivate, + }; + + set->ops->walk(ctx, set, &iter); + WARN_ON_ONCE(iter.err); +} + static int nft_delset(const struct nft_ctx *ctx, struct nft_set *set) { int err; @@ -379,6 +404,9 @@ static int nft_delset(const struct nft_ctx *ctx, struct nft_set *set) if (err < 0) return err; + if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) + nft_map_deactivate(ctx, set); + nft_deactivate_next(ctx->net, set); nft_use_dec(&ctx->table->use); @@ -870,7 +898,7 @@ static int nft_flush_table(struct nft_ctx *ctx) if (!nft_is_active_next(ctx->net, set)) continue; - if (set->flags & NFT_SET_ANONYMOUS && + if (nft_set_is_anonymous(set) && !list_empty(&set->bindings)) continue; @@ -3352,6 +3380,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk, INIT_LIST_HEAD(&set->bindings); set->table = table; + write_pnet(&set->net, net); set->ops = ops; set->ktype = ktype; set->klen = desc.klen; @@ -3379,7 +3408,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk, return 0; err4: - ops->destroy(set); + ops->destroy(&ctx, set); err3: kfree(set->name); err2: @@ -3391,12 +3420,12 @@ err1: return err; } -static void nft_set_destroy(struct nft_set *set) +static void nft_set_destroy(const struct nft_ctx *ctx, struct nft_set *set) { if (WARN_ON(set->use > 0)) return; - set->ops->destroy(set); + set->ops->destroy(ctx, set); module_put(set->ops->type->owner); kfree(set->name); kvfree(set); @@ -3460,7 +3489,7 @@ int nf_tables_bind_set(const struct nft_ctx *ctx, struct nft_set *set, struct nft_set_binding *i; struct nft_set_iter iter; - if (!list_empty(&set->bindings) && set->flags & NFT_SET_ANONYMOUS) + if (!list_empty(&set->bindings) && nft_set_is_anonymous(set)) return -EBUSY; if (binding->flags & NFT_SET_MAP) { @@ -3500,7 +3529,7 @@ void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set, { list_del_rcu(&binding->list); - if (list_empty(&set->bindings) && set->flags & NFT_SET_ANONYMOUS) { + if (list_empty(&set->bindings) && nft_set_is_anonymous(set)) { list_del_rcu(&set->list); if (event) nf_tables_set_notify(ctx, set, NFT_MSG_DELSET, @@ -3509,10 +3538,39 @@ void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set, } EXPORT_SYMBOL_GPL(nf_tables_unbind_set); +static void nft_setelem_data_activate(const struct net *net, + const struct nft_set *set, + struct nft_set_elem *elem); + +static int nft_mapelem_activate(const struct nft_ctx *ctx, + struct nft_set *set, + const struct nft_set_iter *iter, + struct nft_set_elem *elem) +{ + nft_setelem_data_activate(ctx->net, set, elem); + + return 0; +} + +static void nft_map_activate(const struct nft_ctx *ctx, struct nft_set *set) +{ + struct nft_set_iter iter = { + .genmask = nft_genmask_next(ctx->net), + .fn = nft_mapelem_activate, + }; + + set->ops->walk(ctx, set, &iter); + WARN_ON_ONCE(iter.err); +} + void nf_tables_activate_set(const struct nft_ctx *ctx, struct nft_set *set) { - if (set->flags & NFT_SET_ANONYMOUS) + if (nft_set_is_anonymous(set)) { + if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) + nft_map_activate(ctx, set); + nft_clear(ctx->net, set); + } nft_use_inc_restore(&set->use); } @@ -3525,7 +3583,7 @@ void nf_tables_deactivate_set(const struct nft_ctx *ctx, struct nft_set *set, switch (phase) { case NFT_TRANS_PREPARE_ERROR: nft_set_trans_unbind(ctx, set); - if (set->flags & NFT_SET_ANONYMOUS) + if (nft_set_is_anonymous(set)) nft_deactivate_next(ctx->net, set); else list_del_rcu(&binding->list); @@ -3533,13 +3591,20 @@ void nf_tables_deactivate_set(const struct nft_ctx *ctx, struct nft_set *set, nft_use_dec(&set->use); break; case NFT_TRANS_PREPARE: - if (set->flags & NFT_SET_ANONYMOUS) - nft_deactivate_next(ctx->net, set); + if (nft_set_is_anonymous(set)) { + if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) + nft_map_deactivate(ctx, set); + nft_deactivate_next(ctx->net, set); + } nft_use_dec(&set->use); return; case NFT_TRANS_ABORT: case NFT_TRANS_RELEASE: + if (nft_set_is_anonymous(set) && + set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) + nft_map_deactivate(ctx, set); + nft_use_dec(&set->use); /* fall through */ default: @@ -3551,8 +3616,8 @@ EXPORT_SYMBOL_GPL(nf_tables_deactivate_set); void nf_tables_destroy_set(const struct nft_ctx *ctx, struct nft_set *set) { - if (list_empty(&set->bindings) && set->flags & NFT_SET_ANONYMOUS) - nft_set_destroy(set); + if (list_empty(&set->bindings) && nft_set_is_anonymous(set)) + nft_set_destroy(ctx, set); } EXPORT_SYMBOL_GPL(nf_tables_destroy_set); @@ -3654,8 +3719,7 @@ static int nf_tables_fill_setelem(struct sk_buff *skb, if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA) && nft_data_dump(skb, NFTA_SET_ELEM_DATA, nft_set_ext_data(ext), - set->dtype == NFT_DATA_VERDICT ? NFT_DATA_VERDICT : NFT_DATA_VALUE, - set->dlen) < 0) + nft_set_datatype(set), set->dlen) < 0) goto nla_put_failure; if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPR) && @@ -3722,8 +3786,12 @@ static int nf_tables_dump_setelem(const struct nft_ctx *ctx, const struct nft_set_iter *iter, struct nft_set_elem *elem) { + const struct nft_set_ext *ext = nft_set_elem_ext(set, elem->priv); struct nft_set_dump_args *args; + if (nft_set_elem_expired(ext)) + return 0; + args = container_of(iter, struct nft_set_dump_args, iter); return nf_tables_fill_setelem(args->skb, set, elem); } @@ -4002,33 +4070,39 @@ void *nft_set_elem_init(const struct nft_set *set, return elem; } +/* Drop references and destroy. Called from gc, dynset and abort path. */ void nft_set_elem_destroy(const struct nft_set *set, void *elem, bool destroy_expr) { struct nft_set_ext *ext = nft_set_elem_ext(set, elem); + struct nft_ctx ctx = { + .net = read_pnet(&set->net), + }; nft_data_release(nft_set_ext_key(ext), NFT_DATA_VALUE); if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA)) nft_data_release(nft_set_ext_data(ext), set->dtype); if (destroy_expr && nft_set_ext_exists(ext, NFT_SET_EXT_EXPR)) - nf_tables_expr_destroy(NULL, nft_set_ext_expr(ext)); + nf_tables_expr_destroy(&ctx, nft_set_ext_expr(ext)); if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF)) nft_use_dec(&(*nft_set_ext_obj(ext))->use); kfree(elem); } EXPORT_SYMBOL_GPL(nft_set_elem_destroy); -/* Only called from commit path, nft_set_elem_deactivate() already deals with - * the refcounting from the preparation phase. +/* Destroy element. References have been already dropped in the preparation + * path via nft_setelem_data_deactivate(). */ -static void nf_tables_set_elem_destroy(const struct nft_set *set, void *elem) +void nf_tables_set_elem_destroy(const struct nft_ctx *ctx, + const struct nft_set *set, void *elem) { struct nft_set_ext *ext = nft_set_elem_ext(set, elem); if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPR)) - nf_tables_expr_destroy(NULL, nft_set_ext_expr(ext)); + nf_tables_expr_destroy(ctx, nft_set_ext_expr(ext)); kfree(elem); } +EXPORT_SYMBOL_GPL(nf_tables_set_elem_destroy); static int nft_setelem_parse_flags(const struct nft_set *set, const struct nlattr *attr, u32 *flags) @@ -4352,9 +4426,9 @@ void nft_data_hold(const struct nft_data *data, enum nft_data_types type) } } -static void nft_set_elem_activate(const struct net *net, - const struct nft_set *set, - struct nft_set_elem *elem) +static void nft_setelem_data_activate(const struct net *net, + const struct nft_set *set, + struct nft_set_elem *elem) { const struct nft_set_ext *ext = nft_set_elem_ext(set, elem->priv); @@ -4364,9 +4438,9 @@ static void nft_set_elem_activate(const struct net *net, nft_use_inc_restore(&(*nft_set_ext_obj(ext))->use); } -static void nft_set_elem_deactivate(const struct net *net, - const struct nft_set *set, - struct nft_set_elem *elem) +static void nft_setelem_data_deactivate(const struct net *net, + const struct nft_set *set, + struct nft_set_elem *elem) { const struct nft_set_ext *ext = nft_set_elem_ext(set, elem->priv); @@ -4433,7 +4507,7 @@ static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set, kfree(elem.priv); elem.priv = priv; - nft_set_elem_deactivate(ctx->net, set, &elem); + nft_setelem_data_deactivate(ctx->net, set, &elem); nft_trans_elem(trans) = elem; list_add_tail(&trans->list, &ctx->net->nft.commit_list); @@ -4467,7 +4541,7 @@ static int nft_flush_set(const struct nft_ctx *ctx, } set->ndeact++; - nft_set_elem_deactivate(ctx->net, set, elem); + nft_setelem_data_deactivate(ctx->net, set, elem); nft_trans_elem_set(trans) = set; nft_trans_elem(trans) = *elem; list_add_tail(&trans->list, &ctx->net->nft.commit_list); @@ -5297,10 +5371,11 @@ static void nf_tables_commit_release(struct nft_trans *trans) nf_tables_rule_destroy(&trans->ctx, nft_trans_rule(trans)); break; case NFT_MSG_DELSET: - nft_set_destroy(nft_trans_set(trans)); + nft_set_destroy(&trans->ctx, nft_trans_set(trans)); break; case NFT_MSG_DELSETELEM: - nf_tables_set_elem_destroy(nft_trans_elem_set(trans), + nf_tables_set_elem_destroy(&trans->ctx, + nft_trans_elem_set(trans), nft_trans_elem(trans).priv); break; case NFT_MSG_DELOBJ: @@ -5386,7 +5461,7 @@ static int nf_tables_commit(struct net *net, struct sk_buff *skb) /* This avoids hitting -EBUSY when deleting the table * from the transaction. */ - if (nft_trans_set(trans)->flags & NFT_SET_ANONYMOUS && + if (nft_set_is_anonymous(nft_trans_set(trans)) && !list_empty(&nft_trans_set(trans)->bindings)) nft_use_dec(&trans->ctx.table->use); @@ -5457,8 +5532,7 @@ static void nf_tables_abort_release(struct nft_trans *trans) nf_tables_rule_destroy(&trans->ctx, nft_trans_rule(trans)); break; case NFT_MSG_NEWSET: - if (!nft_trans_set_bound(trans)) - nft_set_destroy(nft_trans_set(trans)); + nft_set_destroy(&trans->ctx, nft_trans_set(trans)); break; case NFT_MSG_NEWSETELEM: nft_set_elem_destroy(nft_trans_elem_set(trans), @@ -5530,7 +5604,7 @@ static int nf_tables_abort(struct net *net, struct sk_buff *skb) break; case NFT_MSG_NEWSET: nft_use_dec_restore(&trans->ctx.table->use); - if (nft_trans_set_bound(trans)) { + if (nft_trans_set(trans)->bound) { nft_trans_destroy(trans); break; } @@ -5539,22 +5613,23 @@ static int nf_tables_abort(struct net *net, struct sk_buff *skb) case NFT_MSG_DELSET: nft_use_inc_restore(&trans->ctx.table->use); nft_clear(trans->ctx.net, nft_trans_set(trans)); + if (nft_trans_set(trans)->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) + nft_map_activate(&trans->ctx, nft_trans_set(trans)); nft_trans_destroy(trans); break; case NFT_MSG_NEWSETELEM: - if (nft_trans_elem_set_bound(trans)) { + if (nft_trans_elem_set(trans)->bound) { nft_trans_destroy(trans); break; } te = (struct nft_trans_elem *)trans->data; - te->set->ops->remove(net, te->set, &te->elem); atomic_dec(&te->set->nelems); break; case NFT_MSG_DELSETELEM: te = (struct nft_trans_elem *)trans->data; - nft_set_elem_activate(net, te->set, &te->elem); + nft_setelem_data_activate(net, te->set, &te->elem); te->set->ops->activate(net, te->set, &te->elem); te->set->ndeact--; @@ -5880,6 +5955,9 @@ static int nft_validate_register_store(const struct nft_ctx *ctx, return 0; default: + if (type != NFT_DATA_VALUE) + return -EINVAL; + if (reg < NFT_REG_1 * NFT_REG_SIZE / NFT_REG32_SIZE) return -EINVAL; if (len == 0) @@ -5888,8 +5966,6 @@ static int nft_validate_register_store(const struct nft_ctx *ctx, FIELD_SIZEOF(struct nft_regs, data)) return -ERANGE; - if (data != NULL && type != NFT_DATA_VALUE) - return -EINVAL; return 0; } } @@ -6184,7 +6260,10 @@ static void __nft_release_afinfo(struct net *net, struct nft_af_info *afi) list_for_each_entry_safe(set, ns, &table->sets, list) { list_del(&set->list); nft_use_dec(&table->use); - nft_set_destroy(set); + if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT)) + nft_map_deactivate(&ctx, set); + + nft_set_destroy(&ctx, set); } list_for_each_entry_safe(obj, ne, &table->objects, list) { list_del(&obj->list); diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index 0c40438c5b6f..c236860c4ecb 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c @@ -168,7 +168,9 @@ instance_destroy_rcu(struct rcu_head *head) struct nfqnl_instance *inst = container_of(head, struct nfqnl_instance, rcu); + rcu_read_lock(); nfqnl_flush(inst, NULL, 0); + rcu_read_unlock(); kfree(inst); module_put(THIS_MODULE); } diff --git a/net/netfilter/nft_dynset.c b/net/netfilter/nft_dynset.c index 461bdecbe7fc..af027310da56 100644 --- a/net/netfilter/nft_dynset.c +++ b/net/netfilter/nft_dynset.c @@ -127,7 +127,7 @@ static int nft_dynset_init(const struct nft_ctx *ctx, u32 flags = ntohl(nla_get_be32(tb[NFTA_DYNSET_FLAGS])); if (flags & ~NFT_DYNSET_F_INV) - return -EINVAL; + return -EOPNOTSUPP; if (flags & NFT_DYNSET_F_INV) priv->invert = true; } @@ -147,21 +147,13 @@ static int nft_dynset_init(const struct nft_ctx *ctx, return -EBUSY; priv->op = ntohl(nla_get_be32(tb[NFTA_DYNSET_OP])); - switch (priv->op) { - case NFT_DYNSET_OP_ADD: - break; - case NFT_DYNSET_OP_UPDATE: - if (!(set->flags & NFT_SET_TIMEOUT)) - return -EOPNOTSUPP; - break; - default: + if (priv->op > NFT_DYNSET_OP_UPDATE) return -EOPNOTSUPP; - } timeout = 0; if (tb[NFTA_DYNSET_TIMEOUT] != NULL) { if (!(set->flags & NFT_SET_TIMEOUT)) - return -EINVAL; + return -EOPNOTSUPP; timeout = msecs_to_jiffies(be64_to_cpu(nla_get_be64( tb[NFTA_DYNSET_TIMEOUT]))); } @@ -173,7 +165,7 @@ static int nft_dynset_init(const struct nft_ctx *ctx, if (tb[NFTA_DYNSET_SREG_DATA] != NULL) { if (!(set->flags & NFT_SET_MAP)) - return -EINVAL; + return -EOPNOTSUPP; if (set->dtype == NFT_DATA_VERDICT) return -EOPNOTSUPP; @@ -187,7 +179,7 @@ static int nft_dynset_init(const struct nft_ctx *ctx, if (tb[NFTA_DYNSET_EXPR] != NULL) { if (!(set->flags & NFT_SET_EVAL)) return -EINVAL; - if (!(set->flags & NFT_SET_ANONYMOUS)) + if (!nft_set_is_anonymous(set)) return -EOPNOTSUPP; priv->expr = nft_expr_init(ctx, tb[NFTA_DYNSET_EXPR]); diff --git a/net/netfilter/nft_lookup.c b/net/netfilter/nft_lookup.c index 7577a486635a..23a270b2cf8f 100644 --- a/net/netfilter/nft_lookup.c +++ b/net/netfilter/nft_lookup.c @@ -101,7 +101,8 @@ static int nft_lookup_init(const struct nft_ctx *ctx, return -EINVAL; err = nft_parse_register_store(ctx, tb[NFTA_LOOKUP_DREG], - &priv->dreg, NULL, set->dtype, + &priv->dreg, NULL, + nft_set_datatype(set), set->dlen); if (err < 0) return err; diff --git a/net/netfilter/nft_set_bitmap.c b/net/netfilter/nft_set_bitmap.c index 734989c40579..d50daba3fd09 100644 --- a/net/netfilter/nft_set_bitmap.c +++ b/net/netfilter/nft_set_bitmap.c @@ -256,13 +256,14 @@ static int nft_bitmap_init(const struct nft_set *set, return 0; } -static void nft_bitmap_destroy(const struct nft_set *set) +static void nft_bitmap_destroy(const struct nft_ctx *ctx, + const struct nft_set *set) { struct nft_bitmap *priv = nft_set_priv(set); struct nft_bitmap_elem *be, *n; list_for_each_entry_safe(be, n, &priv->list, head) - nft_set_elem_destroy(set, be, true); + nf_tables_set_elem_destroy(ctx, set, be); } static bool nft_bitmap_estimate(const struct nft_set_desc *desc, u32 features, diff --git a/net/netfilter/nft_set_hash.c b/net/netfilter/nft_set_hash.c index eb7db31dd173..37f0ecdbbd09 100644 --- a/net/netfilter/nft_set_hash.c +++ b/net/netfilter/nft_set_hash.c @@ -254,8 +254,6 @@ static void nft_rhash_walk(const struct nft_ctx *ctx, struct nft_set *set, if (iter->count < iter->skip) goto cont; - if (nft_set_elem_expired(&he->ext)) - goto cont; if (!nft_set_elem_active(&he->ext, iter->genmask)) goto cont; @@ -351,19 +349,31 @@ static int nft_rhash_init(const struct nft_set *set, return 0; } +struct nft_rhash_ctx { + const struct nft_ctx ctx; + const struct nft_set *set; +}; + static void nft_rhash_elem_destroy(void *ptr, void *arg) { - nft_set_elem_destroy(arg, ptr, true); + struct nft_rhash_ctx *rhash_ctx = arg; + + nf_tables_set_elem_destroy(&rhash_ctx->ctx, rhash_ctx->set, ptr); } -static void nft_rhash_destroy(const struct nft_set *set) +static void nft_rhash_destroy(const struct nft_ctx *ctx, + const struct nft_set *set) { struct nft_rhash *priv = nft_set_priv(set); + struct nft_rhash_ctx rhash_ctx = { + .ctx = *ctx, + .set = set, + }; cancel_delayed_work_sync(&priv->gc_work); rcu_barrier(); rhashtable_free_and_destroy(&priv->ht, nft_rhash_elem_destroy, - (void *)set); + (void *)&rhash_ctx); } /* Number of buckets is stored in u32, so cap our result to 1U<<31 */ @@ -583,7 +593,8 @@ static int nft_hash_init(const struct nft_set *set, return 0; } -static void nft_hash_destroy(const struct nft_set *set) +static void nft_hash_destroy(const struct nft_ctx *ctx, + const struct nft_set *set) { struct nft_hash *priv = nft_set_priv(set); struct nft_hash_elem *he; @@ -593,7 +604,7 @@ static void nft_hash_destroy(const struct nft_set *set) for (i = 0; i < priv->buckets; i++) { hlist_for_each_entry_safe(he, next, &priv->table[i], node) { hlist_del_rcu(&he->node); - nft_set_elem_destroy(set, he, true); + nf_tables_set_elem_destroy(ctx, set, he); } } } diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c index 6f3205de887f..40fe16519a00 100644 --- a/net/netfilter/nft_set_rbtree.c +++ b/net/netfilter/nft_set_rbtree.c @@ -292,7 +292,8 @@ static int nft_rbtree_init(const struct nft_set *set, return 0; } -static void nft_rbtree_destroy(const struct nft_set *set) +static void nft_rbtree_destroy(const struct nft_ctx *ctx, + const struct nft_set *set) { struct nft_rbtree *priv = nft_set_priv(set); struct nft_rbtree_elem *rbe; @@ -301,7 +302,7 @@ static void nft_rbtree_destroy(const struct nft_set *set) while ((node = priv->root.rb_node) != NULL) { rb_erase(node, &priv->root); rbe = rb_entry(node, struct nft_rbtree_elem, node); - nft_set_elem_destroy(set, rbe, true); + nf_tables_set_elem_destroy(ctx, set, rbe); } } diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index 879c811892ff..b13eb8047d8c 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c @@ -313,22 +313,14 @@ static int __must_check nr_add_node(ax25_address *nr, const char *mnemonic, return 0; } -static inline void __nr_remove_node(struct nr_node *nr_node) +static void nr_remove_node_locked(struct nr_node *nr_node) { + lockdep_assert_held(&nr_node_list_lock); + hlist_del_init(&nr_node->node_node); nr_node_put(nr_node); } -#define nr_remove_node_locked(__node) \ - __nr_remove_node(__node) - -static void nr_remove_node(struct nr_node *nr_node) -{ - spin_lock_bh(&nr_node_list_lock); - __nr_remove_node(nr_node); - spin_unlock_bh(&nr_node_list_lock); -} - static inline void __nr_remove_neigh(struct nr_neigh *nr_neigh) { hlist_del_init(&nr_neigh->neigh_node); @@ -367,6 +359,7 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n return -EINVAL; } + spin_lock_bh(&nr_node_list_lock); nr_node_lock(nr_node); for (i = 0; i < nr_node->count; i++) { if (nr_node->routes[i].neighbour == nr_neigh) { @@ -380,7 +373,7 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n nr_node->count--; if (nr_node->count == 0) { - nr_remove_node(nr_node); + nr_remove_node_locked(nr_node); } else { switch (i) { case 0: @@ -393,12 +386,14 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n nr_node_put(nr_node); } nr_node_unlock(nr_node); + spin_unlock_bh(&nr_node_list_lock); return 0; } } nr_neigh_put(nr_neigh); nr_node_unlock(nr_node); + spin_unlock_bh(&nr_node_list_lock); nr_node_put(nr_node); return -EINVAL; diff --git a/net/netrom/nr_timer.c b/net/netrom/nr_timer.c index 1fb9084bb937..307fd39e0645 100644 --- a/net/netrom/nr_timer.c +++ b/net/netrom/nr_timer.c @@ -125,7 +125,8 @@ static void nr_heartbeat_expiry(unsigned long param) is accepted() it isn't 'dead' so doesn't get removed. */ if (sock_flag(sk, SOCK_DESTROY) || (sk->sk_state == TCP_LISTEN && sock_flag(sk, SOCK_DEAD))) { - sock_hold(sk); + if (sk->sk_state == TCP_LISTEN) + sock_hold(sk); bh_unlock_sock(sk); nr_destroy_socket(sk); goto out; diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c index bed8bbcb632c..28b46b8fde70 100644 --- a/net/nfc/nci/core.c +++ b/net/nfc/nci/core.c @@ -1463,6 +1463,19 @@ int nci_core_ntf_packet(struct nci_dev *ndev, __u16 opcode, ndev->ops->n_core_ops); } +static bool nci_valid_size(struct sk_buff *skb) +{ + unsigned int hdr_size = NCI_CTRL_HDR_SIZE; + BUILD_BUG_ON(NCI_CTRL_HDR_SIZE != NCI_DATA_HDR_SIZE); + + if (skb->len < hdr_size || + !nci_plen(skb->data) || + skb->len < hdr_size + nci_plen(skb->data)) { + return false; + } + return true; +} + /* ---- NCI TX Data worker thread ---- */ static void nci_tx_work(struct work_struct *work) @@ -1513,9 +1526,9 @@ static void nci_rx_work(struct work_struct *work) nfc_send_to_raw_sock(ndev->nfc_dev, skb, RAW_PAYLOAD_NCI, NFC_DIRECTION_RX); - if (!nci_plen(skb->data)) { + if (!nci_valid_size(skb)) { kfree_skb(skb); - break; + continue; } /* Process frame */ diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c index 93eb9631e2aa..adc37cdd4968 100644 --- a/net/openvswitch/actions.c +++ b/net/openvswitch/actions.c @@ -890,6 +890,12 @@ static void do_output(struct datapath *dp, struct sk_buff *skb, int out_port, pskb_trim(skb, ovs_mac_header_len(key)); } + /* Need to set the pkt_type to involve the routing layer. The + * packet movement through the OVS datapath doesn't generally + * use routing, but this is needed for tunnel cases. + */ + skb->pkt_type = PACKET_OUTGOING; + if (likely(!mru || (skb->len <= mru + vport->dev->hard_header_len))) { ovs_vport_send(vport, skb, ovs_key_mac_proto(key)); diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c index dbe1079a1651..0b269713a71a 100644 --- a/net/openvswitch/flow.c +++ b/net/openvswitch/flow.c @@ -426,7 +426,6 @@ static int parse_icmpv6(struct sk_buff *skb, struct sw_flow_key *key, */ key->tp.src = htons(icmp->icmp6_type); key->tp.dst = htons(icmp->icmp6_code); - memset(&key->ipv6.nd, 0, sizeof(key->ipv6.nd)); if (icmp->icmp6_code == 0 && (icmp->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION || @@ -435,6 +434,8 @@ static int parse_icmpv6(struct sk_buff *skb, struct sw_flow_key *key, struct nd_msg *nd; int offset; + memset(&key->ipv6.nd, 0, sizeof(key->ipv6.nd)); + /* In order to process neighbor discovery options, we need the * entire packet. */ diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 935ddf858c1f..a02a07f9fe22 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -2480,8 +2480,7 @@ static void tpacket_destruct_skb(struct sk_buff *skb) ts = __packet_set_timestamp(po, ph, skb); __packet_set_status(po, ph, TP_STATUS_AVAILABLE | ts); - if (!packet_read_pending(&po->tx_ring)) - complete(&po->skb_completion); + complete(&po->skb_completion); } sock_wfree(skb); diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index de917d45e512..82994e3c0fd0 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -112,7 +112,8 @@ static void rpc_clnt_remove_pipedir(struct rpc_clnt *clnt) pipefs_sb = rpc_get_sb_net(net); if (pipefs_sb) { - __rpc_clnt_remove_pipedir(clnt); + if (pipefs_sb == clnt->pipefs_sb) + __rpc_clnt_remove_pipedir(clnt); rpc_put_sb_net(net); } } @@ -152,6 +153,8 @@ rpc_setup_pipedir(struct super_block *pipefs_sb, struct rpc_clnt *clnt) { struct dentry *dentry; + clnt->pipefs_sb = pipefs_sb; + if (clnt->cl_program->pipe_dir_name != NULL) { dentry = rpc_setup_pipedir_sb(pipefs_sb, clnt); if (IS_ERR(dentry)) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 1fd2939eb05d..aa1850fa1a72 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -3273,24 +3273,6 @@ void cleanup_socket_xprt(void) xprt_unregister_transport(&xs_bc_tcp_transport); } -static int param_set_uint_minmax(const char *val, - const struct kernel_param *kp, - unsigned int min, unsigned int max) -{ - unsigned int num; - int ret; - - if (!val) - return -EINVAL; - ret = kstrtouint(val, 0, &num); - if (ret) - return ret; - if (num < min || num > max) - return -EINVAL; - *((unsigned int *)kp->arg) = num; - return 0; -} - static int param_set_portnr(const char *val, const struct kernel_param *kp) { return param_set_uint_minmax(val, kp, diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 36359b6192bc..a5d8513f05bc 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -194,15 +194,9 @@ static inline int unix_may_send(struct sock *sk, struct sock *osk) return unix_peer(osk) == NULL || unix_our_peer(sk, osk); } -static inline int unix_recvq_full(const struct sock *sk) -{ - return skb_queue_len(&sk->sk_receive_queue) > sk->sk_max_ack_backlog; -} - static inline int unix_recvq_full_lockless(const struct sock *sk) { - return skb_queue_len_lockless(&sk->sk_receive_queue) > - READ_ONCE(sk->sk_max_ack_backlog); + return skb_queue_len_lockless(&sk->sk_receive_queue) > sk->sk_max_ack_backlog; } struct sock *unix_peer_get(struct sock *s) @@ -440,7 +434,12 @@ static int unix_dgram_peer_wake_me(struct sock *sk, struct sock *other) connected = unix_dgram_peer_wake_connect(sk, other); - if (unix_recvq_full(other)) + /* If other is SOCK_DEAD, we want to make sure we signal + * POLLOUT, such that a subsequent write() can get a + * -ECONNREFUSED. Otherwise, if we haven't queued any skbs + * to other and its full, we will hang waiting for POLLOUT. + */ + if (unix_recvq_full_lockless(other) && !sock_flag(other, SOCK_DEAD)) return 1; if (connected) @@ -449,9 +448,9 @@ static int unix_dgram_peer_wake_me(struct sock *sk, struct sock *other) return 0; } -static int unix_writable(const struct sock *sk) +static int unix_writable(const struct sock *sk, unsigned char state) { - return sk->sk_state != TCP_LISTEN && + return state != TCP_LISTEN && (refcount_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf; } @@ -460,7 +459,7 @@ static void unix_write_space(struct sock *sk) struct socket_wq *wq; rcu_read_lock(); - if (unix_writable(sk)) { + if (unix_writable(sk, READ_ONCE(sk->sk_state))) { wq = rcu_dereference(sk->sk_wq); if (skwq_has_sleeper(wq)) wake_up_interruptible_sync_poll(&wq->wait, @@ -531,7 +530,7 @@ static void unix_release_sock(struct sock *sk, int embrion) /* Clear state */ unix_state_lock(sk); sock_orphan(sk); - sk->sk_shutdown = SHUTDOWN_MASK; + WRITE_ONCE(sk->sk_shutdown, SHUTDOWN_MASK); path = u->path; u->path.dentry = NULL; u->path.mnt = NULL; @@ -549,7 +548,7 @@ static void unix_release_sock(struct sock *sk, int embrion) if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { unix_state_lock(skpair); /* No more writes */ - skpair->sk_shutdown = SHUTDOWN_MASK; + WRITE_ONCE(skpair->sk_shutdown, SHUTDOWN_MASK); if (!skb_queue_empty(&sk->sk_receive_queue) || embrion) skpair->sk_err = ECONNRESET; unix_state_unlock(skpair); @@ -817,7 +816,7 @@ static struct sock *unix_create1(struct net *net, struct socket *sock, int kern) sk->sk_allocation = GFP_KERNEL_ACCOUNT; sk->sk_write_space = unix_write_space; - sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen; + sk->sk_max_ack_backlog = READ_ONCE(net->unx.sysctl_max_dgram_qlen); sk->sk_destruct = unix_sock_destructor; u = unix_sk(sk); u->inflight = 0; @@ -1310,7 +1309,7 @@ restart: if (other->sk_shutdown & RCV_SHUTDOWN) goto out_unlock; - if (unix_recvq_full(other)) { + if (unix_recvq_full_lockless(other)) { err = -EAGAIN; if (!timeo) goto out_unlock; @@ -1890,7 +1889,7 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg, goto out_err; if (msg->msg_namelen) { - err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP; + err = READ_ONCE(sk->sk_state) == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP; goto out_err; } else { err = -ENOTCONN; @@ -1899,7 +1898,7 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg, goto out_err; } - if (sk->sk_shutdown & SEND_SHUTDOWN) + if (READ_ONCE(sk->sk_shutdown) & SEND_SHUTDOWN) goto pipe_err; while (sent < len) { @@ -2092,7 +2091,7 @@ static int unix_seqpacket_sendmsg(struct socket *sock, struct msghdr *msg, if (err) return err; - if (sk->sk_state != TCP_ESTABLISHED) + if (READ_ONCE(sk->sk_state) != TCP_ESTABLISHED) return -ENOTCONN; if (msg->msg_namelen) @@ -2106,7 +2105,7 @@ static int unix_seqpacket_recvmsg(struct socket *sock, struct msghdr *msg, { struct sock *sk = sock->sk; - if (sk->sk_state != TCP_ESTABLISHED) + if (READ_ONCE(sk->sk_state) != TCP_ESTABLISHED) return -ENOTCONN; return unix_dgram_recvmsg(sock, msg, size, flags); @@ -2302,7 +2301,7 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state, size_t size = state->size; unsigned int last_len; - if (unlikely(sk->sk_state != TCP_ESTABLISHED)) { + if (unlikely(READ_ONCE(sk->sk_state) != TCP_ESTABLISHED)) { err = -EINVAL; goto out; } @@ -2552,7 +2551,7 @@ static int unix_shutdown(struct socket *sock, int mode) ++mode; unix_state_lock(sk); - sk->sk_shutdown |= mode; + WRITE_ONCE(sk->sk_shutdown, sk->sk_shutdown | mode); other = unix_peer(sk); if (other) sock_hold(other); @@ -2569,7 +2568,7 @@ static int unix_shutdown(struct socket *sock, int mode) if (mode&SEND_SHUTDOWN) peer_mode |= RCV_SHUTDOWN; unix_state_lock(other); - other->sk_shutdown |= peer_mode; + WRITE_ONCE(other->sk_shutdown, other->sk_shutdown | peer_mode); unix_state_unlock(other); other->sk_state_change(other); if (peer_mode == SHUTDOWN_MASK) @@ -2588,7 +2587,7 @@ long unix_inq_len(struct sock *sk) struct sk_buff *skb; long amount = 0; - if (sk->sk_state == TCP_LISTEN) + if (READ_ONCE(sk->sk_state) == TCP_LISTEN) return -EINVAL; spin_lock(&sk->sk_receive_queue.lock); @@ -2688,16 +2687,20 @@ static unsigned int unix_poll(struct file *file, struct socket *sock, poll_table { struct sock *sk = sock->sk; unsigned int mask; + u8 shutdown; + unsigned char state; sock_poll_wait(file, sk_sleep(sk), wait); mask = 0; + shutdown = READ_ONCE(sk->sk_shutdown); + state = READ_ONCE(sk->sk_state); /* exceptional events? */ if (sk->sk_err) mask |= POLLERR; - if (sk->sk_shutdown == SHUTDOWN_MASK) + if (shutdown == SHUTDOWN_MASK) mask |= POLLHUP; - if (sk->sk_shutdown & RCV_SHUTDOWN) + if (shutdown & RCV_SHUTDOWN) mask |= POLLRDHUP | POLLIN | POLLRDNORM; /* readable? */ @@ -2706,14 +2709,14 @@ static unsigned int unix_poll(struct file *file, struct socket *sock, poll_table /* Connection-based need to check for termination and startup */ if ((sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) && - sk->sk_state == TCP_CLOSE) + state == TCP_CLOSE) mask |= POLLHUP; /* * we set writable also when the other side has shut down the * connection. This prevents stuck sockets. */ - if (unix_writable(sk)) + if (unix_writable(sk, state)) mask |= POLLOUT | POLLWRNORM | POLLWRBAND; return mask; @@ -2724,18 +2727,22 @@ static unsigned int unix_dgram_poll(struct file *file, struct socket *sock, { struct sock *sk = sock->sk, *other; unsigned int mask, writable; + unsigned char state; + u8 shutdown; sock_poll_wait(file, sk_sleep(sk), wait); mask = 0; + shutdown = READ_ONCE(sk->sk_shutdown); + state = READ_ONCE(sk->sk_state); /* exceptional events? */ if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) mask |= POLLERR | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0); - if (sk->sk_shutdown & RCV_SHUTDOWN) + if (shutdown & RCV_SHUTDOWN) mask |= POLLRDHUP | POLLIN | POLLRDNORM; - if (sk->sk_shutdown == SHUTDOWN_MASK) + if (shutdown == SHUTDOWN_MASK) mask |= POLLHUP; /* readable? */ @@ -2743,19 +2750,14 @@ static unsigned int unix_dgram_poll(struct file *file, struct socket *sock, mask |= POLLIN | POLLRDNORM; /* Connection-based need to check for termination and startup */ - if (sk->sk_type == SOCK_SEQPACKET) { - if (sk->sk_state == TCP_CLOSE) - mask |= POLLHUP; - /* connection hasn't started yet? */ - if (sk->sk_state == TCP_SYN_SENT) - return mask; - } + if (sk->sk_type == SOCK_SEQPACKET && state == TCP_CLOSE) + mask |= POLLHUP; /* No write status requested, avoid expensive OUT tests. */ if (!(poll_requested_events(wait) & (POLLWRBAND|POLLWRNORM|POLLOUT))) return mask; - writable = unix_writable(sk); + writable = unix_writable(sk, state); if (writable) { unix_state_lock(sk); diff --git a/net/unix/diag.c b/net/unix/diag.c index d6ceac688def..9376d4d4263f 100644 --- a/net/unix/diag.c +++ b/net/unix/diag.c @@ -61,7 +61,7 @@ static int sk_diag_dump_icons(struct sock *sk, struct sk_buff *nlskb) u32 *buf; int i; - if (sk->sk_state == TCP_LISTEN) { + if (READ_ONCE(sk->sk_state) == TCP_LISTEN) { spin_lock(&sk->sk_receive_queue.lock); attr = nla_reserve(nlskb, UNIX_DIAG_ICONS, @@ -99,8 +99,8 @@ static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb) { struct unix_diag_rqlen rql; - if (sk->sk_state == TCP_LISTEN) { - rql.udiag_rqueue = sk->sk_receive_queue.qlen; + if (READ_ONCE(sk->sk_state) == TCP_LISTEN) { + rql.udiag_rqueue = skb_queue_len_lockless(&sk->sk_receive_queue); rql.udiag_wqueue = sk->sk_max_ack_backlog; } else { rql.udiag_rqueue = (u32) unix_inq_len(sk); @@ -124,7 +124,7 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r rep = nlmsg_data(nlh); rep->udiag_family = AF_UNIX; rep->udiag_type = sk->sk_type; - rep->udiag_state = sk->sk_state; + rep->udiag_state = READ_ONCE(sk->sk_state); rep->pad = 0; rep->udiag_ino = sk_ino; sock_diag_save_cookie(sk, rep->udiag_cookie); @@ -153,7 +153,7 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r sock_diag_put_meminfo(sk, skb, UNIX_DIAG_MEMINFO)) goto out_nlmsg_trim; - if (nla_put_u8(skb, UNIX_DIAG_SHUTDOWN, sk->sk_shutdown)) + if (nla_put_u8(skb, UNIX_DIAG_SHUTDOWN, READ_ONCE(sk->sk_shutdown))) goto out_nlmsg_trim; nlmsg_end(skb, nlh); @@ -202,7 +202,7 @@ static int unix_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) continue; if (num < s_num) goto next; - if (!(req->udiag_states & (1 << sk->sk_state))) + if (!(req->udiag_states & (1 << READ_ONCE(sk->sk_state)))) goto next; if (sk_diag_dump(sk, skb, req, NETLINK_CB(cb->skb).portid, diff --git a/net/wireless/trace.h b/net/wireless/trace.h index f4940870d83d..c30da76048d3 100644 --- a/net/wireless/trace.h +++ b/net/wireless/trace.h @@ -1608,7 +1608,7 @@ TRACE_EVENT(rdev_return_void_tx_rx, DECLARE_EVENT_CLASS(tx_rx_evt, TP_PROTO(struct wiphy *wiphy, u32 tx, u32 rx), - TP_ARGS(wiphy, rx, tx), + TP_ARGS(wiphy, tx, rx), TP_STRUCT__entry( WIPHY_ENTRY __field(u32, tx) @@ -1625,7 +1625,7 @@ DECLARE_EVENT_CLASS(tx_rx_evt, DEFINE_EVENT(tx_rx_evt, rdev_set_antenna, TP_PROTO(struct wiphy *wiphy, u32 tx, u32 rx), - TP_ARGS(wiphy, rx, tx) + TP_ARGS(wiphy, tx, rx) ); DECLARE_EVENT_CLASS(wiphy_netdev_id_evt, diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 2956d1556cc3..d0c26d19a9e1 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -13,14 +13,17 @@ struct symbol symbol_yes = { .name = "y", + .type = S_TRISTATE, .curr = { "y", yes }, .flags = SYMBOL_CONST|SYMBOL_VALID, }, symbol_mod = { .name = "m", + .type = S_TRISTATE, .curr = { "m", mod }, .flags = SYMBOL_CONST|SYMBOL_VALID, }, symbol_no = { .name = "n", + .type = S_TRISTATE, .curr = { "n", no }, .flags = SYMBOL_CONST|SYMBOL_VALID, }, symbol_empty = { @@ -802,8 +805,7 @@ const char *sym_get_string_value(struct symbol *sym) case no: return "n"; case mod: - sym_calc_value(modules_sym); - return (modules_sym->curr.tri == no) ? "n" : "m"; + return "m"; case yes: return "y"; } diff --git a/sound/core/timer.c b/sound/core/timer.c index 1e9ffdd129af..8141dda7ce22 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c @@ -448,6 +448,14 @@ int snd_timer_close(struct snd_timer_instance *timeri) } EXPORT_SYMBOL(snd_timer_close); +static unsigned long snd_timer_hw_resolution(struct snd_timer *timer) +{ + if (timer->hw.c_resolution) + return timer->hw.c_resolution(timer); + else + return timer->hw.resolution; +} + unsigned long snd_timer_resolution(struct snd_timer_instance *timeri) { struct snd_timer * timer; @@ -455,11 +463,8 @@ unsigned long snd_timer_resolution(struct snd_timer_instance *timeri) if (timeri == NULL) return 0; timer = timeri->timer; - if (timer) { - if (timer->hw.c_resolution) - return timer->hw.c_resolution(timer); - return timer->hw.resolution; - } + if (timer) + return snd_timer_hw_resolution(timer); return 0; } EXPORT_SYMBOL(snd_timer_resolution); @@ -519,6 +524,16 @@ static int snd_timer_start1(struct snd_timer_instance *timeri, goto unlock; } + /* check the actual time for the start tick; + * bail out as error if it's way too low (< 100us) + */ + if (start) { + if ((u64)snd_timer_hw_resolution(timer) * ticks < 100000) { + result = -EINVAL; + goto unlock; + } + } + if (start) timeri->ticks = timeri->cticks = ticks; else if (!timeri->cticks) @@ -792,10 +807,7 @@ void snd_timer_interrupt(struct snd_timer * timer, unsigned long ticks_left) spin_lock_irqsave(&timer->lock, flags); /* remember the current resolution */ - if (timer->hw.c_resolution) - resolution = timer->hw.c_resolution(timer); - else - resolution = timer->hw.resolution; + resolution = snd_timer_hw_resolution(timer); /* loop for all active instances * Here we cannot use list_for_each_entry because the active_list of a @@ -1035,12 +1047,8 @@ void snd_timer_notify(struct snd_timer *timer, int event, struct timespec *tstam spin_lock_irqsave(&timer->lock, flags); if (event == SNDRV_TIMER_EVENT_MSTART || event == SNDRV_TIMER_EVENT_MCONTINUE || - event == SNDRV_TIMER_EVENT_MRESUME) { - if (timer->hw.c_resolution) - resolution = timer->hw.c_resolution(timer); - else - resolution = timer->hw.resolution; - } + event == SNDRV_TIMER_EVENT_MRESUME) + resolution = snd_timer_hw_resolution(timer); list_for_each_entry(ti, &timer->active_list_head, active_list) { if (ti->ccallback) ti->ccallback(ti, event, tstamp, resolution); @@ -1680,10 +1688,7 @@ static int snd_timer_user_gstatus(struct file *file, mutex_lock(®ister_mutex); t = snd_timer_find(&tid); if (t != NULL) { - if (t->hw.c_resolution) - gstatus.resolution = t->hw.c_resolution(t); - else - gstatus.resolution = t->hw.resolution; + gstatus.resolution = snd_timer_hw_resolution(t); if (t->hw.precise_resolution) { t->hw.precise_resolution(t, &gstatus.resolution_num, &gstatus.resolution_den); diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-aad.c index 5a31a4db1e23..47576e4feae4 100644 --- a/sound/soc/codecs/da7219-aad.c +++ b/sound/soc/codecs/da7219-aad.c @@ -625,8 +625,10 @@ static struct da7219_aad_pdata *da7219_aad_fw_to_pdata(struct snd_soc_codec *cod return NULL; aad_pdata = devm_kzalloc(codec->dev, sizeof(*aad_pdata), GFP_KERNEL); - if (!aad_pdata) + if (!aad_pdata) { + fwnode_handle_put(aad_np); return NULL; + } aad_pdata->irq = i2c->irq; @@ -701,6 +703,8 @@ static struct da7219_aad_pdata *da7219_aad_fw_to_pdata(struct snd_soc_codec *cod else aad_pdata->adc_1bit_rpt = DA7219_AAD_ADC_1BIT_RPT_1; + fwnode_handle_put(aad_np); + return aad_pdata; } diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c index 536a33820265..6a0865572772 100644 --- a/sound/soc/codecs/rt5645.c +++ b/sound/soc/codecs/rt5645.c @@ -410,6 +410,7 @@ struct rt5645_priv { struct regmap *regmap; struct i2c_client *i2c; struct gpio_desc *gpiod_hp_det; + struct gpio_desc *gpiod_cbj_sleeve; struct snd_soc_jack *hp_jack; struct snd_soc_jack *mic_jack; struct snd_soc_jack *btn_jack; @@ -3148,6 +3149,9 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert) regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2, RT5645_CBJ_MN_JD, 0); + if (rt5645->gpiod_cbj_sleeve) + gpiod_set_value(rt5645->gpiod_cbj_sleeve, 1); + msleep(600); regmap_read(rt5645->regmap, RT5645_IN1_CTRL3, &val); val &= 0x7; @@ -3164,6 +3168,8 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert) snd_soc_dapm_disable_pin(dapm, "Mic Det Power"); snd_soc_dapm_sync(dapm); rt5645->jack_type = SND_JACK_HEADPHONE; + if (rt5645->gpiod_cbj_sleeve) + gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0); } if (rt5645->pdata.level_trigger_irq) regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2, @@ -3189,6 +3195,9 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert) if (rt5645->pdata.level_trigger_irq) regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2, RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV); + + if (rt5645->gpiod_cbj_sleeve) + gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0); } return rt5645->jack_type; @@ -3760,6 +3769,16 @@ static int rt5645_i2c_probe(struct i2c_client *i2c, return ret; } + rt5645->gpiod_cbj_sleeve = devm_gpiod_get_optional(&i2c->dev, "cbj-sleeve", + GPIOD_OUT_LOW); + + if (IS_ERR(rt5645->gpiod_cbj_sleeve)) { + ret = PTR_ERR(rt5645->gpiod_cbj_sleeve); + dev_info(&i2c->dev, "failed to initialize gpiod, ret=%d\n", ret); + if (ret != -ENOENT) + return ret; + } + for (i = 0; i < ARRAY_SIZE(rt5645->supplies); i++) rt5645->supplies[i].supply = rt5645_supply_names[i]; @@ -3992,7 +4011,11 @@ static int rt5645_i2c_remove(struct i2c_client *i2c) cancel_delayed_work_sync(&rt5645->jack_detect_work); cancel_delayed_work_sync(&rt5645->rcclock_work); + if (rt5645->gpiod_cbj_sleeve) + gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0); + snd_soc_unregister_codec(&i2c->dev); + regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies); return 0; @@ -4010,6 +4033,9 @@ static void rt5645_i2c_shutdown(struct i2c_client *i2c) 0); msleep(20); regmap_write(rt5645->regmap, RT5645_RESET, 0); + + if (rt5645->gpiod_cbj_sleeve) + gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0); } static struct i2c_driver rt5645_i2c_driver = { diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c index 393100edd5fd..a465c40058b8 100644 --- a/sound/soc/fsl/fsl-asoc-card.c +++ b/sound/soc/fsl/fsl-asoc-card.c @@ -483,6 +483,8 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) if (!priv) return -ENOMEM; + priv->pdev = pdev; + cpu_np = of_parse_phandle(np, "audio-cpu", 0); /* Give a chance to old DT binding */ if (!cpu_np) @@ -595,7 +597,6 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) codec_dev->name); /* Initialize sound card */ - priv->pdev = pdev; priv->card.dev = &pdev->dev; priv->card.name = priv->name; priv->card.dai_link = priv->dai_link; diff --git a/sound/synth/emux/soundfont.c b/sound/synth/emux/soundfont.c index 31a4ea94830e..235b16af6083 100644 --- a/sound/synth/emux/soundfont.c +++ b/sound/synth/emux/soundfont.c @@ -710,7 +710,6 @@ load_data(struct snd_sf_list *sflist, const void __user *data, long count) struct snd_soundfont *sf; struct soundfont_sample_info sample_info; struct snd_sf_sample *sp; - long off; /* patch must be opened */ if ((sf = sflist->currsf) == NULL) @@ -719,12 +718,16 @@ load_data(struct snd_sf_list *sflist, const void __user *data, long count) if (is_special_type(sf->type)) return -EINVAL; + if (count < (long)sizeof(sample_info)) { + return -EINVAL; + } if (copy_from_user(&sample_info, data, sizeof(sample_info))) return -EFAULT; + data += sizeof(sample_info); + count -= sizeof(sample_info); - off = sizeof(sample_info); - - if (sample_info.size != (count-off)/2) + // SoundFont uses S16LE samples. + if (sample_info.size * 2 != count) return -EINVAL; /* Check for dup */ @@ -751,7 +754,7 @@ load_data(struct snd_sf_list *sflist, const void __user *data, long count) int rc; rc = sflist->callback.sample_new (sflist->callback.private_data, sp, sflist->memhdr, - data + off, count - off); + data, count); if (rc < 0) { sf_sample_delete(sflist, sf, sp); return rc; @@ -962,10 +965,12 @@ load_guspatch(struct snd_sf_list *sflist, const char __user *data, } if (copy_from_user(&patch, data, sizeof(patch))) return -EFAULT; - count -= sizeof(patch); data += sizeof(patch); + if ((patch.len << (patch.mode & WAVE_16_BITS ? 1 : 0)) != count) + return -EINVAL; + sf = newsf(sflist, SNDRV_SFNT_PAT_TYPE_GUS|SNDRV_SFNT_PAT_SHARED, NULL); if (sf == NULL) return -ENOMEM; diff --git a/tools/include/asm-generic/hugetlb_encode.h b/tools/include/asm-generic/hugetlb_encode.h index e4732d3c2998..9d279fa4c36f 100644 --- a/tools/include/asm-generic/hugetlb_encode.h +++ b/tools/include/asm-generic/hugetlb_encode.h @@ -20,15 +20,15 @@ #define HUGETLB_FLAG_ENCODE_SHIFT 26 #define HUGETLB_FLAG_ENCODE_MASK 0x3f -#define HUGETLB_FLAG_ENCODE_64KB (16 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_512KB (19 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1MB (20 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_64KB (16U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512KB (19U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1MB (20U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2MB (21U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_8MB (23U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16MB (24U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_256MB (28U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1GB (30U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2GB (31U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16GB (34U << HUGETLB_FLAG_ENCODE_SHIFT) #endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */ diff --git a/tools/lib/subcmd/parse-options.c b/tools/lib/subcmd/parse-options.c index f6a1babcbac4..264db22279e3 100644 --- a/tools/lib/subcmd/parse-options.c +++ b/tools/lib/subcmd/parse-options.c @@ -612,11 +612,10 @@ int parse_options_subcommand(int argc, const char **argv, const struct option *o const char *const subcommands[], const char *usagestr[], int flags) { struct parse_opt_ctx_t ctx; + char *buf = NULL; /* build usage string if it's not provided */ if (subcommands && !usagestr[0]) { - char *buf = NULL; - astrcatf(&buf, "%s %s [] {", subcmd_config.exec_name, argv[0]); for (int i = 0; subcommands[i]; i++) { @@ -658,7 +657,10 @@ int parse_options_subcommand(int argc, const char **argv, const struct option *o astrcatf(&error_buf, "unknown switch `%c'", *ctx.opt); usage_with_options(usagestr, options); } - + if (buf) { + usagestr[0] = NULL; + free(buf); + } return parse_options_end(&ctx); } diff --git a/tools/objtool/arch/x86/lib/x86-opcode-map.txt b/tools/objtool/arch/x86/lib/x86-opcode-map.txt index 5cb9f009f2be..996a3a250026 100644 --- a/tools/objtool/arch/x86/lib/x86-opcode-map.txt +++ b/tools/objtool/arch/x86/lib/x86-opcode-map.txt @@ -148,7 +148,7 @@ AVXcode: 65: SEG=GS (Prefix) 66: Operand-Size (Prefix) 67: Address-Size (Prefix) -68: PUSH Iz (d64) +68: PUSH Iz 69: IMUL Gv,Ev,Iz 6a: PUSH Ib (d64) 6b: IMUL Gv,Ev,Ib diff --git a/tools/testing/selftests/kcmp/kcmp_test.c b/tools/testing/selftests/kcmp/kcmp_test.c index 6ea7b9f37a41..d7a8e321bb16 100644 --- a/tools/testing/selftests/kcmp/kcmp_test.c +++ b/tools/testing/selftests/kcmp/kcmp_test.c @@ -88,7 +88,10 @@ int main(int argc, char **argv) int pid2 = getpid(); int ret; - fd2 = open(kpath, O_RDWR, 0644); + ksft_print_header(); + ksft_set_plan(3); + + fd2 = open(kpath, O_RDWR); if (fd2 < 0) { perror("Can't open file"); ksft_exit_fail(); @@ -152,7 +155,6 @@ int main(int argc, char **argv) ksft_inc_pass_cnt(); } - ksft_print_cnts(); if (ret) ksft_exit_fail(); @@ -162,5 +164,5 @@ int main(int argc, char **argv) waitpid(pid2, &status, P_ALL); - return ksft_exit_pass(); + return 0; } diff --git a/tools/testing/selftests/vm/compaction_test.c b/tools/testing/selftests/vm/compaction_test.c index bcec71250873..e056cfc487e0 100644 --- a/tools/testing/selftests/vm/compaction_test.c +++ b/tools/testing/selftests/vm/compaction_test.c @@ -32,7 +32,7 @@ int read_memory_info(unsigned long *memfree, unsigned long *hugepagesize) FILE *cmdfile = popen(cmd, "r"); if (!(fgets(buffer, sizeof(buffer), cmdfile))) { - perror("Failed to read meminfo\n"); + ksft_print_msg("Failed to read meminfo: %s\n", strerror(errno)); return -1; } @@ -43,7 +43,7 @@ int read_memory_info(unsigned long *memfree, unsigned long *hugepagesize) cmdfile = popen(cmd, "r"); if (!(fgets(buffer, sizeof(buffer), cmdfile))) { - perror("Failed to read meminfo\n"); + ksft_print_msg("Failed to read meminfo: %s\n", strerror(errno)); return -1; } @@ -61,14 +61,14 @@ int prereq(void) fd = open("/proc/sys/vm/compact_unevictable_allowed", O_RDONLY | O_NONBLOCK); if (fd < 0) { - perror("Failed to open\n" - "/proc/sys/vm/compact_unevictable_allowed\n"); + ksft_print_msg("Failed to open /proc/sys/vm/compact_unevictable_allowed: %s\n", + strerror(errno)); return -1; } if (read(fd, &allowed, sizeof(char)) != sizeof(char)) { - perror("Failed to read from\n" - "/proc/sys/vm/compact_unevictable_allowed\n"); + ksft_print_msg("Failed to read from /proc/sys/vm/compact_unevictable_allowed: %s\n", + strerror(errno)); close(fd); return -1; } @@ -77,15 +77,17 @@ int prereq(void) if (allowed == '1') return 0; + ksft_print_msg("Compaction isn't allowed\n"); return -1; } -int check_compaction(unsigned long mem_free, unsigned int hugepage_size) +int check_compaction(unsigned long mem_free, unsigned long hugepage_size) { - int fd; + unsigned long nr_hugepages_ul; + int fd, ret = -1; int compaction_index = 0; - char initial_nr_hugepages[10] = {0}; - char nr_hugepages[10] = {0}; + char initial_nr_hugepages[20] = {0}; + char nr_hugepages[20] = {0}; /* We want to test with 80% of available memory. Else, OOM killer comes in to play */ @@ -93,18 +95,23 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) fd = open("/proc/sys/vm/nr_hugepages", O_RDWR | O_NONBLOCK); if (fd < 0) { - perror("Failed to open /proc/sys/vm/nr_hugepages"); + ksft_test_result_fail("Failed to open /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); return -1; } if (read(fd, initial_nr_hugepages, sizeof(initial_nr_hugepages)) <= 0) { - perror("Failed to read from /proc/sys/vm/nr_hugepages"); + ksft_test_result_fail("Failed to read from /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } + lseek(fd, 0, SEEK_SET); + /* Start with the initial condition of 0 huge pages*/ if (write(fd, "0", sizeof(char)) != sizeof(char)) { - perror("Failed to write 0 to /proc/sys/vm/nr_hugepages\n"); + ksft_test_result_fail("Failed to write 0 to /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } @@ -113,82 +120,80 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) /* Request a large number of huge pages. The Kernel will allocate as much as it can */ if (write(fd, "100000", (6*sizeof(char))) != (6*sizeof(char))) { - perror("Failed to write 100000 to /proc/sys/vm/nr_hugepages\n"); + ksft_test_result_fail("Failed to write 100000 to /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } lseek(fd, 0, SEEK_SET); if (read(fd, nr_hugepages, sizeof(nr_hugepages)) <= 0) { - perror("Failed to re-read from /proc/sys/vm/nr_hugepages\n"); + ksft_test_result_fail("Failed to re-read from /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } /* We should have been able to request at least 1/3 rd of the memory in huge pages */ - compaction_index = mem_free/(atoi(nr_hugepages) * hugepage_size); - - if (compaction_index > 3) { - printf("No of huge pages allocated = %d\n", - (atoi(nr_hugepages))); - fprintf(stderr, "ERROR: Less that 1/%d of memory is available\n" - "as huge pages\n", compaction_index); + nr_hugepages_ul = strtoul(nr_hugepages, NULL, 10); + if (!nr_hugepages_ul) { + ksft_print_msg("ERROR: No memory is available as huge pages\n"); goto close_fd; } - - printf("No of huge pages allocated = %d\n", - (atoi(nr_hugepages))); + compaction_index = mem_free/(nr_hugepages_ul * hugepage_size); lseek(fd, 0, SEEK_SET); if (write(fd, initial_nr_hugepages, strlen(initial_nr_hugepages)) != strlen(initial_nr_hugepages)) { - perror("Failed to write value to /proc/sys/vm/nr_hugepages\n"); + ksft_test_result_fail("Failed to write value to /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } - close(fd); - return 0; + if (compaction_index > 3) { + ksft_print_msg("ERROR: Less than 1/%d of memory is available\n" + "as huge pages\n", compaction_index); + ksft_test_result_fail("No of huge pages allocated = %d\n", (atoi(nr_hugepages))); + goto close_fd; + } + + ksft_test_result_pass("Memory compaction succeeded. No of huge pages allocated = %d\n", + (atoi(nr_hugepages))); + ret = 0; close_fd: close(fd); - printf("Not OK. Compaction test failed."); - return -1; + return ret; } int main(int argc, char **argv) { struct rlimit lim; - struct map_list *list, *entry; + struct map_list *list = NULL, *entry; size_t page_size, i; void *map = NULL; unsigned long mem_free = 0; unsigned long hugepage_size = 0; unsigned long mem_fragmentable = 0; - if (prereq() != 0) { - printf("Either the sysctl compact_unevictable_allowed is not\n" - "set to 1 or couldn't read the proc file.\n" - "Skipping the test\n"); - return KSFT_SKIP; - } + ksft_print_header(); + + if (prereq() != 0) + return ksft_exit_pass(); + + ksft_set_plan(1); lim.rlim_cur = RLIM_INFINITY; lim.rlim_max = RLIM_INFINITY; - if (setrlimit(RLIMIT_MEMLOCK, &lim)) { - perror("Failed to set rlimit:\n"); - return -1; - } + if (setrlimit(RLIMIT_MEMLOCK, &lim)) + ksft_exit_fail_msg("Failed to set rlimit: %s\n", strerror(errno)); page_size = getpagesize(); - list = NULL; - - if (read_memory_info(&mem_free, &hugepage_size) != 0) { - printf("ERROR: Cannot read meminfo\n"); - return -1; - } + if (read_memory_info(&mem_free, &hugepage_size) != 0) + ksft_exit_fail_msg("Failed to get meminfo\n"); mem_fragmentable = mem_free * 0.8 / 1024; @@ -224,7 +229,7 @@ int main(int argc, char **argv) } if (check_compaction(mem_free, hugepage_size) == 0) - return 0; + return ksft_exit_pass(); - return -1; + return ksft_exit_fail(); }