Date: Tue, 10 Sep 2024 11:44:37 -0600 From: Shuah Khan To: "Rafael J. Wysocki" Cc: Thomas Renninger , Thomas Renninger , Shuah Khan , shuah , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [GIT PULL] cpupower second update for Linux 6.12-rc1 This is a multi-part message in MIME format. --------------jjT60Xg7OJjn7N018L42dldc Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Rafael, Please pull the following cpupower second update for Linux 6.12-rc1. This cpupower second update for Linux 6.12-rc1 consists of a fix and a new feature. -- adds missing powercap_set_enabled() stub function -- adds SWIG bindings files for libcpupower SWIG is a tool packaged in Fedora and other distros that can generate bindings from C and C++ code for several languages including Python, Perl, and Go. These bindings allows users to easily write scripts that use and extend libcpupower's functionality. Currently, only Python is provided in the makefile, but additional languages may be added if there is demand. Note that while SWIG itself is GPL v3+ licensed; the resulting output, the bindings code, is permissively licensed + the license of the .o files. Please see the following for more details. - https://swig.org/legal.html. - https://lore.kernel.org/linux-pm/Zqv9BOjxLAgyNP5B@hatbackup diff is attached. thanks, -- Shuah ---------------------------------------------------------------- The following changes since commit 76fb981ad6774b82f06703c896b492c8659b543b: tools/cpupower: display residency value in idle-info (2024-08-09 10:32:33 -0600) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux tags/linux-cpupower-6.12-rc1-2 for you to fetch changes up to 80e67f1802d0fc21543216557a68320c71d7dbe1: pm:cpupower: Add error warning when SWIG is not installed (2024-09-06 10:58:35 -0600) ---------------------------------------------------------------- linux-cpupower-6.12-rc1-2 This cpupower second update for Linux 6.12-rc1 consists of a fix and a new feature. -- adds missing powercap_set_enabled() stub function -- adds SWIG bindings files for libcpupower SWIG is a tool packaged in Fedora and other distros that can generate bindings from C and C++ code for several languages including Python, Perl, and Go. These bindings allows users to easily write scripts that use and extend libcpupower's functionality. Currently, only Python is provided in the makefile, but additional languages may be added if there is demand. Note that while SWIG itself is GPL v3+ licensed; the resulting output, the bindings code, is permissively licensed + the license of the .o files. Please see the following for more details. - https://swig.org/legal.html. - https://lore.kernel.org/linux-pm/Zqv9BOjxLAgyNP5B@hatbackup ---------------------------------------------------------------- John B. Wyatt IV (5): pm:cpupower: Add missing powercap_set_enabled() stub function pm:cpupower: Add SWIG bindings files for libcpupower pm:cpupower: Include test_raw_pylibcpupower.py MAINTAINERS: Add Maintainers for SWIG Python bindings pm:cpupower: Add error warning when SWIG is not installed MAINTAINERS | 3 + tools/power/cpupower/bindings/python/.gitignore | 8 + tools/power/cpupower/bindings/python/Makefile | 33 +++ tools/power/cpupower/bindings/python/README | 59 +++++ .../cpupower/bindings/python/raw_pylibcpupower.i | 247 +++++++++++++++++++++ .../bindings/python/test_raw_pylibcpupower.py | 42 ++++ tools/power/cpupower/lib/powercap.c | 8 + 7 files changed, 400 insertions(+) create mode 100644 tools/power/cpupower/bindings/python/.gitignore create mode 100644 tools/power/cpupower/bindings/python/Makefile create mode 100644 tools/power/cpupower/bindings/python/README create mode 100644 tools/power/cpupower/bindings/python/raw_pylibcpupower.i create mode 100755 tools/power/cpupower/bindings/python/test_raw_pylibcpupower.py ---------------------------------------------------------------- --------------jjT60Xg7OJjn7N018L42dldc Content-Type: text/x-patch; charset=UTF-8; name="linux-cpupower-6.12-rc1-2.diff" Content-Disposition: attachment; filename="linux-cpupower-6.12-rc1-2.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNDJkZWNkZTM4 MzIwLi5kM2I2NjFlNTQ5NmUgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5U QUlORVJTCkBAIC01ODE5LDYgKzU4MTksOSBAQCBDUFUgUE9XRVIgTU9OSVRPUklORyBTVUJT WVNURU0KIE06CVRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuY29tPgogTToJU2h1YWgg S2hhbiA8c2h1YWhAa2VybmVsLm9yZz4KIE06CVNodWFoIEtoYW4gPHNraGFuQGxpbnV4Zm91 bmRhdGlvbi5vcmc+CitNOglKb2huIEIuIFd5YXR0IElWIDxqd3lhdHRAcmVkaGF0LmNvbT4K K006CUpvaG4gQi4gV3lhdHQgSVYgPHNhZ2VvZnJlZG9uZG9AZ21haWwuY29tPgorTToJSm9o biBLYWN1ciA8amthY3VyQHJlZGhhdC5jb20+CiBMOglsaW51eC1wbUB2Z2VyLmtlcm5lbC5v cmcKIFM6CU1haW50YWluZWQKIEY6CXRvb2xzL3Bvd2VyL2NwdXBvd2VyLwpkaWZmIC0tZ2l0 IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmluZGluZ3MvcHl0aG9uLy5naXRpZ25vcmUgYi90 b29scy9wb3dlci9jcHVwb3dlci9iaW5kaW5ncy9weXRob24vLmdpdGlnbm9yZQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVjOWExZjAyMTJkZAotLS0gL2Rl di9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JpbmRpbmdzL3B5dGhvbi8uZ2l0 aWdub3JlCkBAIC0wLDAgKzEsOCBAQAorX19weWNhY2hlX18vCityYXdfcHlsaWJjcHVwb3dl cl93cmFwLmMKKyoubworKi5zbworKi5weQorIXRlc3RfcmF3X3B5bGliY3B1cG93ZXIucHkK KyMgZ2l0IGtlZXBzIGlnbm9yaW5nIHRoaXMgZmlsZSwgdXNlIGdpdCBhZGQgLWYgcmF3X2xp YmNwdXBvd2VyLmkKKyFyYXdfcHlsaWJjcHVwb3dlci5pCmRpZmYgLS1naXQgYS90b29scy9w b3dlci9jcHVwb3dlci9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUgYi90b29scy9wb3dlci9j cHVwb3dlci9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5kYzA5YzViNjZlYWQKLS0tIC9kZXYvbnVsbAorKysgYi90 b29scy9wb3dlci9jcHVwb3dlci9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUKQEAgLTAsMCAr MSwzMyBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisjIE1h a2VmaWxlIGZvciBsaWJjcHVwb3dlcidzIFB5dGhvbiBiaW5kaW5ncworIworIyBUaGlzIE1h a2VmaWxlIGV4cGVjdHMgeW91IGhhdmUgYWxyZWFkeSBydW4gdGhlIG1ha2VmaWxlIGZvciBj cHVwb3dlciB0byBidWlsZAorIyB0aGUgLm8gZmlsZXMgaW4gdGhlIGxpYiBkaXJlY3Rvcnkg Zm9yIHRoZSBiaW5kaW5ncyB0byBiZSBjcmVhdGVkLgorCitDQyA6PSBnY2MKK0hBVkVfU1dJ RyA6PSAkKHNoZWxsIGlmIHdoaWNoIHN3aWcgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8g MTsgZWxzZSBlY2hvIDA7IGZpKQorSEFWRV9QWUNPTkZJRyA6PSAkKHNoZWxsIGlmIHdoaWNo IHB5dGhvbi1jb25maWcgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8gMTsgZWxzZSBlY2hv IDA7IGZpKQorCitMSUJfRElSIDo9IC4uLy4uL2xpYgorUFlfSU5DTFVERSA9ICQoZmlyc3R3 b3JkICQoc2hlbGwgcHl0aG9uLWNvbmZpZyAtLWluY2x1ZGVzKSkKK09CSkVDVFNfTElCID0g JCh3aWxkY2FyZCAkKExJQl9ESVIpLyoubykKKworYWxsOiBfcmF3X3B5bGliY3B1cG93ZXIu c28KKworX3Jhd19weWxpYmNwdXBvd2VyLnNvOiByYXdfcHlsaWJjcHVwb3dlcl93cmFwLm8K KwkkKENDKSAtc2hhcmVkICQoT0JKRUNUU19MSUIpIHJhd19weWxpYmNwdXBvd2VyX3dyYXAu byAtbyBfcmF3X3B5bGliY3B1cG93ZXIuc28KKworcmF3X3B5bGliY3B1cG93ZXJfd3JhcC5v OiByYXdfcHlsaWJjcHVwb3dlcl93cmFwLmMKKwkkKENDKSAtZlBJQyAtYyByYXdfcHlsaWJj cHVwb3dlcl93cmFwLmMgJChQWV9JTkNMVURFKQorCityYXdfcHlsaWJjcHVwb3dlcl93cmFw LmM6IHJhd19weWxpYmNwdXBvd2VyLmkKK2lmZXEgKCQoSEFWRV9TV0lHKSwwKQorCSQoZXJy b3IgInN3aWcgd2FzIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHlvdSBoYXZlIGl0IGluc3RhbGxl ZCBhbmQgaW4gdGhlIFBBVEggdG8gZ2VuZXJhdGUgdGhlIGJpbmRpbmdzLiIpCitlbHNlIGlm ZXEgKCQoSEFWRV9QWUNPTkZJRyksMCkKKwkkKGVycm9yICJweXRob24tY29uZmlnIHdhcyBu b3QgZm91bmQuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBpdCBpbnN0YWxsZWQgYW5kIGluIHRoZSBQ QVRIIHRvIGdlbmVyYXRlIHRoZSBiaW5kaW5ncy4iKQorZW5kaWYKKwlzd2lnIC1weXRob24g cmF3X3B5bGliY3B1cG93ZXIuaQorCisjIFdpbGwgb25seSBjbGVhbiB0aGUgYmluZGluZ3Mg Zm9sZGVyOyB3aWxsIG5vdCBjbGVhbiB0aGUgYWN0dWFsIGNwdXBvd2VyIGZvbGRlcgorY2xl YW46CisJcm0gLWYgcmF3X3B5bGliY3B1cG93ZXIucHkgcmF3X3B5bGliY3B1cG93ZXJfd3Jh cC5jIHJhd19weWxpYmNwdXBvd2VyX3dyYXAubyBfcmF3X3B5bGliY3B1cG93ZXIuc28KZGlm ZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JpbmRpbmdzL3B5dGhvbi9SRUFETUUg Yi90b29scy9wb3dlci9jcHVwb3dlci9iaW5kaW5ncy9weXRob24vUkVBRE1FCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGE0YmIyNTgxZThhCi0tLSAvZGV2 L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmluZGluZ3MvcHl0aG9uL1JFQURN RQpAQCAtMCwwICsxLDU5IEBACitUaGlzIGZvbGRlciBjb250YWlucyB0aGUgbmVjZXNzYXJ5 IGZpbGVzIHRvIGJ1aWxkIHRoZSBQeXRob24gYmluZGluZ3MgZm9yCitsaWJjcHVwb3dlciAo YXNpZGUgZnJvbSB0aGUgbGliY3B1cG93ZXIgb2JqZWN0IGZpbGVzKS4KKworCityZXF1aXJl bWVudHMKKy0tLS0tLS0tLS0tLQorCisqIFlvdSBuZWVkIHRoZSBvYmplY3QgZmlsZXMgaW4g dGhlIGxpYmNwdXBvd2VyIGRpcmVjdG9yeSBjb21waWxlZCBieQorY3B1cG93ZXIncyBtYWtl ZmlsZS4KKyogVGhlIFNXSUcgcHJvZ3JhbSBtdXN0IGJlIGluc3RhbGxlZC4KKyogVGhlIFB5 dGhvbidzIGRldmVsb3BtZW50IGxpYnJhcmllcyBpbnN0YWxsZWQuCisKK1BsZWFzZSBjaGVj ayB0aGF0IHlvdXIgdmVyc2lvbiBvZiBTV0lHIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdmVy c2lvbiBvZiBQeXRob24KK2luc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmUgYnkgY2hlY2tpbmcg dGhlIFNXSUcgY2hhbmdlbG9nIG9uIHRoZWlyIHdlYnNpdGUuCitodHRwczovL3N3aWcub3Jn LworCitOb3RlIHRoYXQgd2hpbGUgU1dJRyBpdHNlbGYgaXMgR1BMIHYzKyBsaWNlbnNlZDsg dGhlIHJlc3VsdGluZyBvdXRwdXQsCit0aGUgYmluZGluZ3MgY29kZTogaXMgcGVybWlzc2l2 ZWx5IGxpY2Vuc2VkICsgdGhlIGxpY2Vuc2Ugb2YgbGliY3B1cG93ZXIncyAubworZmlsZXMu IEZvciB0aGVzZSBiaW5kaW5ncyB0aGF0IG1lYW5zIEdQTCB2Mi4KKworUGxlYXNlIHNlZSBo dHRwczovL3N3aWcub3JnL2xlZ2FsLmh0bWwgYW5kIHRoZSBkaXNjdXNzaW9uIFsxXSBmb3Ig bW9yZSBkZXRhaWxzLgorCitbMV0KK2h0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXBt L1pxdjlCT2p4TEFneU5QNUJAaGF0YmFja3VwLworCisKK2J1aWxkCistLS0tLQorCitJbnN0 YWxsIFNXSUcgYW5kIHRoZSBQeXRob24gZGV2ZWxvcG1lbnQgZmlsZXMgcHJvdmlkZWQgYnkg eW91ciBkaXN0cmlidXRpb24uCisKK0J1aWxkIHRoZSBvYmplY3QgZmlsZXMgZm9yIGxpYmNw dXBvd2VyIGJ5IHJ1bm5pbmcgbWFrZSBpbiB0aGUgY3B1cG93ZXIKK2RpcmVjdG9yeS4KKwor UmV0dXJuIHRvIHRoZSBkaXJlY3RvcnkgdGhpcyBSRUFETUUgaXMgaW4gdG8gcnVuOgorCisk IG1ha2UKKworCit0ZXN0aW5nCistLS0tLS0tCisKK1BsZWFzZSB2ZXJpZnkgdGhlIF9yYXdf cHlsaWJjcHVwb3dlci5zbyBhbmQgcmF3X3B5bGliY3B1cG93ZXIucHkgZmlsZXMgaGF2ZQor YmVlbiBjcmVhdGVkLgorCitUbyBydW4gdGhlIHRlc3Qgc2NyaXB0OgorCiskIHB5dGhvbiB0 ZXN0X3Jhd19weWxpYmNwdXBvd2VyLnB5CisKKworY3JlZGl0cworLS0tLS0tLQorCitPcmln aW5hbCBCaW5kaW5ncyBBdXRob3I6CitKb2huIEIuIFd5YXR0IElWCitqd3lhdHRAcmVkaGF0 LmNvbQorc2FnZW9mcmVkb25kb0BnbWFpbC5jb20KKworQ29weXJpZ2h0IChDKSAyMDI0IFJl ZCBIYXQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JpbmRpbmdzL3B5dGhv bi9yYXdfcHlsaWJjcHVwb3dlci5pIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmluZGluZ3Mv cHl0aG9uL3Jhd19weWxpYmNwdXBvd2VyLmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi45NjU1NmQ4N2E3NDUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9w b3dlci9jcHVwb3dlci9iaW5kaW5ncy9weXRob24vcmF3X3B5bGliY3B1cG93ZXIuaQpAQCAt MCwwICsxLDI0NyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eSAqLworCislbW9kdWxlIHJhd19weWxpYmNwdXBvd2VyCisleworI2luY2x1ZGUgIi4uLy4u L2xpYi9jcHVwb3dlcl9pbnRlcm4uaCIKKyNpbmNsdWRlICIuLi8uLi9saWIvYWNwaV9jcHBj LmgiCisjaW5jbHVkZSAiLi4vLi4vbGliL2NwdWZyZXEuaCIKKyNpbmNsdWRlICIuLi8uLi9s aWIvY3B1aWRsZS5oIgorI2luY2x1ZGUgIi4uLy4uL2xpYi9jcHVwb3dlci5oIgorI2luY2x1 ZGUgIi4uLy4uL2xpYi9wb3dlcmNhcC5oIgorJX0KKworLyoKKyAqIGNwdXBvd2VyX2ludGVy bi5oCisgKi8KKworI2RlZmluZSBQQVRIX1RPX0NQVSAiL3N5cy9kZXZpY2VzL3N5c3RlbS9j cHUvIgorI2RlZmluZSBNQVhfTElORV9MRU4gNDA5NgorI2RlZmluZSBTWVNGU19QQVRIX01B WCAyNTUKKworaW50IGlzX3ZhbGlkX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CisKK3Vuc2ln bmVkIGludCBjcHVwb3dlcl9yZWFkX3N5c2ZzKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1 Ziwgc2l6ZV90IGJ1Zmxlbik7CisKK3Vuc2lnbmVkIGludCBjcHVwb3dlcl93cml0ZV9zeXNm cyhjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworCisvKgor ICogYWNwaV9jcHBjLmgKKyAqLworCitlbnVtIGFjcGlfY3BwY192YWx1ZSB7CisJSElHSEVT VF9QRVJGLAorCUxPV0VTVF9QRVJGLAorCU5PTUlOQUxfUEVSRiwKKwlMT1dFU1RfTk9OTElO RUFSX1BFUkYsCisJTE9XRVNUX0ZSRVEsCisJTk9NSU5BTF9GUkVRLAorCVJFRkVSRU5DRV9Q RVJGLAorCVdSQVBBUk9VTkRfVElNRSwKKwlNQVhfQ1BQQ19WQUxVRV9GSUxFUworfTsKKwor dW5zaWduZWQgbG9uZyBhY3BpX2NwcGNfZ2V0X2RhdGEodW5zaWduZWQgaW50IGNwdSwKKwkJ CQkgZW51bSBhY3BpX2NwcGNfdmFsdWUgd2hpY2gpOworCisvKgorICogY3B1ZnJlcS5oCisg Ki8KKworc3RydWN0IGNwdWZyZXFfcG9saWN5IHsKKwl1bnNpZ25lZCBsb25nIG1pbjsKKwl1 bnNpZ25lZCBsb25nIG1heDsKKwljaGFyICpnb3Zlcm5vcjsKK307CisKK3N0cnVjdCBjcHVm cmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgeworCWNoYXIgKmdvdmVybm9yOworCXN0cnVjdCBj cHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYXZh aWxhYmxlX2dvdmVybm9ycyAqZmlyc3Q7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFi bGVfZnJlcXVlbmNpZXMgeworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCXN0cnVjdCBj cHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqbmV4dDsKKwlzdHJ1Y3QgY3B1ZnJlcV9h dmFpbGFibGVfZnJlcXVlbmNpZXMgKmZpcnN0OworfTsKKworCitzdHJ1Y3QgY3B1ZnJlcV9h ZmZlY3RlZF9jcHVzIHsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXN0cnVjdCBjcHVmcmVxX2Fm ZmVjdGVkX2NwdXMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmly c3Q7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBmcmVx dWVuY3k7CisJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVfaW5fc3RhdGU7CisJc3RydWN0IGNw dWZyZXFfc3RhdHMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKmZpcnN0OworfTsK KwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQg Y3B1KTsKKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKHVuc2ln bmVkIGludCBjcHUpOworCisjZGVmaW5lIGNwdWZyZXFfZ2V0KGNwdSkgY3B1ZnJlcV9nZXRf ZnJlcV9rZXJuZWwoY3B1KTsKKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0 aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSk7CisKK2ludCBjcHVmcmVxX2dldF9oYXJk d2FyZV9saW1pdHModW5zaWduZWQgaW50IGNwdSwKKwkJCQl1bnNpZ25lZCBsb25nICptaW4s CisJCQkJdW5zaWduZWQgbG9uZyAqbWF4KTsKKworY2hhciAqY3B1ZnJlcV9nZXRfZHJpdmVy KHVuc2lnbmVkIGludCBjcHUpOworCit2b2lkIGNwdWZyZXFfcHV0X2RyaXZlcihjaGFyICpw dHIpOworCitzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmNwdWZyZXFfZ2V0X3BvbGljeSh1bnNp Z25lZCBpbnQgY3B1KTsKKwordm9pZCBjcHVmcmVxX3B1dF9wb2xpY3koc3RydWN0IGNwdWZy ZXFfcG9saWN5ICpwb2xpY3kpOworCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJu b3JzCisqY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1 KTsKKwordm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKAorCXN0cnVjdCBj cHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmZpcnN0KTsKKworc3RydWN0IGNwdWZyZXFf YXZhaWxhYmxlX2ZyZXF1ZW5jaWVzCisqY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5j aWVzKHVuc2lnbmVkIGludCBjcHUpOworCit2b2lkIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9m cmVxdWVuY2llcygKKwkJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpm aXJzdCk7CisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcworKmNwdWZy ZXFfZ2V0X2Jvb3N0X2ZyZXF1ZW5jaWVzKHVuc2lnbmVkIGludCBjcHUpOworCit2b2lkIGNw dWZyZXFfcHV0X2Jvb3N0X2ZyZXF1ZW5jaWVzKAorCQlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFi bGVfZnJlcXVlbmNpZXMgKmZpcnN0KTsKKworc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1 cyAqY3B1ZnJlcV9nZXRfYWZmZWN0ZWRfY3B1cyh1bnNpZ25lZAorCQkJCQkJCWludCBjcHUp OworCit2b2lkIGNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZm ZWN0ZWRfY3B1cyAqZmlyc3QpOworCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpj cHVmcmVxX2dldF9yZWxhdGVkX2NwdXModW5zaWduZWQKKwkJCQkJCQlpbnQgY3B1KTsKKwor dm9pZCBjcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRf Y3B1cyAqZmlyc3QpOworCitzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqY3B1ZnJlcV9nZXRfc3Rh dHModW5zaWduZWQgaW50IGNwdSwKKwkJCQkJdW5zaWduZWQgbG9uZyBsb25nICp0b3RhbF90 aW1lKTsKKwordm9pZCBjcHVmcmVxX3B1dF9zdGF0cyhzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAq c3RhdHMpOworCit1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKHVuc2ln bmVkIGludCBjcHUpOworCitpbnQgY3B1ZnJlcV9zZXRfcG9saWN5KHVuc2lnbmVkIGludCBj cHUsIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKKworaW50IGNwdWZyZXFfbW9k aWZ5X3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtaW5fZnJl cSk7CisKK2ludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWF4KHVuc2lnbmVkIGludCBjcHUs IHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXEpOworCitpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5 X2dvdmVybm9yKHVuc2lnbmVkIGludCBjcHUsIGNoYXIgKmdvdmVybm9yKTsKKworaW50IGNw dWZyZXFfc2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCXVuc2lnbmVkIGxv bmcgdGFyZ2V0X2ZyZXF1ZW5jeSk7CisKK3Vuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfc3lz ZnNfdmFsdWVfZnJvbV90YWJsZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJIGNvbnN0IGNo YXIgKip0YWJsZSwKKwkJCQkJCSB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkJCQkgdW5zaWdu ZWQgaW50IHNpemUpOworCisvKgorICogY3B1aWRsZS5oCisgKi8KKworaW50IGNwdWlkbGVf aXNfc3RhdGVfZGlzYWJsZWQodW5zaWduZWQgaW50IGNwdSwKKwkJCQkgICAgICAgdW5zaWdu ZWQgaW50IGlkbGVzdGF0ZSk7CitpbnQgY3B1aWRsZV9zdGF0ZV9kaXNhYmxlKHVuc2lnbmVk IGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUsCisJCQkJICAgdW5zaWduZWQgaW50 IGRpc2FibGUpOwordW5zaWduZWQgbG9uZyBjcHVpZGxlX3N0YXRlX2xhdGVuY3kodW5zaWdu ZWQgaW50IGNwdSwKKwkJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpOwordW5zaWduZWQg bG9uZyBjcHVpZGxlX3N0YXRlX3VzYWdlKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2ln bmVkIGludCBpZGxlc3RhdGUpOwordW5zaWduZWQgbG9uZyBsb25nIGNwdWlkbGVfc3RhdGVf dGltZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7 CitjaGFyICpjcHVpZGxlX3N0YXRlX25hbWUodW5zaWduZWQgaW50IGNwdSwKKwkJCQl1bnNp Z25lZCBpbnQgaWRsZXN0YXRlKTsKK2NoYXIgKmNwdWlkbGVfc3RhdGVfZGVzYyh1bnNpZ25l ZCBpbnQgY3B1LAorCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpOwordW5zaWduZWQgaW50 IGNwdWlkbGVfc3RhdGVfY291bnQodW5zaWduZWQgaW50IGNwdSk7CisKK2NoYXIgKmNwdWlk bGVfZ2V0X2dvdmVybm9yKHZvaWQpOworCitjaGFyICpjcHVpZGxlX2dldF9kcml2ZXIodm9p ZCk7CisKKy8qCisgKiBjcHVwb3dlci5oCisgKi8KKworc3RydWN0IGNwdXBvd2VyX3RvcG9s b2d5IHsKKwkvKiBBbW91bnQgb2YgQ1BVIGNvcmVzLCBwYWNrYWdlcyBhbmQgdGhyZWFkcyBw ZXIgY29yZSBpbiB0aGUgc3lzdGVtICovCisJdW5zaWduZWQgaW50IGNvcmVzOworCXVuc2ln bmVkIGludCBwa2dzOworCXVuc2lnbmVkIGludCB0aHJlYWRzOyAvKiBwZXIgY29yZSAqLwor CisJLyogQXJyYXkgZ2V0cyBtYWxsb2NhdGVkIHdpdGggY29yZXMgZW50cmllcywgaG9sZGlu ZyBwZXIgY29yZSBpbmZvICovCisJc3RydWN0IGNwdWlkX2NvcmVfaW5mbyAqY29yZV9pbmZv OworfTsKKworc3RydWN0IGNwdWlkX2NvcmVfaW5mbyB7CisJaW50IHBrZzsKKwlpbnQgY29y ZTsKKwlpbnQgY3B1OworCisJLyogZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgaXNfb25saW5l OjE7Cit9OworCitpbnQgZ2V0X2NwdV90b3BvbG9neShzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xv Z3kgKmNwdV90b3ApOworCit2b2lkIGNwdV90b3BvbG9neV9yZWxlYXNlKHN0cnVjdCBjcHVw b3dlcl90b3BvbG9neSBjcHVfdG9wKTsKKworaW50IGNwdXBvd2VyX2lzX2NwdV9vbmxpbmUo dW5zaWduZWQgaW50IGNwdSk7CisKKy8qCisgKiBwb3dlcmNhcC5oCisgKi8KKworc3RydWN0 IHBvd2VyY2FwX3pvbmUgeworCWNoYXIgbmFtZVtNQVhfTElORV9MRU5dOworCS8qCisJICog c3lzX25hbWUgcmVsYXRpdmUgdG8gUEFUSF9UT19QT1dFUkNBUCwKKwkgKiBkbyBub3QgZm9y Z2V0IHRoZSAvIGluIGJldHdlZW4KKwkgKi8KKwljaGFyIHN5c19uYW1lW1NZU0ZTX1BBVEhf TUFYXTsKKwlpbnQgdHJlZV9kZXB0aDsKKwlzdHJ1Y3QgcG93ZXJjYXBfem9uZSAqcGFyZW50 OworCXN0cnVjdCBwb3dlcmNhcF96b25lICpjaGlsZHJlbltQT1dFUkNBUF9NQVhfQ0hJTERf Wk9ORVNdOworCS8qIE1vcmUgcG9zc2libGUgY2FwcyBvciBhdHRyaWJ1dGVzIHRvIGJlIGFk ZGVkPyAqLworCXVpbnQzMl90IGhhc19wb3dlcl91dzoxLAorCQkgaGFzX2VuZXJneV91ajox OworCit9OworCitpbnQgcG93ZXJjYXBfd2Fsa196b25lcyhzdHJ1Y3QgcG93ZXJjYXBfem9u ZSAqem9uZSwKKwkJCWludCAoKmYpKHN0cnVjdCBwb3dlcmNhcF96b25lICp6b25lKSk7CisK K3N0cnVjdCBwb3dlcmNhcF96b25lICpwb3dlcmNhcF9pbml0X3pvbmVzKHZvaWQpOworCitp bnQgcG93ZXJjYXBfZ2V0X2VuYWJsZWQoaW50ICptb2RlKTsKKworaW50IHBvd2VyY2FwX3Nl dF9lbmFibGVkKGludCBtb2RlKTsKKworaW50IHBvd2VyY2FwX2dldF9kcml2ZXIoY2hhciAq ZHJpdmVyLCBpbnQgYnVmbGVuKTsKKworaW50IHBvd2VyY2FwX2dldF9tYXhfZW5lcmd5X3Jh bmdlX3VqKHN0cnVjdCBwb3dlcmNhcF96b25lICp6b25lLCB1aW50NjRfdCAqdmFsKTsKKwor aW50IHBvd2VyY2FwX2dldF9lbmVyZ3lfdWooc3RydWN0IHBvd2VyY2FwX3pvbmUgKnpvbmUs IHVpbnQ2NF90ICp2YWwpOworCitpbnQgcG93ZXJjYXBfZ2V0X21heF9wb3dlcl9yYW5nZV91 dyhzdHJ1Y3QgcG93ZXJjYXBfem9uZSAqem9uZSwgdWludDY0X3QgKnZhbCk7CisKK2ludCBw b3dlcmNhcF9nZXRfcG93ZXJfdXcoc3RydWN0IHBvd2VyY2FwX3pvbmUgKnpvbmUsIHVpbnQ2 NF90ICp2YWwpOworCitpbnQgcG93ZXJjYXBfem9uZV9nZXRfZW5hYmxlZChzdHJ1Y3QgcG93 ZXJjYXBfem9uZSAqem9uZSwgaW50ICptb2RlKTsKKworaW50IHBvd2VyY2FwX3pvbmVfc2V0 X2VuYWJsZWQoc3RydWN0IHBvd2VyY2FwX3pvbmUgKnpvbmUsIGludCBtb2RlKTsKZGlmZiAt LWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JpbmRpbmdzL3B5dGhvbi90ZXN0X3Jhd19w eWxpYmNwdXBvd2VyLnB5IGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmluZGluZ3MvcHl0aG9u L3Rlc3RfcmF3X3B5bGliY3B1cG93ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMDAwMDAwLi4zZDZmNjJiOTU1NmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9w b3dlci9jcHVwb3dlci9iaW5kaW5ncy9weXRob24vdGVzdF9yYXdfcHlsaWJjcHVwb3dlci5w eQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKworaW1wb3J0IHJhd19weWxpYmNwdXBv d2VyIGFzIHAKKworIyBTaW1wbGUgZnVuY3Rpb24gY2FsbAorCisiIiIKK0dldCBjc3RhdGUg Y291bnQKKyIiIgorY3B1X2NzdGF0ZXNfY291bnQgPSBwLmNwdWlkbGVfc3RhdGVfY291bnQo MCkKK2lmIGNwdV9jc3RhdGVzX2NvdW50ID4gLTE6CisgICAgcHJpbnQoZiJDUFUgMCBoYXMg e2NwdV9jc3RhdGVzX2NvdW50fSBjLXN0YXRlcyIpCitlbHNlOgorICAgIHByaW50KGYiY3N0 YXRlIGNvdW50IGVycm9yOiByZXR1cm4gY29kZToge2NwdV9jc3RhdGVzX2NvdW50fSIpCisK KyIiIgorRGlzYWJsZSBjc3RhdGUgKHdpbGwgZmFpbCBpZiB0aGUgYWJvdmUgaXMgMCwgZXg6 IGEgdmlydHVhbCBtYWNoaW5lKQorIiIiCitjc3RhdGVfZGlzYWJsZWQgPSBwLmNwdWlkbGVf c3RhdGVfZGlzYWJsZSgwLCAwLCAxKQoraWYgY3B1X2NzdGF0ZXNfY291bnQgPT0gMDoKKyAg ICBwcmludChmIkNQVSAwIGhhcyB7Y3B1X2NzdGF0ZXNfY291bnR9IGMtc3RhdGVzIikKK2Vs c2U6CisgICAgcHJpbnQoZiJjc3RhdGUgY291bnQgZXJyb3I6IHJldHVybiBjb2RlOiB7Y3B1 X2NzdGF0ZXNfY291bnR9IikKKworbWF0Y2ggY3N0YXRlX2Rpc2FibGVkOgorICAgIGNhc2Ug MDoKKyAgICAgICAgcHJpbnQoZiJDUFUgc3RhdGUgZGlzYWJsZWQiKQorICAgIGNhc2UgLTE6 CisgICAgICAgIHByaW50KGYiSWRsZXN0YXRlIG5vdCBhdmFpbGFibGUiKQorICAgIGNhc2Ug XzoKKyAgICAgICAgcHJpbnQoZiJOb3QgZG9jdW1lbnRlZCIpCisKKworIyBQb2ludGVyIGV4 YW1wbGUKKwordG9wbyA9IHAuY3B1cG93ZXJfdG9wb2xvZ3koKQordG90YWxfY3B1cyA9IHAu Z2V0X2NwdV90b3BvbG9neSh0b3BvKQoraWYgdG90YWxfY3B1cyA+IDA6CisgICAgcHJpbnQo ZiJOdW1iZXIgb2YgdG90YWwgY3B1czoge3RvdGFsX2NwdXN9IGFuZCBudW1iZXIgb2YgY29y ZXM6IHt0b3BvLmNvcmVzfSIpCitlbHNlOgorICAgIHByaW50KGYiRXJyb3I6IGNvdWxkIG5v dCBnZXQgY3B1IHRvcG9sb2d5IikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2Vy L2xpYi9wb3dlcmNhcC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3Bvd2VyY2FwLmMK aW5kZXggYTdhNTljNmJhY2RhLi45NGEwYzY5ZTU1ZWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bv d2VyL2NwdXBvd2VyL2xpYi9wb3dlcmNhcC5jCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2Vy L2xpYi9wb3dlcmNhcC5jCkBAIC03Nyw2ICs3NywxNCBAQCBpbnQgcG93ZXJjYXBfZ2V0X2Vu YWJsZWQoaW50ICptb2RlKQogCXJldHVybiBzeXNmc19nZXRfZW5hYmxlZChwYXRoLCBtb2Rl KTsKIH0KIAorLyoKKyAqIFRPRE86IGltcGxlbWVudCBmdW5jdGlvbi4gUmV0dXJucyBkdW1t eSAwIGZvciBub3cuCisgKi8KK2ludCBwb3dlcmNhcF9zZXRfZW5hYmxlZChpbnQgbW9kZSkK K3sKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEhhcmRjb2RlZCwgYmVjYXVzZSByYXBsIGlz IHRoZSBvbmx5IHBvd2VyY2FwIGltcGxlbWVudGF0aW9uCiAtICogdGhpcyBuZWVkcyB0byBn ZXQgbW9yZSBnZW5lcmljIGlmIG1vcmUgcG93ZXJjYXAgaW1wbGVtZW50YXRpb25zCg== --------------jjT60Xg7OJjn7N018L42dldc-- . Date: Tue, 10 Sep 2024 15:05:54 -0400 From: Kent Overstreet To: Greg Kroah-Hartman Cc: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] bcachefs fixes for 6.10.y Hey Greg, couple critical fixes for you: The following changes since commit 1611860f184a2c9e74ed593948d43657734a7098: Linux 6.10.9 (2024-09-08 07:56:41 +0200) are available in the Git repository at: git://evilpiepirate.org/bcachefs.git tags/bcachefs-v6.10.9-fixes for you to fetch changes up to ee64e00984ec3ea3fbf9b4331cbd073690ff8765: bcachefs: Don't delete open files in online fsck (2024-09-10 10:52:16 -0400) ---------------------------------------------------------------- bcachefs fixes for 6.10.10 ---------------------------------------------------------------- Kent Overstreet (3): bcachefs: Fix bch2_extents_match() false positive bcachefs: Revert lockless buffered IO path bcachefs: Don't delete open files in online fsck fs/bcachefs/extents.c | 23 ++++++- fs/bcachefs/fs-io-buffered.c | 149 ++++++++++++------------------------------- fs/bcachefs/fs.c | 8 +++ fs/bcachefs/fs.h | 7 ++ fs/bcachefs/fsck.c | 18 ++++++ 5 files changed, 95 insertions(+), 110 deletions(-) . Date: Wed, 11 Sep 2024 08:05:26 +0200 From: Johan Hovold To: Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] USB-serial updates for 6.12-rc1 The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399: Linux 6.11-rc4 (2024-08-18 13:17:27 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git tags/usb-serial-6.12-rc1 for you to fetch changes up to 4c0d9477ba69a417c698aec1d3012e188cf97add: USB: serial: kobil_sct: restore initial terminal settings (2024-08-26 15:29:27 +0200) ---------------------------------------------------------------- USB-serial updates for 6.12-rc1 Here are the USB-serial updates for 6.12-rc1, including: - fix kobil_sct initial terminal settings - set driver owner when registering drivers All have been in linux-next with no reported issues. ---------------------------------------------------------------- Johan Hovold (1): USB: serial: kobil_sct: restore initial terminal settings Krzysztof Kozlowski (2): USB: serial: set driver owner when registering drivers USB: serial: drop driver owner initialization drivers/usb/serial/aircable.c | 1 - drivers/usb/serial/ark3116.c | 1 - drivers/usb/serial/belkin_sa.c | 1 - drivers/usb/serial/ch341.c | 1 - drivers/usb/serial/cp210x.c | 1 - drivers/usb/serial/cyberjack.c | 1 - drivers/usb/serial/cypress_m8.c | 3 --- drivers/usb/serial/digi_acceleport.c | 2 -- drivers/usb/serial/empeg.c | 1 - drivers/usb/serial/f81232.c | 2 -- drivers/usb/serial/f81534.c | 1 - drivers/usb/serial/ftdi_sio.c | 1 - drivers/usb/serial/garmin_gps.c | 1 - drivers/usb/serial/generic.c | 1 - drivers/usb/serial/io_edgeport.c | 4 ---- drivers/usb/serial/io_ti.c | 2 -- drivers/usb/serial/ipaq.c | 1 - drivers/usb/serial/ipw.c | 1 - drivers/usb/serial/ir-usb.c | 1 - drivers/usb/serial/iuu_phoenix.c | 1 - drivers/usb/serial/keyspan.c | 4 ---- drivers/usb/serial/keyspan_pda.c | 2 -- drivers/usb/serial/kl5kusb105.c | 1 - drivers/usb/serial/kobil_sct.c | 4 +--- drivers/usb/serial/mct_u232.c | 1 - drivers/usb/serial/metro-usb.c | 1 - drivers/usb/serial/mos7720.c | 1 - drivers/usb/serial/mos7840.c | 1 - drivers/usb/serial/mxuport.c | 1 - drivers/usb/serial/navman.c | 1 - drivers/usb/serial/omninet.c | 1 - drivers/usb/serial/opticon.c | 1 - drivers/usb/serial/option.c | 1 - drivers/usb/serial/oti6858.c | 1 - drivers/usb/serial/pl2303.c | 1 - drivers/usb/serial/qcaux.c | 1 - drivers/usb/serial/qcserial.c | 1 - drivers/usb/serial/quatech2.c | 1 - drivers/usb/serial/safe_serial.c | 1 - drivers/usb/serial/sierra.c | 1 - drivers/usb/serial/spcp8x5.c | 1 - drivers/usb/serial/ssu100.c | 1 - drivers/usb/serial/symbolserial.c | 1 - drivers/usb/serial/ti_usb_3410_5052.c | 2 -- drivers/usb/serial/upd78f0730.c | 1 - drivers/usb/serial/usb-serial-simple.c | 1 - drivers/usb/serial/usb-serial.c | 12 +++++++----- drivers/usb/serial/usb_debug.c | 2 -- drivers/usb/serial/visor.c | 3 --- drivers/usb/serial/whiteheat.c | 2 -- drivers/usb/serial/wishbone-serial.c | 1 - drivers/usb/serial/xr_serial.c | 1 - drivers/usb/serial/xsens_mt.c | 1 - include/linux/usb/serial.h | 7 +++++-- 54 files changed, 13 insertions(+), 78 deletions(-) . Date: Wed, 11 Sep 2024 08:08:43 +0200 From: Johan Hovold To: Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] USB-serial fixes for 6.12-rc1-2 The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6: Linux 6.11-rc6 (2024-09-01 19:46:02 +1200) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git tags/usb-serial-6.12-rc1-2 for you to fetch changes up to 7d47d22444bb7dc1b6d768904a22070ef35e1fc0: USB: serial: pl2303: add device id for Macrosilicon MS3020 (2024-09-06 17:11:13 +0200) ---------------------------------------------------------------- USB-serial device id for 6.12-rc1 Here's a new pl2303 device id. This one has been in linux-next with no reported issues. ---------------------------------------------------------------- Junhao Xie (1): USB: serial: pl2303: add device id for Macrosilicon MS3020 drivers/usb/serial/pl2303.c | 1 + drivers/usb/serial/pl2303.h | 4 ++++ 2 files changed, 5 insertions(+) . Date: Wed, 11 Sep 2024 09:58:49 +0200 From: Petr Mladek To: Linus Torvalds Cc: Sergey Senozhatsky , Steven Rostedt , John Ogness , Andy Shevchenko , Rasmus Villemoes , Sebastian Andrzej Siewior , Thomas Gleixner , Jan Kara , Peter Zijlstra , Petr Mladek , linux-kernel@vger.kernel.org, Tony Lindgren , Yu Liao Subject: [GIT PULL] printk build fixup for 6.11 Hi Linus, please pull a printk related build fix for 6.11 from git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git tags/printk-for-6.11-fixup ===================================== - Fix build of serial_core as a module. ---------------------------------------------------------------- Petr Mladek (1): Merge branch 'for-6.11-fixup' into for-linus Yu Liao (1): printk: Export match_devname_and_update_preferred_console() kernel/printk/printk.c | 1 + 1 file changed, 1 insertion(+) . Date: Wed, 11 Sep 2024 15:08:02 +0000 From: "Arnd Bergmann" To: "Linus Torvalds" Cc: soc@kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [GIT PULL] ARM: SoC fixes for 6.11, part 3 The following changes since commit 9cc7b1705141d1a077493dc107ed626e8dc84681: Merge tag 'at91-fixes-6.11' of https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux into arm/fixes (2024-08-30 19:52:28 +0000) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git tags/arm-fixes-6.11-3 for you to fetch changes up to 0e7af99aef5f58b4bae00e45fd1c2626a987f7bb: Merge tag 'riscv-soc-fixes-for-v6.11-final' of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux into arm/fixes (2024-09-11 08:54:37 +0000) ---------------------------------------------------------------- ARM: SoC fixes for 6.11, part 3 The bulk of the changes this time are for device tree files in the rockchips platform, addressing correctness issues on individual boards, plus one change in the rk356x SoC file to make it match the binding. The only other changes that came in are - a CPU frequencey scaling fix for JH7110 (RISC-V) - a build fix for the cznic hwrandom driver - a fix for a deadlock in qualcomm uefi secure application firmware driver ---------------------------------------------------------------- Alexander Shiyan (1): arm64: dts: rockchip: Remove broken tsadc pinctrl binding for rk356x Arnd Bergmann (4): Merge tag 'qcom-drivers-fixes-for-6.11-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into arm/fixes Merge tag 'v6.11-rockchip-dtsfixes' of https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into arm/fixes platform: cznic: turris-omnia-mcu: fix HW_RANDOM dependency Merge tag 'riscv-soc-fixes-for-v6.11-final' of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux into arm/fixes Cristian Ciocaltea (2): dt-bindings: soc: rockchip: Fix compatibles for RK3588 VO{0,1}_GRF arm64: dts: rockchip: Fix compatibles for RK3588 VO{0,1}_GRF Dan Carpenter (1): firmware: qcom: uefisecapp: Fix deadlock in qcuefi_acquire() FUKAUMI Naoki (1): arm64: dts: rockchip: fix PMIC interrupt pin in pinctrl for ROCK Pi E Quentin Schulz (2): arm64: dts: rockchip: fix eMMC/SPI corruption when audio has been used on RK3399 Puma arm64: dts: rockchip: override BIOS_DISABLE signal via GPIO hog on RK3399 Puma Xingyu Wu (1): riscv: dts: starfive: jh7110-common: Fix lower rate of CPUfreq by setting PLL0 rate to 1.5GHz .../devicetree/bindings/soc/rockchip/grf.yaml | 10 +++++- arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 36 ++++++++++++++++++++-- arch/arm64/boot/dts/rockchip/rk356x.dtsi | 7 ++--- arch/arm64/boot/dts/rockchip/rk3588-base.dtsi | 6 ++-- arch/riscv/boot/dts/starfive/jh7110-common.dtsi | 6 ++++ drivers/firmware/qcom/qcom_qseecom_uefisecapp.c | 4 +++ drivers/platform/cznic/Kconfig | 2 +- 8 files changed, 60 insertions(+), 13 deletions(-) . Date: Wed, 11 Sep 2024 15:02:28 -0700 From: Dave Hansen To: torvalds@linux-foundation.org Cc: x86@kernel.org, linux-kernel@vger.kernel.org, Dave Hansen Subject: [GIT PULL] x86/sgx for 6.12-rc1 Hi Linus, Please pull some x86/sgx changes for 6.12-rc1. These fix a deadlock in the SGX NUMA allocator. It's probably only triggerable today on servers with buggy BIOSes, but it's theoretically possible it can happen on less goofy systems. -- The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6: Linux 6.11-rc6 (2024-09-01 19:46:02 +1200) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git tags/x86_sgx_for_6.12-rc1 for you to fetch changes up to c8ddc99eeba5f00b65efeae920eec3990bfc34ca: x86/sgx: Log information when a node lacks an EPC section (2024-09-05 15:20:47 -0700) ---------------------------------------------------------------- Fix deadlock in SGX NUMA node search ---------------------------------------------------------------- Aaron Lu (2): x86/sgx: Fix deadlock in SGX NUMA node search x86/sgx: Log information when a node lacks an EPC section arch/x86/kernel/cpu/sgx/main.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) . Date: Thu, 12 Sep 2024 12:14:14 +0300 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: Linus Torvalds Cc: LKML , PDx86 , Hans de Goede , Andy Shevchenko Subject: [GIT PULL] platform-drivers-x86 for v6.11-7 Hi Linus, Here is a platform-drivers-x86 fixes PR for v6.11. Fixes: - asus-wmi: Disable OOBE that interferes with backlight control - panasonic-laptop: Two fixes to SINF array handling Regards, i. The following changes since commit d34af755a533271f39cc7d86e49c0e74fde63a37: platform/x86/amd: pmf: Make ASUS GA403 quirk generic (2024-09-03 17:31:08 +0300) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git tags/platform-drivers-x86-v6.11-7 for you to fetch changes up to d6de45e3c6f3713d3825d3e2860c11d24e0f941f: platform/x86: asus-wmi: Disable OOBE experience on Zenbook S 16 (2024-09-10 15:43:58 +0300) ---------------------------------------------------------------- platform-drivers-x86 for v6.11-7 Fixes: - asus-wmi: Disable OOBE that interferes with backlight control - panasonic-laptop: Two fixes to SINF array handling The following is an automated shortlog grouped by driver: asus-wmi: - Disable OOBE experience on Zenbook S 16 panasonic-laptop: - Allocate 1 entry extra in the sinf array - Fix SINF array out of bounds accesses ---------------------------------------------------------------- Bas Nieuwenhuizen (1): platform/x86: asus-wmi: Disable OOBE experience on Zenbook S 16 Hans de Goede (2): platform/x86: panasonic-laptop: Fix SINF array out of bounds accesses platform/x86: panasonic-laptop: Allocate 1 entry extra in the sinf array drivers/platform/x86/asus-wmi.c | 10 ++++++ drivers/platform/x86/panasonic-laptop.c | 58 ++++++++++++++++++++++++------ include/linux/platform_data/x86/asus-wmi.h | 1 + 3 files changed, 58 insertions(+), 11 deletions(-) . Date: Thu, 12 Sep 2024 11:54:41 +0200 From: Thomas Bogendoerfer To: torvalds@linux-foundation.org Cc: linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] MIPS changes for v6.12 The following changes since commit 5be63fc19fcaa4c236b307420483578a56986a37: Linux 6.11-rc5 (2024-08-25 19:07:11 +1200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git/ tags/mips_6.12 for you to fetch changes up to 439667fb943cfea46d7bde5c7b29c89efec3cbc7: mips: Remove posix_types.h include from sigcontext.h (2024-08-29 10:46:00 +0200) ---------------------------------------------------------------- - use devm_clk_get_enabled() helper - prototype fixes - cleanup unused stuff ---------------------------------------------------------------- Gaosheng Cui (6): MIPS: Remove unused function dump_au1000_dma_channel() in dma.c mips/jazz: remove unused jazz_handle_int() declaration MIPS: MT: Remove unused function mips_mt_regdump() MIPS: Remove unused declarations in asm/cmp.h MIPS: Remove unused mips_display/_scroll_message() declarations MIPS: dec: prom: Remove unused unregister_prom_console() declaration Vincent Legoll (2): MIPS: ralink: Fix missing `plat_time_init` prototype MIPS: ralink: Fix missing `get_c0_perfcount_int` prototype Wu Bo (2): bus: bt1-axi: change to use devm_clk_get_enabled() helper bus: bt1-apb: change to use devm_clk_get_enabled() helper Xi Ruoyao (1): mips: Remove posix_types.h include from sigcontext.h arch/mips/alchemy/common/dma.c | 23 -------- arch/mips/include/asm/cmp.h | 8 --- arch/mips/include/asm/dec/prom.h | 1 - arch/mips/include/asm/mach-au1x00/au1000_dma.h | 1 - arch/mips/include/asm/mips-boards/generic.h | 3 - arch/mips/include/asm/mips_mt.h | 2 - arch/mips/include/uapi/asm/sigcontext.h | 1 - arch/mips/jazz/setup.c | 2 - arch/mips/kernel/mips-mt.c | 77 -------------------------- arch/mips/ralink/irq-gic.c | 1 + arch/mips/ralink/timer-gic.c | 2 + drivers/bus/bt1-apb.c | 23 +------- drivers/bus/bt1-axi.c | 23 +------- 13 files changed, 6 insertions(+), 161 deletions(-) -- Crap can work. Given enough thrust pigs will fly, but it's not necessarily a good idea. [ RFC1925, 2.3 ] . Date: Thu, 12 Sep 2024 13:59:35 +0100 From: Will Deacon To: joro@8bytes.org Cc: iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, robin.murphy@arm.com, kernel-team@android.com Subject: [GIT PULL] iommu/arm-smmu: Updates for 6.12 Hi Joerg, Please pull these Arm SMMU updates for v6.12. The big new feature is support for NVIDIA's virtual command queue implementation for SMMUv3, but everything is summarised in the tag. ** Please note **: I've already pushed this to the arm/smmu branch for -next coverage, but I thought sending a pull request was still useful for the records and the signed tag. If you want to recreate the branch, please feel free. See you at LPC! Cheers, Will --->8 The following changes since commit 7c626ce4bae1ac14f60076d00eafe71af30450ba: Linux 6.11-rc3 (2024-08-11 14:27:14 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git tags/arm-smmu-updates for you to fetch changes up to f1c6cf8e7ab9d7498ee70c69d5093165952d3595: Merge branch 'for-joerg/arm-smmu/bindings' into for-joerg/arm-smmu/updates (2024-09-12 12:54:14 +0100) ---------------------------------------------------------------- Arm SMMU updates for 6.12 - SMMUv2: * Devicetree binding updates for Qualcomm MMU-500 implementations. * Extend workarounds for broken Qualcomm hypervisor to avoid touching features that are not available (e.g. 16KiB page support, reserved context banks). - SMMUv3: * Support for NVIDIA's custom virtual command queue hardware. * Fix Stage-2 stall configuration and extend tests to cover this area. * A bunch of driver cleanups, including simplification of the master rbtree code. - Plus minor cleanups and fixes across both drivers. ---------------------------------------------------------------- Dan Carpenter (2): iommu/arm-smmu-v3: Fix a NULL vs IS_ERR() check iommu/tegra241-cmdqv: Fix ioremap() error handling in probe() Dmitry Baryshkov (1): iommu/arm-smmu-qcom: apply num_context_bank fixes for SDM630 / SDM660 Jason Gunthorpe (10): iommu/arm-smmu-v3: Add struct arm_smmu_impl_ops iommu/arm-smmu-v3: Use the new rb tree helpers iommu/arm-smmu-v3: Add arm_smmu_strtab_l1/2_idx() iommu/arm-smmu-v3: Add types for each level of the 2 level stream table iommu/arm-smmu-v3: Reorganize struct arm_smmu_strtab_cfg iommu/arm-smmu-v3: Remove strtab_base/cfg iommu/arm-smmu-v3: Do not use devm for the cd table allocations iommu/arm-smmu-v3: Shrink the cdtab l1_desc array iommu/arm-smmu-v3: Add types for each level of the CD table iommu/arm-smmu-v3: Reorganize struct arm_smmu_ctx_desc_cfg Konrad Dybcio (1): iommu/arm-smmu-qcom: Work around SDM845 Adreno SMMU w/ 16K pages Marc Gonzalez (1): iommu/arm-smmu-qcom: hide last LPASS SMMU context bank from linux Mostafa Saleh (2): iommu/arm-smmu-v3: Match Stall behaviour for S2 iommu/arm-smmu-v3-test: Test masters with stall enabled Nate Watterson (1): iommu/arm-smmu-v3: Add in-kernel support for NVIDIA Tegra241 (Grace) CMDQV Nicolin Chen (11): iommu/arm-smmu-v3: Issue a batch of commands to the same cmdq iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_build_sync_cmd iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_init iommu/arm-smmu-v3: Make symbols public for CONFIG_TEGRA241_CMDQV iommu/arm-smmu-v3: Add ARM_SMMU_OPT_TEGRA241_CMDQV iommu/arm-smmu-v3: Add acpi_smmu_iort_probe_model for impl iommu/arm-smmu-v3: Start a new batch if new command is not supported iommu/tegra241-cmdqv: Limit CMDs for VCMDQs of a guest owned VINTF iommu/tegra241-cmdqv: Fix -Wformat-truncation warnings in lvcmdq_error_header iommu/tegra241-cmdqv: Drop static at local variable iommu/tegra241-cmdqv: Do not allocate vcmdq until dma_set_mask_and_coherent Nikunj Kela (1): dt-bindings: arm-smmu: document the support on SA8255p Rob Clark (1): iommu/arm-smmu: Un-demote unhandled-fault msg Will Deacon (1): Merge branch 'for-joerg/arm-smmu/bindings' into for-joerg/arm-smmu/updates Zhang Zekun (1): iommu/arm-smmu-v3: Remove the unused empty definition Zhenhua Huang (1): dt-bindings: arm-smmu: Add compatible for QCS8300 SoC .../devicetree/bindings/iommu/arm,smmu.yaml | 5 + MAINTAINERS | 1 + drivers/iommu/Kconfig | 11 + drivers/iommu/arm/arm-smmu-v3/Makefile | 1 + drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-test.c | 83 +- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 576 +++++++------ drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 137 +++- drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 909 +++++++++++++++++++++ drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 28 + drivers/iommu/arm/arm-smmu/arm-smmu.c | 2 +- 10 files changed, 1463 insertions(+), 290 deletions(-) create mode 100644 drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c . Date: Thu, 12 Sep 2024 17:22:01 +0200 From: David Sterba To: torvalds@linux-foundation.org Cc: David Sterba , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] AFFS updates for 6.12 Hi, please pull the following cleanups removing unused code and updating definition of flexible struct array. Thanks. ---------------------------------------------------------------- The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6: Linux 6.11-rc6 (2024-09-01 19:46:02 +1200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/affs-for-6.12-tag for you to fetch changes up to bf751ad062b58d0750a5b9fb77d1400532a0ea44: affs: Replace one-element array with flexible-array member (2024-09-06 17:48:15 +0200) ---------------------------------------------------------------- Thorsten Blum (2): affs: Remove unused macros GET_END_PTR, AFFS_GET_HASHENTRY affs: Replace one-element array with flexible-array member fs/affs/affs.h | 2 -- fs/affs/amigaffs.h | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) . Date: Thu, 12 Sep 2024 09:25:44 -0700 (PDT) From: Palmer Dabbelt To: Linus Torvalds Subject: [GIT PULL] RISC-V Fixes for 6.11-rc8 The following changes since commit 1ff95eb2bebda50c4c5406caaf201e0fcb24cc8f: riscv: Fix RISCV_ALTERNATIVE_EARLY (2024-09-03 07:57:55 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git tags/riscv-for-linus-6.11-rc8 for you to fetch changes up to 7c1e5b9690b0e14acead4ff98d8a6c40f2dff54b: riscv: Disable preemption while handling PR_RISCV_CTX_SW_FENCEI_OFF (2024-09-10 20:38:46 -0700) ---------------------------------------------------------------- RISC-V Fixes for 6.11-rc8 * Two fixes for smp_processor_id() calls in preemptible sections: one if the perf driver, and one in the fence.i prctl. ---------------------------------------------------------------- Alexandre Ghiti (1): drivers: perf: Fix smp_processor_id() use in preemptible code Charlie Jenkins (1): riscv: Disable preemption while handling PR_RISCV_CTX_SW_FENCEI_OFF arch/riscv/mm/cacheflush.c | 12 ++++++------ drivers/perf/riscv_pmu_sbi.c | 7 ++++++- 2 files changed, 12 insertions(+), 7 deletions(-) _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv . Date: Thu, 12 Sep 2024 18:08:02 +0200 From: David Sterba To: torvalds@linux-foundation.org Cc: David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] Btrfs updates for 6.12 Hi, this update brings mostly refactoring, cleanups, minor performance optimizations and usual fixes. The folio API conversions are most noticeable. There's one less visible change that could have a high impact. The extent lock scope for read is reduced, not held for the entire operation. In the buffered read case it's left to page or inode lock, some direct io read synchronization is still needed. This used to prevent deadlocks induced by page faults during direct io, so there was a 4K limitation on the requests, e.g. for io_uring. In the future this will allow smoother integration with iomap where the extent read lock was a major obstacle. Please pull, thanks. User visible changes: - the FSTRIM ioctl updates the processed range even after an error or interruption - cleaner thread is woken up in SYNC ioctl instead of waking the transaction thread that can take some delay before waking up the cleaner, this can speed up cleaning of deleted subvolumes - print an error message when opening a device fail, e.g. when it's unexpectedly read-only Core changes: - improved extent map handling in various ways (locking, iteration, ...) - new assertions and locking annotations - raid-stripe-tree locking fixes - use xarray for tracking dirty qgroup extents, switched from rb-tree - turn the subpage test to compile-time condition if possible (e.g. on x86_64 with 4K pages), this allows to skip a lot of ifs and remove dead code - more preparatory work for compression in subpage mode Cleanups and refactoring - folio API conversions, many simple cases where page is passed so switch it to folios - more subpage code refactoring, update page state bitmap processing - introduce auto free for btrfs_path structure, use for the simple cases ---------------------------------------------------------------- The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/for-6.12-tag for you to fetch changes up to bd610c0937aaf03b2835638ada1fab8b0524c61a: btrfs: only unlock the to-be-submitted ranges inside a folio (2024-09-10 16:51:22 +0200) ---------------------------------------------------------------- Boris Burkov (1): btrfs: add comment about locking in cow_file_range_inline() David Sterba (14): btrfs: rename btrfs_submit_bio() to btrfs_submit_bbio() btrfs: rename __btrfs_submit_bio() and drop double underscores btrfs: rename __extent_writepage() and drop double underscores btrfs: rename __compare_inode_defrag() and drop double underscores btrfs: constify arguments of compare_inode_defrag() btrfs: rename __need_auto_defrag() and drop double underscores btrfs: rename __btrfs_add_inode_defrag() and drop double underscores btrfs: rename __btrfs_run_defrag_inode() and drop double underscores btrfs: clear defragmented inodes using postorder in btrfs_cleanup_defrag_inodes() btrfs: return void from btrfs_add_inode_defrag() btrfs: drop transaction parameter from btrfs_add_inode_defrag() btrfs: always pass readahead state to defrag btrfs: rework BTRFS_I as macro to preserve parameter const btrfs: constify more pointer parameters Filipe Manana (5): btrfs: reduce size and overhead of extent_map_block_end() btrfs: reschedule when updating chunk maps at the end of a device replace btrfs: more efficient chunk map iteration when device replace finishes btrfs: directly wake up cleaner kthread in the BTRFS_IOC_SYNC ioctl btrfs: add and use helper to verify the calling task has locked the inode Johannes Thumshirn (8): btrfs: update stripe extents for existing logical addresses btrfs: update stripe_extent delete loop assumptions btrfs: don't dump stripe-tree on lookup error btrfs: rename btrfs_io_stripe::is_scrub to rst_search_commit_root btrfs: set search_commit_root on stripe io in case of relocation btrfs: don't readahead the relocation inode on RST btrfs: change RST lookup error message level to debug btrfs: reduce chunk_map lookups in btrfs_map_block() Josef Bacik (49): btrfs: convert btrfs_readahead() to only use folio btrfs: convert btrfs_read_folio() to only use a folio btrfs: convert end_page_read() to take a folio btrfs: convert begin_page_folio() to take a folio instead btrfs: convert submit_extent_page() to use a folio btrfs: convert btrfs_do_readpage() to only use a folio btrfs: update the writepage tracepoint to take a folio btrfs: convert __extent_writepage_io() to take a folio btrfs: convert extent_write_locked_range() to use folios btrfs: convert __extent_writepage() to be completely folio based btrfs: convert add_ra_bio_pages() to use only folios btrfs: utilize folio more in btrfs_page_mkwrite() btrfs: convert can_finish_ordered_extent() to use a folio btrfs: convert btrfs_finish_ordered_extent() to take a folio btrfs: convert btrfs_mark_ordered_io_finished() to take a folio btrfs: convert writepage_delalloc() to take a folio btrfs: convert find_lock_delalloc_range() to use a folio btrfs: convert lock_delalloc_pages() to take a folio btrfs: convert __unlock_for_delalloc() to take a folio btrfs: convert __process_pages_contig() to take a folio btrfs: convert process_one_page() to operate only on folios btrfs: convert extent_clear_unlock_delalloc() to take a folio btrfs: convert extent_write_locked_range() to take a folio btrfs: convert run_delalloc_cow() to take a folio btrfs: convert cow_file_range_inline() to take a folio btrfs: convert cow_file_range() to take a folio btrfs: convert fallback_to_cow() to take a folio btrfs: convert run_delalloc_nocow() to take a folio btrfs: convert btrfs_cleanup_ordered_extents() to use folios btrfs: convert btrfs_cleanup_ordered_extents() to take a folio btrfs: convert run_delalloc_compressed() to take a folio btrfs: convert btrfs_run_delalloc_range() to take a folio btrfs: convert struct async_chunk to hold a folio btrfs: convert submit_uncompressed_range() to take a folio btrfs: convert btrfs_writepage_fixup_worker() to use a folio btrfs: convert btrfs_writepage_cow_fixup() to use folio btrfs: convert struct btrfs_writepage_fixup to use a folio btrfs: convert uncompress_inline() to take a folio btrfs: convert read_inline_extent() to use a folio btrfs: convert btrfs_get_extent() to take a folio btrfs: convert __get_extent_map() to take a folio btrfs: convert find_next_dirty_byte() to take a folio btrfs: convert wait_subpage_spinlock() to only use a folio btrfs: convert btrfs_set_range_writeback() to use a folio btrfs: convert insert_inline_extent() to use a folio btrfs: convert extent_range_clear_dirty_for_io() to use a folio btrfs: introduce EXTENT_DIO_LOCKED btrfs: take the dio extent lock during O_DIRECT operations btrfs: do not hold the extent lock for entire read Junchao Sun (2): btrfs: qgroup: use goto style to handle errors in add_delayed_ref() btrfs: qgroup: use xarray to track dirty extents in transaction Leo Martins (3): btrfs: DEFINE_FREE for struct btrfs_path btrfs: use btrfs_path auto free in zoned.c btrfs: BTRFS_PATH_AUTO_FREE in orphan.c Li Zetao (14): btrfs: convert clear_page_extent_mapped() to take a folio btrfs: convert get_next_extent_buffer() to take a folio btrfs: convert try_release_subpage_extent_buffer() to take a folio btrfs: convert try_release_extent_buffer() to take a folio btrfs: convert read_key_bytes() to take a folio btrfs: convert submit_eb_subpage() to take a folio btrfs: convert submit_eb_page() to take a folio btrfs: convert try_release_extent_state() to take a folio btrfs: convert try_release_extent_mapping() to take a folio btrfs: convert zlib_decompress() to take a folio btrfs: convert lzo_decompress() to take a folio btrfs: convert zstd_decompress() to take a folio btrfs: convert btrfs_decompress() to take a folio btrfs: convert copy_inline_to_page() to use folio Li Zhang (1): btrfs: print message on device opening error during mount Luca Stefani (1): btrfs: always update fstrim_range on failure in FITRIM ioctl Qu Wenruo (11): btrfs: move uuid tree related code to uuid-tree.[ch] btrfs: make btrfs_is_subpage() to return false directly for 4K page size btrfs: subpage: fix the bitmap dump which can cause bitmap corruption btrfs: refactor __extent_writepage_io() to do sector-by-sector submission btrfs: remove the nr_ret parameter from __extent_writepage_io() btrfs: subpage: remove btrfs_fs_info::subpage_info member btrfs: merge btrfs_orig_bbio_end_io() into btrfs_bio_end_io() btrfs: make compression path to be subpage compatible btrfs: remove btrfs_folio_end_all_writers() btrfs: merge btrfs_folio_unlock_writer() into btrfs_folio_end_writer_lock() btrfs: only unlock the to-be-submitted ranges inside a folio Thorsten Blum (1): btrfs: send: fix grammar in comments fs/btrfs/backref.c | 6 +- fs/btrfs/bio.c | 54 ++- fs/btrfs/bio.h | 6 +- fs/btrfs/block-group.c | 34 +- fs/btrfs/block-group.h | 11 +- fs/btrfs/block-rsv.c | 2 +- fs/btrfs/block-rsv.h | 2 +- fs/btrfs/btrfs_inode.h | 24 +- fs/btrfs/compression.c | 82 ++-- fs/btrfs/compression.h | 16 +- fs/btrfs/ctree.c | 18 +- fs/btrfs/ctree.h | 11 +- fs/btrfs/defrag.c | 97 ++--- fs/btrfs/defrag.h | 3 +- fs/btrfs/delayed-ref.c | 36 +- fs/btrfs/delayed-ref.h | 4 +- fs/btrfs/dev-replace.c | 43 +- fs/btrfs/direct-io.c | 73 ++-- fs/btrfs/discard.c | 4 +- fs/btrfs/disk-io.c | 16 +- fs/btrfs/extent-io-tree.c | 55 ++- fs/btrfs/extent-io-tree.h | 38 +- fs/btrfs/extent-tree.c | 4 +- fs/btrfs/extent_io.c | 865 +++++++++++++++++---------------------- fs/btrfs/extent_io.h | 12 +- fs/btrfs/extent_map.c | 9 +- fs/btrfs/file-item.c | 4 +- fs/btrfs/file-item.h | 2 +- fs/btrfs/file.c | 26 +- fs/btrfs/fs.h | 2 +- fs/btrfs/inode-item.c | 10 +- fs/btrfs/inode-item.h | 4 +- fs/btrfs/inode.c | 368 +++++++++-------- fs/btrfs/ioctl.c | 11 +- fs/btrfs/lzo.c | 12 +- fs/btrfs/ordered-data.c | 30 +- fs/btrfs/ordered-data.h | 6 +- fs/btrfs/orphan.c | 24 +- fs/btrfs/qgroup.c | 66 ++- fs/btrfs/qgroup.h | 1 - fs/btrfs/raid-stripe-tree.c | 46 ++- fs/btrfs/reflink.c | 35 +- fs/btrfs/relocation.c | 22 +- fs/btrfs/scrub.c | 12 +- fs/btrfs/send.c | 4 +- fs/btrfs/space-info.c | 25 +- fs/btrfs/space-info.h | 10 +- fs/btrfs/subpage.c | 277 ++++++------- fs/btrfs/subpage.h | 60 ++- fs/btrfs/tests/extent-io-tests.c | 10 +- fs/btrfs/transaction.c | 5 +- fs/btrfs/tree-log.c | 2 +- fs/btrfs/tree-mod-log.c | 14 +- fs/btrfs/tree-mod-log.h | 6 +- fs/btrfs/uuid-tree.c | 179 ++++++++ fs/btrfs/uuid-tree.h | 2 + fs/btrfs/verity.c | 20 +- fs/btrfs/volumes.c | 228 ++--------- fs/btrfs/volumes.h | 4 +- fs/btrfs/xattr.c | 2 +- fs/btrfs/zlib.c | 33 +- fs/btrfs/zoned.c | 36 +- fs/btrfs/zoned.h | 4 +- fs/btrfs/zstd.c | 35 +- include/trace/events/btrfs.h | 18 +- 65 files changed, 1583 insertions(+), 1597 deletions(-) . Date: Thu, 12 Sep 2024 20:08:01 +0200 From: "Rafael J. Wysocki" To: Linus Torvalds Cc: Linux PM , Linux Kernel Mailing List , ACPI Devel Maling List Subject: [GIT PULL] Power management updates for v6.12-rc1 Hi Linus, The next week will be all conference travel for me and I'll be traveling in the week after it too, so here's an early request to pull power management updates for 6.12-rc1. To receive them, please pull from the tag git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git \ pm-6.12-rc1 with top-most commit 0a06811d664b8695a7612d3e59c1defb4382f4e0 Merge branches 'pm-sleep', 'pm-opp' and 'pm-tools' on top of commit da3ea35007d0af457a0afc87e84fddaebc4e0b63 Linux 6.11-rc7 By the number of new lines of code, the most visible change here is the addition of hybrid CPU capacity scaling support to the intel_pstate driver. Next are the amd-pstate driver changes related to the calculation of the AMD boost numerator and preferred core detection. As far as new hardware support is concerned, the intel_idle driver will now handle Granite Rapids Xeon processors natively, the intel_rapl power capping driver will recognize family 1Ah of AMD processors and Intel ArrowLake-U chipos, and intel_pstate will handle Granite Rapids and Sierra Forest chips in the out-of-band (OOB) mode. Apart from the above, there is a usual collection of assorted fixes and code cleanups in many places and there are tooling updates. Specifics: - Remove LATENCY_MULTIPLIER from cpufreq (Qais Yousef). - Add support for Granite Rapids and Sierra Forest in OOB mode to the intel_pstate cpufreq driver (Srinivas Pandruvada). - Add basic support for CPU capacity scaling on x86 and make the intel_pstate driver set asymmetric CPU capacity on hybrid systems without SMT (Rafael Wysocki). - Add missing MODULE_DESCRIPTION() macros to the powerpc cpufreq driver (Jeff Johnson). - Several OF related cleanups in cpufreq drivers (Rob Herring). - Enable COMPILE_TEST for ARM drivers (Rob Herring). - Introduce quirks for syscon failures and use socinfo to get revision for TI cpufreq driver (Dhruva Gole, Nishanth Menon). - Minor cleanups in amd-pstate driver (Anastasia Belova, Dhananjay Ugwekar). - Minor cleanups for loongson, cpufreq-dt and powernv cpufreq drivers (Danila Tikhonov, Huacai Chen, and Liu Jing). - Make amd-pstate validate return of any attempt to update EPP limits, which fixes the masking hardware problems (Mario Limonciello). - Move the calculation of the AMD boost numerator outside of amd-pstate, correcting acpi-cpufreq on systems with preferred cores (Mario Limonciello). - Harden preferred core detection in amd-pstate to avoid potential false positives (Mario Limonciello). - Add extra unit test coverage for mode state machine (Mario Limonciello). - Fix an "Uninitialized variables" issue in amd-pstate (Qianqiang Liu). - Add Granite Rapids Xeon support to intel_idle (Artem Bityutskiy). - Disable promotion to C1E on Jasper Lake and Elkhart Lake in intel_idle (Kai-Heng Feng). - Use scoped device node handling to fix missing of_node_put() and simplify walking OF children in the riscv-sbi cpuidle driver (Krzysztof Kozlowski). - Remove dead code from cpuidle_enter_state() (Dhruva Gole). - Change an error pointer to NULL to fix error handling in the intel_rapl power capping driver (Dan Carpenter). - Fix off by one in get_rpi() in the intel_rapl power capping driver (Dan Carpenter). - Add support for ArrowLake-U to the intel_rapl power capping driver (Sumeet Pawnikar). - Fix the energy-pkg event for AMD CPUs in the intel_rapl power capping driver (Dhananjay Ugwekar). - Add support for AMD family 1Ah processors to the intel_rapl power capping driver (Dhananjay Ugwekar). - Remove unused stub for saveable_highmem_page() and remove deprecated macros from power management documentation (Andy Shevchenko). - Use ysfs_emit() and sysfs_emit_at() in "show" functions in the PM sysfs interface (Xueqin Luo). - Update the maintainers information for the operating-points-v2-ti-cpu DT binding (Dhruva Gole). - Drop unnecessary of_match_ptr() from ti-opp-supply (Rob Herring). - Add missing MODULE_DESCRIPTION() macros to devfreq governors (Jeff Johnson). - Use devm_clk_get_enabled() in the exynos-bus devfreq driver (Anand Moon). - Use of_property_present() instead of of_get_property() in the imx-bus devfreq driver (Rob Herring). - Update directory handling and installation process in the pm-graph Makefile and add .gitignore to ignore sleepgraph.py artifacts to pm-graph (Amit Vadhavana, Yo-Jung Lin). - Make cpupower display residency value in idle-info (Aboorva Devarajan). - Add missing powercap_set_enabled() stub function to cpupower (John B. Wyatt IV). - Add SWIG support to cpupower (John B. Wyatt IV). Thanks! --------------- Aboorva Devarajan (1): tools/cpupower: display residency value in idle-info Amit Vadhavana (1): pm-graph: Update directory handling and installation process in Makefile Anand Moon (1): PM / devfreq: exynos: Use Use devm_clk_get_enabled() helpers Anastasia Belova (1): cpufreq: amd-pstate: add check for cpufreq_cpu_get's return value Andy Shevchenko (2): Documentation: PM: Discourage use of deprecated macros PM: hibernate: Remove unused stub for saveable_highmem_page() Artem Bityutskiy (1): intel_idle: add Granite Rapids Xeon support Dan Carpenter (2): powercap: intel_rapl: Fix off by one in get_rpi() powercap: intel_rapl: Change an error pointer to NULL Danila Tikhonov (1): cpufreq: Add SM7325 to cpufreq-dt-platdev blocklist Dhananjay Ugwekar (3): powercap/intel_rapl: Add support for AMD family 1Ah powercap/intel_rapl: Fix the energy-pkg event for AMD CPUs cpufreq/amd-pstate: Add the missing cpufreq_cpu_put() Dhruva Gole (3): cpuidle: remove dead code from cpuidle_enter_state() dt-bindings: opp: operating-points-v2-ti-cpu: Update maintainers cpufreq: ti-cpufreq: Use socinfo to get revision in AM62 family Huacai Chen (1): cpufreq: loongson3: Use raw_smp_processor_id() in do_service_request() Jeff Johnson (2): cpufreq: powerpc: add missing MODULE_DESCRIPTION() macros PM/devfreq: governor: add missing MODULE_DESCRIPTION() macros John B. Wyatt IV (5): pm:cpupower: Add missing powercap_set_enabled() stub function pm:cpupower: Add SWIG bindings files for libcpupower pm:cpupower: Include test_raw_pylibcpupower.py MAINTAINERS: Add Maintainers for SWIG Python bindings pm:cpupower: Add error warning when SWIG is not installed Kai-Heng Feng (1): intel_idle: Disable promotion to C1E on Jasper Lake and Elkhart Lake Krzysztof Kozlowski (2): cpuidle: riscv-sbi: Use scoped device node handling to fix missing of_node_put cpuidle: riscv-sbi: Simplify with scoped for each OF child loop Liu Jing (1): cpufreq: Fix the cacography in powernv-cpufreq.c Mario Limonciello (14): cpufreq/amd-pstate: Catch failures for amd_pstate_epp_update_limit() x86/amd: Move amd_get_highest_perf() from amd.c to cppc.c ACPI: CPPC: Adjust return code for inline functions in !CONFIG_ACPI_CPPC_LIB x86/amd: Rename amd_get_highest_perf() to amd_get_boost_ratio_numerator() ACPI: CPPC: Drop check for non zero perf ratio ACPI: CPPC: Adjust debug messages in amd_set_max_freq_ratio() to warn x86/amd: Move amd_get_highest_perf() out of amd-pstate x86/amd: Detect preferred cores in amd_get_boost_ratio_numerator() cpufreq: amd-pstate: Merge amd_pstate_highest_perf_set() into amd_get_boost_ratio_numerator() cpufreq: amd-pstate: Optimize amd_pstate_update_limits() cpufreq: amd-pstate: Add documentation for `amd_pstate_hw_prefcore` amd-pstate: Add missing documentation for `amd_pstate_prefcore_ranking` cpufreq/amd-pstate: Export symbols for changing modes cpufreq/amd-pstate-ut: Add test case for mode switches Nishanth Menon (1): cpufreq: ti-cpufreq: Introduce quirks to handle syscon fails appropriately Qais Yousef (1): cpufreq: Remove LATENCY_MULTIPLIER Qianqiang Liu (1): cpufreq/amd-pstate-ut: Fix an "Uninitialized variables" issue Rafael J. Wysocki (2): x86/sched: Add basic support for CPU capacity scaling cpufreq: intel_pstate: Set asymmetric CPU capacity on hybrid systems Rob Herring (Arm) (10): cpufreq: Use of_property_present() cpufreq: spear: Use of_property_for_each_u32() instead of open coding cpufreq: qcom: Add explicit io.h include for readl/writel_relaxed cpufreq: omap: Drop asm includes cpufreq: armada-8k: Avoid excessive stack usage opp: ti: Drop unnecessary of_match_ptr() cpufreq: Enable COMPILE_TEST on Arm drivers cpufreq: Drop CONFIG_ARM and CONFIG_ARM64 dependency on Arm drivers cpufreq: Fix warning on unused of_device_id tables for !CONFIG_OF PM / devfreq: imx-bus: Use of_property_present() Srinivas Pandruvada (1): cpufreq: intel_pstate: Support Granite Rapids and Sierra Forest OOB mode Sumeet Pawnikar (1): powercap: intel_rapl: Add support for ArrowLake-U platform Xueqin Luo (2): PM: hibernate: Use sysfs_emit() and sysfs_emit_at() in "show" functions PM: sleep: Use sysfs_emit() and sysfs_emit_at() in "show" functions Yo-Jung (Leo) Lin (1): pm-graph: Make git ignore sleepgraph.py artifacts --------------- Documentation/admin-guide/pm/amd-pstate.rst | 15 +- .../bindings/opp/operating-points-v2-ti-cpu.yaml | 2 +- Documentation/power/pci.rst | 11 +- Documentation/power/runtime_pm.rst | 4 +- MAINTAINERS | 3 + arch/x86/include/asm/processor.h | 3 - arch/x86/include/asm/topology.h | 13 ++ arch/x86/kernel/acpi/cppc.c | 172 +++++++++++++- arch/x86/kernel/cpu/amd.c | 16 -- arch/x86/kernel/cpu/aperfmperf.c | 89 +++++++- drivers/cpufreq/Kconfig | 2 - drivers/cpufreq/Kconfig.arm | 50 +++-- drivers/cpufreq/acpi-cpufreq.c | 12 +- drivers/cpufreq/amd-pstate-ut.c | 41 +++- drivers/cpufreq/amd-pstate.c | 181 ++++++--------- drivers/cpufreq/amd-pstate.h | 14 ++ drivers/cpufreq/apple-soc-cpufreq.c | 2 +- drivers/cpufreq/armada-8k-cpufreq.c | 2 +- drivers/cpufreq/cpufreq-dt-platdev.c | 1 + drivers/cpufreq/cpufreq-dt.c | 11 +- drivers/cpufreq/cpufreq.c | 27 +-- drivers/cpufreq/intel_pstate.c | 240 +++++++++++++++++++- drivers/cpufreq/loongson3_cpufreq.c | 2 +- drivers/cpufreq/maple-cpufreq.c | 1 + drivers/cpufreq/mediatek-cpufreq.c | 2 +- drivers/cpufreq/omap-cpufreq.c | 3 - drivers/cpufreq/pasemi-cpufreq.c | 1 + drivers/cpufreq/pmac64-cpufreq.c | 3 +- drivers/cpufreq/powernv-cpufreq.c | 3 +- drivers/cpufreq/ppc_cbe_cpufreq.c | 1 + drivers/cpufreq/qcom-cpufreq-hw.c | 1 + drivers/cpufreq/qcom-cpufreq-nvmem.c | 2 +- drivers/cpufreq/spear-cpufreq.c | 18 +- drivers/cpufreq/sti-cpufreq.c | 2 +- drivers/cpufreq/sun50i-cpufreq-nvmem.c | 2 +- drivers/cpufreq/ti-cpufreq.c | 31 ++- drivers/cpuidle/cpuidle-riscv-sbi.c | 28 +-- drivers/cpuidle/cpuidle.c | 5 +- drivers/devfreq/exynos-bus.c | 22 +- drivers/devfreq/governor_performance.c | 1 + drivers/devfreq/governor_powersave.c | 1 + drivers/devfreq/governor_simpleondemand.c | 1 + drivers/devfreq/governor_userspace.c | 1 + drivers/devfreq/imx-bus.c | 2 +- drivers/idle/intel_idle.c | 60 ++++- drivers/opp/ti-opp-supply.c | 2 +- drivers/powercap/intel_rapl_common.c | 38 +++- include/acpi/cppc_acpi.h | 41 ++-- include/linux/cpufreq.h | 6 - kernel/power/hibernate.c | 26 ++- kernel/power/main.c | 76 ++++--- kernel/power/snapshot.c | 5 - tools/power/cpupower/bindings/python/.gitignore | 8 + tools/power/cpupower/bindings/python/Makefile | 33 +++ tools/power/cpupower/bindings/python/README | 59 +++++ .../cpupower/bindings/python/raw_pylibcpupower.i | 247 +++++++++++++++++++++ .../bindings/python/test_raw_pylibcpupower.py | 42 ++++ tools/power/cpupower/lib/cpuidle.c | 8 + tools/power/cpupower/lib/cpuidle.h | 2 + tools/power/cpupower/lib/powercap.c | 8 + tools/power/cpupower/utils/cpuidle-info.c | 4 + tools/power/pm-graph/.gitignore | 3 + tools/power/pm-graph/Makefile | 111 +++++---- 63 files changed, 1416 insertions(+), 407 deletions(-) . Date: Thu, 12 Sep 2024 20:10:03 +0200 From: "Rafael J. Wysocki" To: Linus Torvalds Cc: Linux PM , Linux Kernel Mailing List , ACPI Devel Maling List , Daniel Lezcano Subject: [GIT PULL] Thermal control updates for v6.12-rc1 Hi Linus, The next week will be all conference travel for me and I'll be traveling in the week after it too, so here's an early request to pull thermal control updates for 6.12-rc1. To receive them, please pull from the tag git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git \ thermal-6.12-rc1 with top-most commit 3bc5ed15bdc5077d7ee621f44872f550babbea3e Merge tag 'thermal-v6.12-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/thermal/linux into on top of commit c0a1ef9c5be72ff28a5413deb1b3e1a066593c13 thermal: of: Fix OF node leak in of_thermal_zone_find() error paths to receive thermal control updates for 6.12-rc1. These mostly continue to rework the thermal core and the thermal zone driver interface to make the code more straightforward and reduce bloat. The most significant piece of this work is a change of the code related to binding cooling devices to thermal zones which, among other things, replaces two previously existing thermal zone operations with one allowing driver implementations to be much simpler. There is also a new thermal core testing module allowing mock thermal zones to be created and controlled via debugfs in order to exercise the thermal core functionality. It is expected to be used for implementing thermal core self tests in the future. Apart from the above, there are assorted thermal driver updates. Specifics: - Update some thermal drivers to eliminate thermal_zone_get_trip() calls from them and get rid of that function (Rafael Wysocki). - Update the thermal sysfs code to store trip point attributes in trip descriptors and get to trip points via attribute pointers (Rafael Wysocki). - Move the computation of the low and high boundaries for thermal_zone_set_trips() to __thermal_zone_device_update() (Daniel Lezcano). - Introduce a debugfs-based facility for thermal core testing (Rafael Wysocki). - Replace the thermal zone .bind() and .unbind() callbacks for binding cooling devices to thermal zones with one .should_bind() callback used for deciding whether or not a given cooling devices should be bound to a given trip point in a given thermal zone (Rafael Wysocki). - Eliminate code that has no more users after the other changes, drop some redundant checks from the thermal core and clean it up (Rafael Wysocki). - Fix rounding of delay jiffies in the thermal core (Rafael Wysocki). - Refuse to accept trip point temperature or hysteresis that would lead to an invalid threshold value when setting them via sysfs (Rafael Wysocki). - Adjust states of all uninitialized instances in the .manage() callback of the Bang-bang thermal governor (Rafael Wysocki). - Drop a couple of redundant checks along with the code depending on them from the thermal core (Rafael Wysocki). - Rearrange the thermal core to avoid redundant checks and simplify control flow in a couple of code paths (Rafael Wysocki). - Add power domain DT bindings for new Amlogic SoCs (Georges Stark). - Switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr() in the ST driver and add a Kconfig dependency on THERMAL_OF subsystem for the STi driver (Raphael Gallais-Pou). - Simplify the error code path in the probe functions in the brcmstb driver with the help of dev_err_probe() (Yan Zhen). - Make imx_sc_thermal use dev_err_probe() (Alexander Stein). - Remove trailing space after \n newline in the Renesas driver (Colin Ian King). - Add DT binding compatible string for the SA8255p to the tsens thermal driver (Nikunj Kela). - Use the devm_clk_get_enabled() helpers to simplify the init routine in the sprd thermal driver (Huan Yang). - Remove __maybe_unused notations for the functions by using the new RUNTIME_PM_OPS() and SYSTEM_SLEEP_PM_OPS() macros on the IMx and Qoriq drivers (Fabio Estevam) - Remove unused declarations from the ti-soc-thermal driver's header file as the functions in question were removed previously (Zhang Zekun). Thanks! --------------- Alexander Stein (1): thermal/drivers/imx_sc_thermal: Use dev_err_probe Colin Ian King (1): thermal/drivers/renesas: Remove trailing space after \n newline Daniel Lezcano (1): thermal/core: Compute low and high boundaries in thermal_zone_device_update() Fabio Estevam (2): thermal/drivers/qoriq: Remove __maybe_unused notations thermal/drivers/imx: Remove __maybe_unused notations George Stark (1): dt-bindings: thermal: amlogic,thermal: add optional power-domains Huan Yang (1): thermal/drivers/sprd: Use devm_clk_get_enabled() helpers Nikunj Kela (1): dt-bindings: thermal: tsens: document support on SA8255p Rafael J. Wysocki (36): thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe() thermal: hisi: Use thermal_zone_for_each_trip() in hisi_thermal_register_sensor() thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init() thermal: tegra: Introduce struct trip_temps for critical and hot trips thermal: tegra: Use thermal_zone_for_each_trip() for walking trip points thermal: helpers: Drop get_thermal_instance() thermal: trip: Get rid of thermal_zone_get_num_trips() thermal: trip: Drop thermal_zone_get_trip() thermal: core: Store trip sysfs attributes in thermal_trip_desc thermal: sysfs: Get to trips via attribute pointers thermal: sysfs: Refine the handling of trip hysteresis changes thermal: Introduce a debugfs-based testing facility thermal: core: Fold two functions into their respective callers thermal: core: Rearrange checks in thermal_bind_cdev_to_trip() thermal: core: Drop redundant thermal instance checks thermal: sysfs: Use the dev argument in instance-related show/store thermal: core: Move thermal zone locking out of bind/unbind functions thermal: core: Introduce .should_bind() thermal zone callback thermal: ACPI: Use the .should_bind() thermal zone callback thermal: core: Unexport thermal_bind_cdev_to_trip() and thermal_unbind_cdev_from_trip() platform/x86: acerhdf: Use the .should_bind() thermal zone callback mlxsw: core_thermal: Use the .should_bind() thermal zone callback thermal: imx: Use the .should_bind() thermal zone callback thermal/of: Use the .should_bind() thermal zone callback thermal: core: Drop unused bind/unbind functions and callbacks thermal: core: Clean up trip bind/unbind functions thermal: core: Fix rounding of delay jiffies thermal: core: Rename cdev-to-thermal-zone bind/unbind functions thermal: core: Drop redundant checks from thermal_bind_cdev_to_trip() thermal: core: Drop tz field from struct thermal_instance thermal: sysfs: Add sanity checks for trip temperature and hysteresis thermal: gov_bang_bang: Adjust states of all uninitialized instances thermal: core: Drop redundant lockdep_assert_held() thermal: core: Drop dead code from monitor_thermal_zone() thermal: core: Check passive delay in monitor_thermal_zone() thermal: core: Drop thermal_zone_device_is_enabled() Raphael Gallais-Pou (2): thermal/drivers/st: Switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr() thermal/drivers/sti: Depend on THERMAL_OF subsystem Yan Zhen (1): thermal/drivers/brcmstb_thermal: Simplify with dev_err_probe() Zhang Zekun (1): thermal/drivers/ti-soc-thermal: Remove unused declarations --------------- .../bindings/thermal/amlogic,thermal.yaml | 3 + .../devicetree/bindings/thermal/qcom-tsens.yaml | 1 + Documentation/driver-api/thermal/sysfs-api.rst | 68 +-- drivers/acpi/thermal.c | 66 +-- drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | 115 ++--- drivers/platform/x86/acerhdf.c | 33 +- drivers/thermal/Kconfig | 11 +- drivers/thermal/Makefile | 1 + drivers/thermal/broadcom/bcm2835_thermal.c | 7 +- drivers/thermal/broadcom/brcmstb_thermal.c | 15 +- drivers/thermal/gov_bang_bang.c | 14 +- drivers/thermal/hisi_thermal.c | 25 +- drivers/thermal/imx_sc_thermal.c | 3 +- drivers/thermal/imx_thermal.c | 36 +- drivers/thermal/qcom/qcom-spmi-temp-alarm.c | 22 +- drivers/thermal/qoriq_thermal.c | 10 +- drivers/thermal/renesas/rcar_gen3_thermal.c | 6 +- drivers/thermal/renesas/rcar_thermal.c | 2 +- drivers/thermal/sprd_thermal.c | 14 +- drivers/thermal/st/st_thermal.c | 32 +- drivers/thermal/st/st_thermal_memmap.c | 2 +- drivers/thermal/st/stm_thermal.c | 8 +- drivers/thermal/tegra/soctherm.c | 36 +- drivers/thermal/tegra/tegra30-tsensor.c | 57 +-- drivers/thermal/testing/Makefile | 7 + drivers/thermal/testing/command.c | 221 ++++++++++ drivers/thermal/testing/thermal_testing.h | 11 + drivers/thermal/testing/zone.c | 468 +++++++++++++++++++++ drivers/thermal/thermal_core.c | 243 ++++------- drivers/thermal/thermal_core.h | 38 +- drivers/thermal/thermal_helpers.c | 32 +- drivers/thermal/thermal_of.c | 171 ++------ drivers/thermal/thermal_sysfs.c | 222 +++++----- drivers/thermal/thermal_trip.c | 53 +-- drivers/thermal/ti-soc-thermal/ti-bandgap.h | 4 - include/linux/thermal.h | 31 +- 36 files changed, 1160 insertions(+), 928 deletions(-) . Date: Thu, 12 Sep 2024 20:12:54 +0200 From: "Rafael J. Wysocki" To: Linus Torvalds Cc: ACPI Devel Maling List , Linux Kernel Mailing List , Linux PM Subject: [GIT PULL] ACPI updates for v6.12-rc1 Hi Linus, The next week will be all conference travel for me and I'll be traveling in the week after it too, so here's an early request to pull ACPI updates for 6.12-rc1. To receive them, please pull from the tag git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git \ acpi-6.12-rc1 with top-most commit 3dd2fcf496359d2e196acd33e53dc921d6e39cff Merge branches 'acpi-video', 'acpi-resource', 'acpi-pad' and 'acpi-misc' on top of commit da3ea35007d0af457a0afc87e84fddaebc4e0b63 Linux 6.11-rc7 These update the ACPICA code in the kernel to upstream version 20240827, add support for ACPI-based enumeration of interrupt controllers on RISC-V along with some related irqchip updates, clean up the ACPI device object sysfs interface, add some quirks for backlight handling and IRQ overrides, fix assorted issues and clean up code. Specifics: - Check return value in acpi_db_convert_to_package() (Pei Xiao). - Detect FACS and allow setting the waking vector on reduced-hardware ACPI platforms (Jiaqing Zhao). - Allow ACPICA to represent semaphores as integers (Adrien Destugues). - Complete CXL 3.0 CXIMS structures support in ACPICA (Zhang Rui). - Make ACPICA support SPCR version 4 and add RISC-V SBI Subtype to DBG2 (Sia Jee Heng). - Implement the Dword_PCC Resource Descriptor Macro in ACPICA (Jose Marinho). - Correct the typo in struct acpi_mpam_msc_node member (Punit Agrawal). - Implement ACPI_WARNING_ONCE() and ACPI_ERROR_ONCE() and use them to prevent a Stall() violation warning from being printed every time this takes place (Vasily Khoruzhick). - Allow PCC Data Type in MCTP resource (Adam Young). - Fix memory leaks on acpi_ps_get_next_namepath() and acpi_ps_get_next_field() failures (Armin Wolf). - Add support for suppressing leading zeros in hex strings when converting them to integers and update integer-to-hex-string conversions in ACPICA (Armin Wolf). - Add support for Windows 11 22H2 _OSI string (Armin Wolf). - Avoid warning for Dump Functions in ACPICA (Adam Lackorzynski). - Add extended linear address mode to HMAT MSCIS in ACPICA (Dave Jiang). - Handle empty connection_node in iasl (Aleksandrs Vinarskis). - Allow for more flexibility in _DSM args (Saket Dumbre). - Setup for ACPICA release 20240827 (Saket Dumbre). - Add ACPI device enumeration support for interrupt controller probing including taking dependencies into account (Sunil V L). - Implement ACPI-based interrupt controller probing on RISC-V (Sunil V L). - Add ACPI support for AIA in riscv-intc and add ACPI support to riscv-imsic, riscv-aplic, and sifive-plic (Sunil V L). - Do not release locks during operation region accesses in the ACPI EC driver (Rafael Wysocki). - Fix up the _STR handling in the ACPI device object sysfs interface, make it represent the device object attributes as an attribute group and make it rely on driver core functionality for sysfs attribute management (Thomas Wei=C3=9Fschuh). - Extend error messages printed to the kernel log when acpi_evaluate_dsm() fails to include revision and function number (David Wang). - Add a new AMDI0015 platform device ID to the ACPi APD driver for AMD SoCs (Shyam Sundar S K). - Use the driver core for the async probing management in the ACPI battery driver (Thomas Wei=C3=9Fschuh). - Remove redundant initialization of a local variable to NULL from the ACPI battery driver (Ilpo J=C3=A4rvinen). - Remove unneeded check in tps68470_pmic_opregion_probe() (Aleksandr Mishin). - Add support for setting the EPP register through the ACPI CPPC sysfs interface if it is in FFH (Mario Limonciello). - Fix MASK_VAL() usage in the ACPI CPPC library (Cl=C3=A9ment L=C3=A9ger). - Reduce the log level of a per-CPU message about idle states in the ACPI processor driver (Li RongQing). - Fix crash in exit_round_robin() in the ACPI processor aggregator device (PAD) driver (Seiji Nishikawa). - Add force_vendor quirk for Panasonic Toughbook CF-18 in the ACPI backlight driver (Hans de Goede). - Make the DMI checks related to backlight handling on Lenovo Yoga Tab 3 X90F less strict (Hans de Goede). - Enforce native backlight handling on Apple MacbookPro9,2 (Esther Shimanovich). - Add IRQ override quirks for Asus Vivobook Go E1404GAB and MECHREV GM7XG0M, and refine the TongFang GMxXGxx quirk (Li Chen, Tamim Khan, Werner Sembach). - Quirk ASUS ROG M16 to default to S3 sleep (Luke D. Jones). - Define and use symbols for device and class name lengths in the ACPI bus type code and make the code use strscpy() instead of strcpy() in several places (Muhammad Qasim Abdul Majeed). Thanks! --------------- Adam Lackorzynski (1): ACPICA: Avoid warning for Dump Functions Adam Young (1): ACPICA: Allow PCC Data Type in MCTP resource. Adrien Destugues (1): ACPICA: haiku: Fix invalid value used for semaphores Aleksandr Mishin (1): ACPI: PMIC: Remove unneeded check in tps68470_pmic_opregion_probe() Aleksandrs Vinarskis (1): ACPICA: iasl: handle empty connection_node Armin Wolf (6): ACPICA: Fix memory leak if acpi_ps_get_next_namepath() fails ACPICA: Fix memory leak if acpi_ps_get_next_field() fails ACPICA: Allow for suppressing leading zeros when using acpi_ex_convert_to_ascii() ACPICA: Add support for suppressing leading zeros in hex strings ACPICA: Update integer-to-hex-string conversions ACPICA: Add support for Windows 11 22H2 _OSI string Cl=C3=A9ment L=C3=A9ger (1): ACPI: CPPC: Fix MASK_VAL() usage Dave Jiang (1): ACPICA: HMAT: Add extended linear address mode to MSCIS David Wang (1): ACPI: utils: Add rev/func to message when acpi_evaluate_dsm() fails Esther Shimanovich (1): ACPI: video: force native for Apple MacbookPro9,2 Hans de Goede (3): ACPI: video: Make Lenovo Yoga Tab 3 X90F DMI match less strict ACPI: x86: Make Lenovo Yoga Tab 3 X90F DMI match less strict ACPI: video: Add force_vendor quirk for Panasonic Toughbook CF-18 Ilpo J=C3=A4rvinen (1): ACPI: battery: Remove redundant NULL initalizations Jiaqing Zhao (2): ACPICA: Detect FACS in reduced hardware build ACPICA: Allow setting waking vector on reduced hardware platforms Jose Marinho (1): ACPICA: Implement the Dword_PCC Resource Descriptor Macro Li Chen (1): ACPI: resource: Do IRQ override on MECHREV GM7XG0M Li RongQing (1): ACPI: processor: Reduce the log level of a per-CPU message about idle states Luke D. Jones (1): ACPI: PM: Quirk ASUS ROG M16 to default to S3 sleep Mario Limonciello (1): ACPI: CPPC: Add support for setting EPP register in FFH Muhammad Qasim Abdul Majeed (7): ACPI: battery: Use strscpy() instead of strcpy() ACPI: AC: Use strscpy() instead of strcpy() ACPI: PAD: Use strscpy() instead of strcpy() ACPI: acpi_processor: Use strscpy instead() of strcpy() ACPI: battery : Use strscpy() instead of strcpy() ACPI: bus: Define and use symbols for device and class name lengths ACPI: button: Use strscpy() instead of strcpy() Pei Xiao (1): ACPICA: check null return of ACPI_ALLOCATE_ZEROED() in acpi_db_convert_to_package() Punit Agrawal (1): ACPICA: MPAM: Correct the typo in struct acpi_mpam_msc_node member Rafael J. Wysocki (1): ACPI: EC: Do not release locks during operation region accesses Saket Dumbre (2): ACPICA: Allow for more flexibility in _DSM args ACPICA: Setup for ACPICA release 20240827 Seiji Nishikawa (1): ACPI: PAD: fix crash in exit_round_robin() Shyam Sundar S K (1): ACPI: APD: Add AMDI0015 as platform device Sia Jee Heng (2): ACPICA: SPCR: Update the SPCR table to version 4 ACPICA: Headers: Add RISC-V SBI Subtype to DBG2 Sunil V L (17): arm64: PCI: Migrate ACPI related functions to pci-acpi.c ACPI: scan: Add a weak arch_sort_irqchip_probe() to order the IRQCHIP probe ACPI: bus: Add acpi_riscv_init() function ACPI: scan: Refactor dependency creation ACPI: scan: Add RISC-V interrupt controllers to honor list ACPI: scan: Define weak function to populate dependencies ACPI: bus: Add RINTC IRQ model for RISC-V ACPI: pci_link: Clear the dependencies after probe ACPI: RISC-V: Implement PCI related functionality ACPI: RISC-V: Implement function to reorder irqchip probe entries ACPI: RISC-V: Initialize GSI mapping structures ACPI: RISC-V: Implement function to add implicit dependencies irqchip/riscv-intc: Add ACPI support for AIA irqchip/riscv-imsic-state: Create separate function for DT irqchip/riscv-imsic: Add ACPI support irqchip/riscv-aplic: Add ACPI support irqchip/sifive-plic: Add ACPI support Tamim Khan (1): ACPI: resource: Skip IRQ override on Asus Vivobook Go E1404GAB Thomas Wei=C3=9Fschuh (6): ACPI: sysfs: validate return type of _STR method ACPI: sysfs: evaluate _STR on each sysfs access ACPI: sysfs: manage attributes as attribute_group ACPI: sysfs: manage sysfs attributes through device core ACPI: sysfs: remove return value of acpi_device_setup_files() ACPI: battery: use driver core managed async probing Vasily Khoruzhick (2): ACPICA: Implement ACPI_WARNING_ONCE and ACPI_ERROR_ONCE ACPICA: executer/exsystem: Don't nag user about every Stall() violating the spec Werner Sembach (1): ACPI: resource: Add another DMI match for the TongFang GMxXGxx Zhang Rui (1): ACPICA: Complete CXL 3.0 CXIMS structures --------------- arch/arm64/kernel/pci.c | 191 ---------------- arch/riscv/Kconfig | 2 + arch/riscv/include/asm/irq.h | 55 +++++ arch/riscv/kernel/acpi.c | 31 ++- drivers/acpi/ac.c | 4 +- drivers/acpi/acpi_apd.c | 6 + drivers/acpi/acpi_pad.c | 10 +- drivers/acpi/acpi_processor.c | 6 +- drivers/acpi/acpica/acglobal.h | 6 +- drivers/acpi/acpica/aclocal.h | 2 + drivers/acpi/acpica/acpredef.h | 2 +- drivers/acpi/acpica/dbconvert.c | 2 + drivers/acpi/acpica/exconvrt.c | 58 ++++- drivers/acpi/acpica/exprep.c | 3 + drivers/acpi/acpica/exsystem.c | 11 +- drivers/acpi/acpica/hwxfsleep.c | 15 +- drivers/acpi/acpica/psargs.c | 47 ++++ drivers/acpi/acpica/rsaddr.c | 3 +- drivers/acpi/acpica/rsdump.c | 2 + drivers/acpi/acpica/tbutils.c | 2 - drivers/acpi/acpica/utdelete.c | 4 +- drivers/acpi/acpica/utinit.c | 2 +- drivers/acpi/acpica/utosi.c | 1 + drivers/acpi/acpica/utxfinit.c | 24 +-- drivers/acpi/battery.c | 39 +--- drivers/acpi/bus.c | 4 + drivers/acpi/button.c | 6 +- drivers/acpi/cppc_acpi.c | 53 ++++- drivers/acpi/device_sysfs.c | 196 ++++++++--------- drivers/acpi/ec.c | 55 ++++- drivers/acpi/internal.h | 3 +- drivers/acpi/pci_link.c | 2 + drivers/acpi/pmic/tps68470_pmic.c | 6 +- drivers/acpi/resource.c | 19 ++ drivers/acpi/riscv/Makefile | 2 +- drivers/acpi/riscv/init.c | 13 ++ drivers/acpi/riscv/init.h | 4 + drivers/acpi/riscv/irq.c | 335 +++++++++++++++++++++++++= ++++ drivers/acpi/scan.c | 109 ++++++---- drivers/acpi/sleep.c | 14 ++ drivers/acpi/utils.c | 3 +- drivers/acpi/video_detect.c | 17 +- drivers/acpi/x86/utils.c | 1 - drivers/irqchip/irq-riscv-aplic-direct.c | 22 +- drivers/irqchip/irq-riscv-aplic-main.c | 71 +++--- drivers/irqchip/irq-riscv-aplic-main.h | 1 + drivers/irqchip/irq-riscv-aplic-msi.c | 9 +- drivers/irqchip/irq-riscv-imsic-early.c | 64 +++++- drivers/irqchip/irq-riscv-imsic-platform.c | 32 ++- drivers/irqchip/irq-riscv-imsic-state.c | 150 +++++++------ drivers/irqchip/irq-riscv-imsic-state.h | 2 +- drivers/irqchip/irq-riscv-intc.c | 90 ++++++++ drivers/irqchip/irq-sifive-plic.c | 99 +++++++-- drivers/pci/pci-acpi.c | 182 ++++++++++++++++ include/acpi/acconfig.h | 1 - include/acpi/acoutput.h | 5 + include/acpi/acpi_bus.h | 9 +- include/acpi/acpixf.h | 10 +- include/acpi/actbl1.h | 10 +- include/acpi/actbl2.h | 2 +- include/acpi/actbl3.h | 12 +- include/acpi/actypes.h | 1 + include/acpi/cppc_acpi.h | 2 + include/acpi/platform/acenv.h | 6 + include/linux/acpi.h | 9 + include/linux/irqchip/riscv-imsic.h | 9 + 66 files changed, 1561 insertions(+), 607 deletions(-) . Date: Thu, 12 Sep 2024 08:58:50 -1000 From: Tejun Heo To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, Lai Jiangshan Subject: [GIT PULL] workqueue: Fixes for v6.11-rc7 The following changes since commit c4c8f369b6a6d21ce27286de1501137771e01dc3: workqueue: Correct declaration of cpu_pwq in struct workqueue_struct (2024-08-05 18:34:02 -1000) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git/ tags/wq-for-6.11-rc7-fixes for you to fetch changes up to 73613840a8896f4f859eea489cb4a7a656939e70: workqueue: Clear worker->pool in the worker thread context (2024-09-11 19:58:20 -1000) ---------------------------------------------------------------- workqueue: Fixes for v6.11-rc7 Contains the fix for a NULL worker->pool deref bug which can be triggered when a worker is created and then destroyed immediately. ---------------------------------------------------------------- Lai Jiangshan (1): workqueue: Clear worker->pool in the worker thread context kernel/workqueue.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) -- tejun . Date: Thu, 12 Sep 2024 10:56:31 -1000 From: Tejun Heo To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, Waiman Long , Zefan Li , Johannes Weiner , Michal =?iso-8859-1?Q?Koutn=FD?= Subject: [GIT PULL] cgroup: Changes for v6.12 The following changes since commit ff0ce721ec213499ec5a532041fb3a1db2dc5ecb: cgroup/cpuset: Eliminate unncessary sched domains rebuilds in hotplug (2024-08-05 10:54:25 -1000) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git/ tags/cgroup-for-6.12 for you to fetch changes up to af000ce85293b8e608f696f0c6c280bc3a75887f: cgroup: Do not report unavailable v1 controllers in /proc/cgroups (2024-09-10 10:04:28 -1000) ---------------------------------------------------------------- cgroup: Changes for v6.12 - cpuset isolation improvements. - cpuset cgroup1 support is split into its own file behind the new config option CONFIG_CPUSET_V1. This makes it the second controller which makes cgroup1 support optional after memcg. - Handling of unavailable v1 controller handling improved during cgroup1 mount operations. - union_find applied to cpuset. It makes code simpler and more efficient. - Reduce spurious events in pids.events. - Cleanups and other misc changes. - Contains a merge of cgroup/for-6.11-fixes to receive cpuset fixes that further changes build upon. ---------------------------------------------------------------- Chen Ridong (18): cgroup/cpuset: remove child_ecpus_count cgroup/cpuset: add decrease attach_in_progress helpers cgroup: update some statememt about delegation cgroup/cpuset: Correct invalid remote parition prs cgroup/cpuset: remove fetch_xcpus cgroup/cpuset: remove use_parent_ecpus of cpuset cgroup/cpuset: introduce cpuset-v1.c cgroup/cpuset: move common code to cpuset-internal.h cgroup/cpuset: move memory_pressure to cpuset-v1.c cgroup/cpuset: move relax_domain_level to cpuset-v1.c cgroup/cpuset: move memory_spread to cpuset-v1.c cgroup/cpuset: add callback_lock helper cgroup/cpuset: move legacy hotplug update to cpuset-v1.c cgroup/cpuset: move validate_change_legacy to cpuset-v1.c cgroup/cpuset: move v1 interfaces to cpuset-v1.c cgroup/cpuset: rename functions shared between v1 and v2 cgroup/cpuset: guard cpuset-v1 code under CONFIG_CPUSETS_V1 cgroup/cpuset: add sefltest for cpuset v1 Michal Koutný (3): cgroup/cpuset: Expose cpuset filesystem with cpuset v1 only cgroup: Disallow mounting v1 hierarchies without controller implementation cgroup: Do not report unavailable v1 controllers in /proc/cgroups Tejun Heo (1): Merge branch 'cgroup/for-6.11-fixes' into cgroup/for-6.12 Waiman Long (7): cgroup: Show # of subsystem CSSes in cgroup.stat cgroup/cpuset: Check for partition roots with overlapping CPUs selftest/cgroup: Add new test cases to test_cpuset_prs.sh cgroup: Fix incorrect WARN_ON_ONCE() in css_release_work_fn() cgroup/cpuset: Account for boot time isolated CPUs selftest/cgroup: Make test_cpuset_prs.sh deal with pre-isolated CPUs cgroup/cpuset: Move cpu.h include to cpuset-internal.h Xavier (3): Union-Find: add a new module in kernel library cpuset: use Union-Find to optimize the merging of cpumasks Documentation: Fix the compilation errors in union_find.rst Xiu Jianfeng (3): cgroup/pids: Avoid spurious event notification cgroup/cpuset: Remove cpuset_slab_spread_rotor cgroup/pids: Remove unreachable paths of pids_{can,cancel}_fork Documentation/admin-guide/cgroup-v2.rst | 22 +- Documentation/core-api/index.rst | 1 + Documentation/core-api/union_find.rst | 106 ++ .../translations/zh_CN/core-api/index.rst | 1 + .../translations/zh_CN/core-api/union_find.rst | 92 ++ MAINTAINERS | 12 + include/linux/cgroup-defs.h | 14 + include/linux/cpuset.h | 10 +- include/linux/sched.h | 1 - include/linux/union_find.h | 41 + init/Kconfig | 13 + kernel/cgroup/Makefile | 1 + kernel/cgroup/cgroup-v1.c | 17 +- kernel/cgroup/cgroup.c | 68 +- kernel/cgroup/cpuset-internal.h | 305 ++++++ kernel/cgroup/cpuset-v1.c | 562 ++++++++++ kernel/cgroup/cpuset.c | 1155 +++----------------- kernel/cgroup/pids.c | 32 +- kernel/fork.c | 1 - lib/Makefile | 2 +- lib/union_find.c | 49 + tools/testing/selftests/cgroup/test_cpuset_prs.sh | 56 +- .../selftests/cgroup/test_cpuset_v1_base.sh | 77 ++ 23 files changed, 1569 insertions(+), 1069 deletions(-) create mode 100644 Documentation/core-api/union_find.rst create mode 100644 Documentation/translations/zh_CN/core-api/union_find.rst create mode 100644 include/linux/union_find.h create mode 100644 kernel/cgroup/cpuset-internal.h create mode 100644 kernel/cgroup/cpuset-v1.c create mode 100644 lib/union_find.c create mode 100755 tools/testing/selftests/cgroup/test_cpuset_v1_base.sh -- tejun . Date: Thu, 12 Sep 2024 14:02:15 -0700 From: Guenter Roeck To: Linus Torvalds Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] hwmon fixes for v6.11-rc8 Hi Linus, Please pull hwmon fixes for Linux v6.11-rc8 from signed tag: git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-for-v6.11-rc8 Thanks, Guenter ------ The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git tags/hwmon-for-v6.11-rc8 for you to fetch changes up to 20471071f198c8626dbe3951ac9834055b387844: hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2 (2024-09-09 10:58:09 -0700) ---------------------------------------------------------------- hwmon fixes for v6.11-rc8/v6.11 - Fix clearing status register bits for chips supporting older PMBus versions ---------------------------------------------------------------- Patryk Biel (1): hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2 drivers/hwmon/pmbus/pmbus.h | 6 ++++++ drivers/hwmon/pmbus/pmbus_core.c | 17 ++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) . Date: Thu, 12 Sep 2024 13:29:22 -1000 From: Tejun Heo To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, Lai Jiangshan Subject: [GIT PULL] workqueue: Changes for v6.12 The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git/ tags/wq-for-6.12 for you to fetch changes up to b4722b8593b8815785bbadf87f13c88e89a0ebef: kernel/workqueue.c: fix DEFINE_PER_CPU_SHARED_ALIGNED expansion (2024-09-11 08:10:44 -1000) ---------------------------------------------------------------- workqueue: Changes for v6.12 Nothing major: - workqueue.panic_on_stall boot param added. - alloc_workqueue_lockdep_map() added (used by DRM). - Other cleanusp and doc updates. ---------------------------------------------------------------- Baoquan He (1): kernel/workqueue.c: fix DEFINE_PER_CPU_SHARED_ALIGNED expansion Matthew Brost (4): workqueue: Split alloc_workqueue into internal function and lockdep init workqueue: Change workqueue lockdep map to pointer workqueue: Add interface for user-defined workqueue lockdep map workqueue: Don't call va_start / va_end twice Sangmoon Kim (2): workqueue: add cmdline parameter workqueue.panic_on_stall Documentation: kernel-parameters: add workqueue.panic_on_stall Sergey Senozhatsky (1): workqueue: fix null-ptr-deref on __alloc_workqueue() error Tejun Heo (2): workqueue: Fix htmldocs build warning workqueue: Fix another htmldocs build warning Documentation/admin-guide/kernel-parameters.txt | 7 ++ include/linux/workqueue.h | 41 +++++++++ kernel/workqueue.c | 107 ++++++++++++++++++------ 3 files changed, 130 insertions(+), 25 deletions(-) -- tejun . Date: Thu, 12 Sep 2024 16:31:47 -0700 From: Stephen Boyd To: Linus Torvalds Cc: Michael Turquette , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] clk fixes for v6.11-rc7 The following changes since commit 71c03a8cb213d267853e0d9f520c972480960544: clk: qcom: gcc-sc8280xp: don't use parking clk_ops for QUPs (2024-09-03 13:01:34 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git tags/clk-fixes-for-linus for you to fetch changes up to a4d89b11aca3ffa73e234f06685261ce85e5fb41: clk: qcom: clk-alpha-pll: Simplify the zonda_pll_adjust_l_val() (2024-09-09 14:06:07 -0700) ---------------------------------------------------------------- One build fix for 32-bit arches using the Qualcomm PLL driver. It's cheaper to use a comparison here instead of a division so we just do that to fix the build. ---------------------------------------------------------------- Satya Priya Kakitapalli (1): clk: qcom: clk-alpha-pll: Simplify the zonda_pll_adjust_l_val() drivers/clk/qcom/clk-alpha-pll.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) -- https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git/ https://git.kernel.org/pub/scm/linux/kernel/git/sboyd/spmi.git . Date: Thu, 12 Sep 2024 21:15:46 -0400 From: Paul Moore To: Linus Torvalds Cc: audit@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] audit/audit-pr-20240911 Linus, Two audit patches for the v6.12 merge window: * Fix some remaining problems with PID/TGID reporting When most users think about PIDs, what they are really thinking about is the TGID. This commit shifts the audit PID logging and filtering to use the TGID value which should provide a more meaningful audit stream and filtering experience for users. * Migrate to the str_enabled_disabled() helper Evidently we have helper functions that help ensure if we mistype "enabled" or "disabled" it is now caught at compile time. I guess we're fancy now. -Paul -- The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git tags/audit-pr-20240911 for you to fetch changes up to 8c1867a2f0fd4235b84da6b204519e830b551988: audit: Make use of str_enabled_disabled() helper (2024-09-03 16:35:16 -0400) ---------------------------------------------------------------- audit/stable-6.12 PR 20240911 ---------------------------------------------------------------- Hongbo Li (1): audit: Make use of str_enabled_disabled() helper Ricardo Robaina (1): audit: use task_tgid_nr() instead of task_pid_nr() kernel/audit.c | 4 ++-- kernel/auditfilter.c | 2 +- kernel/auditsc.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) -- paul-moore.com . Date: Thu, 12 Sep 2024 21:18:33 -0400 From: Paul Moore To: Linus Torvalds Cc: selinux@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] selinux/selinux-pr-20240911 Linus, A number of small SELinux patches for the v6.12 merge window: * Ensure that both IPv4 and IPv6 connections are properly initialized While we always properly initialized IPv4 connections early in their life, we missed the necessary IPv6 change when we were adding IPv6 support. * Annotate the SELinux inode revalidation function to quiet KCSAN KCSAN correctly identifyies a race in __inode_security_revalidate() when we check to see if an inode's SELinux has been properly initialized. While KCSAN is correct, it is an intentional choice made for performance reasons; if necessary, we check the state a second time, this time with a lock held, before initializing the inode's state. * Code cleanups, simplification, etc. A handful of individual patches to simplify some SELinux kernel logic, improve return code granularity via ERR_PTR(), follow the guidance on using KMEM_CACHE(), and correct some minor style problems. -Paul -- The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git tags/selinux-pr-20240911 for you to fetch changes up to d19a9e25a722d629041ac8fd320a86c016e349d1: selinux: fix style problems in security/selinux/include/audit.h (2024-09-03 18:54:38 -0400) ---------------------------------------------------------------- selinux/stable-6.12 PR 20240911 ---------------------------------------------------------------- Canfeng Guo (1): selinux: Streamline type determination in security_compute_sid Eric Suen (1): selinux: replace kmem_cache_create() with KMEM_CACHE() Gaosheng Cui (1): selinux: refactor code to return ERR_PTR in selinux_netlbl_sock_genattr Guido Trentalancia (1): selinux: mark both IPv4 and IPv6 accepted connection sockets as labeled Paul Moore (1): selinux: fix style problems in security/selinux/include/audit.h Stephen Smalley (1): selinux: annotate false positive data race to avoid KCSAN warnings Zhen Lei (1): selinux: simplify avc_xperms_audit_required() security/selinux/avc.c | 20 ++++--------- security/selinux/hooks.c | 7 ++++ security/selinux/include/audit.h | 46 +++++++++++++++---------------- security/selinux/netlabel.c | 20 ++++++------- security/selinux/ss/avtab.c | 7 +--- security/selinux/ss/ebitmap.c | 4 -- security/selinux/ss/hashtab.c | 4 -- security/selinux/ss/services.c | 36 ++++++++++++------------ 8 files changed, 68 insertions(+), 76 deletions(-) -- paul-moore.com . Date: Thu, 12 Sep 2024 15:23:59 -1000 From: Tejun Heo To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, David Vernet , Ingo Molnar , Peter Zijlstra , Alexei Starovoitov Subject: [GIT PULL] sched_ext: Initial pull request for v6.12 The following changes since commit bc9057da1a220ff2cb6c8885fd5352558aceba2c: sched/cpufreq: Use NSEC_PER_MSEC for deadline task (2024-09-11 11:25:22 +0200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git/ tags/sched_ext-for-6.12 for you to fetch changes up to 902d67a2d40f5b0815f4f627b26d91f96cc51fb3: sched: Move update_other_load_avgs() to kernel/sched/pelt.c (2024-09-11 20:00:21 -1000) ---------------------------------------------------------------- sched_ext: Initial pull request for v6.12 This is the initial pull request of sched_ext. The v7 patchset (https://lkml.kernel.org/r/20240618212056.2833381-1-tj@kernel.org) is applied on top of tip/sched/core + bpf/master as of Jun 18th. tip/sched/core 793a62823d1c ("sched/core: Drop spinlocks on contention iff kernel is preempti ble") bpf/master f6afdaf72af7 ("Merge branch 'bpf-support-resilient-split-btf'") Since then, the following pulls were made: - v6.11-rc1 is pulled to keep up with the mainline. - tip/sched/core was pulled several times: - 7b9f6c864a34, 0df340ceae2e, 5ac998574f93, 0b1777f0fa04: To resolve conflicts. See each commit for details on conflicts and their resolutions. - d7b01aef9dbd: To receive fd03c5b85855 ("sched: Rework pick_next_task()") and related commits. @prev in added to sched_class->put_prev_task() and put_prev_task() is reordered after ->pick_task(), which makes sched_class->switch_class() unnecessary. The follow-up commits update sched_ext accordingly and drop sched_class->switch_class(). - bpf/master was pulled to receive baebe9aaba1e ("bpf: allow passing struct bpf_iter_ as kfunc arguments") and related changes in preparation for the DSQ iterator patchset To obtain the net sched_ext changes, diff against: git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git for-6.12-base which is the merge of: tip/sched/core bc9057da1a22 ("sched/cpufreq: Use NSEC_PER_MSEC for deadline task") bpf/master 2ad6d23f465 ("selftests/bpf: Do not update vmlinux.h unnecessarily") Since the v7 patchset, the following changes were made: - cpuperf support which was a part of the v6 patchset was posted separately and then applied after reviews. - cgroup support which was a part of the v6 patchset was posted seprately, iterated and then applied. - Improve integration with sched core. - Double locking usage in migration paths dropped. Depend on TASK_ON_RQ_MIGRATING synchronization instead. - The BPF scheduler couldn't directly dispatch to the local DSQ of another CPU using a SCX_DSQ_LOCAL_ON verdict. This caused difficulties around handling non-wakeup enqueues. Updated so that SCX_DSQ_LOCAL_ON can be used in the enqueue path too. - DSQ iterator which was a part of the v6 patchset was posted separately. The iterator itself was applied after a couple revisions. The associated selective consumption kfunc can use further improvements and is still being worked on. - scx_bpf_dispatch[_vtime]_from_dsq() added to increase flexibility. A task can now be transferred between two DSQs from almost any context. This involved significant refactoring of migration code. - Various fixes and improvements. As the branch is based on top of tip/sched/core + bpf/master, please merge after both are applied. ---------------------------------------------------------------- Aboorva Devarajan (1): sched_ext: Documentation: Remove mentions of scx_bpf_switch_all Andrea Righi (2): sched_ext: fix typo in set_weight() description sched_ext: add CONFIG_DEBUG_INFO_BTF dependency Colin Ian King (1): sched_ext: Fix spelling mistake: "intead" -> "instead" David Vernet (8): sched_ext: Implement runnable task stall watchdog sched_ext: Print sched_ext info when dumping stack sched_ext: Implement SCX_KICK_WAIT sched_ext: Implement sched_ext_ops.cpu_acquire/release() sched_ext: Add selftests sched_ext: Make scx_bpf_cpuperf_set() @cpu arg signed scx: Allow calling sleepable kfuncs from BPF_PROG_TYPE_SYSCALL scx/selftests: Verify we can call create_dsq from prog_run Hongyan Xia (1): sched/ext: Add BPF function to fetch rq Jiapeng Chong (1): sched_ext: Fixes incorrect type in bpf_scx_init() Manu Bretelle (1): sched_ext: define missing cfi stubs for sched_ext Tejun Heo (102): Merge branch 'bpf/for-next' into sched_ext-base sched: Restructure sched_class order sanity checks in sched_init() sched: Allow sched_cgroup_fork() to fail and introduce sched_cancel_fork() sched: Add sched_class->reweight_task() sched: Add sched_class->switching_to() and expose check_class_changing/changed() sched: Factor out cgroup weight conversion functions sched: Factor out update_other_load_avgs() from __update_blocked_others() sched: Add normal_policy() sched_ext: Add boilerplate for extensible scheduler class sched_ext: Implement BPF extensible scheduler class sched_ext: Add scx_simple and scx_example_qmap example schedulers sched_ext: Add sysrq-S which disables the BPF scheduler sched_ext: Allow BPF schedulers to disallow specific tasks from joining SCHED_EXT sched_ext: Print debug dump after an error exit tools/sched_ext: Add scx_show_state.py sched_ext: Implement scx_bpf_kick_cpu() and task preemption support sched_ext: Add a central scheduler which makes all scheduling decisions on one CPU sched_ext: Make watchdog handle ops.dispatch() looping stall sched_ext: Add task state tracking operations sched_ext: Implement tickless support sched_ext: Track tasks that are subjects of the in-flight SCX operation sched_ext: Implement sched_ext_ops.cpu_online/offline() sched_ext: Bypass BPF scheduler while PM events are in progress sched_ext: Implement core-sched support sched_ext: Add vtime-ordered priority queue to dispatch_q's sched_ext: Documentation: scheduler: Document extensible scheduler class sched, sched_ext: Replace scx_next_task_picked() with sched_class->switch_class() cpufreq_schedutil: Refactor sugov_cpu_is_busy() sched_ext: Add cpuperf support sched_ext: Drop tools_clean target from the top-level Makefile sched_ext: Swap argument positions in kcalloc() call to avoid compiler warning Merge branch 'sched/core' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into for-6.11 sched, sched_ext: Simplify dl_prio() case handling in sched_fork() sched_ext: Account for idle policy when setting p->scx.weight in scx_ops_enable_task() sched_ext: Disallow loading BPF scheduler if isolcpus= domain isolation is in effect sched_ext: Minor cleanups in kernel/sched/ext.h sched, sched_ext: Open code for_balance_class_range() sched, sched_ext: Move some declarations from kernel/sched/ext.h to sched.h sched_ext: Take out ->priq and ->flags from scx_dsq_node sched_ext: Implement DSQ iterator sched_ext/scx_qmap: Add an example usage of DSQ iterator sched_ext: Reimplement scx_bpf_reenqueue_local() sched_ext: Make scx_bpf_reenqueue_local() skip tasks that are being migrated sched: Move struct balance_callback definition upward sched_ext: Open-code task_linked_on_dsq() sched_ext: Unpin and repin rq lock from balance_scx() sched_ext: s/SCX_RQ_BALANCING/SCX_RQ_IN_BALANCE/ and add SCX_RQ_IN_WAKEUP sched_ext: Allow SCX_DSQ_LOCAL_ON for direct dispatches sched_ext/scx_qmap: Pick idle CPU for direct dispatch on !wakeup enqueues Merge tag 'v6.11-rc1' into for-6.12 sched_ext: Build fix on !CONFIG_STACKTRACE[_SUPPORT] sched_ext: Allow p->scx.disallow only while loading Merge branch 'sched/core' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into for-6.12 sched_ext: Simplify scx_can_stop_tick() invocation in sched_can_stop_tick() sched_ext: Add scx_enabled() test to @start_class promotion in put_prev_task_balance() sched_ext: Use update_curr_common() in update_curr_scx() sched_ext: Simplify UP support by enabling sched_class->balance() in UP sched_ext: Improve comment on idle_sched_class exception in scx_task_iter_next_locked() sched_ext: Make task_can_run_on_remote_rq() use common task_allowed_on_cpu() sched_ext: Fix unsafe list iteration in process_ddsp_deferred_locals() sched_ext: Make scx_rq_online() also test cpu_active() in addition to SCX_RQ_ONLINE sched_ext: Improve logging around enable/disable sched_ext: Don't use double locking to migrate tasks across CPUs Merge branch 'tip/sched/core' into for-6.12 scx_central: Fix smatch checker warning sched_ext: Add missing cfi stub for ops.tick sched_ext: Use task_can_run_on_remote_rq() test in dispatch_to_local_dsq() sched_ext: Use sched_clock_cpu() instead of rq_clock_task() in touch_core_sched() Merge branch 'tip/sched/core' into for-6.12 sched_ext: Don't call put_prev_task_scx() before picking the next task sched_ext: Replace SCX_TASK_BAL_KEEP with SCX_RQ_BAL_KEEP sched_ext: Unify regular and core-sched pick task paths sched_ext: Relocate functions in kernel/sched/ext.c sched_ext: Remove switch_class_scx() sched_ext: Remove sched_class->switch_class() sched_ext: TASK_DEAD tasks must be switched out of SCX on ops_disable sched_ext: TASK_DEAD tasks must be switched into SCX on ops_enable sched: Expose css_tg() sched: Make cpu_shares_read_u64() use tg_weight() sched: Introduce CONFIG_GROUP_SCHED_WEIGHT sched_ext: Add cgroup support sched_ext: Add a cgroup scheduler which uses flattened hierarchy Merge branch 'bpf/master' into for-6.12 sched_ext: Temporarily work around pick_task_scx() being called without balance_scx() sched_ext: Add missing static to scx_has_op[] sched_ext: Add missing static to scx_dump_data sched_ext: Rename scx_kfunc_set_sleepable to unlocked and relocate sched_ext: Refactor consume_remote_task() sched_ext: Make find_dsq_for_dispatch() handle SCX_DSQ_LOCAL_ON sched_ext: Fix processs_ddsp_deferred_locals() by unifying DTL_INVALID handling sched_ext: Restructure dispatch_to_local_dsq() sched_ext: Reorder args for consume_local/remote_task() sched_ext: Move sanity check and dsq_mod_nr() into task_unlink_from_dsq() sched_ext: Move consume_local_task() upward sched_ext: Replace consume_local_task() with move_local_task_to_local_dsq() sched_ext: Compact struct bpf_iter_scx_dsq_kern sched_ext: Implement scx_bpf_dispatch[_vtime]_from_dsq() scx_qmap: Implement highpri boosting sched_ext: Synchronize bypass state changes with rq lock sched_ext: Don't trigger ops.quiescent/runnable() on migrations Merge branch 'tip/sched/core' into sched_ext/for-6.12 sched: Move update_other_load_avgs() to kernel/sched/pelt.c Yipeng Zou (1): sched_ext: Allow dequeue_task_scx to fail Documentation/scheduler/index.rst | 1 Documentation/scheduler/sched-ext.rst | 316 MAINTAINERS | 13 drivers/tty/sysrq.c | 1 include/asm-generic/vmlinux.lds.h | 1 include/linux/cgroup.h | 4 include/linux/sched.h | 5 include/linux/sched/ext.h | 215 include/linux/sched/task.h | 8 include/trace/events/sched_ext.h | 32 include/uapi/linux/sched.h | 1 init/Kconfig | 10 init/init_task.c | 12 kernel/Kconfig.preempt | 27 kernel/fork.c | 17 kernel/sched/build_policy.c | 11 kernel/sched/core.c | 281 kernel/sched/cpufreq_schedutil.c | 50 kernel/sched/debug.c | 3 kernel/sched/ext.c | 7173 +++++++++++++++++++ kernel/sched/ext.h | 91 kernel/sched/fair.c | 23 kernel/sched/idle.c | 2 kernel/sched/pelt.c | 20 kernel/sched/pelt.h | 1 kernel/sched/sched.h | 190 kernel/sched/syscalls.c | 7 lib/dump_stack.c | 1 tools/Makefile | 10 tools/sched_ext/.gitignore | 2 tools/sched_ext/Makefile | 246 tools/sched_ext/README.md | 270 tools/sched_ext/include/bpf-compat/gnu/stubs.h | 11 tools/sched_ext/include/scx/common.bpf.h | 412 + tools/sched_ext/include/scx/common.h | 75 tools/sched_ext/include/scx/compat.bpf.h | 28 tools/sched_ext/include/scx/compat.h | 186 tools/sched_ext/include/scx/user_exit_info.h | 111 tools/sched_ext/scx_central.bpf.c | 361 tools/sched_ext/scx_central.c | 135 tools/sched_ext/scx_flatcg.bpf.c | 949 ++ tools/sched_ext/scx_flatcg.c | 233 tools/sched_ext/scx_flatcg.h | 51 tools/sched_ext/scx_qmap.bpf.c | 827 ++ tools/sched_ext/scx_qmap.c | 153 tools/sched_ext/scx_show_state.py | 39 tools/sched_ext/scx_simple.bpf.c | 156 tools/sched_ext/scx_simple.c | 107 tools/testing/selftests/sched_ext/.gitignore | 6 tools/testing/selftests/sched_ext/Makefile | 218 tools/testing/selftests/sched_ext/config | 9 tools/testing/selftests/sched_ext/create_dsq.bpf.c | 58 tools/testing/selftests/sched_ext/create_dsq.c | 57 tools/testing/selftests/sched_ext/ddsp_bogus_dsq_fail.bpf.c | 42 tools/testing/selftests/sched_ext/ddsp_bogus_dsq_fail.c | 57 tools/testing/selftests/sched_ext/ddsp_vtimelocal_fail.bpf.c | 39 tools/testing/selftests/sched_ext/ddsp_vtimelocal_fail.c | 56 tools/testing/selftests/sched_ext/dsp_local_on.bpf.c | 65 tools/testing/selftests/sched_ext/dsp_local_on.c | 58 tools/testing/selftests/sched_ext/enq_last_no_enq_fails.bpf.c | 21 tools/testing/selftests/sched_ext/enq_last_no_enq_fails.c | 60 tools/testing/selftests/sched_ext/enq_select_cpu_fails.bpf.c | 43 tools/testing/selftests/sched_ext/enq_select_cpu_fails.c | 61 tools/testing/selftests/sched_ext/exit.bpf.c | 84 tools/testing/selftests/sched_ext/exit.c | 55 tools/testing/selftests/sched_ext/exit_test.h | 20 tools/testing/selftests/sched_ext/hotplug.bpf.c | 61 tools/testing/selftests/sched_ext/hotplug.c | 168 tools/testing/selftests/sched_ext/hotplug_test.h | 15 tools/testing/selftests/sched_ext/init_enable_count.bpf.c | 53 tools/testing/selftests/sched_ext/init_enable_count.c | 166 tools/testing/selftests/sched_ext/maximal.bpf.c | 164 tools/testing/selftests/sched_ext/maximal.c | 51 tools/testing/selftests/sched_ext/maybe_null.bpf.c | 36 tools/testing/selftests/sched_ext/maybe_null.c | 49 tools/testing/selftests/sched_ext/maybe_null_fail_dsp.bpf.c | 25 tools/testing/selftests/sched_ext/maybe_null_fail_yld.bpf.c | 28 tools/testing/selftests/sched_ext/minimal.bpf.c | 21 tools/testing/selftests/sched_ext/minimal.c | 58 tools/testing/selftests/sched_ext/prog_run.bpf.c | 33 tools/testing/selftests/sched_ext/prog_run.c | 78 tools/testing/selftests/sched_ext/reload_loop.c | 75 tools/testing/selftests/sched_ext/runner.c | 201 tools/testing/selftests/sched_ext/scx_test.h | 131 tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c | 40 tools/testing/selftests/sched_ext/select_cpu_dfl.c | 72 tools/testing/selftests/sched_ext/select_cpu_dfl_nodispatch.bpf.c | 89 tools/testing/selftests/sched_ext/select_cpu_dfl_nodispatch.c | 72 tools/testing/selftests/sched_ext/select_cpu_dispatch.bpf.c | 41 tools/testing/selftests/sched_ext/select_cpu_dispatch.c | 70 tools/testing/selftests/sched_ext/select_cpu_dispatch_bad_dsq.bpf.c | 37 tools/testing/selftests/sched_ext/select_cpu_dispatch_bad_dsq.c | 56 tools/testing/selftests/sched_ext/select_cpu_dispatch_dbl_dsp.bpf.c | 38 tools/testing/selftests/sched_ext/select_cpu_dispatch_dbl_dsp.c | 56 tools/testing/selftests/sched_ext/select_cpu_vtime.bpf.c | 92 tools/testing/selftests/sched_ext/select_cpu_vtime.c | 59 tools/testing/selftests/sched_ext/test_example.c | 49 tools/testing/selftests/sched_ext/util.c | 71 tools/testing/selftests/sched_ext/util.h | 13 99 files changed, 16029 insertions(+), 126 deletions(-) -- tejun . Date: Thu, 12 Sep 2024 21:29:54 -0400 From: Paul Moore To: Linus Torvalds Cc: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] lsm/lsm-pr-20240911 Linus, We've got a reasonably large pull request for the LSM framework this time (at least it's large for us), here are the highlights: * Move the LSM framework to static calls Based on some of our exchanges over the summer, it sounds like you are already familiar with the effort to convert the LSM callbacks from function pointers to static calls. This pull request includes that work and transitions the vast majority of the LSM callbacks into static calls. Those callbacks which haven't been converted were left as-is due to the general ugliness of the changes required to support the static call conversion; we can revisit those callbacks at a future date. It is worth mentioning that Tetsuo Handa is opposed to the static call patches, some even carry his NACK, as they make it more difficult to dynamically load out-of-tree LSMs, or unsupported LSMs on distro kernels. Many of us have tried to explain that out-of-tree LSMs are not a concern for the upstream LSM framework, or the Linux kernel in general, and that decisions around what LSMs are enabled in distro kernels is a distro issue, not an upstream issue, but unfortunately Tetsuo continues to disregard these arguments. * Add the Integrity Policy Enforcement (IPE) LSM This pull request adds a new LSM, Integrity Policy Enforcement (IPE). There is plenty of documentation about IPE in this patches, so I'll refrain from going into too much detail here, but the basic motivation behind IPE is to provide a mechanism such that administrators can restrict execution to only those binaries which come from integrity protected storage, e.g. a dm-verity protected filesystem. You will notice that IPE requires additional LSM hooks in the initramfs, dm-verity, and fs-verity code, with the associated patches carrying ACK/review tags from the associated maintainers. We couldn't find an obvious maintainer for the initramfs code, but the IPE patchset has been widely posted over several years. Both Deven Bowers and Fan Wu have contributed to IPE's development over the past several years, with Fan Wu agreeing to serve as the IPE maintainer moving forward. Once IPE is accepted into your tree, I'll start working with Fan to ensure he has the necessary accounts, keys, etc. so that he can start submitting IPE pull requests to you directly during the next merge window. * Move the lifecycle management of the LSM blobs to the LSM framework Management of the LSM blobs (the LSM state buffers attached to various kernel structs, typically via a void pointer named "security" or similar) has been mixed, some blobs were allocated/managed by individual LSMs, others were managed by the LSM framework itself. Starting with this pull request we move management of all the LSM blobs, minus the XFRM blob, into the framework itself, improving consistency across LSMs, and reducing the amount of duplicated code across LSMs. Due to some additional work required to migrate the XFRM blob, it has been left as a todo item for a later date; from a practical standpoint this omission should have little impact as only SELinux provides a XFRM LSM implementation. * Fix problems with the LSM's handling of F_SETOWN The LSM hook for the fcntl(F_SETOWN) operation had a couple of problems: it was racy with itself, and it was disconnected from the associated DAC related logic in such a way that the LSM state could be updated in cases where the DAC state would not. We fix both of these problems by moving the security_file_set_fowner() hook into the same section of code where the DAC attributes are updated. Not only does this resolve the DAC/LSM synchronization issue, but as that code block is protected by a lock, it also resolve the race condition. * Fix potential problems with the security_inode_free() LSM hook Due to use of RCU to protect inodes and the placement of the LSM hook associated with freeing the inode, there is a bit of a challenge when it comes to managing any LSM state associated with an inode. The VFS folks are not open to relocating the LSM hook so we have to get creative when it comes to releasing an inode's LSM state. Traditionally we have used a single LSM callback within the hook that is triggered when the inode is "marked for death", but not actually released due to RCU. Unfortunately, this causes problems for LSMs which want to take an action when the inode's associated LSM state is actually released; this pull request adds an additional LSM callback, inode_free_security_rcu(), that is called when the inode's LSM state is released in the RCU free callback. * Refactor two LSM hooks to better fit the LSM return value patterns The vast majority of the LSM hooks follow the "return 0 on success, negative values on failure" pattern, however, there are a small handful that have unique return value behaviors which has caused confusion in the past and makes it difficult for the BPF verifier to properly vet BPF LSM programs. This pull request includes patches to convert two of these "special" LSM hooks to the common 0/-ERRNO pattern. * Various cleanups and improvements A handful of patches to remove redundant code, better leverage the IS_ERR_OR_NULL() helper, add missing "static" markings, and do some minor style fixups. -Paul -- The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/lsm.git tags/lsm-pr-20240911 for you to fetch changes up to 19c9d55d72a9040cf9dc8de62633e6217381106b: security: Update file_set_fowner documentation (2024-09-09 12:30:51 -0400) ---------------------------------------------------------------- lsm/stable-6.12 PR 20240911 ---------------------------------------------------------------- Casey Schaufler (6): lsm: infrastructure management of the sock security lsm: infrastructure management of the key security blob lsm: add helper for blob allocations lsm: infrastructure management of the dev_tun blob lsm: infrastructure management of the infiniband blob lsm: infrastructure management of the perf_event security blob Deven Bowers (13): lsm: add IPE lsm ipe: add policy parser ipe: add evaluation loop ipe: add LSM hooks on execution and kernel read ipe: add userspace interface audit,ipe: add IPE auditing support ipe: add permissive toggle block,lsm: add LSM blob and new LSM hooks for block devices dm-verity: expose root hash digest and signature data to LSMs ipe: add support for dm-verity as a trust provider scripts: add boot policy generation program ipe: kunit test for parser documentation: add IPE documentation Fan Wu (7): initramfs,lsm: add a security hook to do_populate_rootfs() ipe: introduce 'boot_verified' as a trust provider lsm: add new securityfs delete function lsm: add security_inode_setintegrity() hook fsverity: expose verified fsverity built-in signatures to LSMs ipe: enable support for fs-verity as a trust provider MAINTAINERS: add IPE entry with Fan Wu as maintainer Hongbo Li (1): lsm: Use IS_ERR_OR_NULL() helper function KP Singh (4): init/main.c: Initialize early LSMs after arch code, static keys and calls. kernel: Add helper macros for loop unrolling lsm: count the LSMs enabled at compile time lsm: replace indirect LSM hook calls with static calls Mickaël Salaün (2): fs: Fix file_set_fowner LSM hook inconsistencies security: Update file_set_fowner documentation Paul Moore (2): lsm: cleanup lsm_hooks.h lsm: add the inode_free_security_rcu() LSM implementation hook Tetsuo Handa (1): lsm: remove LSM_COUNT and LSM_CONFIG_COUNT Xu Kuohai (2): lsm: Refactor return value of LSM hook vm_enough_memory lsm: Refactor return value of LSM hook inode_copy_up_xattr Yang Li (1): ipe: Remove duplicated include in ipe.c Yue Haibing (1): lockdown: Make lockdown_lsmid static Documentation/admin-guide/LSM/index.rst | 1 Documentation/admin-guide/LSM/ipe.rst | 790 ++++++++++++ Documentation/admin-guide/kernel-parameters.txt | 12 Documentation/filesystems/fsverity.rst | 27 Documentation/security/index.rst | 1 Documentation/security/ipe.rst | 446 ++++++ MAINTAINERS | 10 block/bdev.c | 7 drivers/md/dm-verity-target.c | 118 + drivers/md/dm-verity.h | 4 fs/fcntl.c | 14 fs/overlayfs/copy_up.c | 6 fs/verity/signature.c | 18 include/linux/args.h | 6 include/linux/blk_types.h | 3 include/linux/lsm_count.h | 135 ++ include/linux/lsm_hook_defs.h | 20 include/linux/lsm_hooks.h | 129 + include/linux/security.h | 55 include/linux/unroll.h | 36 include/uapi/linux/audit.h | 3 include/uapi/linux/lsm.h | 1 init/initramfs.c | 3 init/main.c | 6 scripts/Makefile | 1 scripts/ipe/Makefile | 2 scripts/ipe/polgen/.gitignore | 2 scripts/ipe/polgen/Makefile | 5 scripts/ipe/polgen/polgen.c | 145 ++ security/Kconfig | 11 security/Makefile | 1 security/apparmor/include/net.h | 3 security/apparmor/lsm.c | 17 security/apparmor/net.c | 2 security/commoncap.c | 11 security/inode.c | 27 security/integrity/evm/evm_main.c | 2 security/integrity/ima/ima.h | 2 security/integrity/ima/ima_iint.c | 20 security/integrity/ima/ima_main.c | 2 security/ipe/.gitignore | 2 security/ipe/Kconfig | 97 + security/ipe/Makefile | 31 security/ipe/audit.c | 292 ++++ security/ipe/audit.h | 19 security/ipe/digest.c | 118 + security/ipe/digest.h | 26 security/ipe/eval.c | 393 +++++ security/ipe/eval.h | 70 + security/ipe/fs.c | 247 +++ security/ipe/fs.h | 16 security/ipe/hooks.c | 314 ++++ security/ipe/hooks.h | 52 security/ipe/ipe.c | 98 + security/ipe/ipe.h | 26 security/ipe/policy.c | 227 +++ security/ipe/policy.h | 98 + security/ipe/policy_fs.c | 472 +++++++ security/ipe/policy_parser.c | 559 ++++++++ security/ipe/policy_parser.h | 11 security/ipe/policy_tests.c | 296 ++++ security/landlock/fs.c | 9 security/lockdown/lockdown.c | 2 security/security.c | 615 ++++++--- security/selinux/hooks.c | 176 -- security/selinux/include/objsec.h | 28 security/selinux/netlabel.c | 23 security/smack/smack.h | 12 security/smack/smack_lsm.c | 107 - security/smack/smack_netfilter.c | 4 tools/testing/selftests/lsm/lsm_list_modules_test.c | 3 71 files changed, 6063 insertions(+), 484 deletions(-) -- paul-moore.com . Date: Fri, 13 Sep 2024 16:46:14 +1000 From: Dave Airlie To: Linus Torvalds , Sima Vetter Cc: dri-devel , LKML Subject: [git pull] drm fixes for 6.11-rc8 Hi Linus, Regular fixes pull, the amdgpu JPEG engine fixes are probably the biggest, they look to block some register accessing, otherwise there are just minor fixes and regression fixes all over. nouveau had a regression report going back a few kernels that finally got fixed, Not entirely happy with so many changes so late, but they all seem quite benign apart from the jpeg one. I should be fine for the merge window next week, see you in Vienna. Dave. drm-fixes-2024-09-13: drm fixes for 6.11-rc8 dma-buf/heaps: - fix off by one in CMA heap fault handler syncobj: - fix syncobj leak in drm_syncobj_eventfd_ioctl amdgpu: - Avoid races between set_drr() functions and dc_state_destruct() - Fix regression related to zpos - Fix regression related to overlay cursor - SMU 14.x updates - JPEG fixes - Silence an UBSAN warning amdkfd: - Fetch cacheline size from IP discovery i915: - Prevent a possible int overflow in wq offsets xe: - Remove a double include - Fix null checks and UAF - Fix access_ok check in user_fence_create - Fix compat IS_DISPLAY_STEP() range - OA fix - Fixes in show_meminfo nouveau: - fix GP10x regression on boot stm: - add COMMON_CLK dep rockchip: - iommu api change tegra: - iommu api change The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: https://gitlab.freedesktop.org/drm/kernel.git tags/drm-fixes-2024-09-13 for you to fetch changes up to 135be1dc46c64c454f2828dbb7f239d035f47180: Merge tag 'drm-xe-fixes-2024-09-12' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes (2024-09-13 15:18:18 +1000) ---------------------------------------------------------------- drm fixes for 6.11-rc8 dma-buf/heaps: - fix off by one in CMA heap fault handler syncobj: - fix syncobj leak in drm_syncobj_eventfd_ioctl amdgpu: - Avoid races between set_drr() functions and dc_state_destruct() - Fix regerssion related to zpos - Fix regression related to overlay cursor - SMU 14.x updates - JPEG fixes - Silence an UBSAN warning amdkfd: - Fetch cacheline size from IP discovery i915: - Prevent a possible int overflow in wq offsets xe: - Remove a double include - Fix null checks and UAF - Fix access_ok check in user_fence_create - Fix compat IS_DISPLAY_STEP() range - OA fix - Fixes in show_meminfo nouveau: - fix GP10x regression on boot stm: - add COMMON_CLK dep rockchip: - iommu api change tegra: - iommu api change ---------------------------------------------------------------- Alex Deucher (1): drm/amdgpu/atomfirmware: Silence UBSAN warning Arnd Bergmann (1): drm/stm: add COMMON_CLK dependency Ashutosh Dixit (1): drm/xe/oa: Enable Xe2+ PES disaggregation Ben Skeggs (1): drm/nouveau/fb: restore init() for ramgp102 Dave Airlie (4): Merge tag 'amd-drm-fixes-6.11-2024-09-11' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes Merge tag 'drm-intel-fixes-2024-09-12' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-fixes Merge tag 'drm-misc-fixes-2024-09-12' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes Merge tag 'drm-xe-fixes-2024-09-12' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes David (Ming Qiang) Wu (2): drm/amd/amdgpu: apply command submission parser for JPEG v2+ drm/amd/amdgpu: apply command submission parser for JPEG v1 David Belanger (1): drm/amdkfd: Add cache line size info Jani Nikula (1): drm/xe/display: fix compat IS_DISPLAY_STEP() range end Kenneth Feng (2): drm/amd/pm: update the features set on smu v14.0.2/3 drm/amd/pm: fix the pp_dpm_pcie issue on smu v14.0.2/3 Leo Li (2): drm/amd/display: Do not reset planes based on crtc zpos_changed drm/amd/display: Add all planes on CRTC to state for overlay cursor Lu Baolu (2): drm/rockchip: Use iommu_paging_domain_alloc() drm/tegra: Use iommu_paging_domain_alloc() Lucas De Marchi (1): drm/xe/gt: Remove double include Matthew Auld (2): drm/xe/client: fix deadlock in show_meminfo() drm/xe/client: add missing bo locking in show_meminfo() Matthew Brost (2): drm/xe: Remove fence check from send_tlb_invalidation drm/xe: Fix possible UAF in guc_exec_queue_process_msg Nikita Zhandarovich (1): drm/i915/guc: prevent a possible int overflow in wq offsets Nirmoy Das (1): drm/xe: Fix access_ok check in user_fence_create T.J. Mercier (2): dma-buf: heaps: Fix off-by-one in CMA heap fault handler drm/syncobj: Fix syncobj leak in drm_syncobj_eventfd_ioctl Tobias Jakobi (2): drm/amd/display: Avoid race between dcn10_set_drr() and dc_state_destruct() drm/amd/display: Avoid race between dcn35_set_drr() and dc_state_destruct() drivers/dma-buf/heaps/cma_heap.c | 2 +- drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.c | 76 +++++++++++++++++++++- drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.h | 11 ++++ drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c | 63 +++++++++++++++++- drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.h | 6 ++ drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c | 2 + drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c | 1 + drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c | 1 + drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.h | 1 - drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c | 57 +--------------- drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.h | 7 +- drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c | 1 + drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c | 3 +- drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 8 ++- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 13 +++- .../drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c | 20 +++--- .../drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c | 20 +++--- drivers/gpu/drm/amd/include/atomfirmware.h | 4 +- drivers/gpu/drm/amd/pm/swsmu/inc/smu_types.h | 11 +++- .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 12 ++++ drivers/gpu/drm/drm_syncobj.c | 17 +++-- drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.h | 2 + drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c | 1 + drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 10 ++- drivers/gpu/drm/stm/Kconfig | 1 + drivers/gpu/drm/tegra/drm.c | 5 +- drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h | 2 +- drivers/gpu/drm/xe/regs/xe_oa_regs.h | 1 + drivers/gpu/drm/xe/xe_drm_client.c | 45 +++++++++++-- drivers/gpu/drm/xe/xe_gt.c | 1 - drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 4 +- drivers/gpu/drm/xe/xe_guc_submit.c | 4 +- drivers/gpu/drm/xe/xe_oa.c | 4 ++ drivers/gpu/drm/xe/xe_sync.c | 2 +- 36 files changed, 315 insertions(+), 109 deletions(-) . Date: Fri, 13 Sep 2024 16:58:12 +0800 From: Huacai Chen To: Paolo Bonzini , Huacai Chen , Tianrui Zhao , Bibo Mao Cc: kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-kernel@vger.kernel.org, Xuerui Wang , Jiaxun Yang , Huacai Chen Subject: [GIT PULL] LoongArch KVM changes for v6.12 The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson.git tags/loongarch-kvm-6.12 for you to fetch changes up to 3abb708ec0be25da16a1ee9f1ab5cbc93f3256f3: LoongArch: KVM: Implement function kvm_para_has_feature() (2024-09-12 22:56:14 +0800) ---------------------------------------------------------------- LoongArch KVM changes for v6.12 1. Revert qspinlock to test-and-set simple lock on VM. 2. Add Loongson Binary Translation extension support. 3. Add PMU support for guest. 4. Enable paravirt feature control from VMM. 5. Implement function kvm_para_has_feature(). ---------------------------------------------------------------- Bibo Mao (6): LoongArch: Revert qspinlock to test-and-set simple lock on VM LoongArch: KVM: Add VM feature detection function LoongArch: KVM: Add Binary Translation extension support LoongArch: KVM: Add vm migration support for LBT registers LoongArch: KVM: Enable paravirt feature control from VMM LoongArch: KVM: Implement function kvm_para_has_feature() Song Gao (1): LoongArch: KVM: Add PMU support for guest arch/loongarch/include/asm/Kbuild | 1 - arch/loongarch/include/asm/kvm_csr.h | 6 + arch/loongarch/include/asm/kvm_host.h | 37 +++- arch/loongarch/include/asm/kvm_para.h | 12 + arch/loongarch/include/asm/kvm_vcpu.h | 11 + arch/loongarch/include/asm/loongarch.h | 11 +- arch/loongarch/include/asm/paravirt.h | 7 + arch/loongarch/include/asm/qspinlock.h | 41 ++++ arch/loongarch/include/uapi/asm/Kbuild | 2 - arch/loongarch/include/uapi/asm/kvm.h | 20 ++ arch/loongarch/include/uapi/asm/kvm_para.h | 21 ++ arch/loongarch/kernel/paravirt.c | 47 ++-- arch/loongarch/kernel/setup.c | 2 + arch/loongarch/kernel/smp.c | 4 +- arch/loongarch/kvm/exit.c | 46 ++-- arch/loongarch/kvm/vcpu.c | 340 ++++++++++++++++++++++++++++- arch/loongarch/kvm/vm.c | 69 +++++- 17 files changed, 616 insertions(+), 61 deletions(-) create mode 100644 arch/loongarch/include/asm/qspinlock.h create mode 100644 arch/loongarch/include/uapi/asm/kvm_para.h . Date: Fri, 13 Sep 2024 11:53:38 +0200 From: Andi Shyti To: Wolfram Sang Cc: linux-i2c , lkml , Andi Shyti Subject: [GIT PULL] i2c-host-fixes for v6.11-rc8 Hi Wolfram, Here’s the fixes pull request. It’s funny, after a few weeks with no fixes, right at the merge window, I’m sending in five! I’ve also brought in from the past two fixes from Robert Hancock for the Xilinx controller. See you later today for the next pull request. Thanks, Andi The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git tags/i2c-host-fixes-6.11-rc8 for you to fetch changes up to e2c85d85a05f16af2223fcc0195ff50a7938b372: i2c: qcom-geni: Use IRQF_NO_AUTOEN flag in request_irq() (2024-09-12 09:08:22 +0200) ---------------------------------------------------------------- The Aspeed driver tracks the controller's state (stop, pending, start, etc.). Previously, when the stop command was sent, the state was not updated. The fix in this pull request ensures the driver's state is aligned with the device status. The Intel SCH driver receives a new look, and among the cleanups, there is a fix where, due to an oversight, an if/else statement was missing the else, causing it to move forward instead of exiting the function in case of an error. The Qualcomm GENI I2C driver adds the IRQF_NO_AUTOEN flag to the IRQ setup to prevent unwanted interrupts during probe. The Xilinx XPS controller fixes TX FIFO handling to avoid missed NAKs. Another fix ensures the controller is reinitialized when the bus appears busy. ---------------------------------------------------------------- Andy Shevchenko (1): i2c: isch: Add missed 'else' Jinjie Ruan (1): i2c: qcom-geni: Use IRQF_NO_AUTOEN flag in request_irq() Robert Hancock (2): i2c: xiic: Wait for TX empty to avoid missed TX NAKs i2c: xiic: Try re-initialization on bus busy timeout Tommy Huang (1): i2c: aspeed: Update the stop sw state when the bus recovery occurs drivers/i2c/busses/i2c-aspeed.c | 16 ++++++++-------- drivers/i2c/busses/i2c-isch.c | 3 +-- drivers/i2c/busses/i2c-qcom-geni.c | 4 +--- drivers/i2c/busses/i2c-xiic.c | 60 +++++++++++++++++++++++++++++++++++------------------------- 4 files changed, 45 insertions(+), 38 deletions(-) . Date: Fri, 13 Sep 2024 13:20:01 +0200 From: Andi Shyti To: Wolfram Sang Cc: linux-i2c , lkml , Andi Shyti Subject: [GIT PULL] i2c-host for v6.12 Hi Wolfram, This turned out to be a fairly loaded pull request, covering a variety of topics. There are four new platforms added, but the bulk of it consists of cleanups and refactors. I didn’t plan to have a second pull request during this merge window. Everything that was submitted is included in this one. Wishing you a great weekend and a fantastic conference week, which I’m sorry to miss! Andi The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git tags/i2c-host-6.12 for you to fetch changes up to f56f4ba2fc1dbefd3242946f2fad35338a60e3bc: i2c: designware: Use pci_get_drvdata() (2024-09-11 12:52:46 +0200) ---------------------------------------------------------------- The DesignWare and the Renesas I2C drivers have received most of the changes in this pull request. The first has has undergone through a series of cleanups that have been sent to the mailing list a year ago for the first time and finally get merged in this pull request. They are many, from typos (e.g. i2/i2c), to cosmetics, to refactoring (e.g. move inline functions to librarieas) and many others. Besides that, all the DesignWare Kconfig options have been grouped under the I2C_DESIGNWARE_CORE and this required some adaptation in many of the kernel configuration files for different arm and mips boards. Follows the list of the rest of the changes grouped by type of change. Cleanups -------- The Qualcomm Geni platform improves the exit path in the runtime resume function. The Intel LJCA driver loses "target_addr" parameter in ljca_i2c_stop() because it was unused. The MediaTek controller intializes the restart_flag in the transfer function using the ternary conditional operator ("? :") instead of initializing it in different parts. Constified a few global data structures in the virtio driver. The Renesas driver simplifies the bus speed handling in the init function making it more readable. Improved an if/else statement in probe function of the Renesas R-Car driver. The iMX/MXC driver switches to using the RUNTIME_PM_OPS() instead of SET_RUNTIME_PM_OPS(). Still in the iMX/MXC driver a comma ',' has been replaced by a semicolon ';', while in different drivers the ',' has been removed from the '{ }' delimiters. Finally three devm_clk_get_enabled() have been used to simplify the devm_clk_get/clk_prepare_enable tuple in the Renesas EMEV2, Ingenic and MPC drivers. Refactors --------- The Nuvoton fixes a potential out of boundary array access. This is not a bug fix because the issue could never occur due to hardware not having the properties listed in the array. The change makes the driver more future proof and, at the same time, silences code analyzers. Improvements ------------ The Renesas I2C (riic) driver undergoes several patches improving the runtime power management handling. The Intel i801 driver uses a more descriptive adapter's name to show the presence of the IDF feature. In the Intel Denverton (ismt) adapter the pending transactions are killed when irq's can't complete their handling, triggering a timeout. This could have been considered as a bug fix, but because, standing to Vasily, it's very sporadic, I preferred considering the patch rather as an improvement. New Feature ----------- The Renesas I2C (riic) driver now supports the fast mode plus. New support ----------- Added support for: - Renesas R9A08G045 - Rockchip RK3576 - KEBA I2C - Theobroma Systems Mule Multiplexer. The Keba comes with a new driver, i2c-keba.c. The Mule is an i2c multiplexer and it also comes with a new driver, mux/i2c-mux-mule.c. Core patch ---------- This pull request includes also a patch in the I2C framework, in i2c-core-base.c where the runtime PM functions have been replaced in order to allow to be accessed during the device add. Devicetree ---------- Some cleanups in the devicetree, as well. nVidia and Qualcomm bindings improve their "if:then:" blocks. While the aspeed binding loses the "multi-master" property because it was redundant. The i2c-sprd binding has been converted to YAML. ---------------------------------------------------------------- Adrian Huang (1): i2c: designware: Fix wrong setting for {ss,fs,hs}_{h,l}cnt registers Andi Shyti (2): i2c: qcom-geni: Use goto for clearer exit path i2c: ljca: Remove unused "target_addr" parameter Andy Shevchenko (16): i2c: designware: Replace a while-loop by for-loop i2c: designware: Let PCI core to take care about interrupt vectors i2c: designware: Add missing 'c' into PCI IDs variable name i2c: designware: Unify terminator in device ID tables i2c: designware: Always provide device ID tables i2c: designware: Drop return value from i2c_dw_acpi_configure() i2c: designware: Drop return value from dw_i2c_of_configure() i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure() i2c: designware: Consolidate firmware parsing and configuring code i2c: designware: Unify the firmware type checks i2c: designware: Move exports to I2C_DW namespaces i2c: designware: Remove ->disable() callback i2c: designware: Consolidate PM ops i2c: designware: Uninline i2c_dw_probe() i2c: designware: Propagate firmware node i2c: designware: Use pci_get_drvdata() AngeloGioacchino Del Regno (1): i2c: mt65xx: Avoid double initialization of restart_flag in isr Christophe JAILLET (1): i2c: virtio: Constify struct i2c_algorithm and struct virtio_device_id Claudiu Beznea (8): i2c: riic: Use temporary variable for struct device i2c: riic: Call pm_runtime_get_sync() when need to access registers i2c: riic: Use pm_runtime_resume_and_get() i2c: riic: Enable runtime PM autosuspend support i2c: riic: Add suspend/resume support i2c: riic: Define individual arrays to describe the register offsets dt-bindings: i2c: renesas,riic: Document the R9A08G045 support i2c: riic: Add support for fast mode plus Detlev Casanova (1): dt-bindings: i2c: i2c-rk3x: Add rk3576 compatible Fabio Estevam (1): i2c: imx: Switch to RUNTIME_PM_OPS() Farouk Bouabid (2): dt-bindings: i2c: add support for tsd,mule-i2c-mux i2c: muxes: add support for tsd,mule-i2c multiplexer Geert Uytterhoeven (1): i2c: riic: Simplify unsupported bus speed handling Gerhard Engleder (1): i2c: keba: Add KEBA I2C controller support Hans de Goede (2): i2c: core: Setup i2c_adapter runtime-pm before calling device_add() i2c: i801: Use a different adapter-name for IDF adapters Heikki Krogerus (7): ARC: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM ARM: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM arm64: defconfig: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM mips: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM RISC-V: configs: enable I2C_DESIGNWARE_CORE with I2C_DESIGNWARE_PLATFORM net: txgbe: Fix I2C Kconfig dependencies i2c: designware: Group all DesignWare drivers under a single option Krzysztof Kozlowski (5): dt-bindings: i2c: nvidia,tegra20-i2c: combine same if:then: clauses dt-bindings: i2c: nvidia,tegra20-i2c: restrict also clocks in if:then: dt-bindings: i2c: nvidia,tegra20-i2c: define power-domains top-level dt-bindings: i2c: qcom,i2c-cci: add missing clocks constraint in if:then: dt-bindings: i2c: aspeed: drop redundant multi-master Kuninori Morimoto (1): i2c: rcar: tidyup priv->devtype handling on rcar_i2c_probe() Rong Qianfeng (2): i2c: emev2: Use devm_clk_get_enabled() helpers i2c: jz4780: Use devm_clk_get_enabled() helpers Shen Lichuan (1): i2c: imx: Convert comma to semicolon Stanislav Jakubek (1): dt-bindings: i2c: i2c-sprd: convert to YAML Tyrone Ting (1): i2c: npcm: restore slave addresses array length Vasily Khoruzhick (1): i2c: ismt: kill transaction in hardware on timeout Wolfram Sang (1): i2c: don't use ',' after delimiters Zhang Zekun (1): i2c: mpc: Use devm_clk_get_optional_enabled() to simplify code .../devicetree/bindings/i2c/aspeed,i2c.yaml | 5 - .../devicetree/bindings/i2c/i2c-rk3x.yaml | 1 + Documentation/devicetree/bindings/i2c/i2c-sprd.txt | 31 -- .../bindings/i2c/nvidia,tegra20-i2c.yaml | 27 +- .../devicetree/bindings/i2c/qcom,i2c-cci.yaml | 1 + .../devicetree/bindings/i2c/renesas,riic.yaml | 4 + .../devicetree/bindings/i2c/sprd,sc9860-i2c.yaml | 65 +++ .../devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml | 69 +++ arch/arc/configs/axs101_defconfig | 1 + arch/arc/configs/axs103_defconfig | 1 + arch/arc/configs/axs103_smp_defconfig | 1 + arch/arc/configs/tb10x_defconfig | 1 + arch/arm/configs/hisi_defconfig | 1 + arch/arm/configs/multi_v7_defconfig | 1 + arch/arm/configs/pxa_defconfig | 1 + arch/arm/configs/socfpga_defconfig | 1 + arch/arm/configs/spear13xx_defconfig | 1 + arch/arm/configs/spear3xx_defconfig | 1 + arch/arm/configs/spear6xx_defconfig | 1 + arch/arm64/configs/defconfig | 1 + arch/mips/configs/generic/board-ocelot.config | 1 + arch/riscv/configs/defconfig | 1 + arch/riscv/configs/nommu_k210_defconfig | 1 + arch/riscv/configs/nommu_k210_sdcard_defconfig | 1 + drivers/i2c/busses/Kconfig | 40 +- drivers/i2c/busses/Makefile | 1 + drivers/i2c/busses/i2c-ali1535.c | 3 +- drivers/i2c/busses/i2c-amd-mp2-plat.c | 2 +- drivers/i2c/busses/i2c-aspeed.c | 2 +- drivers/i2c/busses/i2c-designware-common.c | 180 ++++++- drivers/i2c/busses/i2c-designware-core.h | 39 +- drivers/i2c/busses/i2c-designware-master.c | 36 +- drivers/i2c/busses/i2c-designware-pcidrv.c | 88 +-- drivers/i2c/busses/i2c-designware-platdrv.c | 184 ++----- drivers/i2c/busses/i2c-designware-slave.c | 6 +- drivers/i2c/busses/i2c-digicolor.c | 2 +- drivers/i2c/busses/i2c-emev2.c | 25 +- drivers/i2c/busses/i2c-i801.c | 9 +- drivers/i2c/busses/i2c-imx-lpi2c.c | 2 +- drivers/i2c/busses/i2c-imx.c | 11 +- drivers/i2c/busses/i2c-ismt.c | 10 + drivers/i2c/busses/i2c-jz4780.c | 22 +- drivers/i2c/busses/i2c-keba.c | 598 +++++++++++++++++++++ drivers/i2c/busses/i2c-ljca.c | 6 +- drivers/i2c/busses/i2c-mpc.c | 23 +- drivers/i2c/busses/i2c-mt65xx.c | 5 +- drivers/i2c/busses/i2c-npcm7xx.c | 6 +- drivers/i2c/busses/i2c-omap.c | 2 +- drivers/i2c/busses/i2c-piix4.c | 2 +- drivers/i2c/busses/i2c-pnx.c | 2 +- drivers/i2c/busses/i2c-pxa-pci.c | 2 +- drivers/i2c/busses/i2c-pxa.c | 2 +- drivers/i2c/busses/i2c-qcom-geni.c | 23 +- drivers/i2c/busses/i2c-qup.c | 2 +- drivers/i2c/busses/i2c-rcar.c | 12 +- drivers/i2c/busses/i2c-riic.c | 228 +++++--- drivers/i2c/busses/i2c-s3c2410.c | 2 +- drivers/i2c/busses/i2c-virtio.c | 4 +- drivers/i2c/i2c-core-base.c | 20 +- drivers/i2c/muxes/Kconfig | 16 + drivers/i2c/muxes/Makefile | 1 + drivers/i2c/muxes/i2c-mux-mule.c | 148 +++++ drivers/net/ethernet/wangxun/Kconfig | 3 +- 63 files changed, 1480 insertions(+), 508 deletions(-) delete mode 100644 Documentation/devicetree/bindings/i2c/i2c-sprd.txt create mode 100644 Documentation/devicetree/bindings/i2c/sprd,sc9860-i2c.yaml create mode 100644 Documentation/devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml create mode 100644 drivers/i2c/busses/i2c-keba.c create mode 100644 drivers/i2c/muxes/i2c-mux-mule.c . Date: Fri, 13 Sep 2024 17:15:00 +0530 From: Vinod Koul To: Linus Torvalds Cc: LKML Subject: [GIT PULL]: Late fixes for soundwire subsystem for v6.11 --cDJdxvnMXDwbtM3g Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello Linus, The earlier fix for non-continuous port map programming caused regression to Intel platforms, so lets revert that change. Please pull to receive the patch to revert the earlier fix. The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6: Linux 6.11-rc6 (2024-09-01 19:46:02 +1200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire.git tags/so= undwire-6.11-fixes_2 for you to fetch changes up to 233a95fd574fde1c375c486540a90304a2d2d49f: soundwire: stream: Revert "soundwire: stream: fix programming slave ports= for non-continous port maps" (2024-09-11 13:05:43 +0530) ---------------------------------------------------------------- soundwire final fixes for 6.11 - Revert of earlier fix sent for non-continuous port map programming which caused regression on Intel platforms ---------------------------------------------------------------- Krzysztof Kozlowski (1): soundwire: stream: Revert "soundwire: stream: fix programming slave p= orts for non-continous port maps" drivers/soundwire/stream.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --=20 ~Vinod --cDJdxvnMXDwbtM3g Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAmbkJbkACgkQfBQHDyUj g0fqeBAAllBsy9jMAdYb95jzNlTJP/EQwsk1BuYDbGWJdvmHe/6v4hLKWaSIqwIJ +oox7zjvswA5E0/zBGpYY0L9oAjfthvDc7WhidxCgTd4rR9Xe9WVtQ97NbdZgk/4 6RapkkIm1QO3jzwqRUIoGY07p5ss0wPDnG0e3uK/yzdVbz5aqHKj1UpCojvYuWy/ SjPWvN3vmhmsyeR2oja25arPT8RnlOQgnUKEWNzt9nzYiSHefPuTeeypxF16FyCf 9MWIjfr7/G+qby912udYmm2GnBjdu7xxfrh96dLjfeUV40cQ7/dpvSYLaoQBVB6u vbOsMAWE5fFjJTsGFaO6+n/2vCdg24SS9bp5TkUSDLGl24fosVBeYaA3qidVnPa5 wt1jJ+SmSiM7Z0o5C/YH5vRVlp0X7Jz2Acaa07qeXzT9gliSQxUXrcak2VNhE8pn JDizR//bNquPvryXQT4p385DxIBwWwhQhArMnjjRYkDlT08Tn50GWHZL6W5DH9us ANAM/WrSfy3nDBqTdbiNdwrYmfoBlLwj4k0PhVfQ4ICraes3miVLc4r9903qoJNj 6IF2VqDTzf+a6+xfHc7mmprTGowPClLnMIPskeNRw4WDBwQm+pztA239Hki26B+Q 3z5YoHOdjFni/jWHo/hyXcF5S7yxBjJX3WJq5sT+UChQUf/inzA= =C7Ss -----END PGP SIGNATURE----- --cDJdxvnMXDwbtM3g-- . Date: Fri, 13 Sep 2024 16:41:28 +0200 From: Christian Brauner To: Linus Torvalds Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] vfs misc Hey Linus, /* Summary */ This contains the usual pile of misc updates: Features: - Add F_CREATED_QUERY fcntl() that allows userspace to query whether a file was actually created. Often userspace wants to know whether an O_CREATE request did actually create a file without using O_EXCL. The current logic is that to first attempts to open the file without O_CREAT | O_EXCL and if ENOENT is returned userspace tries again with both flags. If that succeeds all is well. If it now reports EEXIST it retries. That works fairly well but some corner cases make this more involved. If this operates on a dangling symlink the first openat() without O_CREAT | O_EXCL will return ENOENT but the second openat() with O_CREAT | O_EXCL will fail with EEXIST. The reason is that openat() without O_CREAT | O_EXCL follows the symlink while O_CREAT | O_EXCL doesn't for security reasons. So it's not something we can really change unless we add an explicit opt-in via O_FOLLOW which seems really ugly. All available workarounds are really nasty (fanotify, bpf lsm etc) so add a simple fcntl(). - Try an opportunistic lookup for O_CREAT. Today, when opening a file we'll typically do a fast lookup, but if O_CREAT is set, the kernel always takes the exclusive inode lock. This was likely done with the expectation that O_CREAT means that we always expect to do the create, but that's often not the case. Many programs set O_CREAT even in scenarios where the file already exists (see related F_CREATED_QUERY patch motivation above). The series contained in the pr rearranges the pathwalk-for-open code to also attempt a fast_lookup in certain O_CREAT cases. If a positive dentry is found, the inode_lock can be avoided altogether and it can stay in rcuwalk mode for the last step_into. - Expose the 64 bit mount id via name_to_handle_at(). Now that we provide a unique 64-bit mount ID interface in statx(2), we can now provide a race-free way for name_to_handle_at(2) to provide a file handle and corresponding mount without needing to worry about racing with /proc/mountinfo parsing or having to open a file just to do statx(2). While this is not necessary if you are using AT_EMPTY_PATH and don't care about an extra statx(2) call, users that pass full paths into name_to_handle_at(2) need to know which mount the file handle comes from (to make sure they don't try to open_by_handle_at a file handle from a different filesystem) and switching to AT_EMPTY_PATH would require allocating a file for every name_to_handle_at(2) call - Add a per dentry expire timeout to autofs. There are two fairly well known automounter map formats, the autofs format and the amd format (more or less System V and Berkley). Some time ago Linux autofs added an amd map format parser that implemented a fair amount of the amd functionality. This was done within the autofs infrastructure and some functionality wasn't implemented because it either didn't make sense or required extra kernel changes. The idea was to restrict changes to be within the existing autofs functionality as much as possible and leave changes with a wider scope to be considered later. One of these changes is implementing the amd options: 1) "unmount", expire this mount according to a timeout (same as the current autofs default). 2) "nounmount", don't expire this mount (same as setting the autofs timeout to 0 except only for this specific mount) . 3) "utimeout=", expire this mount using the specified timeout (again same as setting the autofs timeout but only for this mount). To implement these options per-dentry expire timeouts need to be implemented for autofs indirect mounts. This is because all map keys (mounts) for autofs indirect mounts use an expire timeout stored in the autofs mount super block info. structure and all indirect mounts use the same expire timeout. Fixes: - Fix missing fput for FSCONFIG_SET_FD in autofs. - Use param->file for FSCONFIG_SET_FD in coda. - Delete the 'fs/netfs' proc subtreee when netfs module exits. - Make sure that struct uid_gid_map fits into a single cacheline. - Don't flush in-flight wb switches for superblocks without cgroup writeback. - Correcting the idmapping mount example in the idmapping documentation. - Fix a race between evice_inodes() and find_inode() and iput(). - Refine the show_inode_state() macro definition in writeback code. - Prevent dump_mapping() from accessing invalid dentry.d_name.name. - Show actual source for debugfs in /proc/mounts. - Annotate data-race of busy_poll_usecs in eventpoll. - Don't WARN for racy path_noexec check in exec code. - Handle OOM on mnt_warn_timestamp_expiry(). - Fix some spelling in the iomap design documentation. - Fix typo in procfs comment. - Fix typo in fs/namespace.c comment Cleanups: - Add the VFS git tree to the MAINTAINERS file. - Move FMODE_UNSIGNED_OFFSET to fop_flags freeing up another f_mode bit in struct file bringing us to 5 free f_mode bits. - Remove the __I_DIO_WAKEUP bit from i_state flags as we can simplify the wait mechanism. - Remove the unused path_put_init() helper. - Replace a __u32 with u32 for s_fsnotify_mask as __u32 is uapi specific. - Replace the unsigned long i_state member with a u32 i_state member in struct inode freeing up 4 bytes in struct inode. Instead of using the bit based wait apis we're now using the var event apis and using the individual bytes of the i_state member to wait on state changes. - Explain how per-syscall AT_* flags should be allocated. - Use in_group_or_capable() helper to simplify the posix acl mode update code. - Switch to LIST_HEAD() in fsync_buffers_list() to simplify the code. - Removed comment about d_rcu_to_refcount() as that function doesn't exist anymore. - Add kernel documentation for lookup_fast(). - Don't re-zero evenpoll fields. - Remove outdated comment after close_fd(). - Fix imprecise wording in comment about the pipe filesystem. - Drop GFP_NOFAIL mode from alloc_page_buffers. - Missing blank line warnings and struct declaration improved in file_table. - Annotate struct poll_list with __counted_by() - Remove the unused read parameter in percpu-rwsem. - Remove linux/prefetch.h include from direct-io code. - Use kmemdup_array instead of kmemdup for multiple allocation in mnt_idmapping code. - Remove unused mnt_cursor_del() declaration. Performance tweaks: - Dodge smp_mb in break_lease and break_deleg in the common case. - Only read fops once in fops_{get,put}(). - Use RCU in ilookup(). - Elide smp_mb in iversion handling in the common case. - Drop one lock trip in evict(). /* Testing */ gcc version 14.2.0 (Debian 14.2.0-3) Debian clang version 16.0.6 (27+b1) All patches are based on v6.11-rc4 and have been sitting in linux-next. No build failures or warnings were observed. /* Conflicts */ Merge conflicts with mainline ============================= No known conflicts. Merge conflicts with other trees ================================ (1) This will have merge conflict with the vfs.file pull request sent as: https://lore.kernel.org/r/20240913-vfs-file-53bf57c94647@brauner I've provided the conflict resolution there. (2) This will also very likely cause a merge conflict with the series to convert everything to fd_file() accessors. Because we change: -static int coda_parse_fd(struct fs_context *fc, int fd) +static int coda_set_idx(struct fs_context *fc, struct file *file) { struct coda_fs_context *ctx = fc->fs_private; - struct fd f; struct inode *inode; int idx; - f = fdget(fd); - if (!f.file) - return -EBADF; - inode = file_inode(f.file); + inode = file_inode(file); if (!S_ISCHR(inode->i_mode) || imajor(inode) != CODA_PSDEV_MAJOR) { - fdput(f); - return invalf(fc, "code: Not coda psdev"); + return invalf(fc, "coda: Not coda psdev"); } - idx = iminor(inode); - fdput(f); - if (idx < 0 || idx >= MAX_CODADEVS) return invalf(fc, "coda: Bad minor number"); ctx->idx = idx; return 0; } which removes the raw f.file access so the fd_file() replacement becomes mute. The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399: Linux 6.11-rc4 (2024-08-18 13:17:27 -0700) are available in the Git repository at: git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.misc for you to fetch changes up to 2077006d4725c82c6e9612cec3a6c140921b067f: uidgid: make sure we fit into one cacheline (2024-09-12 12:16:09 +0200) Please consider pulling these changes from the signed vfs-6.12.misc tag. Thanks! Christian ---------------------------------------------------------------- vfs-6.12.misc ---------------------------------------------------------------- Aleksa Sarai (4): autofs: fix missing fput for FSCONFIG_SET_FD coda: use param->file for FSCONFIG_SET_FD uapi: explain how per-syscall AT_* flags should be allocated fhandle: expose u64 mount id to name_to_handle_at(2) Baokun Li (1): netfs: Delete subtree of 'fs/netfs' when netfs module exits Christian Brauner (20): fcntl: add F_CREATED_QUERY selftests: add F_CREATED_QUERY tests Merge patch series "Add an fcntl() to check file creation" fs: move audit parent inode fs: pull up trailing slashes check for O_CREAT fs: remove audit dummy context check fs: rearrange general fastpath check now that O_CREAT uses it fs: move FMODE_UNSIGNED_OFFSET to fop_flags inode: remove __I_DIO_WAKEUP fs: remove unused path_put_init() fs: s/__u32/u32/ for s_fsnotify_mask fs: add i_state helpers fs: reorder i_state bits inode: port __I_SYNC to var event inode: port __I_NEW to var event inode: port __I_LRU_ISOLATING to var event inode: make i_state a u32 Merge patch series "fs: add i_state helpers" Merge patch series "fhandle: expose u64 mount id to name_to_handle_at(2)" uidgid: make sure we fit into one cacheline Eric Biggers (1): MAINTAINERS: add the VFS git tree Haifeng Xu (1): fs: don't flush in-flight wb switches for superblocks without cgroup writeback Hongbo Li (3): fs: Use in_group_or_capable() helper to simplify the code doc: correcting the idmapping mount example fs: use LIST_HEAD() to simplify code Ian Kent (1): autofs: add per dentry expire timeout Jeff Layton (3): fs: remove comment about d_rcu_to_refcount fs: add a kerneldoc header over lookup_fast fs: try an opportunistic lookup for O_CREAT opens too Joe Damato (1): eventpoll: Don't re-zero eventpoll fields Joel Savitz (1): file: remove outdated comment after close_fd() Julian Sun (2): vfs: fix race between evice_inodes() and find_inode()&iput() writeback: Refine the show_inode_state() macro definition Kienan Stewart (1): fs/pipe: Correct imprecise wording in comment Li Zhijian (1): fs/inode: Prevent dump_mapping() accessing invalid dentry.d_name.name Marc Aurèle La France (1): debugfs show actual source in /proc/mounts Martin Karsten (1): eventpoll: Annotate data-race of busy_poll_usecs Mateusz Guzik (6): exec: don't WARN for racy path_noexec check vfs: dodge smp_mb in break_lease and break_deleg in the common case vfs: only read fops once in fops_get/put vfs: use RCU in ilookup vfs: elide smp_mb in iversion handling in the common case vfs: drop one lock trip in evict() Michal Hocko (1): fs: drop GFP_NOFAIL mode from alloc_page_buffers Mohit0404 (1): Fixed: fs: file_table_c: Missing blank line warnings and struct declaration improved Olaf Hering (1): mount: handle OOM on mnt_warn_timestamp_expiry Thorsten Blum (1): fs/select: Annotate struct poll_list with __counted_by() Uros Bizjak (1): fs/aio: Fix __percpu annotation of *cpu pointer in struct kioctx Wang Long (1): percpu-rwsem: remove the unused parameter 'read' Xiaxi Shen (1): Fix spelling and gramatical errors Yan Zhen (1): proc: Fix typo in the comment Youling Tang (1): fs/direct-io: Remove linux/prefetch.h include Yu Jiaoliang (1): mnt_idmapping: Use kmemdup_array instead of kmemdup for multiple allocation Yue Haibing (1): fs: mounts: Remove unused declaration mnt_cursor_del() Yuesong Li (1): fs/namespace.c: Fix typo in comment Documentation/filesystems/idmappings.rst | 8 +- Documentation/filesystems/iomap/design.rst | 6 +- MAINTAINERS | 1 + drivers/char/adi.c | 8 +- drivers/char/mem.c | 3 +- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 + drivers/gpu/drm/drm_file.c | 3 +- drivers/gpu/drm/gma500/psb_drv.c | 1 + drivers/gpu/drm/i915/i915_driver.c | 1 + drivers/gpu/drm/nouveau/nouveau_drm.c | 1 + drivers/gpu/drm/radeon/radeon_drv.c | 1 + drivers/gpu/drm/tegra/drm.c | 1 + drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 1 + drivers/gpu/drm/xe/xe_device.c | 1 + drivers/md/md-bitmap.c | 2 +- fs/aio.c | 2 +- fs/autofs/autofs_i.h | 4 + fs/autofs/dev-ioctl.c | 97 +++++++++++++++++++- fs/autofs/expire.c | 7 +- fs/autofs/inode.c | 5 +- fs/bcachefs/fs.c | 10 +- fs/buffer.c | 8 +- fs/coda/inode.c | 43 ++++++--- fs/dcache.c | 10 +- fs/debugfs/inode.c | 8 ++ fs/direct-io.c | 6 -- fs/eventpoll.c | 7 +- fs/exec.c | 31 +++---- fs/fcntl.c | 10 ++ fs/fhandle.c | 29 ++++-- fs/file.c | 2 +- fs/file_table.c | 5 +- fs/fs-writeback.c | 67 ++++++++------ fs/inode.c | 116 ++++++++++++++++-------- fs/libfs.c | 28 ++++-- fs/mnt_idmapping.c | 12 +-- fs/mount.h | 1 - fs/namei.c | 75 ++++++++++++--- fs/namespace.c | 18 +++- fs/netfs/locking.c | 22 +---- fs/netfs/main.c | 4 +- fs/pipe.c | 2 +- fs/posix_acl.c | 4 +- fs/proc/base.c | 10 +- fs/proc/fd.c | 2 +- fs/proc/kcore.c | 2 +- fs/read_write.c | 2 +- fs/select.c | 2 +- fs/super.c | 4 +- include/drm/drm_accel.h | 3 +- include/drm/drm_gem.h | 3 +- include/drm/drm_gem_dma_helper.h | 1 + include/linux/buffer_head.h | 3 +- include/linux/filelock.h | 14 ++- include/linux/fs.h | 88 +++++++++++------- include/linux/path.h | 6 -- include/linux/percpu-rwsem.h | 2 +- include/linux/syscalls.h | 2 +- include/linux/user_namespace.h | 6 +- include/linux/writeback.h | 7 +- include/trace/events/writeback.h | 10 +- include/uapi/linux/auto_fs.h | 2 +- include/uapi/linux/fcntl.h | 84 ++++++++++++----- kernel/user.c | 6 +- mm/mmap.c | 2 +- tools/testing/selftests/core/close_range_test.c | 39 ++++++++ 66 files changed, 662 insertions(+), 310 deletions(-) . Date: Fri, 13 Sep 2024 16:41:58 +0200 From: Christian Brauner To: Linus Torvalds Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] vfs mount Hey Linus, /* Summary */ Recently, we added the ability to list mounts in other mount namespaces and the ability to retrieve namespace file descriptors without having to go through procfs by deriving them from pidfds. This extends nsfs in two ways: (1) Add the ability to retrieve information about a mount namespace via NS_MNT_GET_INFO. This will return the mount namespace id and the number of mounts currently in the mount namespace. The number of mounts can be used to size the buffer that needs to be used for listmount() and is in general useful without having to actually iterate through all the mounts. The structure is extensible. (2) Add the ability to iterate through all mount namespaces over which the caller holds privilege returning the file descriptor for the next or previous mount namespace. To retrieve a mount namespace the caller must be privileged wrt to it's owning user namespace. This means that PID 1 on the host can list all mounts in all mount namespaces or that a container can list all mounts of its nested containers. Optionally pass a structure for NS_MNT_GET_INFO with NS_MNT_GET_{PREV,NEXT} to retrieve information about the mount namespace in one go. (1) and (2) can be implemented for other namespace types easily. Together with recent api additions this means one can iterate through all mounts in all mount namespaces without ever touching procfs. The merge message contains example code how to do this. /* Testing */ gcc version 14.2.0 (Debian 14.2.0-3) Debian clang version 16.0.6 (27+b1) All patches are based on v6.11-rc1 and have been sitting in linux-next. No build failures or warnings were observed. /* Conflicts */ Merge conflicts with mainline ============================= No known conflicts. Merge conflicts with other trees ================================ (1) linux-next: build failure after merge of the bpf-next tree https://lore.kernel.org/r/20240913133240.066ae790@canb.auug.org.au The reported merge conflict isn't really with bpf-next but with the series to convert to fd_file() accessors for the changed struct fd representation. The patch you need to fix this however is correct in that draft. But honestly, it's pretty easy for you to figure out on your own anyway. The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.mount for you to fetch changes up to 49224a345c488a0e176f193a60a2a76e82349e3e: Merge patch series "nsfs: iterate through mount namespaces" (2024-08-09 12:47:05 +0200) Please consider pulling these changes from the signed vfs-6.12.mount tag. Thanks! Christian ---------------------------------------------------------------- vfs-6.12.mount ---------------------------------------------------------------- Christian Brauner (5): fs: allow mount namespace fd fs: add put_mnt_ns() cleanup helper file: add fput() cleanup helper nsfs: iterate through mount namespaces Merge patch series "nsfs: iterate through mount namespaces" fs/mount.h | 13 ++++++ fs/namespace.c | 74 +++++++++++++++++++++++++----- fs/nsfs.c | 102 +++++++++++++++++++++++++++++++++++++++++- include/linux/file.h | 2 + include/linux/mnt_namespace.h | 4 ++ include/uapi/linux/nsfs.h | 16 +++++++ 6 files changed, 198 insertions(+), 13 deletions(-) . Date: Fri, 13 Sep 2024 16:42:31 +0200 From: Christian Brauner To: Linus Torvalds Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] vfs folio Hey Linus, /* Summary */ This contains work to port write_begin and write_end to rely on folios for various filesystems. This converts ocfs2, vboxfs, orangefs, jffs2, hostfs, fuse, f2fs, ecryptfs, ntfs3, nilfs2, reiserfs, minixfs, qnx6, sysv, ufs, and squashfs. After this series lands a bunch of the filesystems in this list do not mention struct page anymore. /* Testing */ gcc version 14.2.0 (Debian 14.2.0-3) Debian clang version 16.0.6 (27+b1) All patches are based on v6.11-rc1 and have been sitting in linux-next. No build failures or warnings were observed. /* Conflicts */ Merge conflicts with mainline ============================= No known merge conflicts. Merge conflicts with other trees ================================ Most of the conflicts are mechanical conversion. The only nasty conversion is f2fs. The provided conflict resolution by Stephen has been acked by the f2fs maintainer. (1) linux-next: manual merge of the vfs-brauner tree with the f2fs tree https://lore.kernel.org/all/20240905101845.0a47926a@canb.auug.org.au (2) linux-next: manual merge of the vfs-brauner tree with the ext4 tree https://lore.kernel.org/r/20240904091532.4b0dee26@canb.auug.org.au (3) linux-next: manual merge of the vfs-brauner tree with the mm tree https://lore.kernel.org/r/20240902112101.2728f045@canb.auug.org.au (4) linux-next: manual merge of the vfs-brauner tree with the exfat tree https://lore.kernel.org/r/20240812081046.369bbba5@canb.auug.org.au The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.folio for you to fetch changes up to 84e0e03b308816a48c67f6da2168fcea6d49eda8: Squashfs: Ensure all readahead pages have been used (2024-08-23 13:11:36 +0200) Please consider pulling these changes from the signed vfs-6.12.folio tag. Thanks! Christian ---------------------------------------------------------------- vfs-6.12.folio ---------------------------------------------------------------- Christian Brauner (3): Merge branch 'work.write.end' Merge patch series "Finish converting jffs2 to folios" Merge patch series "Squashfs: Update code to not use page->index" Matthew Wilcox (Oracle) (56): ufs: Convert ufs_get_page() to use a folio ufs: Convert ufs_get_page() to ufs_get_folio() ufs: Convert ufs_check_page() to ufs_check_folio() ufs: Convert ufs_find_entry() to take a folio ufs: Convert ufs_set_link() and ufss_dotdot() to take a folio ufs: Convert ufs_delete_entry() to work on a folio ufs: Convert ufs_make_empty() to use a folio ufs: Convert ufs_prepare_chunk() to take a folio ufs; Convert ufs_commit_chunk() to take a folio ufs: Convert directory handling to kmap_local sysv: Convert dir_get_page() to dir_get_folio() sysv: Convert sysv_find_entry() to take a folio sysv: Convert sysv_set_link() and sysv_dotdot() to take a folio sysv: Convert sysv_delete_entry() to work on a folio sysv: Convert sysv_make_empty() to use a folio sysv: Convert sysv_prepare_chunk() to take a folio sysv: Convert dir_commit_chunk() to take a folio qnx6: Convert qnx6_get_page() to qnx6_get_folio() qnx6: Convert qnx6_find_entry() to qnx6_find_ino() qnx6: Convert qnx6_longname() to take a folio qnx6: Convert qnx6_checkroot() to use a folio qnx6: Convert qnx6_iget() to use a folio qnx6: Convert directory handling to use kmap_local minixfs: Convert dir_get_page() to dir_get_folio() minixfs: Convert minix_find_entry() to take a folio minixfs: Convert minix_set_link() and minix_dotdot() to take a folio minixfs: Convert minix_delete_entry() to work on a folio minixfs: Convert minix_make_empty() to use a folio minixfs: Convert minix_prepare_chunk() to take a folio minixfs: Convert dir_commit_chunk() to take a folio fs: Convert block_write_begin() to use a folio reiserfs: Convert grab_tail_page() to use a folio reiserfs: Convert reiserfs_write_begin() to use a folio block: Use a folio in blkdev_write_end() buffer: Use a folio in generic_write_end() nilfs2: Use a folio in nilfs_recover_dsync_blocks() ntfs3: Remove reset_log_file() buffer: Convert block_write_end() to take a folio ecryptfs: Convert ecryptfs_write_end() to use a folio ecryptfs: Use a folio in ecryptfs_write_begin() f2fs: Convert f2fs_write_end() to use a folio f2fs: Convert f2fs_write_begin() to use a folio fuse: Convert fuse_write_end() to use a folio fuse: Convert fuse_write_begin() to use a folio hostfs: Convert hostfs_write_end() to use a folio jffs2: Convert jffs2_write_end() to use a folio jffs2: Convert jffs2_write_begin() to use a folio orangefs: Convert orangefs_write_end() to use a folio orangefs: Convert orangefs_write_begin() to use a folio vboxsf: Use a folio in vboxsf_write_end() fs: Convert aops->write_end to take a folio fs: Convert aops->write_begin to take a folio ocfs2: Convert ocfs2_write_zero_page to use a folio buffer: Convert __block_write_begin() to take a folio jffs2: Convert jffs2_do_readpage_nolock to take a folio jffs2: Use a folio in jffs2_garbage_collect_dnode() Phillip Lougher (5): Squashfs: Update page_actor to not use page->index Squashfs: Update squashfs_readahead() to not use page->index Squashfs: Update squashfs_readpage_block() to not use page->index Squashfs: Rewrite and update squashfs_readahead_fragment() to not use page->index Squashfs: Ensure all readahead pages have been used Documentation/filesystems/locking.rst | 6 +- Documentation/filesystems/vfs.rst | 12 +- block/fops.c | 12 +- drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 47 +++--- fs/adfs/inode.c | 5 +- fs/affs/file.c | 22 ++- fs/bcachefs/fs-io-buffered.c | 8 +- fs/bcachefs/fs-io-buffered.h | 6 +- fs/bfs/file.c | 4 +- fs/buffer.c | 63 ++++---- fs/ceph/addr.c | 13 +- fs/ecryptfs/mmap.c | 86 +++++------ fs/exfat/file.c | 8 +- fs/exfat/inode.c | 9 +- fs/ext2/dir.c | 4 +- fs/ext2/inode.c | 8 +- fs/ext4/ext4.h | 4 +- fs/ext4/inline.c | 14 +- fs/ext4/inode.c | 37 +++-- fs/ext4/verity.c | 8 +- fs/f2fs/data.c | 87 +++++------ fs/f2fs/super.c | 8 +- fs/f2fs/verity.c | 8 +- fs/fat/inode.c | 9 +- fs/fuse/file.c | 47 +++--- fs/hfs/extent.c | 6 +- fs/hfs/hfs_fs.h | 2 +- fs/hfs/inode.c | 5 +- fs/hfsplus/extents.c | 6 +- fs/hfsplus/hfsplus_fs.h | 2 +- fs/hfsplus/inode.c | 5 +- fs/hostfs/hostfs_kern.c | 23 +-- fs/hpfs/file.c | 9 +- fs/hugetlbfs/inode.c | 4 +- fs/iomap/buffered-io.c | 2 +- fs/jffs2/file.c | 88 ++++++------ fs/jffs2/gc.c | 25 ++-- fs/jfs/inode.c | 8 +- fs/libfs.c | 13 +- fs/minix/dir.c | 134 +++++++++-------- fs/minix/inode.c | 8 +- fs/minix/minix.h | 40 +++--- fs/minix/namei.c | 32 ++--- fs/namei.c | 10 +- fs/nfs/file.c | 7 +- fs/nilfs2/dir.c | 4 +- fs/nilfs2/inode.c | 10 +- fs/nilfs2/recovery.c | 16 +-- fs/ntfs3/file.c | 9 +- fs/ntfs3/inode.c | 51 +------ fs/ntfs3/ntfs_fs.h | 5 +- fs/ocfs2/aops.c | 12 +- fs/ocfs2/aops.h | 2 +- fs/ocfs2/file.c | 17 +-- fs/ocfs2/mmap.c | 6 +- fs/omfs/file.c | 4 +- fs/orangefs/inode.c | 39 +++-- fs/qnx6/dir.c | 88 ++++++------ fs/qnx6/inode.c | 25 ++-- fs/qnx6/namei.c | 4 +- fs/qnx6/qnx6.h | 9 +- fs/reiserfs/inode.c | 57 ++++---- fs/squashfs/file.c | 86 +++++++---- fs/squashfs/file_direct.c | 19 +-- fs/squashfs/page_actor.c | 11 +- fs/squashfs/page_actor.h | 6 +- fs/sysv/dir.c | 158 ++++++++++---------- fs/sysv/itree.c | 8 +- fs/sysv/namei.c | 32 ++--- fs/sysv/sysv.h | 20 +-- fs/ubifs/file.c | 13 +- fs/udf/file.c | 2 +- fs/udf/inode.c | 12 +- fs/ufs/dir.c | 231 ++++++++++++++---------------- fs/ufs/inode.c | 12 +- fs/ufs/namei.c | 39 +++-- fs/ufs/ufs.h | 20 +-- fs/ufs/util.h | 6 +- fs/vboxsf/file.c | 24 ++-- include/linux/buffer_head.h | 14 +- include/linux/fs.h | 6 +- mm/filemap.c | 6 +- mm/shmem.c | 11 +- 83 files changed, 994 insertions(+), 1064 deletions(-) . Date: Fri, 13 Sep 2024 16:43:10 +0200 From: Christian Brauner To: Linus Torvalds Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] vfs file Hey Linus, /* Summary */ This is the work to cleanup and shrink struct file significantly. You should've already seen most of the work in here. Right now, (focussing on x86) struct file is 232 bytes. After this series struct file will be 184 bytes aka 3 cacheline and a spare 8 bytes for future extensions at the end of the struct. With struct file being as ubiquitous as it is this should make a difference for file heavy workloads and allow further optimizations in the future. * struct fown_struct was embeeded into struct file letting it take up 32 bytes in total when really it shouldn't even be embedded in struct file in the first place. Instead, actual users of struct fown_struct now allocate the struct on demand. This frees up 24 bytes. * Move struct file_ra_state into the union containg the cleanup hooks and move f_iocb_flags out of the union. This closes a 4 byte hole we created earlier and brings struct file to 192 bytes. Which means struct file is 3 cachelines and we managed to shrink it by 40 bytes. * Reorder struct file so that nothing crosses a cacheline. I suspect that in the future we will end up reordering some members to mitigate false sharing issues or just because someone does actually provide really good perf data. * Shrinking struct file to 192 bytes is only part of the work. Files use a slab that is SLAB_TYPESAFE_BY_RCU and when a kmem cache is created with SLAB_TYPESAFE_BY_RCU the free pointer must be located outside of the object because the cache doesn't know what part of the memory can safely be overwritten as it may be needed to prevent object recycling. That has the consequence that SLAB_TYPESAFE_BY_RCU may end up adding a new cacheline. So this also contains work to add a new kmem_cache_create_rcu() function that allows the caller to specify an offset where the freelist pointer is supposed to be placed. Thus avoiding the implicit addition of a fourth cacheline. * And finally this removes the f_version member in struct file. The f_version member isn't particularly well-defined. It is mainly used as a cookie to detect concurrent seeks when iterating directories. But it is also abused by some subsystems for completely unrelated things. It is mostly a directory and filesystem specific thing that doesn't really need to live in struct file and with its wonky semantics it really lacks a specific function. For pipes, f_version is (ab)used to defer poll notifications until a write has happened. And struct pipe_inode_info is used by multiple struct files in their ->private_data so there's no chance of pushing that down into file->private_data without introducing another pointer indirection. But pipes don't rely on f_pos_lock so this adds a union into struct file encompassing f_pos_lock and a pipe specific f_pipe member that pipes can use. This union of course can be extended to other file types and is similar to what we do in struct inode already. /* Testing */ gcc version 14.2.0 (Debian 14.2.0-3) Debian clang version 16.0.6 (27+b1) All patches are based on v6.11-rc4 and have been sitting in linux-next. No build failures or warnings were observed. /* Conflicts */ Merge conflicts with mainline ============================= No known conflicts. Merge conflicts with other trees ================================ (1) This will have merge conflict with the vfs.misc pull request sent as: https://lore.kernel.org/r/20240913-vfs-misc-348ac639e66e@brauner Assuming you merge vfs.misc first the conflict resolution looks like this: diff --cc fs/fcntl.c index 22ec683ad8f8,0587a0e221a6..f6fde75a3bd5 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@@ -343,12 -414,30 +414,36 @@@ static long f_dupfd_query(int fd, struc return f.file == filp; } +/* Let the caller figure out whether a given file was just created. */ +static long f_created_query(const struct file *filp) +{ + return !!(filp->f_mode & FMODE_CREATED); +} + + static int f_owner_sig(struct file *filp, int signum, bool setsig) + { + int ret = 0; + struct fown_struct *f_owner; + + might_sleep(); + + if (setsig) { + if (!valid_signal(signum)) + return -EINVAL; + + ret = file_f_owner_allocate(filp); + if (ret) + return ret; + } + + f_owner = file_f_owner(filp); + if (setsig) + f_owner->signum = signum; + else if (f_owner) + ret = f_owner->signum; + return ret; + } + static long do_fcntl(int fd, unsigned int cmd, unsigned long arg, struct file *filp) { (2) linux-next: manual merge of the security tree with the vfs-brauner tree https://lore.kernel.org/r/20240910132740.775b92e1@canb.auug.org.au The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399: Linux 6.11-rc4 (2024-08-18 13:17:27 -0700) are available in the Git repository at: git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.file for you to fetch changes up to 24a988f75c8a5f16ef935c51039700e985767eb9: Merge patch series "file: remove f_version" (2024-09-12 11:58:46 +0200) Please consider pulling these changes from the signed vfs-6.12.file tag. Note that this work provides the base for the slab pull request this cycle. So just to not mess with Vlastimil's pr I pushed two tags: (1) vfs-6.12.file (2) vfs-6.12.file.kmem The second tag only contains what slab relies on and (1) contains everything for this cycle. If you disagree with additional stuff in (1) you may still consider pulling (2). Thanks! Christian ---------------------------------------------------------------- vfs-6.12.file ---------------------------------------------------------------- Christian Brauner (27): file: reclaim 24 bytes from f_owner fs: switch f_iocb_flags and f_ra fs: pack struct file mm: remove unused argument from create_cache() mm: add kmem_cache_create_rcu() fs: use kmem_cache_create_rcu() Merge patch series "fs,mm: add kmem_cache_create_rcu()" adi: remove unused f_version ceph: remove unused f_version s390: remove unused f_version fs: add vfs_setpos_cookie() fs: add must_set_pos() fs: use must_set_pos() fs: add generic_llseek_cookie() affs: store cookie in private data ext2: store cookie in private data ext4: store cookie in private data input: remove f_version abuse ocfs2: store cookie in private data proc: store cookie in private data udf: store cookie in private data ufs: store cookie in private data ubifs: store cookie in private data fs: add f_pipe pipe: use f_pipe fs: remove f_version Merge patch series "file: remove f_version" R Sundar (1): mm: Removed @freeptr_offset to prevent doc warning drivers/char/adi.c | 1 - drivers/input/input.c | 47 ++++++----- drivers/net/tun.c | 6 ++ drivers/s390/char/hmcdrv_dev.c | 3 - drivers/tty/tty_io.c | 6 ++ fs/affs/dir.c | 44 +++++++++-- fs/ceph/dir.c | 1 - fs/ext2/dir.c | 28 ++++++- fs/ext4/dir.c | 50 ++++++------ fs/ext4/ext4.h | 2 + fs/ext4/inline.c | 7 +- fs/fcntl.c | 166 +++++++++++++++++++++++++++++++-------- fs/file_table.c | 16 ++-- fs/internal.h | 1 + fs/locks.c | 6 +- fs/notify/dnotify/dnotify.c | 6 +- fs/ocfs2/dir.c | 3 +- fs/ocfs2/file.c | 11 ++- fs/ocfs2/file.h | 1 + fs/pipe.c | 8 +- fs/proc/base.c | 30 ++++++-- fs/read_write.c | 171 +++++++++++++++++++++++++++++++---------- fs/ubifs/dir.c | 64 ++++++++++----- fs/udf/dir.c | 28 ++++++- fs/ufs/dir.c | 28 ++++++- include/linux/fs.h | 106 +++++++++++++++---------- include/linux/slab.h | 9 +++ mm/slab.h | 2 + mm/slab_common.c | 138 +++++++++++++++++++++++---------- mm/slub.c | 20 +++-- net/core/sock.c | 2 +- security/selinux/hooks.c | 2 +- security/smack/smack_lsm.c | 2 +- 33 files changed, 744 insertions(+), 271 deletions(-) . Date: Fri, 13 Sep 2024 16:44:09 +0200 From: Christian Brauner To: Linus Torvalds Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] vfs fallocate Hey Linus, /* Summary */ This contains work to try and cleanup some the fallocate mode handling. Currently, it confusingly mixes operation modes and an optional flag. The work here tries to better define operation modes and optional flags allowing the core and filesystem code to use switch statements to switch on the operation mode. /* Testing */ gcc version 14.2.0 (Debian 14.2.0-3) Debian clang version 16.0.6 (27+b1) All patches are based on v6.11-rc4 and have been sitting in linux-next. No build failures or warnings were observed. /* Conflicts */ Merge conflicts with mainline ============================= No known conflicts. Merge conflicts with other trees ================================ No known conflicts. The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399: Linux 6.11-rc4 (2024-08-18 13:17:27 -0700) are available in the Git repository at: git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.fallocate for you to fetch changes up to 7fbabbb4ae2a7203861e4db363e3c861a4df260e: Merge patch series "Subject: sort out the fallocate mode mess" (2024-08-28 16:54:05 +0200) Please consider pulling these changes from the signed vfs-6.12.fallocate tag. Thanks! Christian ---------------------------------------------------------------- vfs-6.12.fallocate ---------------------------------------------------------------- Christian Brauner (1): Merge patch series "Sort out the fallocate mode mess" Christoph Hellwig (6): block: remove checks for FALLOC_FL_NO_HIDE_STALE ext4: remove tracing for FALLOC_FL_NO_HIDE_STALE fs: sort out the fallocate mode vs flag mess xfs: call xfs_flush_unmap_range from xfs_free_file_space xfs: move the xfs_is_always_cow_inode check into xfs_alloc_file_space xfs: refactor xfs_file_fallocate block/fops.c | 10 +- fs/open.c | 51 ++++--- fs/xfs/xfs_bmap_util.c | 11 ++ fs/xfs/xfs_file.c | 353 ++++++++++++++++++++++++++------------------ include/linux/falloc.h | 18 ++- include/trace/events/ext4.h | 1 - include/uapi/linux/falloc.h | 1 + 7 files changed, 258 insertions(+), 187 deletions(-) . Date: Fri, 13 Sep 2024 16:44:47 +0200 From: Christian Brauner To: Linus Torvalds Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] vfs procfs /* Summary */ Hey Linus, This contains the following changes for procfs: * Add config options and parameters to block forcing memory writes. This adds a Kconfig option and boot param to allow removing the FOLL_FORCE flag from /proc//mem write calls as this can be used in various attacks. The traditional forcing behavior is kept as default because it can break GDB and some other use cases. This is the simpler version that you had requested. * Restrict overmounting of ephemeral entities. It is currently possible to mount on top of various ephemeral entities in procfs. This specifically includes magic links. To recap, magic links are links of the form /proc//fd/. They serve as references to a target file and during path lookup they cause a jump to the target path. Such magic links disappear if the corresponding file descriptor is closed. Currently it is possible to overmount such magic links. This is mostly interesting for an attacker that wants to somehow trick a process into e.g., reopening something that it didn't intend to reopen or to hide a malicious file descriptor. But also it risks leaking mounts for long-running processes. When overmounting a magic link like above, the mount will not be detached when the file descriptor is closed. Only the target mountpoint will disappear. Which has the consequence of making it impossible to unmount that mount afterwards. So the mount will stick around until the process exits and the /proc// directory is cleaned up during proc_flush_pid() when the dentries are pruned and invalidated. That in turn means it's possible for a program to accidentally leak mounts and it's also possible to make a task leak mounts without it's knowledge if the attacker just keeps overmounting things under /proc//fd/. Disallow overmounting of such ephemeral entities. * Cleanup the readdir method naming in some procfs file operations. * Replace kmalloc() and strcpy() with a simple kmemdup() call. /* Testing */ gcc version 14.2.0 (Debian 14.2.0-3) Debian clang version 16.0.6 (27+b1) All patches are based on v6.11-rc1 and have been sitting in linux-next. No build failures or warnings were observed. /* Conflicts */ Merge conflicts with mainline ============================= None. Merge conflicts with other trees ================================ None. The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.procfs for you to fetch changes up to 4ad5f9a021bd7e3a48a8d11c52cef36d5e05ffcc: proc: fold kmalloc() + strcpy() into kmemdup() (2024-09-09 10:51:20 +0200) Please consider pulling these changes from the signed vfs-6.12.procfs tag. Thanks! Christian ---------------------------------------------------------------- vfs-6.12.procfs ---------------------------------------------------------------- Adrian Ratiu (1): proc: add config & param to block forcing mem writes Alexey Dobriyan (1): proc: fold kmalloc() + strcpy() into kmemdup() Christian Brauner (7): proc: proc_readfd() -> proc_fd_iterate() proc: proc_readfdinfo() -> proc_fdinfo_iterate() proc: add proc_splice_unmountable() proc: block mounting on top of /proc//map_files/* proc: block mounting on top of /proc//fd/* proc: block mounting on top of /proc//fdinfo/* Merge patch series "proc: restrict overmounting of ephemeral entities" Documentation/admin-guide/kernel-parameters.txt | 10 ++++ fs/proc/base.c | 65 +++++++++++++++++++++++-- fs/proc/fd.c | 16 +++--- fs/proc/generic.c | 4 +- fs/proc/internal.h | 13 +++++ security/Kconfig | 32 ++++++++++++ 6 files changed, 127 insertions(+), 13 deletions(-) . Date: Fri, 13 Sep 2024 16:50:53 +0200 From: Petr Mladek To: Linus Torvalds Cc: Sergey Senozhatsky , Steven Rostedt , John Ogness , Andy Shevchenko , Rasmus Villemoes , Sebastian Andrzej Siewior , Thomas Gleixner , Jan Kara , Peter Zijlstra , linux-kernel@vger.kernel.org Subject: [GIT PULL] printk for 6.12 Hi Linus, please pull the latest printk changes from git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git tags/printk-for-6.12 ============================================= This is the "last" part of the support for the new nbcon consoles. Where "nbcon" stays for "No Big console lock CONsoles" aka not under the console_lock. New callbacks are added to struct console: - write_thread() for flushing nbcon consoles in task context. - write_atomic() for flushing nbcon consoles in atomic context, including NMI. - con->device_lock() and device_unlock() for taking the driver specific lock, for example, port->lock. New printk-specific kthreads are created: - per-console kthreads which get responsible for flushing normal priority messages on nbcon consoles. - thread which gets responsible for flushing normal priority messages on all consoles when CONFIG_RT enabled. The new callbacks are called under a special per-console lock which has already been added back in v6.7. It allows to distinguish three severities: normal, emergency, and panic. A context with a higher priority could take over the ownership when it is safe even in the middle of handling a record. The panic context could do it even when it is not safe. But it is allowed only for the final desperate flush before entering the infinite loop. The new lock helps to flush the messages directly in emergency and panic contexts. But it is not enough in all situations: - console_lock() is still need for synchronization against boot consoles. - con->device_lock() is need for synchronization against other operations on the same HW, e.g. serial port speed setting, non-printk related read/write. The dependency on con->device_lock() is mutual. Any code taking the driver specific lock has to acquire the related nbcon console context as well. For example, see the new uart_port_lock() API. It provides the necessary synchronization against emergency and panic contexts where the messages are flushed only under the new per-console lock. Maybe surprisingly, a quite tricky part is the decision how to flush the consoles in various situations. It has to take into account: - message priority: normal, emergency, panic - scheduling context: task, atomic, deferred_legacy - registered consoles: boot, legacy, nbcon - threads are running: early boot, suspend, shutdown, panic - caller: printk(), pr_flush(), printk_flush_in_panic(), console_unlock(), console_start(), ... The primary decision is made in printk_get_console_flush_type(). It creates a hint what the caller should do: - flush nbcon consoles directly or via the kthread - call the legacy loop (console_unlock()) directly or via irq_work The existing behavior is preserved for the legacy consoles. The only exception is that they are not longer flushed directly from printk() in panic() before CPUs are stopped. But this blocking happens only when at least one nbcon console is registered. The motivation is to increase a chance to produce the crash dump. They legacy consoles might create a deadlock in compare with nbcon consoles. The nbcon console should allow to see the messages even when the crash dump fails. There are three possible ways how nbcon consoles are flushed: - The per-nbcon-console kthread is responsible for flushing messages added with the normal priority. This is the default mode. - The legacy loop, aka console_unlock(), is used when there is still a boot console registered. There is no easy way how to match an early console driver with a nbcon console driver. And the console_lock() provides the only reliable serialization at the moment. The legacy loop uses either con->write_atomic() or con->write_thread() callbacks depending on whether it is allowed to schedule. The atomic variant has to be used from printk(). - In other situations, the messages are flushed directly using write_atomic() which can be called in any context, including NMI. It is primary needed during early boot or shutdown, in emergency situations, and panic. The emergency priority is used by a code called within nbcon_cpu_emergency_enter()/exit(). At the moment, it is used in four situations: WARN(), Oops, lockdep, and RCU stall reports. Finally, there is no nbcon console at the moment. It means that the changes should _not_ modify the existing behavior. The only exception is CONFIG_RT which would force offloading the legacy loop, for normal priority context, into the dedicated kthread. =============================================== Two thirds of the changes has already been in the pull request for 6.11. The user-visible change is that the flushing is no longer postponed in the emergency sections. The logic has been further simplified by using printk_get_console_flush_type() already at this stage. The new third of the changes added the write_thread() callback, implemented the kthreads, and updated procfs and sysfs interfaces. ---------------------------------------------------------------- Jinjie Ruan (1): printk: Use the BITS_PER_LONG macro John Ogness (47): printk: Add notation to console_srcu locking printk: nbcon: Consolidate alloc() and init() printk: nbcon: Clarify rules of the owner/waiter matching printk: nbcon: Remove return value for write_atomic() printk: nbcon: Add detailed doc for write_atomic() printk: nbcon: Add callbacks to synchronize with driver printk: nbcon: Use driver synchronization while (un)registering serial: core: Provide low-level functions to lock port serial: core: Introduce wrapper to set @uart_port->cons console: Improve console_srcu_read_flags() comments nbcon: Add API to acquire context for non-printing operations serial: core: Acquire nbcon context in port->lock wrapper printk: nbcon: Do not rely on proxy headers printk: Make console_is_usable() available to nbcon.c printk: Let console_is_usable() handle nbcon printk: Add @flags argument for console_is_usable() printk: nbcon: Add helper to assign priority based on CPU state printk: Track registered boot consoles printk: nbcon: Use nbcon consoles in console_flush_all() printk: Add is_printk_legacy_deferred() printk: nbcon: Flush new records on device_release() printk: Flush nbcon consoles first on panic printk: nbcon: Add unsafe flushing on panic printk: Avoid console_lock dance if no legacy or boot consoles printk: Track nbcon consoles printk: Coordinate direct printing in panic printk: Add helper for flush type logic panic: Mark emergency section in oops rcu: Mark emergency sections in rcu stalls lockdep: Mark emergency sections in lockdep splats printk: nbcon: Use raw_cpu_ptr() instead of open coding printk: nbcon: Add function for printers to reacquire ownership printk: Fail pr_flush() if before SYSTEM_SCHEDULING printk: Flush console on unregister_console() printk: nbcon: Add context to usable() and emit() printk: nbcon: Init @nbcon_seq to highest possible printk: nbcon: Relocate nbcon_atomic_emit_one() printk: nbcon: Use thread callback if in task context for legacy printk: nbcon: Rely on kthreads for normal operation printk: Provide helper for message prepending printk: nbcon: Show replay message on takeover proc: consoles: Add notation to c_start/c_stop proc: Add nbcon support for /proc/consoles tty: sysfs: Add nbcon support for 'active' printk: Implement legacy printer kthread for PREEMPT_RT printk: nbcon: Assign nice -20 for printing threads printk: Avoid false positive lockdep report for legacy printing Petr Mladek (1): printk: Properly deal with nbcon consoles on seq init Sebastian Andrzej Siewior (1): printk: Check printk_deferred_enter()/_exit() usage Thomas Gleixner (4): printk: nbcon: Provide function to flush using write_atomic() printk: nbcon: Implement emergency sections panic: Mark emergency section in warn printk: nbcon: Introduce printer kthreads drivers/tty/serial/8250/8250_core.c | 6 +- drivers/tty/serial/amba-pl011.c | 2 +- drivers/tty/serial/serial_core.c | 16 +- drivers/tty/tty_io.c | 2 +- fs/proc/consoles.c | 7 +- include/linux/console.h | 158 +++++- include/linux/printk.h | 33 +- include/linux/serial_core.h | 117 ++++- kernel/locking/lockdep.c | 83 +++- kernel/panic.c | 9 + kernel/printk/internal.h | 207 +++++++- kernel/printk/nbcon.c | 936 +++++++++++++++++++++++++++++++++--- kernel/printk/printk.c | 714 ++++++++++++++++++++++----- kernel/printk/printk_ringbuffer.h | 7 +- kernel/printk/printk_safe.c | 25 +- kernel/rcu/tree_exp.h | 7 + kernel/rcu/tree_stall.h | 9 + 17 files changed, 2125 insertions(+), 213 deletions(-) . Date: Fri, 13 Sep 2024 17:40:01 +0100 From: Will Deacon To: torvalds@linux-foundation.org Cc: catalin.marinas@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kernel-team@android.com Subject: [GIT PULL] arm64 updates for 6.12 Hi Linus, Like a bunch of folks, I'll be living off conference coffee and canapes for the next week or so, so here's the arm64 pull request for 6.12 before the chaos descends and the malnutrition sets in. There's the usual summary in the tag, but the highlights are support for Arm's "Permission Overlay Extension" using memory protection keys, support for running as a protected guest on Android as well as perf support for a bunch of new interconnect PMUs. There's a trivial conflict with the kvmarm tree which was resolved in linux-next as per [1]. Any issues, just yell. Please pull, Will [1] https://lore.kernel.org/r/20240905160856.14e95d14@canb.auug.org.au --->8 The following changes since commit 7c626ce4bae1ac14f60076d00eafe71af30450ba: Linux 6.11-rc3 (2024-08-11 14:27:14 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git tags/arm64-upstream for you to fetch changes up to 75078ba2b38a38d94017bd334f71aaed205e30a4: Merge branch 'for-next/timers' into for-next/core (2024-09-12 13:44:03 +0100) ---------------------------------------------------------------- arm64 updates for 6.12 ACPI: * Enable PMCG erratum workaround for HiSilicon HIP10 and 11 platforms. * Ensure arm64-specific IORT header is covered by MAINTAINERS. CPU Errata: * Enable workaround for hardware access/dirty issue on Ampere-1A cores. Memory management: * Define PHYSMEM_END to fix a crash in the amdgpu driver. * Avoid tripping over invalid kernel mappings on the kexec() path. * Userspace support for the Permission Overlay Extension (POE) using protection keys. Perf and PMUs: * Add support for the "fixed instruction counter" extension in the CPU PMU architecture. * Extend and fix the event encodings for Apple's M1 CPU PMU. * Allow LSM hooks to decide on SPE permissions for physical profiling. * Add support for the CMN S3 and NI-700 PMUs. Confidential Computing: * Add support for booting an arm64 kernel as a protected guest under Android's "Protected KVM" (pKVM) hypervisor. Selftests: * Fix vector length issues in the SVE/SME sigreturn tests * Fix build warning in the ptrace tests. Timers: * Add support for PR_{G,S}ET_TSC so that 'rr' can deal with non-determinism arising from the architected counter. Miscellaneous: * Rework our IPI-based CPU stopping code to try NMIs if regular IPIs don't succeed. * Minor fixes and cleanups. ---------------------------------------------------------------- Anastasia Belova (1): arm64: esr: Define ESR_ELx_EC_* constants as UL Andre Przywara (1): kselftest/arm64: signal: fix/refactor SVE vector length enumeration Andy Shevchenko (1): ACPI/IORT: Switch to use kmemdup_array() Anshuman Khandual (2): arm64/mm: Drop PMD_SECT_VALID arm64/mm: Drop TCR_SMP_FLAGS Barry Song (1): mm: arm64: document why pte is not advanced in contpte_ptep_set_access_flags() D Scott Phillips (2): arm64: errata: Enable the AC03_CPU_38 workaround for ampere1a arm64: Expose the end of the linear map in PHYSMEM_END Dan Carpenter (1): perf: arm-ni: Fix an NULL vs IS_ERR() bug Dave Martin (2): arm64: signal: Fix some under-bracketed UAPI macros arm64: el2_setup.h: Rename some labels to be more diff-friendly Dev Jain (1): kselftest/arm64: Fix build warnings for ptrace Douglas Anderson (1): arm64: smp: smp_send_stop() and crash_smp_send_stop() should try non-NMI first Fares Mehanna (1): arm64: trans_pgd: mark PTEs entries as valid to avoid dead kexec() Hanjun Guo (1): ACPI: ARM64: add acpi_iort.h to MAINTAINERS Huang Xiaojia (1): arm64: Constify struct kobj_type Ilkka Koskinen (1): perf: arm_pmuv3: Use BR_RETIRED for HW branch event if enabled James Clark (1): drivers/perf: arm_spe: Use perf_allow_kernel() for permissions Jing Zhang (1): drivers/perf: Fix ali_drw_pmu driver interrupt status clearing Joey Gouly (32): KVM: arm64: Make kvm_at() take an OP_AT_* arm64: disable trapping of POR_EL0 to EL2 arm64: cpufeature: add Permission Overlay Extension cpucap arm64: context switch POR_EL0 register KVM: arm64: Save/restore POE registers KVM: arm64: use `at s1e1a` for POE KVM: arm64: Sanitise ID_AA64MMFR3_EL1 KVM: selftests: get-reg-list: add Permission Overlay registers powerpc/mm: add ARCH_PKEY_BITS to Kconfig x86/mm: add ARCH_PKEY_BITS to Kconfig mm: use ARCH_PKEY_BITS to define VM_PKEY_BITN arm64: enable the Permission Overlay Extension for EL0 arm64: re-order MTE VM_ flags arm64: add POIndex defines arm64: convert protection key into vm_flags and pgprot values arm64: mask out POIndex when modifying a PTE arm64: handle PKEY/POE faults arm64: add pte_access_permitted_no_overlay() arm64: implement PKEYS support arm64: add POE signal support arm64/ptrace: add support for FEAT_POE arm64: enable POE and PIE to coexist arm64: enable PKEY support for CPUs with S1POE arm64: add Permission Overlay Extension Kconfig kselftest/arm64: move get_header() selftests: mm: move fpregs printing selftests: mm: make protection_keys test work on arm64 kselftest/arm64: add HWCAP test for FEAT_S1POE kselftest/arm64: parse POE_MAGIC in a signal frame kselftest/arm64: Add test case for POR_EL0 signal frame records arm64/mm: use lm_alias() with addresses passed to memblock_free() arm64: pkeys: remove redundant WARN Krishna chaitanya chundru (4): perf/dwc_pcie: Fix registration issue in multi PCIe controller instances Documentation: dwc_pcie_pmu: Update bdf to sbdf perf/dwc_pcie: Always register for PCIe bus notifier perf/dwc_pcie: Add support for QCOM vendor devices Marc Zyngier (1): firmware/smccc: Call arch-specific hook on discovering KVM services Mark Brown (1): kselftest/arm64: Actually test SME vector length changes via sigreturn Min-Hua Chen (1): arm64: hibernate: Fix warning for cast from restricted gfp_t Peter Collingbourne (1): arm64: Implement prctl(PR_{G,S}ET_TSC) Rob Herring (Arm) (8): perf: arm_pmu: Use of_property_present() perf: arm_pmu: Remove event index to counter remapping perf: arm_pmuv3: Prepare for more than 32 counters KVM: arm64: pmu: Use arm_pmuv3.h register accessors KVM: arm64: pmu: Use generated define for PMSELR_EL0.SEL access arm64: perf/kvm: Use a common PMU cycle counter define KVM: arm64: Refine PMU defines for number of counters perf: arm_pmuv3: Add support for Armv9.4 PMU instruction counter Robin Murphy (13): perf/arm-cmn: Refactor node ID handling. Again. perf/arm-cmn: Fix CCLA register offset perf/arm-cmn: Ensure dtm_idx is big enough perf/arm-cmn: Improve build-time assertion perf/arm-cmn: Make cycle counts less surprising perf/arm-cmn: Refactor DTC PMU register access dt-bindings: perf: arm-cmn: Add CMN S3 perf/arm-cmn: Support CMN S3 perf/arm-cmn: Clean up unnecessary NUMA_NO_NODE check perf/arm-cmn: Improve format attr printing dt-bindings/perf: Add Arm NI-700 PMU perf: Add driver for Arm NI-700 interconnect PMU MAINTAINERS: List Arm interconnect PMUs as supported Rong Qianfeng (1): arm64/mm: Delete __init region from memblock.reserved Will Deacon (16): drivers/virt: pkvm: Add initial support for running as a protected guest arm64: mm: Add top-level dispatcher for internal mem_encrypt API drivers/virt: pkvm: Hook up mem_encrypt API using pKVM hypercalls arm64: mm: Add confidential computing hook to ioremap_prot() drivers/virt: pkvm: Intercept ioremap using pKVM MMIO_GUARD hypercall arm64: smccc: Reserve block of KVM "vendor" services for pKVM hypercalls Merge remote-tracking branch 'kvmarm/arm64-shared-6.12' into for-next/poe Merge branch 'for-next/acpi' into for-next/core Merge branch 'for-next/errata' into for-next/core Merge branch 'for-next/misc' into for-next/core Merge branch 'for-next/mm' into for-next/core Merge branch 'for-next/perf' into for-next/core Merge branch 'for-next/pkvm-guest' into for-next/core Merge branch 'for-next/poe' into for-next/core Merge branch 'for-next/selftests' into for-next/core Merge branch 'for-next/timers' into for-next/core Yangyu Chen (1): drivers/perf: apple_m1: add known PMU events Yicong Yang (4): ACPI/IORT: Add PMCG platform information for HiSilicon HIP10/11 drivers/perf: hisi_pcie: Record hardware counts correctly drivers/perf: hisi_pcie: Fix TLP headers bandwidth counting drivers/perf: hisi_pcie: Export supported Root Ports [bdf_min, bdf_max] Yue Haibing (2): arm64: mm: Remove unused declaration early_io_map() arm64/sve: Remove unused declaration read_smcr_features() Documentation/admin-guide/perf/arm-ni.rst | 17 + Documentation/admin-guide/perf/dwc_pcie_pmu.rst | 16 +- Documentation/admin-guide/perf/hisi-pcie-pmu.rst | 4 +- Documentation/admin-guide/perf/index.rst | 1 + Documentation/arch/arm64/elf_hwcaps.rst | 2 + Documentation/arch/arm64/silicon-errata.rst | 6 +- .../devicetree/bindings/perf/arm,cmn.yaml | 1 + Documentation/devicetree/bindings/perf/arm,ni.yaml | 30 + Documentation/virt/kvm/arm/hypercalls.rst | 98 +++ MAINTAINERS | 12 + arch/arm/include/asm/arm_pmuv3.h | 20 + arch/arm/include/asm/hypervisor.h | 2 + arch/arm64/Kconfig | 26 +- arch/arm64/include/asm/arm_pmuv3.h | 53 +- arch/arm64/include/asm/cpufeature.h | 6 + arch/arm64/include/asm/cputype.h | 2 + arch/arm64/include/asm/el2_setup.h | 25 +- arch/arm64/include/asm/esr.h | 88 +-- arch/arm64/include/asm/fpsimd.h | 2 - arch/arm64/include/asm/hwcap.h | 1 + arch/arm64/include/asm/hypervisor.h | 11 + arch/arm64/include/asm/io.h | 4 + arch/arm64/include/asm/kvm_asm.h | 3 +- arch/arm64/include/asm/kvm_host.h | 12 +- arch/arm64/include/asm/mem_encrypt.h | 15 + arch/arm64/include/asm/memory.h | 2 + arch/arm64/include/asm/mman.h | 10 +- arch/arm64/include/asm/mmu.h | 2 +- arch/arm64/include/asm/mmu_context.h | 46 +- arch/arm64/include/asm/pgtable-hwdef.h | 11 +- arch/arm64/include/asm/pgtable-prot.h | 8 +- arch/arm64/include/asm/pgtable.h | 34 +- arch/arm64/include/asm/pkeys.h | 106 +++ arch/arm64/include/asm/por.h | 33 + arch/arm64/include/asm/processor.h | 6 + arch/arm64/include/asm/set_memory.h | 1 + arch/arm64/include/asm/sysreg.h | 4 +- arch/arm64/include/asm/thread_info.h | 2 + arch/arm64/include/asm/traps.h | 1 + arch/arm64/include/asm/vncr_mapping.h | 1 + arch/arm64/include/uapi/asm/hwcap.h | 1 + arch/arm64/include/uapi/asm/mman.h | 9 + arch/arm64/include/uapi/asm/sigcontext.h | 13 +- arch/arm64/kernel/cpu_errata.c | 10 +- arch/arm64/kernel/cpufeature.c | 23 + arch/arm64/kernel/cpuinfo.c | 3 +- arch/arm64/kernel/hibernate.c | 2 +- arch/arm64/kernel/process.c | 97 ++- arch/arm64/kernel/ptrace.c | 46 ++ arch/arm64/kernel/signal.c | 62 ++ arch/arm64/kernel/smp.c | 164 +++-- arch/arm64/kernel/traps.c | 26 +- arch/arm64/kvm/hyp/include/hyp/fault.h | 5 +- arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h | 27 + arch/arm64/kvm/pmu-emul.c | 14 +- arch/arm64/kvm/pmu.c | 87 +-- arch/arm64/kvm/sys_regs.c | 36 +- arch/arm64/mm/Makefile | 2 +- arch/arm64/mm/contpte.c | 6 + arch/arm64/mm/fault.c | 55 +- arch/arm64/mm/init.c | 12 +- arch/arm64/mm/ioremap.c | 23 +- arch/arm64/mm/mem_encrypt.c | 50 ++ arch/arm64/mm/mmap.c | 11 + arch/arm64/mm/mmu.c | 45 ++ arch/arm64/mm/proc.S | 4 +- arch/arm64/mm/trans_pgd.c | 6 +- arch/arm64/tools/cpucaps | 1 + arch/arm64/tools/sysreg | 30 + arch/powerpc/Kconfig | 4 + arch/x86/Kconfig | 4 + drivers/acpi/arm64/iort.c | 9 +- drivers/firmware/smccc/kvm_guest.c | 2 + drivers/perf/Kconfig | 7 + drivers/perf/Makefile | 1 + drivers/perf/alibaba_uncore_drw_pmu.c | 2 +- drivers/perf/apple_m1_cpu_pmu.c | 182 +++-- drivers/perf/arm-cmn.c | 318 +++++---- drivers/perf/arm-ni.c | 781 +++++++++++++++++++++ drivers/perf/arm_pmu.c | 11 +- drivers/perf/arm_pmu_platform.c | 2 +- drivers/perf/arm_pmuv3.c | 148 ++-- drivers/perf/arm_spe_pmu.c | 9 +- drivers/perf/arm_v6_pmu.c | 6 +- drivers/perf/arm_v7_pmu.c | 77 +- drivers/perf/arm_xscale_pmu.c | 12 +- drivers/perf/dwc_pcie_pmu.c | 22 +- drivers/perf/hisilicon/hisi_pcie_pmu.c | 34 +- drivers/virt/coco/Kconfig | 2 + drivers/virt/coco/Makefile | 1 + drivers/virt/coco/pkvm-guest/Kconfig | 10 + drivers/virt/coco/pkvm-guest/Makefile | 2 + drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c | 127 ++++ fs/proc/task_mmu.c | 2 + include/kvm/arm_pmu.h | 8 +- include/linux/arm-smccc.h | 88 +++ include/linux/mm.h | 20 +- include/linux/perf/arm_pmu.h | 10 +- include/linux/perf/arm_pmuv3.h | 9 +- include/linux/perf_event.h | 8 +- include/uapi/linux/elf.h | 1 + kernel/events/core.c | 9 + tools/testing/selftests/arm64/abi/hwcap.c | 14 + tools/testing/selftests/arm64/abi/ptrace.c | 4 +- tools/testing/selftests/arm64/signal/.gitignore | 1 + tools/testing/selftests/arm64/signal/Makefile | 2 +- tools/testing/selftests/arm64/signal/sve_helpers.c | 56 ++ tools/testing/selftests/arm64/signal/sve_helpers.h | 21 + .../testcases/fake_sigreturn_sme_change_vl.c | 46 +- .../testcases/fake_sigreturn_sve_change_vl.c | 30 +- .../selftests/arm64/signal/testcases/poe_siginfo.c | 86 +++ .../selftests/arm64/signal/testcases/ssve_regs.c | 36 +- .../arm64/signal/testcases/ssve_za_regs.c | 36 +- .../selftests/arm64/signal/testcases/sve_regs.c | 32 +- .../selftests/arm64/signal/testcases/testcases.c | 27 +- .../selftests/arm64/signal/testcases/testcases.h | 28 +- .../selftests/arm64/signal/testcases/za_no_regs.c | 32 +- .../selftests/arm64/signal/testcases/za_regs.c | 36 +- tools/testing/selftests/kvm/aarch64/get-reg-list.c | 14 + tools/testing/selftests/mm/Makefile | 2 +- tools/testing/selftests/mm/pkey-arm64.h | 139 ++++ tools/testing/selftests/mm/pkey-helpers.h | 8 + tools/testing/selftests/mm/pkey-powerpc.h | 3 + tools/testing/selftests/mm/pkey-x86.h | 4 + tools/testing/selftests/mm/protection_keys.c | 109 ++- 125 files changed, 3395 insertions(+), 893 deletions(-) create mode 100644 Documentation/admin-guide/perf/arm-ni.rst create mode 100644 Documentation/devicetree/bindings/perf/arm,ni.yaml create mode 100644 arch/arm64/include/asm/mem_encrypt.h create mode 100644 arch/arm64/include/asm/pkeys.h create mode 100644 arch/arm64/include/asm/por.h create mode 100644 arch/arm64/mm/mem_encrypt.c create mode 100644 drivers/perf/arm-ni.c create mode 100644 drivers/virt/coco/pkvm-guest/Kconfig create mode 100644 drivers/virt/coco/pkvm-guest/Makefile create mode 100644 drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c create mode 100644 tools/testing/selftests/arm64/signal/sve_helpers.c create mode 100644 tools/testing/selftests/arm64/signal/sve_helpers.h create mode 100644 tools/testing/selftests/arm64/signal/testcases/poe_siginfo.c create mode 100644 tools/testing/selftests/mm/pkey-arm64.h . Date: Fri, 13 Sep 2024 18:56:36 +0200 From: Christian Brauner To: Linus Torvalds Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] vfs netfs Hey Linus, /* Summary */ This contains the work to improve read/write performance for the new netfs library. The main performance enhancing changes are: - Define a structure, struct folio_queue, and a new iterator type, ITER_FOLIOQ, to hold a buffer as a replacement for ITER_XARRAY. See that patch for questions about naming and form. ITER_FOLIOQ is provided as a replacement for ITER_XARRAY. The problem with an xarray is that accessing it requires the use of a lock (typically the RCU read lock) - and this means that we can't supply iterate_and_advance() with a step function that might sleep (crypto for example) without having to drop the lock between pages. ITER_FOLIOQ is the iterator for a chain of folio_queue structs, where each folio_queue holds a small list of folios. A folio_queue struct is a simpler structure than xarray and is not subject to concurrent manipulation by the VM. folio_queue is used rather than a bvec[] as it can form lists of indefinite size, adding to one end and removing from the other on the fly. - Provide a copy_folio_from_iter() wrapper. - Make cifs RDMA support ITER_FOLIOQ. - Use folio queues in the write-side helpers instead of xarrays. - Add a function to reset the iterator in a subrequest. - Simplify the write-side helpers to use sheaves to skip gaps rather than trying to work out where gaps are. - In afs, make the read subrequests asynchronous, putting them into work items to allow the next patch to do progressive unlocking/reading. - Overhaul the read-side helpers to improve performance. - Fix the caching of a partial block at the end of a file. - Allow a store to be cancelled. Then some changes for cifs to make it use folio queues instead of xarrays for crypto bufferage: - Use raw iteration functions rather than manually coding iteration when hashing data. - Switch to using folio_queue for crypto buffers. - Remove the xarray bits. Make some adjustments to the /proc/fs/netfs/stats file such that: - All the netfs stats lines begin 'Netfs:' but change this to something a bit more useful. - Add a couple of stats counters to track the numbers of skips and waits on the per-inode writeback serialisation lock to make it easier to check for this as a source of performance loss. Miscellaneous work: - Ensure that the sb_writers lock is taken around vfs_{set,remove}xattr() in the cachefiles code. - Reduce the number of conditional branches in netfs_perform_write(). - Move the CIFS_INO_MODIFIED_ATTR flag to the netfs_inode struct and remove cifs_post_modify(). - Move the max_len/max_nr_segs members from netfs_io_subrequest to netfs_io_request as they're only needed for one subreq at a time. - Add an 'unknown' source value for tracing purposes. - Remove NETFS_COPY_TO_CACHE as it's no longer used. - Set the request work function up front at allocation time. - Use bh-disabling spinlocks for rreq->lock as cachefiles completion may be run from block-filesystem DIO completion in softirq context. - Remove fs/netfs/io.c. /* Testing */ gcc version 14.2.0 (Debian 14.2.0-3) Debian clang version 16.0.6 (27+b1) All patches are based on the vfs-6.11-rc7.fixes merge to bring in prerequisite fixes in individual filesystems. All of this has been sitting in linux-next. No build failures or warnings were observed. /* Conflicts */ Merge conflicts with mainline ============================= No known merge conflicts. This has now a merge conflict with main due to some rather late cifs fixes. This can be resolved by: git rm fs/netfs/io.c and then: diff --cc fs/smb/client/cifssmb.c index cfae2e918209,04f2a5441a89..d0df0c17b18f --- a/fs/smb/client/cifssmb.c +++ b/fs/smb/client/cifssmb.c @@@ -1261,16 -1261,6 +1261,14 @@@ openRetry return rc; } +static void cifs_readv_worker(struct work_struct *work) +{ + struct cifs_io_subrequest *rdata = + container_of(work, struct cifs_io_subrequest, subreq.work); + - netfs_subreq_terminated(&rdata->subreq, - (rdata->result == 0 || rdata->result == -EAGAIN) ? - rdata->got_bytes : rdata->result, true); ++ netfs_read_subreq_terminated(&rdata->subreq, rdata->result, false); +} + static void cifs_readv_callback(struct mid_q_entry *mid) { @@@ -1323,21 -1306,11 +1321,23 @@@ rdata->result = -EIO; } - if (rdata->result == 0 || rdata->result == -EAGAIN) - iov_iter_advance(&rdata->subreq.io_iter, rdata->got_bytes); + if (rdata->result == -ENODATA) { + __set_bit(NETFS_SREQ_HIT_EOF, &rdata->subreq.flags); + rdata->result = 0; + } else { - if (rdata->got_bytes < rdata->actual_len && - rdata->subreq.start + rdata->subreq.transferred + rdata->got_bytes == - ictx->remote_i_size) { ++ size_t trans = rdata->subreq.transferred + rdata->got_bytes; ++ if (trans < rdata->subreq.len && ++ rdata->subreq.start + trans == ictx->remote_i_size) { + __set_bit(NETFS_SREQ_HIT_EOF, &rdata->subreq.flags); + rdata->result = 0; + } + } + rdata->credits.value = 0; + rdata->subreq.transferred += rdata->got_bytes; - netfs_read_subreq_terminated(&rdata->subreq, rdata->result, false); ++ trace_netfs_sreq(&rdata->subreq, netfs_sreq_trace_io_progress); + INIT_WORK(&rdata->subreq.work, cifs_readv_worker); + queue_work(cifsiod_wq, &rdata->subreq.work); release_mid(mid); add_credits(server, &credits, 0); } diff --cc fs/smb/client/smb2pdu.c index 88dc49d67037,95377bb91950..bb8ecbbe78af --- a/fs/smb/client/smb2pdu.c +++ b/fs/smb/client/smb2pdu.c @@@ -4614,6 -4613,10 +4613,8 @@@ smb2_readv_callback(struct mid_q_entry server->credits, server->in_flight, 0, cifs_trace_rw_credits_read_response_clear); rdata->credits.value = 0; + rdata->subreq.transferred += rdata->got_bytes; - if (rdata->subreq.start + rdata->subreq.transferred >= rdata->subreq.rreq->i_size) - __set_bit(NETFS_SREQ_HIT_EOF, &rdata->subreq.flags); + trace_netfs_sreq(&rdata->subreq, netfs_sreq_trace_io_progress); INIT_WORK(&rdata->subreq.work, smb2_readv_worker); queue_work(cifsiod_wq, &rdata->subreq.work); release_mid(mid); Merge conflicts with other trees ================================ No known merge conflicts. The following changes since commit 4356ab331c8f0dbed0f683abde345cd5503db1e4: Merge tag 'vfs-6.11-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs (2024-09-04 09:33:57 -0700) are available in the Git repository at: git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.12.netfs for you to fetch changes up to 4b40d43d9f951d87ae8dc414c2ef5ae50303a266: docs: filesystems: corrected grammar of netfs page (2024-09-12 12:20:43 +0200) Please consider pulling these changes from the signed vfs-6.12.netfs tag. Thanks! Christian ---------------------------------------------------------------- vfs-6.12.netfs ---------------------------------------------------------------- Christian Brauner (1): Merge branch 'netfs-writeback' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs into vfs.netfs David Howells (24): cachefiles: Fix non-taking of sb_writers around set/removexattr netfs: Adjust labels in /proc/fs/netfs/stats netfs: Record contention stats for writeback lock netfs: Reduce number of conditional branches in netfs_perform_write() netfs, cifs: Move CIFS_INO_MODIFIED_ATTR to netfs_inode netfs: Move max_len/max_nr_segs from netfs_io_subrequest to netfs_io_stream netfs: Reserve netfs_sreq_source 0 as unset/unknown netfs: Remove NETFS_COPY_TO_CACHE netfs: Set the request work function upon allocation netfs: Use bh-disabling spinlocks for rreq->lock mm: Define struct folio_queue and ITER_FOLIOQ to handle a sequence of folios iov_iter: Provide copy_folio_from_iter() cifs: Provide the capability to extract from ITER_FOLIOQ to RDMA SGEs netfs: Use new folio_queue data type and iterator instead of xarray iter netfs: Provide an iterator-reset function netfs: Simplify the writeback code afs: Make read subreqs async netfs: Speed up buffered reading netfs: Remove fs/netfs/io.c cachefiles, netfs: Fix write to partial block at EOF netfs: Cancel dirty folios that have no storage destination cifs: Use iterate_and_advance*() routines directly for hashing cifs: Switch crypto buffer to use a folio_queue rather than an xarray cifs: Don't support ITER_XARRAY Dennis Lam (1): docs: filesystems: corrected grammar of netfs page Documentation/filesystems/netfs_library.rst | 2 +- fs/9p/vfs_addr.c | 11 +- fs/afs/file.c | 30 +- fs/afs/fsclient.c | 9 +- fs/afs/write.c | 4 +- fs/afs/yfsclient.c | 9 +- fs/cachefiles/io.c | 19 +- fs/cachefiles/xattr.c | 34 +- fs/ceph/addr.c | 76 +-- fs/netfs/Makefile | 4 +- fs/netfs/buffered_read.c | 766 ++++++++++++++++---------- fs/netfs/buffered_write.c | 309 +++++------ fs/netfs/direct_read.c | 147 ++++- fs/netfs/internal.h | 43 +- fs/netfs/io.c | 804 ---------------------------- fs/netfs/iterator.c | 50 ++ fs/netfs/main.c | 7 +- fs/netfs/misc.c | 94 ++++ fs/netfs/objects.c | 16 +- fs/netfs/read_collect.c | 544 +++++++++++++++++++ fs/netfs/read_pgpriv2.c | 264 +++++++++ fs/netfs/read_retry.c | 256 +++++++++ fs/netfs/stats.c | 27 +- fs/netfs/write_collect.c | 246 +++------ fs/netfs/write_issue.c | 93 ++-- fs/nfs/fscache.c | 19 +- fs/nfs/fscache.h | 7 +- fs/smb/client/cifsencrypt.c | 144 +---- fs/smb/client/cifsglob.h | 4 +- fs/smb/client/cifssmb.c | 6 +- fs/smb/client/file.c | 96 ++-- fs/smb/client/smb2ops.c | 219 ++++---- fs/smb/client/smb2pdu.c | 27 +- fs/smb/client/smbdirect.c | 82 +-- include/linux/folio_queue.h | 156 ++++++ include/linux/iov_iter.h | 104 ++++ include/linux/netfs.h | 46 +- include/linux/uio.h | 18 + include/trace/events/netfs.h | 144 +++-- lib/iov_iter.c | 240 ++++++++- lib/kunit_iov_iter.c | 259 +++++++++ lib/scatterlist.c | 69 ++- 42 files changed, 3520 insertions(+), 1984 deletions(-) delete mode 100644 fs/netfs/io.c create mode 100644 fs/netfs/read_collect.c create mode 100644 fs/netfs/read_pgpriv2.c create mode 100644 fs/netfs/read_retry.c create mode 100644 include/linux/folio_queue.h . Date: Sat, 14 Sep 2024 01:48:29 +0800 From: Gao Xiang To: Linus Torvalds Cc: LKML , linux-erofs@lists.ozlabs.org, Chao Yu , Sandeep Dhavale , Hongzhen Luo , Yiyang Wu , Chunhai Guo Subject: [GIT PULL] erofs updates for 6.12-rc1 Hi Linus, Could you consider this pull request for 6.12-rc1? It's a bit earlier due to our mid-autumn festival holidays next week. In this cycle, we'd like to add file-backed mount support, which has has been a strong requirement for years. It is especially useful when there are thousands of images running on the same host for containers and other sandbox use cases, unlike OS image use cases. Without file-backed mounts, it's hard for container runtimes to manage and isolate so many unnecessary virtual block devices safely and efficiently, therefore file-backed mounts are highly preferred. For EROFS users, ComposeFS [1], containerd, and Android APEXes [2] will directly benefit from it, and I've seen no risk in implementing it as a completely immutable filesystem. The previous experimental feature "EROFS over fscache" is now marked as deprecated because: - Fscache is no longer an independent subsystem and has been merged into netfs, which was somewhat unexpected when it was proposed. - New HSM "fanotify pre-content hooks" [3] will be landed upstream. These hooks will replace "EROFS over fscache" in a simpler way, as EROFS won't be bother with kernel caching anymore. Userspace programs can also manage their own caching hierarchy more flexibly. Once the HSM "fanotify pre-content hooks" is landed, I will remove the fscache backend entirely as an internal dependency cleanup. More backgrounds are listed in the original patchset [4]. In addition to that, there are bugfixes and cleanups as usual as shown below. All commits have been in -next and no potential merge conflict is observed. Thanks, Gao Xiang [1] https://github.com/containers/storage/pull/2039 [2] https://lore.kernel.org/r/CAB=BE-R3wU7hBBaeAXdkDp2kvODxSFWNQtcmc5tCppN5qwdQgw@mail.gmail.com [3] https://lore.kernel.org/r/cover.1725481503.git.josef@toxicpanda.com [4] https://lore.kernel.org/r/20240830032840.3783206-1-hsiangkao@linux.alibaba.com The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git tags/erofs-for-6.12-rc1 for you to fetch changes up to 025497e1d176a9e063d1e60699527e2f3a871935: erofs: reject inodes with negative i_size (2024-09-12 23:00:09 +0800) ---------------------------------------------------------------- Changes since last update: - Support file-backed mounts for containers and sandboxes; - Mark the experimental fscache backend as deprecated; - Handle overlapped pclusters caused by crafted images properly; - Fix a failure path which could cause infinite loops in z_erofs_init_decompressor(); - Get rid of unnecessary NOFAILs; - Harmless on-disk hardening & minor cleanups. ---------------------------------------------------------------- Chunhai Guo (1): erofs: allocate more short-lived pages from reserved pool first Gao Xiang (10): erofs: fix incorrect symlink detection in fast symlink erofs: clean up erofs_register_sysfs() erofs: handle overlapped pclusters out of crafted images properly erofs: add file-backed mount support erofs: support unencoded inodes for fileio erofs: support compressed inodes for fileio erofs: mark experimental fscache backend deprecated erofs: sunset unneeded NOFAILs erofs: restrict pcluster size limitations erofs: reject inodes with negative i_size Hongzhen Luo (1): erofs: simplify erofs_map_blocks_flatmode() Sandeep Dhavale (1): erofs: fix error handling in z_erofs_init_decompressor Yiyang Wu (2): erofs: use kmemdup_nul in erofs_fill_symlink erofs: refactor read_inode calling convention fs/erofs/Kconfig | 22 +++++- fs/erofs/Makefile | 1 + fs/erofs/data.c | 109 ++++++++++++++++++--------- fs/erofs/decompressor.c | 2 +- fs/erofs/erofs_fs.h | 5 +- fs/erofs/fileio.c | 192 +++++++++++++++++++++++++++++++++++++++++++++++ fs/erofs/inode.c | 138 +++++++++++++++------------------- fs/erofs/internal.h | 26 ++++++- fs/erofs/super.c | 80 +++++++++++++------- fs/erofs/sysfs.c | 30 ++------ fs/erofs/zdata.c | 196 ++++++++++++++++++++++-------------------------- fs/erofs/zmap.c | 42 +++++------ 12 files changed, 544 insertions(+), 299 deletions(-) create mode 100644 fs/erofs/fileio.c . Date: Fri, 13 Sep 2024 19:30:19 +0100 From: Mark Brown To: Linus Torvalds Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Mark Brown Subject: [GIT PULL] SPI fixes for v6.11-rc7 The following changes since commit c9ca76e8239810ccb08825a7b847c39d367410a6: MAINTAINERS: SPI: Add mailing list imx@lists.linux.dev for nxp spi drivers (2024-09-05 19:15:45 +0100) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git tags/spi-fix-v6.11-rc7 for you to fetch changes up to 2a8787c1cdc7be24fdd8953ecd1a8743a1006235: spi: nxp-fspi: fix the KASAN report out-of-bounds bug (2024-09-11 22:25:44 +0100) ---------------------------------------------------------------- spi: Fixes for v6.11 A few last minute fixes for v6.11, they're all individually unremarkable and only last minute due to when they came in. ---------------------------------------------------------------- Han Xu (1): spi: nxp-fspi: fix the KASAN report out-of-bounds bug Jinjie Ruan (2): spi: geni-qcom: Undo runtime PM changes at driver exit time spi: geni-qcom: Fix incorrect free_irq() sequence drivers/spi/spi-geni-qcom.c | 17 ++++++++--------- drivers/spi/spi-nxp-fspi.c | 5 +++-- 2 files changed, 11 insertions(+), 11 deletions(-) . Date: Fri, 13 Sep 2024 15:27:17 -0500 From: Bjorn Helgaas To: Linus Torvalds Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Manivannan Sadhasivam , Philipp Stanner , Alex Williamson Subject: [GIT PULL] PCI fixes for v6.11 The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git tags/pci-v6.11-fixes-4 for you to fetch changes up to fc8c818e756991f5f50b8dfab07f970a18da2556: PCI: Fix potential deadlock in pcim_intx() (2024-09-12 07:52:50 -0500) Another fix to a commit merged during the v6.11 merge window. ---------------------------------------------------------------- - Prevent a possible deadlock (reported by lockdep) when a driver relinquishes a pci_dev, another driver claims it, and one uses managed pcim_enable_device() and the other doesn't (Philipp Stanner) ---------------------------------------------------------------- Philipp Stanner (1): PCI: Fix potential deadlock in pcim_intx() drivers/pci/devres.c | 2 ++ 1 file changed, 2 insertions(+) . Date: Fri, 13 Sep 2024 18:13:41 -0700 From: Sean Christopherson To: Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Sean Christopherson Subject: [GIT PULL] KVM: x86 pull requests for 6.12 There's a trivial (and amusing) conflict with KVM s390 in the selftests pull request (we both added "config" to the .gitignore, within a few days of each other, after the goof being around for a good year or more). Note, the pull requests are relative to v6.11-rc4. I got a late start, and for some reason thought kvm/next would magically end up on rc4 or later. Note #2, I had a brainfart and put the testcase for verifying KVM's fastpath correctly exits to userspace when needed in selftests, whereas the actual KVM fix is in misc. So if you run KVM selftests in the middle of pulling everything, expect the debug_regs test to fail. . Date: Fri, 13 Sep 2024 23:21:33 -0500 From: Steve French To: Linus Torvalds Cc: LKML , CIFS Subject: [GIT PULL] smb3 fix Please pull the following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.samba.org/sfrench/cifs-2.6.git tags/6.11-rc7-SMB3-client-fix for you to fetch changes up to 5a20b7cb0d8d3ee490a8e088dc2584aa782e3355: cifs: Fix signature miscalculation (2024-09-12 19:28:48 -0500) ---------------------------------------------------------------- Fix a case where many signing check of write failures ("signature verification returned error = -13") ---------------------------------------------------------------- David Howells (1): cifs: Fix signature miscalculation fs/smb/client/cifsencrypt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- Thanks, Steve . Date: Fri, 13 Sep 2024 17:16:09 -0700 From: Casey Schaufler To: Linus Torvalds Cc: LSM List , Linux kernel mailing list , Casey Schaufler , GiSeong Ji , Jiawei Ye Subject: [GIT PULL] Smack patches for 6.12 Hello Linus, Here is the Smack pull request for v6.12. There are 2 patches. One is a simple indentation correction. The other corrects a potentially rcu unsafe pointer assignment. Both have time in next and pass all tests. The following changes since commit 47ac09b91befbb6a235ab620c32af719f8208399: Linux 6.11-rc4 (2024-08-18 13:17:27 -0700) are available in the Git repository at: https://github.com/cschaufler/smack-next tags/Smack-for-6.12 for you to fetch changes up to 2749749afa071f8a0e405605de9da615e771a7ce: smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso (2024-09-03 08:37:17 -0700) ---------------------------------------------------------------- Smack changes for v6.12 - rcu pointer assignment in smk_set_cipso - indentation in smack_ip_output ---------------------------------------------------------------- GiSeong Ji (1): security: smack: Fix indentation in smack_netfilter.c Jiawei Ye (1): smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso security/smack/smack_netfilter.c | 4 ++-- security/smack/smackfs.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) . Date: Sat, 14 Sep 2024 08:15:27 +0530 From: Neeraj Upadhyay To: torvalds@linux-foundation.org Cc: paulmck@kernel.org, joel@joelfernandes.org, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, neeraj.iitr10@gmail.com, christophe.jaillet@wanadoo.fr, inwardvessel@gmail.com, riel@surriel.com, takakura@valinux.co.jp, seanjc@google.com, thorsten.blum@toblux.com, vschneid@redhat.com, longman@redhat.com, zhouzhouyi@gmail.com, qiang.zhang1211@gmail.com, linux-kernel@vger.kernel.org, kernel-team@meta.com, mingo@kernel.org, tglx@linutronix.de, rcu@vger.kernel.org Subject: [GIT PULL] RCU changes for v6.12 Hello Linus, When the merge window opens, please pull this RCU update from: git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git tags/rcu.release.v6.12 # HEAD: 355debb83bf79853cde43579f88eed16adb1da29: Merge branches 'context_tracking.15.08.24a', 'csd.lock.15.08.24a', 'nocb.09.09.24a', 'rcutorture.14.08.24a', 'rcustall.09.09.24a', 'srcu.12.08.24a', 'rcu.tasks.14.08.24a', 'rcu_scaling_tests.15.08.24a', 'fixes.12.08.24a' and 'misc.11.08.24a' into next.09.09.24a (2024-09-09 00:09:47 +0530) Following are the merge conflicts with other trees: 1. Merge conflicts with slab tree Stephen's resolution: https://lore.kernel.org/lkml/20240812124748.3725011b@canb.auug.org.au/ In case you might want to refer to it, a sample tree with resolutions applied is at git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git heads/rcu.v6.12.slab.tree.conflict_res 2. Merge conflict with kvm-fixes tree Stephen's resolution: https://lore.kernel.org/lkml/20240905154122.4d1f8ca5@canb.auug.org.au/ In case you might want to refer to it, a sample tree with resolutions applied is at git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux.git heads/rcu.v6.12.kvm-fixes.tree.conflict_res ---------------------------------------------------------------- RCU pull request for v6.12 This pull request contains the following branches: context_tracking.15.08.24a: Rename context tracking state related symbols and remove references to "dynticks" in various context tracking state variables and related helpers; force context_tracking_enabled_this_cpu() to be inlined to avoid leaving a noinstr section. csd.lock.15.08.24a: Enhance CSD-lock diagnostic reports; add an API to provide an indication of ongoing CSD-lock stall. nocb.09.09.24a: Update and simplify RCU nocb code to handle (de-)offloading of callbacks only for offline CPUs; fix RT throttling hrtimer being armed from offline CPU. rcutorture.14.08.24a: Remove redundant rcu_torture_ops get_gp_completed fields; add SRCU ->same_gp_state and ->get_comp_state functions; add generic test for NUM_ACTIVE_*RCU_POLL* for testing RCU and SRCU polled grace periods; add CFcommon.arch for arch-specific Kconfig options; print number of update types in rcu_torture_write_types(); add rcutree.nohz_full_patience_delay testing to the TREE07 scenario; add a stall_cpu_repeat module parameter to test repeated CPU stalls; add argument to limit number of CPUs a guest OS can use in torture.sh; rcustall.09.09.24a: Abbreviate RCU CPU stall warnings during CSD-lock stalls; Allow dump_cpu_task() to be called without disabling preemption; defer printing stall-warning backtrace when holding rcu_node lock. srcu.12.08.24a: Make SRCU gp seq wrap-around faster; add KCSAN checks for concurrent updates to ->srcu_n_exp_nodelay and ->reschedule_count which are used in heuristics governing auto-expediting of normal SRCU grace periods and grace-period-state-machine delays; mark idle SRCU-barrier callbacks to help identify stuck SRCU-barrier callback. rcu.tasks.14.08.24a: Remove RCU Tasks Rude asynchronous APIs as they are no longer used; stop testing RCU Tasks Rude asynchronous APIs; fix access to non-existent percpu regions; check processor-ID assumptions during chosen CPU calculation for callback enqueuing; update description of rtp->tasks_gp_seq grace-period sequence number; add rcu_barrier_cb_is_done() to identify whether a given rcu_barrier callback is stuck; mark idle Tasks-RCU-barrier callbacks; add *torture_stats_print() functions to print detailed diagnostics for Tasks-RCU variants; capture start time of rcu_barrier_tasks*() operation to help distinguish a hung barrier operation from a long series of barrier operations. rcu_scaling_tests.15.08.24a: refscale: Add a TINY scenario to support tests of Tiny RCU and Tiny SRCU; Optimize process_durations() operation; rcuscale: Dump stacks of stalled rcu_scale_writer() instances; dump grace-period statistics when rcu_scale_writer() stalls; mark idle RCU-barrier callbacks to identify stuck RCU-barrier callbacks; print detailed grace-period and barrier diagnostics on rcu_scale_writer() hangs for Tasks-RCU variants; warn if async module parameter is specified for RCU implementations that do not have async primitives such as RCU Tasks Rude; make all writer tasks report upon hang; tolerate repeated GFP_KERNEL failure in rcu_scale_writer(); use special allocator for rcu_scale_writer(); NULL out top-level pointers to heap memory to avoid double-free bugs on modprobe failures; maintain per-task instead of per-CPU callbacks count to avoid any issues with migration of either tasks or callbacks; constify struct ref_scale_ops. fixes.12.08.24a: Use system_unbound_wq for kfree_rcu work to avoid disturbing isolated CPUs. misc.11.08.24a: Warn on unexpected rcu_state.srs_done_tail state; Better define "atomic" for list_replace_rcu() and hlist_replace_rcu() routines; annotate struct kvfree_rcu_bulk_data with __counted_by(). ---------------------------------------------------------------- Christophe JAILLET (2): refscale: Optimize process_durations() refscale: Constify struct ref_scale_ops Frederic Weisbecker (14): rcu/nocb: Introduce RCU_NOCB_LOCKDEP_WARN() rcu/nocb: Move nocb field at the end of state struct rcu/nocb: Assert no callbacks while nocb kthread allocation fails rcu/nocb: Introduce nocb mutex rcu/nocb: (De-)offload callbacks on offline CPUs only rcu/nocb: Remove halfway (de-)offloading handling from bypass rcu/nocb: Remove halfway (de-)offloading handling from rcu_core()'s QS reporting rcu/nocb: Remove halfway (de-)offloading handling from rcu_core rcu/nocb: Remove SEGCBLIST_RCU_CORE rcu/nocb: Remove SEGCBLIST_KTHREAD_CB rcu/nocb: Simplify (de-)offloading state machine rcu/nocb: Fix RT throttling hrtimer armed from offline CPU rcu/nocb: Conditionally wake up rcuo if not already waiting on GP rcu/nocb: Remove superfluous memory barrier after bypass enqueue JP Kobryn (1): srcu: faster gp seq wrap-around Neeraj Upadhyay (1): Merge branches 'context_tracking.15.08.24a', 'csd.lock.15.08.24a', 'nocb.09.09.24a', 'rcutorture.14.08.24a', 'rcustall.09.09.24a', 'srcu.12.08.24a', 'rcu.tasks.14.08.24a', 'rcu_scaling_tests.15.08.24a', 'fixes.12.08.24a' and 'misc.11.08.24a' into next.09.09.24a Paul E. McKenney (41): rcutorture: Remove redundant rcu_torture_ops get_gp_completed fields rcutorture: Add SRCU ->same_gp_state and ->get_comp_state functions rcutorture: Generic test for NUM_ACTIVE_*RCU_POLL* rcutorture: Make rcu_torture_write_types() print number of update types tools/rcu: Remove RCU Tasks Rude asynchronous APIs from rcu-updaters.sh rcu/kfree: Warn on unexpected tail state locking/csd_lock: Print large numbers as negatives rcu: Better define "atomic" for list replacement rcutorture: Add rcutree.nohz_full_patience_delay to TREE07 srcu: Check for concurrent updates of heuristics srcu: Mark callbacks not currently participating in barrier operation rcutorture: Add a stall_cpu_repeat module parameter torture: Add torture.sh --guest-cpu-limit argument for limited hosts doc: Remove RCU Tasks Rude asynchronous APIs rcutorture: Stop testing RCU Tasks Rude asynchronous APIs rcuscale: Stop testing RCU Tasks Rude asynchronous APIs rcu-tasks: Remove RCU Tasks Rude asynchronous APIs rcu/tasks: Check processor-ID assumptions rcu/tasks: Update rtp->tasks_gp_seq comment rcu: Provide rcu_barrier_cb_is_done() to check rcu_barrier() CBs rcu/tasks: Mark callbacks not currently participating in barrier operation rcu/tasks: Add detailed grace-period and barrier diagnostics rcu/tasks: Add rcu_barrier_tasks*() start time to diagnostics refscale: Add TINY scenario rcuscale: Save a few lines with whitespace-only change rcuscale: Dump stacks of stalled rcu_scale_writer() instances rcuscale: Dump grace-period statistics when rcu_scale_writer() stalls rcu: Mark callbacks not currently participating in barrier operation rcuscale: Print detailed grace-period and barrier diagnostics locking/csd_lock: Provide an indication of ongoing CSD-lock stall locking/csd-lock: Use backoff for repeated reports of same incident rcu: Summarize RCU CPU stall warnings during CSD-lock stalls rcu: Extract synchronize_rcu_expedited_stall() from synchronize_rcu_expedited_wait() rcu: Summarize expedited RCU CPU stall warnings during CSD-lock stalls rcuscale: Provide clear error when async specified without primitives rcuscale: Make all writer tasks report upon hang rcuscale: Make rcu_scale_writer() tolerate repeated GFP_KERNEL failure rcuscale: Use special allocator for rcu_scale_writer() rcuscale: NULL out top-level pointers to heap memory rcuscale: Count outstanding callbacks per-task rather than per-CPU rcu: Defer printing stall-warning backtrace when holding rcu_node lock Rik van Riel (1): smp: print only local CPU info when sched_clock goes backward Ryo Takakura (1): rcu: Let dump_cpu_task() be used without preemption disabled Sean Christopherson (1): context_tracking: Tag context_tracking_enabled_this_cpu() __always_inline Thorsten Blum (1): rcu: Annotate struct kvfree_rcu_bulk_data with __counted_by() Valentin Schneider (25): treewide: context_tracking: Rename CONTEXT_* into CT_STATE_* context_tracking, rcu: Rename RCU_DYNTICKS_IDX into CT_RCU_WATCHING context_tracking, rcu: Rename ct_dynticks() into ct_rcu_watching() context_tracking, rcu: Rename ct_dynticks_cpu() into ct_rcu_watching_cpu() context_tracking, rcu: Rename ct_dynticks_cpu_acquire() into ct_rcu_watching_cpu_acquire() context_tracking, rcu: Rename struct context_tracking .dynticks_nesting into .nesting context_tracking, rcu: Rename ct_dynticks_nesting() into ct_nesting() context_tracking, rcu: Rename ct_dynticks_nesting_cpu() into ct_nesting_cpu() context_tracking, rcu: Rename struct context_tracking .dynticks_nmi_nesting into .nmi_nesting context_tracking, rcu: Rename ct_dynticks_nmi_nesting() into ct_nmi_nesting() context_tracking, rcu: Rename ct_dynticks_nmi_nesting_cpu() into ct_nmi_nesting_cpu() context_tracking, rcu: Rename DYNTICK_IRQ_NONIDLE into CT_NESTING_IRQ_NONIDLE context_tracking, rcu: Rename rcu_dynticks_task*() into rcu_task*() context_tracking, rcu: Rename rcu_dynticks_curr_cpu_in_eqs() into rcu_is_watching_curr_cpu() rcu: Rename rcu_dynticks_eqs_online() into rcu_watching_online() rcu: Rename rcu_dynticks_in_eqs() into rcu_watching_snap_in_eqs() rcu: Rename rcu_dynticks_in_eqs_since() into rcu_watching_snap_stopped_since() rcu: Rename rcu_dynticks_zero_in_eqs() into rcu_watching_zero_in_eqs() rcu: Rename struct rcu_data .dynticks_snap into .watching_snap rcu: Rename struct rcu_data .exp_dynticks_snap into .exp_watching_snap rcu: Rename dyntick_save_progress_counter() into rcu_watching_snap_save() rcu: Rename rcu_implicit_dynticks_qs() into rcu_watching_snap_recheck() rcu: Rename rcu_momentary_dyntick_idle() into rcu_momentary_eqs() rcu: Update stray documentation references to rcu_dynticks_eqs_{enter, exit}() context_tracking, rcu: Rename rcu_dyntick trace event into rcu_watching Waiman Long (1): rcu: Use system_unbound_wq to avoid disturbing isolated CPUs Zhouyi Zhou (1): rcutorture: Add CFcommon.arch for arch-specific Kconfig options Zqiang (1): rcu-tasks: Fix access non-existent percpu rtpcp variable in rcu_tasks_need_gpcb() Documentation/RCU/Design/Data-Structures/Data-Structures.rst | 28 +++--- Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst | 8 +- Documentation/RCU/Design/Memory-Ordering/TreeRCU-dyntick.svg | 8 +- Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-fqs.svg | 8 +- Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp.svg | 8 +- Documentation/RCU/Design/Memory-Ordering/TreeRCU-hotplug.svg | 4 +- Documentation/RCU/Design/Requirements/Requirements.rst | 3 +- Documentation/RCU/checklist.rst | 61 ++++++------ Documentation/RCU/whatisRCU.rst | 2 +- Documentation/admin-guide/kernel-parameters.txt | 20 ++-- arch/Kconfig | 2 +- arch/arm64/kernel/entry-common.c | 2 +- arch/powerpc/include/asm/interrupt.h | 6 +- arch/powerpc/kernel/interrupt.c | 6 +- arch/powerpc/kernel/syscall.c | 2 +- arch/x86/entry/common.c | 2 +- include/linux/context_tracking.h | 32 ++++--- include/linux/context_tracking_state.h | 60 ++++++------ include/linux/entry-common.h | 2 +- include/linux/rcu_segcblist.h | 6 +- include/linux/rculist.h | 9 +- include/linux/rcupdate.h | 15 ++- include/linux/rcutiny.h | 2 +- include/linux/rcutree.h | 2 +- include/linux/smp.h | 6 ++ include/linux/srcutree.h | 15 ++- include/trace/events/rcu.h | 20 ++-- kernel/context_tracking.c | 140 ++++++++++++++-------------- kernel/entry/common.c | 2 +- kernel/rcu/rcu.h | 12 ++- kernel/rcu/rcu_segcblist.c | 11 --- kernel/rcu/rcu_segcblist.h | 11 +-- kernel/rcu/rcuscale.c | 214 ++++++++++++++++++++++++++++++++++++------ kernel/rcu/rcutorture.c | 121 +++++++++++++++--------- kernel/rcu/refscale.c | 67 ++++++------- kernel/rcu/srcutree.c | 11 ++- kernel/rcu/tasks.h | 214 ++++++++++++++++++++++++++++-------------- kernel/rcu/tree.c | 174 ++++++++++++++++------------------ kernel/rcu/tree.h | 10 +- kernel/rcu/tree_exp.h | 121 +++++++++++++----------- kernel/rcu/tree_nocb.h | 279 +++++++++++++++++++++---------------------------------- kernel/rcu/tree_plugin.h | 11 ++- kernel/rcu/tree_stall.h | 16 +++- kernel/sched/core.c | 6 +- kernel/smp.c | 38 +++++++- kernel/stop_machine.c | 2 +- kernel/trace/trace_osnoise.c | 4 +- lib/Kconfig.debug | 1 + tools/rcu/rcu-updaters.sh | 2 - tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh | 2 + tools/testing/selftests/rcutorture/bin/torture.sh | 38 +++++--- tools/testing/selftests/rcutorture/configs/rcu/CFcommon | 2 - tools/testing/selftests/rcutorture/configs/rcu/CFcommon.i686 | 2 + tools/testing/selftests/rcutorture/configs/rcu/CFcommon.ppc64le | 1 + tools/testing/selftests/rcutorture/configs/rcu/CFcommon.x86_64 | 2 + tools/testing/selftests/rcutorture/configs/rcu/TREE07.boot | 1 + tools/testing/selftests/rcutorture/configs/refscale/TINY | 20 ++++ 57 files changed, 1088 insertions(+), 786 deletions(-) create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.i686 create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.ppc64le create mode 100644 tools/testing/selftests/rcutorture/configs/rcu/CFcommon.x86_64 create mode 100644 tools/testing/selftests/rcutorture/configs/refscale/TINY . Date: Sat, 14 Sep 2024 00:30:48 -0700 From: "Paul E. McKenney" To: torvalds@linux-foundation.org, linux-kernel@vger.kernel.org Cc: linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel-team@meta.com, elver@google.com, akpm@linux-foundation.org, tglx@linutronix.de, peterz@infradead.org, arnd@arndb.de, broonie@kernel.org, naresh.kamboju@linaro.org, nathan@kernel.org, linus.walleij@linaro.org, rmk+kernel@armlinux.org.uk, afd@ti.com, eric.devolder@oracle.com, robh@kernel.org, mark.rutland@arm.com Subject: [GIT PULL] Emulated one-byte cmpxchg() for ARC and sh Hello, Linux, Please pull the following cmpxchg()-related changes: git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git tags/cmpxchg.2024.09.14a # HEAD: c81a748edefd098ea21dd35d4bba03f69412fc26: sh: Emulate one-byte cmpxchg (2024-09-13 07:10:38 -0700) ---------------------------------------------------------------- ARC/sh: Provide one-byte cmpxchg emulation This series provides emulated one-byte cmpxchg() support for ARM and sh using the cmpxchg_emu_u8() function that uses a four-byte cmpxchg() to emulate the one-byte variant. A similar patch for emulation of one-byte cmpxchg() for xtensa has not yet received a maintainer ack, so it is slated for the v6.13 merge window. If you are not that patient, there is another signed tag covering all three (ARC, sh, and xtensa) named cmpxchg.2024.09.15a. ---------------------------------------------------------------- Paul E. McKenney (2): ARC: Emulate one-byte cmpxchg sh: Emulate one-byte cmpxchg arch/arc/Kconfig | 1 + arch/arc/include/asm/cmpxchg.h | 6 ++++-- arch/sh/Kconfig | 1 + arch/sh/include/asm/cmpxchg.h | 3 +++ 4 files changed, 9 insertions(+), 2 deletions(-) . Date: Sat, 14 Sep 2024 01:10:36 -0700 From: "Paul E. McKenney" To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, kernel-team@meta.com, elver@google.com, thorsten.blum@toblux.com Subject: [GIT PULL] KCSAN changes for v6.12 Hello, Linus, When the merge window opens, please pull the latest KCSAN git commit from: git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git tags/kcsan.2024.09.14a # HEAD: 43d631bf06ec961bbe4c824b931fe03be44c419c: kcsan: Use min() to fix Coccinelle warning (2024-08-01 16:40:44 -0700) ---------------------------------------------------------------- kcsan: Use min() to fix Coccinelle warning. Courtesy of Thorsten Blum. ---------------------------------------------------------------- Thorsten Blum (1): kcsan: Use min() to fix Coccinelle warning kernel/kcsan/debugfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) . Date: Sat, 14 Sep 2024 10:16:04 +0200 From: Takashi Iwai To: Linus Torvalds Cc: Mark Brown , Liam Girdwood , Linux Sound Mailing List , Linux Kernel Mailing List Subject: [GIT PULL] sound fixes for 6.11-rc7 Linus, please pull sound fixes for v6.11 from: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-6.11 The topmost commit is 134536c21275bb3410cd1f10c5e369d30702741d ---------------------------------------------------------------- sound fixes for 6.11 A few last-minute ASoC fixes and MAINTAINERS update. All look small, obvious and nice-to-have fixes for 6.11-final. ---------------------------------------------------------------- Arseniy Krasnov (1): ASoC: meson: axg-card: fix 'use-after-free' Bard Liao (2): ASoC: Intel: soc-acpi-intel-lnl-match: add missing empty item ASoC: Intel: soc-acpi-intel-mtl-match: add missing empty item Pierre-Louis Bossart (1): MAINTAINERS: update Pierre Bossart's email and role Shenghao Ding (1): ASoC: tas2781: fix to save the dsp bin file name into the correct array in case name_prefix is not NULL Su Hui (1): ASoC: codecs: avoid possible garbage value in peb2466_reg_read() --- .mailmap | 1 + MAINTAINERS | 6 +++--- sound/soc/codecs/peb2466.c | 3 ++- sound/soc/codecs/tas2781-i2c.c | 2 +- sound/soc/intel/common/soc-acpi-intel-lnl-match.c | 1 + sound/soc/intel/common/soc-acpi-intel-mtl-match.c | 1 + sound/soc/meson/axg-card.c | 3 ++- 7 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.mailmap b/.mailmap index f01d7bfca2a0..7c7f171d0e55 100644 --- a/.mailmap +++ b/.mailmap @@ -529,6 +529,7 @@ Pavankumar Kondeti Peter A Jonsson Peter Oruba Peter Oruba +Pierre-Louis Bossart Pratyush Anand Praveen BP Pradeep Kumar Chitrapu diff --git a/MAINTAINERS b/MAINTAINERS index f70987f7e462..cc40a9d9b8cd 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -11156,12 +11156,12 @@ F: drivers/gpio/gpio-i8255.h INTEL ASoC DRIVERS M: Cezary Rojewski -M: Pierre-Louis Bossart M: Liam Girdwood M: Peter Ujfalusi M: Bard Liao M: Ranjani Sridharan M: Kai Vehmanen +R: Pierre-Louis Bossart L: alsa-devel@alsa-project.org (moderated for non-subscribers) S: Supported F: sound/soc/intel/ @@ -21391,13 +21391,13 @@ S: Maintained F: tools/sound/dapm-graph SOUND - SOUND OPEN FIRMWARE (SOF) DRIVERS -M: Pierre-Louis Bossart M: Liam Girdwood M: Peter Ujfalusi M: Bard Liao M: Ranjani Sridharan M: Daniel Baluta R: Kai Vehmanen +R: Pierre-Louis Bossart L: sound-open-firmware@alsa-project.org (moderated for non-subscribers) S: Supported W: https://github.com/thesofproject/linux/ @@ -21406,7 +21406,7 @@ F: sound/soc/sof/ SOUNDWIRE SUBSYSTEM M: Vinod Koul M: Bard Liao -R: Pierre-Louis Bossart +R: Pierre-Louis Bossart R: Sanyog Kale L: alsa-devel@alsa-project.org (moderated for non-subscribers) S: Supported diff --git a/sound/soc/codecs/peb2466.c b/sound/soc/codecs/peb2466.c index 76ee7e3f4d9b..67ea70cef0c7 100644 --- a/sound/soc/codecs/peb2466.c +++ b/sound/soc/codecs/peb2466.c @@ -229,7 +229,8 @@ static int peb2466_reg_read(void *context, unsigned int reg, unsigned int *val) case PEB2466_CMD_XOP: case PEB2466_CMD_SOP: ret = peb2466_read_byte(peb2466, reg, &tmp); - *val = tmp; + if (!ret) + *val = tmp; break; default: dev_err(&peb2466->spi->dev, "Not a XOP or SOP command\n"); diff --git a/sound/soc/codecs/tas2781-i2c.c b/sound/soc/codecs/tas2781-i2c.c index e79d613745b4..cf8bc7ede6c7 100644 --- a/sound/soc/codecs/tas2781-i2c.c +++ b/sound/soc/codecs/tas2781-i2c.c @@ -502,7 +502,7 @@ static void tasdevice_fw_ready(const struct firmware *fmw, */ tas_priv->fw_state = TASDEVICE_RCA_FW_OK; if (tas_priv->name_prefix) - scnprintf(tas_priv->rca_binaryname, 64, "%s-%s_coef.bin", + scnprintf(tas_priv->coef_binaryname, 64, "%s-%s_coef.bin", tas_priv->name_prefix, tas_priv->dev_name); else scnprintf(tas_priv->coef_binaryname, 64, "%s_coef.bin", diff --git a/sound/soc/intel/common/soc-acpi-intel-lnl-match.c b/sound/soc/intel/common/soc-acpi-intel-lnl-match.c index e6ffcd5be6c5..edfb668d0580 100644 --- a/sound/soc/intel/common/soc-acpi-intel-lnl-match.c +++ b/sound/soc/intel/common/soc-acpi-intel-lnl-match.c @@ -208,6 +208,7 @@ static const struct snd_soc_acpi_link_adr lnl_cs42l43_l0[] = { .num_adr = ARRAY_SIZE(cs42l43_0_adr), .adr_d = cs42l43_0_adr, }, + {} }; static const struct snd_soc_acpi_link_adr lnl_rvp[] = { diff --git a/sound/soc/intel/common/soc-acpi-intel-mtl-match.c b/sound/soc/intel/common/soc-acpi-intel-mtl-match.c index 8e0ae3635a35..d4435a34a3a3 100644 --- a/sound/soc/intel/common/soc-acpi-intel-mtl-match.c +++ b/sound/soc/intel/common/soc-acpi-intel-mtl-match.c @@ -674,6 +674,7 @@ static const struct snd_soc_acpi_link_adr mtl_cs42l43_l0[] = { .num_adr = ARRAY_SIZE(cs42l43_0_adr), .adr_d = cs42l43_0_adr, }, + {} }; static const struct snd_soc_acpi_link_adr mtl_cs42l43_cs35l56[] = { diff --git a/sound/soc/meson/axg-card.c b/sound/soc/meson/axg-card.c index 8c5605c1e34e..eb0302f20740 100644 --- a/sound/soc/meson/axg-card.c +++ b/sound/soc/meson/axg-card.c @@ -104,7 +104,7 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card, int *index) { struct meson_card *priv = snd_soc_card_get_drvdata(card); - struct snd_soc_dai_link *pad = &card->dai_link[*index]; + struct snd_soc_dai_link *pad; struct snd_soc_dai_link *lb; struct snd_soc_dai_link_component *dlc; int ret; @@ -114,6 +114,7 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card, if (ret) return ret; + pad = &card->dai_link[*index]; lb = &card->dai_link[*index + 1]; lb->name = devm_kasprintf(card->dev, GFP_KERNEL, "%s-lb", pad->name); . Date: Sat, 14 Sep 2024 01:16:38 -0700 From: "Paul E. McKenney" To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com, oleg@redhat.com, axboe@kernel.dk, brauner@kernel.org, akpm@linux-foundation.org, willy@infradead.org, clm@fb.com, riel@surriel.com Subject: [GIT PULL] exit/core-dump non-urgent sleep for v6.12 Hello, Linus, When the merge window opens, please pull the following exit-path application core-dump commit for v6.12: git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git tags/misc.2024.09.14a # HEAD: b8e753128ed074fcb48e9ceded940752f6b1c19f: exit: Sleep at TASK_IDLE when waiting for application core dump (2024-08-02 10:55:04 -0700) No, this is not my usual part of the kernel, but it does have Oleg Nesterov's ack. ---------------------------------------------------------------- exit: Sleep at TASK_IDLE when waiting for application core dump This causes the coredump_task_exit() function to sleep at TASK_IDLE, thus preventing task-blocked splats in case of large core dumps to slow devices. ---------------------------------------------------------------- Paul E. McKenney (1): exit: Sleep at TASK_IDLE when waiting for application core dump kernel/exit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) . Date: Sat, 14 Sep 2024 14:18:20 +0200 From: Linus Walleij To: Linus Torvalds Cc: "open list:GPIO SUBSYSTEM" , linux-kernel , Andy Shevchenko , Patrick Rudolph Subject: [GIT PULL] late pin control fixes for v6.11 Hi Linus, here are some late fixes for two pin control drivers that should ideally go into v6.11. Please pull it in, details in the signed tag! Yours, Linus Walleij The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git tags/pinctrl-v6.11-4 for you to fetch changes up to 71e4001a0455ec2b6218715c81f374f1ab8b1b12: pinctrl: pinctrl-cy8c95x0: Fix regcache (2024-09-13 13:14:18 +0200) ---------------------------------------------------------------- Pin control fixes for the v6.11 series: - One Intel patch that I mistakedly merged into for-next despite it belongs in fixes: add Arrow Lake-H/U ACPI ID so this Arrow Lake chip probes. - One fix making the CY895x0 reg cache work, which is good because it makes the device work too. ---------------------------------------------------------------- Linus Walleij (1): Merge tag 'intel-pinctrl-v6.11-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/intel into fixes Mika Westerberg (1): pinctrl: meteorlake: Add Arrow Lake-H/U ACPI ID Patrick Rudolph (1): pinctrl: pinctrl-cy8c95x0: Fix regcache drivers/pinctrl/intel/pinctrl-meteorlake.c | 1 + drivers/pinctrl/pinctrl-cy8c95x0.c | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) . Date: Sat, 14 Sep 2024 18:45:44 +0200 From: Takashi Iwai To: Linus Torvalds Cc: Mark Brown , Liam Girdwood , Linux Sound Mailing List , Linux Kernel Mailing List Subject: [GIT PULL] sound updates for 6.12-rc1 (early PR) Linus, please pull sound updates for v6.12-rc1 from: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-6.12-rc1 The topmost commit is 64c0ce555ad2d84f497f5f584ddd31e87ac690a2 ---------------------------------------------------------------- sound updates for 6.12-rc1 A fairly big update at this time, both in core and driver sides. The core received rewrites in PCM buffer allocation handling and locking optimizations, PCM rate updates followed by lots of cleanups. In ASoC side, the legacy Intel drivers have been deprecated by AVS drivers which leaded to the significant amount of code reduction. SoundWire driver updates and other cleanups contributed more code reduction, too. USB-audio driver received a large cleanup of its big quirk table, and the old snd_print*() API usages in many legacy drivers are replaced with the standard print API. Here are some highlights: Core: - More optimized locking in ALSA control code - Rewrites of memalloc helpers for better DMA API usage - Drop of obsoleted vmalloc PCM buffer helper API - Continued MIDI2 UMP updates - Support of a new user-space driven timer instance - Update for more PCM support rates and cleanups - Xrun counter report in the proc files ASoC: - Continued simplification and cleanup works for ASoC - Extensive cleanups and refactoring of the Soundwire drivers - Removal of Intel machine support obsoleted by the AVS driver - Lots of DT schema conversions - Machine support for many AMD and Intel x86 platforms - Support for AMD ACP 7.1, Mediatek MT6367 and MT8365, Realtek RTL1320 SoundWire and rev C, and Texas Instruments TAS2563 USB-audio: - Add support of multiple control interfaces - A large rewrite of quirk table with macros - Support for RME Digiface USB HD-audio: - Cleanup of quirk code for Samsung Galaxy laptops - Clean up of detection of Cirrus codecs - C-Media CM9825 HD-audio codec support Others: - Rewrites to standard print API in a lot of legacy drivers ---------------------------------------------------------------- Alexandre Mergnat (11): ASoC: dt-bindings: mediatek,mt8365-afe: Add audio afe document ASoC: dt-bindings: mediatek,mt8365-mt6357: Add audio sound card document dt-bindings: mfd: mediatek: Add codec property for MT6357 PMIC ASoC: mediatek: mt8365: Add common header ASoC: mediatek: mt8365: Add audio clock control support ASoC: mediatek: mt8365: Add I2S DAI support ASoC: mediatek: mt8365: Add ADDA DAI support ASoC: mediatek: mt8365: Add DMIC DAI support ASoC: mediatek: mt8365: Add PCM DAI support ASoC: mediatek: mt8365: Add the AFE driver support ASoC: mediatek: Add MT8365 support Andrei Simion (1): ASoC: dt-bindings: microchip,sama7g5-spdifrx: Add common DAI reference Andrew Kreimer (1): ASoC: tlv320aic31xx: Fix typos Andy Shevchenko (1): ALSA: ump: Use %*ph to print small buffer Animesh Agarwal (2): ASoC: dt-bindings: ti,pcm512x: Convert to dtschema ASoC: dt-bindings: fsl,imx-audio-es8328: Convert to dtschema Arnd Bergmann (2): ASoC: mediatek: mt8365: include linux/bitfield.h ASoC: mediatek: mt8365: remove unused mt8365_i2s_hd_str Asahi Lina (1): ALSA: usb-audio: Add mixer quirk for RME Digiface USB Balamurugan C (4): ASoC: Intel: soc-acpi: Add entry for sof_es8336 in ARL match table. ASoC: Intel: soc-acpi: Add entry for HDMI_In capture support in ARL match table ASoC: Intel: sof_rt5682: Add HDMI-In capture with rt5682 support for ARL. ASoC: Intel: ARL: Add entry for HDMI-In capture support to non-I2S codec boards. Baojun Xu (1): ASoC: tas2781: Remove unnecessary line feed for tasdevice_codec_remove Bard Liao (6): ASoC: Intel: soc-acpi-intel-ptl-match: add rt711-sdca table ASoC: Intel: soc-acpi-intel-ptl-match: Add rt722 support ASoC: Intel: sof_sdw: add rt1320 amp support ASoC: SOF: Intel: hda: refactoring topology name fixup for HDA mach ASoC: Intel: sof_sdw: move ignore_internal_dmic check earlier ASoC: Intel: sof_sdw: overwrite mach_params->dmic_num Biju Das (2): ASoC: dt-bindings: renesas,rz-ssi: Document port property ASoC: sh: rz-ssi: Add full duplex support Binbin Zhou (7): ASoC: loongson: Use BIT() macro ASoC: loongson: Simplify probe() with local dev variable ASoC: loongson: Simplify with dev_err_probe() ASoC: loongson: Simplify if statment in loongson_card_hw_params() ASoC: loongson: Replace if with ternary operator ASoC: loongson: Factor out loongson_card_acpi_find_device() function ASoC: loongson: Factor out loongson i2s enable clock functions Brent Lu (10): ASoC: SOF: Intel: hda: refactoring topology name fixup for SDW mach ASoC: SOF: Intel: hda: support BT link mask in mach_params ASoC: Intel: skl_hda_dsp_generic: support BT audio offload ASoC: Intel: skl_hda_dsp_generic: remove hdac-hdmi support ASoC: Intel: skl_hda_dsp_generic: use sof_hdmi_private to init HDMI ASoC: Intel: board_helpers: support HDA link initialization ASoC: Intel: skl_hda_dsp_generic: use common module for DAI links ASoC: Intel: ehl_rt5660: do not check common_hdmi_codec_drv ASoC: Intel: sof_pcm512x: do not check common_hdmi_codec_drv ASoC: SOF: Intel: hda: remove common_hdmi_codec_drv Cezary Rojewski (14): ALSA: hda: Move SST device entries to AVS ASoC: Intel: Drop skl_machine_pdata usage ASoC: Intel: Remove bxt_rt298 board driver ASoC: Intel: Remove bxt_da7219_max98357a board driver ASoC: Intel: Remove kbl_rt5663_rt5514_max98927 board driver ASoC: Intel: Remove kbl_rt5663_max98927 board driver ASoC: Intel: Remove kbl_rt5660 board driver ASoC: Intel: Remove kbl_da7219_max98927 board driver ASoC: Intel: Remove kbl_da7219_max98357a board driver ASoC: Intel: Remove skl_rt286 board driver ASoC: Intel: Remove skl_nau88l25_ssm4567 board driver ASoC: Intel: Remove skl_nau88l25_max98357a board driver ASoC: Intel: Remove skylake driver ASoC: Intel: avs: Enable by default for all SST configurations Charles Keepax (3): ASoC: Intel: soc-acpi: arl: Add match entries for new cs42l43 laptops ASoC: Intel: soc-acpi: adl: Add match entries for new cs42l43 laptops ASoC: Intel: soc-acpi: lnl: Add match entries for new cs42l43 laptops Chen Ni (4): ASoC: mediatek: mt8192: remove redundant null pointer check before of_node_put ASoC: cs42l42: Convert comma to semicolon ASoC: topology-test: Convert comma to semicolon ASoC: Intel: skl_hda_dsp_generic: convert comma to semicolon Christophe JAILLET (4): ASoC: sti-sas: Constify snd_soc_component_driver struct ASoC: cs43130: Constify snd_soc_component_driver struct ASoC: cs43130: Constify struct reg_sequence and reg_sequences ASoC: rt1318: Constify struct reg_sequence Codrin Ciubotariu (5): ASoC: atmel: mchp-i2s-mcc: Improve maxburst calculation for better performance ASoC: atmel: mchp-i2s-mcc: Remove interface name from stream_name ASoC: atmel: mchp-pdmc: Improve maxburst calculation for better performance ASoC: atmel: mchp-pdmc: Add snd_soc_dai_driver name ASoC: atmel: mchp-pdmc: Retain Non-Runtime Controls Colin Ian King (2): ASoC: codecs: wcd934x: make read-only array minCode_param static const ALSA: ali5451: Remove trailing space after \n newline Cyan Nyan (1): ALSA: usb-audio: Add quirk for RME Digiface USB Dmitry Torokhov (1): ASoC: tas5086: use sleeping variants of gpiod API Edson Juliano Drosdeck (1): ALSA: hda/realtek: Enable mic on Vaio VJFH52 Fabio Estevam (7): ASoC: fsl_audmix: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS() ASoC: fsl_mqs: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS() ASoC: fsl_rpmsg: Switch to RUNTIME_PM_OPS() ASoC: fsl_spdif: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS() ASoC: fsl_ssi: Switch to SYSTEM_SLEEP_PM_OPS ASoC: imx-audmux: Switch to SYSTEM_SLEEP_PM_OPS ASoC: imx-pcm-rpmsg: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS() Frank Li (2): ASoC: dt-bindings: convert tlv320aic31xx.txt to yaml ASoC: dt-bindings: Convert tpa6130a2.txt to yaml Fred Oh (1): ASoC: SOF: Intel: add PTL specific power control register Geert Uytterhoeven (1): ASoC: dt-bindings: dlg,da7213: Convert to json-schema Gustavo A. R. Silva (1): ASoC: SOF: sof-audio: Avoid -Wflex-array-member-not-at-end warnings He Lugang (1): ALSA: rme9652: remove unused parameter in macro Heiko Stuebner (2): ASoC: dt-bindings: realtek,rt5616: document mclk clock ASoC: dt-bindings: realtek,rt5616: Document audio graph port Hongbo Li (3): ASoC: dapm: Use IS_ERR_OR_NULL() helper function ALSA: pcm: replace simple_strtoul to kstrtoul ASoC: adi: Use str_enabled_disabled() helper Ivan Orlov (4): ALSA: aloop: Allow using global timers Docs/sound: Add documentation for userspace-driven ALSA timers ALSA: timer: Introduce virtual userspace-driven timers selftests: ALSA: Cover userspace-driven timers with test Jens Reidel (1): ASoC: qcom: sm8250: enable primary mi2s Jerome Brunet (16): ALSA: snd-usb-caiaq: use snd_pcm_rate_to_rate_bit ASoC: amlogic: do not use dpcm_playback/capture flags ALSA: pcm: add more sample rate definitions ALSA: cmipci: drop SNDRV_PCM_RATE_KNOT ALSA: emu10k1: drop SNDRV_PCM_RATE_KNOT ALSA: hdsp: drop SNDRV_PCM_RATE_KNOT ALSA: hdspm: drop SNDRV_PCM_RATE_KNOT ASoC: cs35l36: drop SNDRV_PCM_RATE_KNOT ASoC: cs35l41: drop SNDRV_PCM_RATE_KNOT ASoC: cs53l30: drop SNDRV_PCM_RATE_KNOT ASoC: Intel: avs: drop SNDRV_PCM_RATE_KNOT ASoC: qcom: q6asm-dai: drop SNDRV_PCM_RATE_KNOT ASoC: sunxi: sun4i-codec: drop SNDRV_PCM_RATE_KNOT ASoC: cs35l34: drop useless rate contraint ASoC: spdif: extend supported rates to 768kHz ALSA: IEC958 definition for consumer status channel update Jinjie Ruan (1): ALSA: core: timer: Use NSEC_PER_SEC macro Jonathan LoBue (1): ALSA: hda/realtek: tas2781: Fix ROG ALLY X audio Joshua Grisham (2): ALSA: hda/realtek: Refactor and simplify Samsung Galaxy Book init ALSA: hda/realtek: Add support for Galaxy Book2 Pro (NP950XEE) Joshua Pius (1): ALSA: usb-audio: Add logitech Audio profile quirk Karol Kosik (1): ALSA: usb-audio: Support multiple control interfaces Krzysztof Kozlowski (16): ASoC: codecs: wsa881x: Drop unused version readout ASoC: codecs: wsa883x: Handle reading version failure ASoC: codecs: wsa883x: Simplify handling variant/version ASoC: codecs: wsa884x: Simplify handling variant ASoC: dt-bindings: qcom,apq8016-sbc-sndcard: move to separate binding ASoC: codecs: lpass-wsa-macro: Do not hard-code dai in VI mixer ASoC: codecs: wsa881x: Use designator array initializers for Soundwire ports ASoC: codecs: wsa883x: Use designator array initializers for Soundwire ports ASoC: codecs: wsa884x: Use designator array initializers for Soundwire ports ASoC: codecs: wcd938x: Drop unused defines and enums ASoC: codecs: wcd937x: Move max port number defines to enum ASoC: codecs: wcd938x: Move max port number defines to enum ASoC: codecs: wcd939x: Move max port number defines to enum ASoC: dt-bindings: samsung,odroid: drop stale clocks ASoC: MAINTAINERS: Drop incorrect tlv320aic31xx.txt path ASoC: codecs: wsa884x: Implement temperature reading and hwmon Kuninori Morimoto (24): ASoC: rsnd: remove rsnd_mod_confirm_ssi() under DEBUG ASoC: rsnd: use pcm_dmaengine code ALSA: pci: pcxhr: use snd_pcm_direction_name() ALSA: pci: rme9652: use snd_pcm_direction_name() ALSA: trace: use snd_pcm_direction_name() ALSA: aloop: use snd_pcm_direction_name() ALSA: pcm_timer: use snd_pcm_direction_name() ASoC: stm: use snd_pcm_direction_name() ASoC: sof: pcm: use snd_pcm_direction_name() ASoC: sof: intel: use snd_pcm_direction_name() ASoC: fsl: lpc3xxx-i2s: use snd_pcm_direction_name() ASoC: tegra: use snd_pcm_direction_name() ASoC: soc-pcm: use snd_pcm_direction_name() ASoC: soc-dapm: use snd_pcm_direction_name() ASoC: remove bespoke trigger support ASoC: soc-pcm: remove snd_soc_dpcm_stream_{lock/unlock}_irq() ASoC: soc-pcm: remove snd_soc_dpcm_stream_lock_irqsave_nested() ASoC: soc-pcm: Indicate warning if dpcm_playback/capture were used for availability limition ASoC: remove snd_soc_dai_link_set_capabilities() ASoC: Intel: sof_sdw: use playback/capture_only flags ASoC: soc-pcm: move snd_soc_dpcm_can_be_xxx() to top ASoC: soc-pcm: makes snd_soc_dpcm_can_be_xxx() local function ASoC: makes rtd->initialized bit field ASoC: dt-bindings: renesas,rsnd: add post-init-providers property Leo Tsai (1): ALSA: hda: Add a new CM9825 standard driver Linus Walleij (3): ASoC: tas2781-i2c: Drop weird GPIO code ASoC: tas2781-i2c: Get the right GPIO line ASoC: tas*: Drop unused GPIO includes Liu Jing (1): ASoC: mediatek: mt2701-cs42448: Optimize redundant code in mt2701_cs42448_machine_probe Luca Ceresoli (3): ASoC: dapm-graph: remove the "ROOT" cluster ASoC: dapm-graph: visualize component On/Off bias level ASoC: dapm-graph: show path name for non-static routes Lukasz Majewski (1): ASoC: dt-bindings: Convert mxs-saif.txt to fsl,saif.yaml (imx28 saif) Ma Ke (2): ASoC: rt5682s: Return devm_of_clk_add_hw_provider to transfer the error ASoC: rt5682: Return devm_of_clk_add_hw_provider to transfer the error Maciej Strozek (1): ASoC: Intel: sof_sdw: Add quirks from some new Dell laptops Marek Vasut (1): ASoC: tlv320aic32x4: Add multi endpoint support Mark Brown (7): ASoC: mt8365: Open code BIT() to avoid spurious warnings ASoC: mt8365: Remove spurious unsigned long casts ASoC: mt8365: Remove unused prototype for mt8365_afe_clk_group_48k() ASoC: mt8365: Make non-exported functions static ASoC: mt8365: Remove unused variables ASoC: mt8365: Remove unused DMIC IIR coefficient configuration ASoC: mt8365: Allow build coverage Muhammad Usama Anjum (3): ASoC: amd: acp: Return in-case of error ASoC: mediatek: mt8365: check validity before usage of i2s_data ASoc: mediatek: mt8365: Remove unneeded assignment Neil Armstrong (2): ASoC: dt-bindings: amlogic,axg-sound-card: document clocks property ASoC: dt-bindings: amlogic,gx-sound-card: document clocks property Nicolas Belin (2): ASoc: mediatek: mt8365: Add a specific soundcard for EVK ASoC: codecs: add MT6357 support Nikita Shubin (1): ASoC: dt-bindings: cirrus,cs4271: Convert to dtschema Norman Bintang (1): ALSA: pcm: Add xrun counter for snd_pcm_substream Pierre-Louis Bossart (11): ASoC: Intel: soc-acpi: add PTL match tables ASoC: SOF: Intel: add initial support for PTL ASoC: SOF: sof-priv.h: optimize snd_sof_platform_stream_params ASoC: SOF: sof-priv.h: optimize snd_sof_mailbox ASoC: SOF: sof-priv.h: optimize snd_sof_ipc_msg ASoC: SOF: sof-audio.h: optimize snd_sof_pcm_stream_pipeline_list ALSA/ASoC/SoundWire: Intel: use single definition for SDW_INTEL_MAX_LINKS soundwire: intel: add probe-time check on link id soundwire: intel: increase maximum number of links ASoC: Intel: sof_sdw: make sof_sdw_quirk static ASoC: Intel: boards: always check the result of acpi_dev_get_first_match_dev() Richard Fitzgerald (2): ASoC: cs35l56: Make struct regmap_config const ASoC: cs-amp-lib: Add KUnit test case for empty calibration entries Rob Herring (Arm) (2): ASoC: Use of_property_present() ASoC: Use of_property_read_bool() Romain Gantois (1): ASoC: tlv320aic31xx: Add support for loading filter coefficients Shen Lichuan (2): ALSA: usb-audio: Use kmemdup_array instead of kmemdup for multiple allocation ASoC: SOF: topology: Use kmemdup_array instead of kmemdup for multiple allocation Shenghao Ding (7): ASoC: tas2781: Add TAS2563 into the Header ASoC: tas2781: Fix a compiling warning reported by robot kernel test due to adding tas2563_dvc_table ASoc: tas2781: Rename dai_driver name to unify the name between TAS2563 and TAS2781 ASoc: tas2781: Remove unnecessary line feed and space ASoC: tas2781: mark const variables tas2563_dvc_table as __maybe_unused ASoC: tas2781: replace devm_kzalloc and scnprintf with devm_kstrdup ASoC: tas2781: Add Calibration Kcontrols for Chromebook Shuming Fan (1): ASoC: rt1320: Add support for version C Simon Trimmer (3): ASoC: cs35l56: Use regmap_read_bypassed() to wake the device ALSA: hda/realtek: Convert existing CS35L56 products to use autodetect fixup function ALSA: hda/realtek: Autodetect Cirrus Logic companion amplifier bindings Srinivas Kandagatla (1): ASoC: dt-bindings: qcom,lpass-wsa-macro: correct clocks on SM8250 Stefan Stistrup (1): ALSA: usb-audio: Add input gain and master output mixer elements for RME Babyface Pro Takashi Iwai (98): ASoC: Use __counted_by() annotation for snd_soc_pcm_runtime ALSA: control: Annotate snd_kcontrol with __counted_by() ALSA: ump: Update substream name from assigned FB names ALSA: hda: Keep PM disablement for deny-listed instance ALSA: hda: Enhance pm_blacklist option ALSA: control: Take power_ref lock primarily ALSA: control: Fix leftover snd_power_unref() ALSA: memalloc: Use DMA API for x86 WC page allocations, too ALSA: memalloc: Let IOMMU handle S/G primarily ALSA: ump: Handle MIDI 1.0 Function Block in MIDI 2.0 protocol ALSA: usb-audio: Add input value sanity checks for standard types ALSA: ump: Choose the protocol when protocol caps are changed ALSA: usb-audio: Accept multiple protocols in GTBs ALSA: usb-audio: Set MIDI1 flag appropriately for GTB MIDI 1.0 entry ALSA: usb-audio: Update UMP group attributes for GTB blocks, too ALSA: seq: Print MIDI 1.0 specific port in proc output ALSA: seq: Fix missing seq port info bit return for MIDI 1.0 block ALSA: portman2x4: Use standard print API ALSA: mts64: Use standard print API ALSA: mpu401: Use standard print API ALSA: mpu401_uart: Use standard print API ALSA: mtpav: Use standard print API ALSA: opl3: Use standard print API ALSA: opl4: Use standard print API ALSA: serial-u16550: Use standard print API ALSA: virmidi: Use standard print API ALSA: vx_core: Drop unused dev field ALSA: vx_core: Use standard print API ALSA: aloop: Use standard print API ALSA: dummy: Use standard print API ALSA: pcsp: Use standard print API ALSA: i2c: cs8427: Use standard print API ALSA: i2c: pt2258: Use standard print API ALSA: i2c: Drop commented old debug prints ALSA: ad1816a: Use standard print API ALSA: als100: Use standard print API ALSA: azt2320: Use standard print API ALSA: cmi8328: Use standard print API ALSA: cmi8330: Use standard print API ALSA: cs4236: Use standard print API ALSA: es1688: Use standard print API ALSA: es18xx: Use standard print API ALSA: gus: Use standard print API ALSA: msnd: Use standard print API ALSA: opl3sa2: Use standard print API ALSA: opti9xx: Use standard print API ALSA: sb: Use standard print API ALSA: control_led: Use dev_err() ALSA: pcm: oss: Use pr_debug() ALSA: sc6000: Use standard print API ALSA: sscape: Use standard print API ALSA: wavefront: Use standard print API ALSA: wss: Use standard print API ALSA: riptide: Use standard print API ALSA: korg1212: Use standard print API ALSA: lx6464es: Cleanup the print API usages ALSA: azt3328: Use pr_warn() ALSA: emu10k1: Use dev_warn() ALSA: trident: Use standard print API ALSA: emux: Use standard print API ALSA: usx2y: Use standard print API ALSA: usb-audio: Use standard print API ALSA: intel8x0: Drop unused snd_printd() calls ALSA: vxpocket: Use standard print API ALSA: pdaudiocf: Use standard print API ALSA: ppc: Use standard print API ALSA: sh: Use standard print API ALSA: sparc: Use standard print API ALSA: asihpi: Use standard print API ALSA: docs: Drop snd_print*() stuff ALSA: core: Drop snd_print stuff and co ALSA: asihpi: Fix potential OOB array access ALSA: hdsp: Break infinite MIDI input flush loop ALSA: usb-audio: Check shutdown at endpoint_set_interface() ALSA: vxpocket: Drop no longer existent chip->dev assignment ALSA: control: Fix power_ref lock order for compat code, too ALSA: vxpocket: Fix a typo at conversion to dev_*() ALSA: sparc: Fix a typo at dev_*() conversion ALSA: caiaq: Fix unused variable warning ALSA: usx2y: Drop no longer used variable ALSA: control: Rename ctl_files_rwlock to controls_rwlock ALSA: control: Optimize locking for look-up ASoC: Drop snd_soc_*_get_kcontrol_locked() ALSA: usb-audio: Define macros for quirk table entries ALSA: usb-audio: Replace complex quirk lines with macros ALSA: seq: Drop superfluous filter argument of get_event_dest_client() drm/bridge: dw-hdmi: Move vmalloc PCM buffer management into the driver ALSA: pcm: Drop PCM vmalloc buffer helpers ALSA: pcm: Fix the previous conversion to kstrtoul() ALSA: pcm: Fix yet more compile warning at replacement with kstrtoul() ALSA: core: Drop superfluous no_free_ptr() for memdup_user() errors ALSA: hda: Allow the default preallocation for x86 again ALSA: hda: Use non-SG allocation for the communication buffers ALSA: memalloc: Move snd_malloc_ops definition into memalloc.c again ALSA: memalloc: Drop Xen PV workaround again ALSA: pcm: Fix breakage of PCM rates used for topology ALSA: memalloc: Use proper DMA mapping API for x86 WC buffer allocations ALSA: memalloc: Use proper DMA mapping API for x86 S/G buffer allocations Tang Bin (6): ASoC: loongson: remove redundant variable assignments ASoC: codecs: fix the right check and simplify code ASoC: soc-ac97: Fix the incorrect description ASoC: loongson: Add the correct judgement return ASoC: mediatek: mt7986-afe-pcm: Remove redundant error message ASoC: topology: Fix redundant logical jump Uwe Kleine-König (1): ASoC: Switch back to struct platform_driver::remove() Venkata Prasad Potturu (12): ASoC: amd: acp: Refactor TDM slots selction based on acp revision id ASoC: amd: acp: Refactor I2S dai driver ASoC: amd: acp: Update pcm hardware capabilities for acp6.3 platform ASoC: amd: acp: Add I2S TDM support for acp6.3 platform ASoC: amd: acp: Update pcm hardware capabilities for acp7.0 platform ASoC: amd: acp: Add I2S master clock generation support for acp7.0 platform ASoC: amd: acp: Set i2s clock for acp7.0 platform ASoC: amd: acp: Modify max channels and sample rate support for acp70 dai driver ASoC: amd: acp: Add I2S TDM support for acp7.0 platform ASoC: amd: acp: Add pte configuration for ACP7.0 platform ASoC: amd: acp: Add i2s master clock generation support for acp7.1 platform ASoC: amd: acp: Add I2S TDM support for acp7.1 platform Vijendar Mukunda (47): ASoC: intel: rename codec_info and dai_info structures names ASoC: intel: rename soundwire common header macros ASoC: intel: rename soundwire machine driver soc ops ASoC: intel: rename soundwire codec helper functions ASoC: intel: rename maxim codec macros ASoC: intel: rename ignore_pch_dmic variable name ASoC: intel/sdw-utils: move soundwire machine driver soc ops ASoC: intel: move soundwire machine driver common structures ASoC: intel/sdw_utils: move soundwire machine driver helper functions ASoC: intel/sdw_utils: move dmic codec helper function ASoC: intel/sdw_utils: move rtk dmic helper functions ASoC: intel/sdw_utils: move rt712 sdca helper functions ASoC: intel/sdw_utils: move rt722 sdca helper functions ASoC: intel: split soundwire machine driver private data ASoC: intel/sdw_utils: move rt5682 codec helper function ASoC: intel/sdw_utils: move rtk jack common helper functions ASoC: intel/sdw_utils: move rt700 and rt711 codec helper functions ASoC: intel/sdw_utils: move rtk amp codec helper functions ASoC: intel/sdw_utils: move cirrus soundwire codec helper functions ASoC: intel/sdw_utils: move maxim codec helper functions ASoC: intel/sdw_utils: move dai id common macros ASoC: intel/sdw_utils: move soundwire dai type macros ASoC: intel/sdw_utils: move soundwire codec_info_list structure ASoC: intel/sdw_utils: move machine driver dai link helper functions ASoC: sdw_utils: refactor sof_sdw_card_late_probe function ASoC: intel/sdw_utils: refactor init_dai_link() and init_simple_dai_link() ASoC: soc-acpi: add pci revision id field in mach params structure ASoC: amd: acp: add soundwire machines for acp6.3 based platform ASoC: SOF: amd: add alternate machines for acp6.3 based platform ASoC: SOF: amd: update mach params subsystem_rev variable ASoC: amd/sdw_utils: add sof based soundwire generic machine driver ASoC: amd: acp: remove MODULE_ALIAS for SoundWire machine driver ASoC: amd: acp: add ZSC control register programming sequence ASoC: SOF: amd: update conditional check for cache register update ASoC: amd: acp: Convert comma to semicolon ASoC: amd: acp: add legacy driver support for ACP7.1 based platforms ASoC: amd: acp: replace desc->rev check with acp pci revision id ASoC: SOF: amd: remove unused variable from sof_amd_acp_desc structure ASoC: amd: Add acpi machine id for acp7.0 version based platform ASoC: SOF: amd: add support for acp7.0 based platform ASoC: amd: acp: remove MODULE_ALIAS for legacy machine driver ASoC: amd: acp: remove MODULE_ALIAS for sof based generic machine driver ASoC: intel: sof_sdw: rename soundwire endpoint and dailink structures ASoC: intel: sof_sdw: rename soundwire parsing helper functions ASoC: sdw_util/intel: move soundwire endpoint and dai link structures ASoC: sdw_utils/intel: move soundwire endpoint parsing helper functions ASoC: amd: acp: refactor SoundWire machine driver code Wu Bo (1): ASoC: dwc: change to use devm_clk_get_enabled() helpers Yue Haibing (5): ASoC: fsl: lpc3xxx-i2s: Remove set but not used variable 'savedbitclkrate' ASoC: fsl: lpc3xxx: Make some symbols static ALSA: oss: Remove unused declarations ALSA: seq: Remove unused declarations ALSA: trident: Remove unused declarations Yuntao Liu (1): ALSA: hda: cs35l41: fix module autoloading Zhang Yi (2): ASoC: codecs: ES8326: suspend issue ASoC: codecs: ES8326: input issue after init Zhang Zekun (4): ALSA: aoa: Use helper function for_each_child_of_node() ASoC: audio-graph-card: Use for_each_child_of_node_scoped() to simplify code ASoC: audio-graph-card2: Use helper function of_get_child_count() ASoC: meson: Remove unused declartion in header file tangbin (3): ASoC: loongson: Remove useless variable definitions ASoC: loongson: remove unnecessary assignment in i2s_resume() ASoC: loongson: fix error release ying zuxin (1): ASoC: codecs: Use devm_clk_get_enabled() helpers --- .../devicetree/bindings/mfd/mediatek,mt6357.yaml | 21 + .../bindings/sound/amlogic,axg-sound-card.yaml | 7 + .../bindings/sound/amlogic,gx-sound-card.yaml | 7 + .../devicetree/bindings/sound/cirrus,cs4271.yaml | 101 + Documentation/devicetree/bindings/sound/cs4271.txt | 57 - Documentation/devicetree/bindings/sound/da7213.txt | 45 - .../devicetree/bindings/sound/dlg,da7213.yaml | 103 + .../bindings/sound/fsl,imx-audio-es8328.yaml | 111 + .../devicetree/bindings/sound/fsl,saif.yaml | 83 + .../devicetree/bindings/sound/imx-audio-es8328.txt | 60 - .../bindings/sound/mediatek,mt8365-afe.yaml | 130 + .../bindings/sound/mediatek,mt8365-mt6357.yaml | 107 + .../bindings/sound/microchip,sama7g5-spdifrx.yaml | 5 +- .../devicetree/bindings/sound/mxs-saif.txt | 41 - .../devicetree/bindings/sound/pcm512x.txt | 53 - .../bindings/sound/qcom,apq8016-sbc-sndcard.yaml | 205 ++ .../bindings/sound/qcom,lpass-wsa-macro.yaml | 22 +- .../devicetree/bindings/sound/qcom,sm8250.yaml | 137 - .../devicetree/bindings/sound/realtek,rt5616.yaml | 12 + .../devicetree/bindings/sound/renesas,rsnd.yaml | 6 + .../devicetree/bindings/sound/renesas,rz-ssi.yaml | 4 + .../devicetree/bindings/sound/samsung,odroid.yaml | 5 - .../devicetree/bindings/sound/ti,pcm512x.yaml | 101 + .../bindings/sound/ti,tlv320dac3100.yaml | 127 + .../devicetree/bindings/sound/ti,tpa6130a2.yaml | 55 + .../devicetree/bindings/sound/tlv320aic31xx.txt | 77 - .../devicetree/bindings/sound/tpa6130a2.txt | 27 - Documentation/sound/alsa-configuration.rst | 3 + Documentation/sound/hd-audio/notes.rst | 6 - Documentation/sound/index.rst | 1 + .../sound/kernel-api/writing-an-alsa-driver.rst | 25 - Documentation/sound/utimers.rst | 126 + MAINTAINERS | 4 +- .../gpu/drm/bridge/synopsys/dw-hdmi-ahb-audio.c | 30 +- drivers/soundwire/intel.h | 7 + drivers/soundwire/intel_ace2x.c | 20 + drivers/soundwire/intel_auxdevice.c | 14 + include/linux/soundwire/sdw_intel.h | 8 + include/sound/aci.h | 1 + include/sound/asoundef.h | 6 +- include/sound/control.h | 27 +- include/sound/core.h | 69 +- include/sound/cs35l56.h | 6 +- include/sound/es1688.h | 1 + include/sound/memalloc.h | 7 +- include/sound/pcm.h | 49 +- include/sound/seq_kernel.h | 4 - include/sound/snd_wavefront.h | 4 - include/sound/soc-acpi-intel-match.h | 2 + include/sound/soc-acpi.h | 6 +- include/sound/soc-card.h | 2 - include/sound/soc-component.h | 3 - include/sound/soc-dai.h | 6 +- include/sound/soc-dpcm.h | 19 - include/sound/soc.h | 7 +- include/sound/soc_sdw_utils.h | 247 ++ include/sound/soundfont.h | 6 +- include/sound/tas2563-tlv.h | 279 ++ include/sound/tas2781-tlv.h | 260 -- include/sound/tas2781.h | 71 +- include/sound/ump.h | 12 + include/sound/vx_core.h | 1 - include/trace/events/asoc.h | 3 +- include/uapi/sound/asequencer.h | 2 + include/uapi/sound/asound.h | 17 +- sound/aoa/soundbus/i2sbus/core.c | 4 +- sound/core/Kconfig | 19 +- sound/core/compress_offload.c | 2 +- sound/core/control.c | 212 +- sound/core/control_compat.c | 47 +- sound/core/control_led.c | 4 +- sound/core/init.c | 2 +- sound/core/memalloc.c | 214 +- sound/core/memalloc_local.h | 16 - sound/core/misc.c | 71 - sound/core/oss/mixer_oss.c | 10 +- sound/core/oss/pcm_plugin.h | 5 +- sound/core/pcm.c | 6 + sound/core/pcm_lib.c | 3 + sound/core/pcm_memory.c | 68 +- sound/core/pcm_misc.c | 18 +- sound/core/pcm_native.c | 18 +- sound/core/pcm_timer.c | 3 +- sound/core/seq/oss/seq_oss_device.h | 4 - sound/core/seq/seq_clientmgr.c | 26 +- sound/core/seq/seq_ports.c | 5 + sound/core/seq/seq_ports.h | 2 + sound/core/seq/seq_queue.h | 1 - sound/core/seq/seq_timer.h | 2 - sound/core/seq/seq_ump_client.c | 79 +- sound/core/seq/seq_ump_convert.c | 11 +- sound/core/timer.c | 229 +- sound/core/ump.c | 120 +- sound/drivers/aloop.c | 7 +- sound/drivers/dummy.c | 5 +- sound/drivers/mpu401/mpu401.c | 16 +- sound/drivers/mpu401/mpu401_uart.c | 31 +- sound/drivers/mtpav.c | 14 +- sound/drivers/mts64.c | 18 +- sound/drivers/opl3/opl3_lib.c | 18 +- sound/drivers/opl3/opl3_midi.c | 95 +- sound/drivers/opl3/opl3_oss.c | 12 +- sound/drivers/opl3/opl3_synth.c | 4 +- sound/drivers/opl4/opl4_lib.c | 8 +- sound/drivers/opl4/yrw801.c | 2 +- sound/drivers/pcsp/pcsp.c | 21 +- sound/drivers/pcsp/pcsp_lib.c | 38 +- sound/drivers/pcsp/pcsp_mixer.c | 2 +- sound/drivers/portman2x4.c | 19 +- sound/drivers/serial-u16550.c | 41 +- sound/drivers/virmidi.c | 8 +- sound/drivers/vx/vx_core.c | 64 +- sound/drivers/vx/vx_hwdep.c | 4 +- sound/drivers/vx/vx_pcm.c | 23 +- sound/drivers/vx/vx_uer.c | 3 +- sound/hda/Kconfig | 5 +- sound/hda/intel-dsp-config.c | 111 +- sound/hda/intel-sdw-acpi.c | 5 +- sound/i2c/cs8427.c | 37 +- sound/i2c/other/ak4113.c | 2 - sound/i2c/other/ak4114.c | 12 - sound/i2c/other/ak4117.c | 13 - sound/i2c/other/ak4xxx-adda.c | 2 - sound/i2c/other/pt2258.c | 6 +- sound/i2c/tea6330t.c | 3 - sound/isa/ad1816a/ad1816a.c | 16 +- sound/isa/ad1816a/ad1816a_lib.c | 16 +- sound/isa/als100.c | 16 +- sound/isa/azt2320.c | 14 +- sound/isa/cmi8328.c | 42 +- sound/isa/cmi8330.c | 36 +- sound/isa/cs423x/cs4236.c | 31 +- sound/isa/cs423x/cs4236_lib.c | 56 +- sound/isa/es1688/es1688.c | 2 +- sound/isa/es1688/es1688_lib.c | 55 +- sound/isa/es18xx.c | 87 +- sound/isa/gus/gus_dma.c | 37 +- sound/isa/gus/gus_io.c | 215 +- sound/isa/gus/gus_irq.c | 7 +- sound/isa/gus/gus_main.c | 29 +- sound/isa/gus/gus_mem.c | 2 +- sound/isa/gus/gus_pcm.c | 33 +- sound/isa/gus/gus_reset.c | 8 +- sound/isa/gus/gus_uart.c | 21 +- sound/isa/gus/gus_volume.c | 7 +- sound/isa/gus/gusclassic.c | 4 +- sound/isa/gus/gusextreme.c | 4 +- sound/isa/gus/gusmax.c | 16 +- sound/isa/gus/interwave.c | 61 +- sound/isa/msnd/msnd.c | 46 +- sound/isa/msnd/msnd_midi.c | 4 - sound/isa/msnd/msnd_pinnacle.c | 184 +- sound/isa/opl3sa2.c | 46 +- sound/isa/opti9xx/miro.c | 163 +- sound/isa/opti9xx/opti92x-ad1848.c | 62 +- sound/isa/sb/emu8000.c | 11 +- sound/isa/sb/emu8000_patch.c | 1 - sound/isa/sb/emu8000_synth.c | 2 +- sound/isa/sb/jazz16.c | 49 +- sound/isa/sb/sb16.c | 42 +- sound/isa/sb/sb16_csp.c | 38 +- sound/isa/sb/sb16_main.c | 13 +- sound/isa/sb/sb8.c | 12 +- sound/isa/sb/sb_common.c | 27 +- sound/isa/sb/sb_mixer.c | 4 +- sound/isa/sc6000.c | 177 +- sound/isa/sscape.c | 96 +- sound/isa/wavefront/wavefront.c | 61 +- sound/isa/wavefront/wavefront_fx.c | 36 +- sound/isa/wavefront/wavefront_midi.c | 15 +- sound/isa/wavefront/wavefront_synth.c | 196 +- sound/isa/wss/wss_lib.c | 178 +- sound/pci/ali5451/ali5451.c | 2 +- sound/pci/asihpi/asihpi.c | 101 +- sound/pci/asihpi/hpimsgx.c | 2 +- sound/pci/asihpi/hpioctl.c | 2 +- sound/pci/azt3328.c | 2 +- sound/pci/cmipci.c | 32 +- sound/pci/emu10k1/emu10k1_patch.c | 5 +- sound/pci/emu10k1/emupcm.c | 31 +- sound/pci/hda/cs35l41_hda_spi.c | 1 + sound/pci/hda/hda_component.c | 19 +- sound/pci/hda/hda_component.h | 2 +- sound/pci/hda/hda_intel.c | 21 +- sound/pci/hda/hda_intel.h | 1 + sound/pci/hda/patch_cmedia.c | 269 ++ sound/pci/hda/patch_realtek.c | 375 +- sound/pci/hda/samsung_helper.c | 310 -- sound/pci/hda/tas2781_hda_i2c.c | 2 +- sound/pci/intel8x0.c | 3 - sound/pci/intel8x0m.c | 3 - sound/pci/korg1212/korg1212.c | 30 +- sound/pci/lx6464es/lx_core.c | 8 +- sound/pci/lx6464es/lx_core.h | 3 - sound/pci/pcxhr/pcxhr_mix22.c | 2 +- sound/pci/riptide/riptide.c | 193 +- sound/pci/rme9652/hdsp.c | 24 +- sound/pci/rme9652/hdspm.c | 36 +- sound/pci/trident/trident.h | 5 - sound/pci/trident/trident_memory.c | 10 +- sound/pcmcia/pdaudiocf/pdaudiocf.c | 21 +- sound/pcmcia/pdaudiocf/pdaudiocf_core.c | 36 +- sound/pcmcia/pdaudiocf/pdaudiocf_irq.c | 3 +- sound/pcmcia/vx/vxp_ops.c | 10 +- sound/pcmcia/vx/vxpocket.c | 27 +- sound/ppc/awacs.c | 4 +- sound/ppc/daca.c | 2 +- sound/ppc/keywest.c | 5 +- sound/ppc/pmac.c | 52 +- sound/ppc/powermac.c | 2 +- sound/ppc/tumbler.c | 21 +- sound/sh/aica.c | 7 +- sound/sh/sh_dac_audio.c | 8 +- sound/soc/Kconfig | 2 + sound/soc/Makefile | 1 + sound/soc/adi/axi-i2s.c | 6 +- sound/soc/adi/axi-spdif.c | 2 +- sound/soc/amd/acp-config.c | 12 + sound/soc/amd/acp-pcm-dma.c | 2 +- sound/soc/amd/acp/Kconfig | 22 + sound/soc/amd/acp/Makefile | 4 + sound/soc/amd/acp/acp-i2s.c | 182 +- sound/soc/amd/acp/acp-legacy-common.c | 40 +- sound/soc/amd/acp/acp-legacy-mach.c | 7 - sound/soc/amd/acp/acp-mach-common.c | 2 +- sound/soc/amd/acp/acp-mach.h | 1 + sound/soc/amd/acp/acp-pci.c | 4 + sound/soc/amd/acp/acp-pdm.c | 7 +- sound/soc/amd/acp/acp-platform.c | 117 +- sound/soc/amd/acp/acp-rembrandt.c | 2 +- sound/soc/amd/acp/acp-renoir.c | 2 +- sound/soc/amd/acp/acp-sdw-sof-mach.c | 509 +++ sound/soc/amd/acp/acp-sof-mach.c | 7 - sound/soc/amd/acp/acp63.c | 2 +- sound/soc/amd/acp/acp70.c | 87 +- sound/soc/amd/acp/amd-acp63-acpi-match.c | 90 + sound/soc/amd/acp/amd.h | 27 +- sound/soc/amd/acp/chip_offset_byte.h | 84 +- sound/soc/amd/acp/soc_amd_sdw_common.h | 44 + sound/soc/amd/mach-config.h | 2 + sound/soc/amd/ps/ps-pdm-dma.c | 2 +- sound/soc/amd/ps/ps-sdw-dma.c | 2 +- sound/soc/amd/raven/acp3x-pcm-dma.c | 2 +- sound/soc/amd/renoir/acp3x-pdm-dma.c | 2 +- sound/soc/amd/vangogh/acp5x-pcm-dma.c | 2 +- sound/soc/amd/yc/acp6x-pdm-dma.c | 2 +- sound/soc/apple/mca.c | 2 +- sound/soc/atmel/atmel-i2s.c | 2 +- sound/soc/atmel/atmel_wm8904.c | 2 +- sound/soc/atmel/mchp-i2s-mcc.c | 44 +- sound/soc/atmel/mchp-pdmc.c | 99 +- sound/soc/atmel/mchp-spdifrx.c | 2 +- sound/soc/atmel/mchp-spdiftx.c | 2 +- sound/soc/atmel/sam9g20_wm8731.c | 2 +- sound/soc/atmel/sam9x5_wm8731.c | 2 +- sound/soc/atmel/tse850-pcm5142.c | 2 +- sound/soc/au1x/ac97c.c | 2 +- sound/soc/au1x/i2sc.c | 2 +- sound/soc/au1x/psc-ac97.c | 2 +- sound/soc/au1x/psc-i2s.c | 2 +- sound/soc/bcm/bcm63xx-i2s-whistler.c | 2 +- sound/soc/bcm/cygnus-ssp.c | 2 +- sound/soc/cirrus/edb93xx.c | 2 +- sound/soc/cirrus/ep93xx-i2s.c | 2 +- sound/soc/codecs/Kconfig | 7 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/ak4613.c | 4 +- sound/soc/codecs/cs-amp-lib-test.c | 44 + sound/soc/codecs/cs35l34.c | 21 - sound/soc/codecs/cs35l36.c | 34 +- sound/soc/codecs/cs35l41.c | 34 +- sound/soc/codecs/cs35l45.c | 2 +- sound/soc/codecs/cs35l56-shared.c | 25 +- sound/soc/codecs/cs42l42-sdw.c | 12 +- sound/soc/codecs/cs42l43.c | 2 +- sound/soc/codecs/cs43130.c | 113 +- sound/soc/codecs/cs47l15.c | 2 +- sound/soc/codecs/cs47l24.c | 2 +- sound/soc/codecs/cs47l35.c | 2 +- sound/soc/codecs/cs47l85.c | 2 +- sound/soc/codecs/cs47l90.c | 2 +- sound/soc/codecs/cs47l92.c | 2 +- sound/soc/codecs/cs53l30.c | 24 +- sound/soc/codecs/es8326.c | 6 +- sound/soc/codecs/inno_rk3036.c | 2 +- sound/soc/codecs/lpass-rx-macro.c | 2 +- sound/soc/codecs/lpass-tx-macro.c | 2 +- sound/soc/codecs/lpass-va-macro.c | 2 +- sound/soc/codecs/lpass-wsa-macro.c | 27 +- sound/soc/codecs/msm8916-wcd-digital.c | 2 +- sound/soc/codecs/mt6357.c | 1855 ++++++++++ sound/soc/codecs/mt6357.h | 660 ++++ sound/soc/codecs/peb2466.c | 14 +- sound/soc/codecs/rk817_codec.c | 2 +- sound/soc/codecs/rt1318.c | 3 +- sound/soc/codecs/rt1320-sdw.c | 2147 +++++++++++- sound/soc/codecs/rt1320-sdw.h | 3 + sound/soc/codecs/rt5682.c | 4 +- sound/soc/codecs/rt5682s.c | 4 +- sound/soc/codecs/spdif_receiver.c | 3 +- sound/soc/codecs/spdif_transmitter.c | 3 +- sound/soc/codecs/sti-sas.c | 21 +- sound/soc/codecs/tas2552.c | 1 - sound/soc/codecs/tas2764.c | 1 - sound/soc/codecs/tas2770.c | 1 - sound/soc/codecs/tas2780.c | 1 - sound/soc/codecs/tas2781-comlib.c | 35 +- sound/soc/codecs/tas2781-fmwlib.c | 61 +- sound/soc/codecs/tas2781-i2c.c | 953 +++++- sound/soc/codecs/tas5086.c | 9 +- sound/soc/codecs/tlv320aic31xx.c | 102 +- sound/soc/codecs/tlv320aic32x4.c | 9 + sound/soc/codecs/wcd934x.c | 4 +- sound/soc/codecs/wcd937x.c | 2 +- sound/soc/codecs/wcd937x.h | 34 +- sound/soc/codecs/wcd938x.c | 20 +- sound/soc/codecs/wcd938x.h | 4 +- sound/soc/codecs/wcd939x.c | 2 +- sound/soc/codecs/wcd939x.h | 6 +- sound/soc/codecs/wm5102.c | 2 +- sound/soc/codecs/wm5110.c | 2 +- sound/soc/codecs/wm8994.c | 2 +- sound/soc/codecs/wm8997.c | 2 +- sound/soc/codecs/wm8998.c | 2 +- sound/soc/codecs/wsa881x.c | 44 +- sound/soc/codecs/wsa883x.c | 75 +- sound/soc/codecs/wsa884x.c | 240 +- sound/soc/dwc/dwc-i2s.c | 18 +- sound/soc/fsl/fsl_asrc.c | 2 +- sound/soc/fsl/fsl_aud2htx.c | 2 +- sound/soc/fsl/fsl_audmix.c | 14 +- sound/soc/fsl/fsl_dma.c | 2 +- sound/soc/fsl/fsl_easrc.c | 2 +- sound/soc/fsl/fsl_esai.c | 2 +- sound/soc/fsl/fsl_micfil.c | 2 +- sound/soc/fsl/fsl_mqs.c | 13 +- sound/soc/fsl/fsl_rpmsg.c | 11 +- sound/soc/fsl/fsl_sai.c | 2 +- sound/soc/fsl/fsl_spdif.c | 13 +- sound/soc/fsl/fsl_ssi.c | 8 +- sound/soc/fsl/fsl_xcvr.c | 4 +- sound/soc/fsl/imx-audmux.c | 8 +- sound/soc/fsl/imx-card.c | 3 - sound/soc/fsl/imx-pcm-rpmsg.c | 16 +- sound/soc/fsl/imx-sgtl5000.c | 2 +- sound/soc/fsl/lpc3xxx-i2s.c | 11 +- sound/soc/fsl/lpc3xxx-pcm.c | 2 +- sound/soc/fsl/mpc5200_psc_ac97.c | 2 +- sound/soc/fsl/mpc5200_psc_i2s.c | 4 +- sound/soc/fsl/p1022_ds.c | 2 +- sound/soc/fsl/p1022_rdk.c | 2 +- sound/soc/fsl/pcm030-audio-fabric.c | 2 +- sound/soc/generic/audio-graph-card.c | 16 +- .../soc/generic/audio-graph-card2-custom-sample.c | 2 +- sound/soc/generic/audio-graph-card2.c | 15 +- sound/soc/generic/simple-card.c | 4 +- sound/soc/generic/test-component.c | 11 +- sound/soc/img/img-i2s-in.c | 2 +- sound/soc/img/img-i2s-out.c | 2 +- sound/soc/img/img-parallel-out.c | 2 +- sound/soc/img/img-spdif-in.c | 2 +- sound/soc/img/img-spdif-out.c | 2 +- sound/soc/img/pistachio-internal-dac.c | 2 +- sound/soc/intel/Kconfig | 120 - sound/soc/intel/Makefile | 1 - sound/soc/intel/atom/sst-mfld-platform-pcm.c | 2 +- sound/soc/intel/atom/sst/sst_acpi.c | 2 +- sound/soc/intel/avs/core.c | 8 +- sound/soc/intel/avs/pcm.c | 22 +- sound/soc/intel/boards/Kconfig | 156 +- sound/soc/intel/boards/Makefile | 31 +- sound/soc/intel/boards/bxt_da7219_max98357a.c | 720 ---- sound/soc/intel/boards/bxt_rt298.c | 670 ---- sound/soc/intel/boards/bytcht_cx2072x.c | 4 + sound/soc/intel/boards/bytcht_da7213.c | 4 + sound/soc/intel/boards/bytcht_es8316.c | 4 +- sound/soc/intel/boards/bytcr_rt5640.c | 4 +- sound/soc/intel/boards/bytcr_rt5651.c | 4 +- sound/soc/intel/boards/bytcr_wm5102.c | 2 +- sound/soc/intel/boards/cht_bsw_max98090_ti.c | 2 +- sound/soc/intel/boards/cht_bsw_rt5645.c | 4 + sound/soc/intel/boards/cht_bsw_rt5672.c | 4 + sound/soc/intel/boards/ehl_rt5660.c | 3 +- sound/soc/intel/boards/kbl_da7219_max98357a.c | 688 ---- sound/soc/intel/boards/kbl_da7219_max98927.c | 1175 ------- sound/soc/intel/boards/kbl_rt5660.c | 567 --- sound/soc/intel/boards/kbl_rt5663_max98927.c | 1073 ------ .../soc/intel/boards/kbl_rt5663_rt5514_max98927.c | 869 ----- sound/soc/intel/boards/skl_hda_dsp_common.c | 168 - sound/soc/intel/boards/skl_hda_dsp_common.h | 67 - sound/soc/intel/boards/skl_hda_dsp_generic.c | 242 +- sound/soc/intel/boards/skl_nau88l25_max98357a.c | 704 ---- sound/soc/intel/boards/skl_nau88l25_ssm4567.c | 751 ---- sound/soc/intel/boards/skl_rt286.c | 568 --- sound/soc/intel/boards/sof_board_helpers.c | 152 + sound/soc/intel/boards/sof_board_helpers.h | 3 + sound/soc/intel/boards/sof_es8336.c | 14 +- sound/soc/intel/boards/sof_pcm512x.c | 5 +- sound/soc/intel/boards/sof_rt5682.c | 7 + sound/soc/intel/boards/sof_sdw.c | 1408 +------- sound/soc/intel/boards/sof_sdw_common.h | 172 +- sound/soc/intel/boards/sof_sdw_hdmi.c | 16 +- sound/soc/intel/boards/sof_ssp_amp.c | 6 + sound/soc/intel/boards/sof_wm8804.c | 6 +- sound/soc/intel/catpt/device.c | 2 +- sound/soc/intel/common/Makefile | 1 + sound/soc/intel/common/soc-acpi-intel-adl-match.c | 105 + sound/soc/intel/common/soc-acpi-intel-arl-match.c | 263 ++ sound/soc/intel/common/soc-acpi-intel-cnl-match.c | 6 - sound/soc/intel/common/soc-acpi-intel-ehl-match.c | 1 - sound/soc/intel/common/soc-acpi-intel-hda-match.c | 18 +- sound/soc/intel/common/soc-acpi-intel-icl-match.c | 6 - sound/soc/intel/common/soc-acpi-intel-kbl-match.c | 11 - sound/soc/intel/common/soc-acpi-intel-lnl-match.c | 104 + sound/soc/intel/common/soc-acpi-intel-ptl-match.c | 145 + sound/soc/intel/common/soc-acpi-intel-skl-match.c | 5 - sound/soc/intel/skylake/Makefile | 15 - sound/soc/intel/skylake/bxt-sst.c | 629 ---- sound/soc/intel/skylake/cnl-sst-dsp.c | 266 -- sound/soc/intel/skylake/cnl-sst-dsp.h | 103 - sound/soc/intel/skylake/cnl-sst.c | 508 --- sound/soc/intel/skylake/skl-debug.c | 248 -- sound/soc/intel/skylake/skl-i2s.h | 87 - sound/soc/intel/skylake/skl-messages.c | 1419 -------- sound/soc/intel/skylake/skl-nhlt.c | 269 -- sound/soc/intel/skylake/skl-pcm.c | 1507 -------- sound/soc/intel/skylake/skl-ssp-clk.c | 428 --- sound/soc/intel/skylake/skl-ssp-clk.h | 108 - sound/soc/intel/skylake/skl-sst-cldma.c | 373 -- sound/soc/intel/skylake/skl-sst-cldma.h | 243 -- sound/soc/intel/skylake/skl-sst-dsp.c | 462 --- sound/soc/intel/skylake/skl-sst-dsp.h | 256 -- sound/soc/intel/skylake/skl-sst-ipc.c | 1071 ------ sound/soc/intel/skylake/skl-sst-ipc.h | 169 - sound/soc/intel/skylake/skl-sst-utils.c | 425 --- sound/soc/intel/skylake/skl-sst.c | 599 ---- sound/soc/intel/skylake/skl-topology.c | 3605 -------------------- sound/soc/intel/skylake/skl-topology.h | 524 --- sound/soc/intel/skylake/skl.c | 1177 ------- sound/soc/intel/skylake/skl.h | 207 -- sound/soc/kirkwood/kirkwood-i2s.c | 2 +- sound/soc/loongson/loongson_card.c | 125 +- sound/soc/loongson/loongson_dma.c | 25 +- sound/soc/loongson/loongson_i2s.c | 115 +- sound/soc/loongson/loongson_i2s.h | 24 +- sound/soc/loongson/loongson_i2s_pci.c | 51 +- sound/soc/mediatek/Kconfig | 20 + sound/soc/mediatek/Makefile | 1 + sound/soc/mediatek/common/mtk-btcvsd.c | 2 +- sound/soc/mediatek/mt2701/mt2701-afe-pcm.c | 2 +- sound/soc/mediatek/mt2701/mt2701-cs42448.c | 18 +- sound/soc/mediatek/mt6797/mt6797-afe-pcm.c | 2 +- sound/soc/mediatek/mt7986/mt7986-afe-pcm.c | 9 +- sound/soc/mediatek/mt8173/mt8173-afe-pcm.c | 2 +- sound/soc/mediatek/mt8183/mt8183-afe-pcm.c | 2 +- sound/soc/mediatek/mt8192/mt8192-afe-pcm.c | 2 +- .../mediatek/mt8192/mt8192-mt6359-rt1015-rt5682.c | 4 +- sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 2 +- sound/soc/mediatek/mt8365/Makefile | 15 + sound/soc/mediatek/mt8365/mt8365-afe-clk.c | 421 +++ sound/soc/mediatek/mt8365/mt8365-afe-clk.h | 32 + sound/soc/mediatek/mt8365/mt8365-afe-common.h | 448 +++ sound/soc/mediatek/mt8365/mt8365-afe-pcm.c | 2274 ++++++++++++ sound/soc/mediatek/mt8365/mt8365-dai-adda.c | 311 ++ sound/soc/mediatek/mt8365/mt8365-dai-dmic.c | 310 ++ sound/soc/mediatek/mt8365/mt8365-dai-i2s.c | 846 +++++ sound/soc/mediatek/mt8365/mt8365-dai-pcm.c | 293 ++ sound/soc/mediatek/mt8365/mt8365-mt6357.c | 343 ++ sound/soc/mediatek/mt8365/mt8365-reg.h | 993 ++++++ sound/soc/meson/aiu-fifo.h | 2 - sound/soc/meson/aiu.c | 2 +- sound/soc/meson/axg-card.c | 13 +- sound/soc/meson/gx-card.c | 3 +- sound/soc/meson/meson-card-utils.c | 4 +- sound/soc/mxs/mxs-sgtl5000.c | 2 +- sound/soc/pxa/mmp-sspa.c | 2 +- sound/soc/pxa/pxa2xx-ac97.c | 2 +- sound/soc/qcom/common.c | 1 - sound/soc/qcom/lpass-apq8016.c | 2 +- sound/soc/qcom/lpass-ipq806x.c | 2 +- sound/soc/qcom/lpass-sc7180.c | 2 +- sound/soc/qcom/lpass-sc7280.c | 2 +- sound/soc/qcom/qdsp6/q6asm-dai.c | 31 +- sound/soc/qcom/qdsp6/q6routing.c | 2 +- sound/soc/qcom/sm8250.c | 8 + sound/soc/rockchip/rockchip_i2s.c | 2 +- sound/soc/rockchip/rockchip_i2s_tdm.c | 2 +- sound/soc/rockchip/rockchip_pdm.c | 2 +- sound/soc/rockchip/rockchip_rt5645.c | 2 +- sound/soc/rockchip/rockchip_spdif.c | 2 +- sound/soc/samsung/arndale.c | 2 +- sound/soc/samsung/i2s.c | 2 +- sound/soc/samsung/odroid.c | 2 +- sound/soc/samsung/pcm.c | 2 +- sound/soc/samsung/snow.c | 2 +- sound/soc/samsung/spdif.c | 2 +- sound/soc/sdw_utils/Kconfig | 6 + sound/soc/sdw_utils/Makefile | 11 + .../soc_sdw_bridge_cs35l56.c} | 56 +- .../soc_sdw_cs42l42.c} | 13 +- .../soc_sdw_cs42l43.c} | 38 +- .../soc_sdw_cs_amp.c} | 18 +- .../sof_sdw_dmic.c => sdw_utils/soc_sdw_dmic.c} | 10 +- .../sof_sdw_maxim.c => sdw_utils/soc_sdw_maxim.c} | 56 +- .../soc_sdw_rt5682.c} | 12 +- .../sof_sdw_rt700.c => sdw_utils/soc_sdw_rt700.c} | 12 +- .../sof_sdw_rt711.c => sdw_utils/soc_sdw_rt711.c} | 38 +- .../soc_sdw_rt712_sdca.c} | 10 +- .../soc_sdw_rt722_sdca.c} | 10 +- .../soc_sdw_rt_amp.c} | 43 +- .../soc_sdw_rt_amp_coeff_tables.h} | 6 +- .../soc_sdw_rt_dmic.c} | 11 +- .../soc_sdw_rt_sdca_jack_common.c} | 40 +- sound/soc/sdw_utils/soc_sdw_utils.c | 1170 +++++++ sound/soc/sh/Kconfig | 1 + sound/soc/sh/fsi.c | 2 +- sound/soc/sh/hac.c | 2 +- sound/soc/sh/rcar/adg.c | 4 +- sound/soc/sh/rcar/core.c | 19 +- sound/soc/sh/rcar/dma.c | 75 +- sound/soc/sh/rcar/rsnd.h | 10 - sound/soc/sh/rcar/ssi.c | 2 +- sound/soc/sh/rz-ssi.c | 291 +- sound/soc/sh/siu_dai.c | 2 +- sound/soc/soc-ac97.c | 4 +- sound/soc/soc-card-test.c | 57 - sound/soc/soc-card.c | 10 - sound/soc/soc-component.c | 12 - sound/soc/soc-core.c | 21 +- sound/soc/soc-dai.c | 58 - sound/soc/soc-dapm.c | 5 +- sound/soc/soc-pcm.c | 364 +- sound/soc/soc-topology-test.c | 132 +- sound/soc/soc-topology.c | 9 +- sound/soc/sof/amd/Kconfig | 11 + sound/soc/sof/amd/Makefile | 4 +- sound/soc/sof/amd/acp-common.c | 3 + sound/soc/sof/amd/acp-dsp-offset.h | 24 +- sound/soc/sof/amd/acp-loader.c | 2 +- sound/soc/sof/amd/acp.c | 88 +- sound/soc/sof/amd/acp.h | 11 +- sound/soc/sof/amd/acp70.c | 142 + sound/soc/sof/amd/pci-acp63.c | 2 +- sound/soc/sof/amd/pci-acp70.c | 112 + sound/soc/sof/amd/pci-rmb.c | 1 - sound/soc/sof/amd/pci-rn.c | 1 - sound/soc/sof/amd/pci-vangogh.c | 1 - sound/soc/sof/imx/imx8.c | 2 +- sound/soc/sof/imx/imx8m.c | 2 +- sound/soc/sof/imx/imx8ulp.c | 2 +- sound/soc/sof/intel/Kconfig | 17 + sound/soc/sof/intel/Makefile | 2 + sound/soc/sof/intel/bdw.c | 2 +- sound/soc/sof/intel/byt.c | 2 +- sound/soc/sof/intel/hda-dsp.c | 1 + sound/soc/sof/intel/hda-stream.c | 4 +- sound/soc/sof/intel/hda.c | 282 +- sound/soc/sof/intel/hda.h | 1 + sound/soc/sof/intel/lnl.c | 27 + sound/soc/sof/intel/mtl.c | 16 +- sound/soc/sof/intel/mtl.h | 2 + sound/soc/sof/intel/pci-ptl.c | 77 + sound/soc/sof/intel/shim.h | 1 + sound/soc/sof/mediatek/mt8186/mt8186.c | 2 +- sound/soc/sof/mediatek/mt8195/mt8195.c | 2 +- sound/soc/sof/pcm.c | 2 +- sound/soc/sof/sof-audio.h | 8 +- sound/soc/sof/sof-priv.h | 16 +- sound/soc/sof/topology.c | 8 +- sound/soc/sprd/sprd-mcdt.c | 2 +- sound/soc/starfive/jh7110_pwmdac.c | 2 +- sound/soc/starfive/jh7110_tdm.c | 2 +- sound/soc/stm/stm32_adfsdm.c | 2 +- sound/soc/stm/stm32_i2s.c | 6 +- sound/soc/stm/stm32_sai_sub.c | 2 +- sound/soc/stm/stm32_spdifrx.c | 2 +- sound/soc/sunxi/sun4i-codec.c | 30 +- sound/soc/sunxi/sun4i-i2s.c | 2 +- sound/soc/sunxi/sun4i-spdif.c | 2 +- sound/soc/sunxi/sun50i-dmic.c | 2 +- sound/soc/sunxi/sun8i-codec.c | 2 +- sound/soc/tegra/tegra186_asrc.c | 2 +- sound/soc/tegra/tegra186_dspk.c | 2 +- sound/soc/tegra/tegra20_ac97.c | 2 +- sound/soc/tegra/tegra20_i2s.c | 2 +- sound/soc/tegra/tegra210_admaif.c | 2 +- sound/soc/tegra/tegra210_adx.c | 2 +- sound/soc/tegra/tegra210_ahub.c | 2 +- sound/soc/tegra/tegra210_amx.c | 2 +- sound/soc/tegra/tegra210_dmic.c | 2 +- sound/soc/tegra/tegra210_i2s.c | 18 +- sound/soc/tegra/tegra210_mixer.c | 2 +- sound/soc/tegra/tegra210_mvc.c | 2 +- sound/soc/tegra/tegra210_ope.c | 2 +- sound/soc/tegra/tegra210_sfc.c | 2 +- sound/soc/tegra/tegra30_ahub.c | 2 +- sound/soc/tegra/tegra30_i2s.c | 2 +- sound/soc/tegra/tegra_audio_graph_card.c | 2 +- sound/soc/tegra/tegra_pcm.c | 2 +- sound/soc/ti/ams-delta.c | 2 +- sound/soc/ti/davinci-i2s.c | 2 +- sound/soc/ti/davinci-mcasp.c | 2 +- sound/soc/ti/omap-mcbsp.c | 2 +- sound/soc/uniphier/aio-ld11.c | 2 +- sound/soc/uniphier/aio-pxs2.c | 2 +- sound/soc/uniphier/evea.c | 2 +- sound/soc/ux500/mop500.c | 2 +- sound/soc/ux500/ux500_msp_dai.c | 2 +- sound/soc/xilinx/xlnx_formatter_pcm.c | 2 +- sound/soc/xilinx/xlnx_spdif.c | 2 +- sound/soc/xtensa/xtfpga-i2s.c | 2 +- sound/sparc/amd7930.c | 8 +- sound/sparc/cs4231.c | 78 +- sound/synth/emux/emux_hwdep.c | 6 +- sound/synth/emux/emux_oss.c | 11 +- sound/synth/emux/emux_seq.c | 13 +- sound/synth/emux/emux_synth.c | 12 +- sound/synth/emux/soundfont.c | 67 +- sound/usb/caiaq/audio.c | 15 +- sound/usb/card.c | 8 + sound/usb/clock.c | 62 +- sound/usb/endpoint.c | 3 + sound/usb/format.c | 6 +- sound/usb/helper.c | 34 + sound/usb/helper.h | 10 +- sound/usb/midi.c | 6 +- sound/usb/midi2.c | 36 +- sound/usb/mixer.c | 37 +- sound/usb/mixer.h | 1 + sound/usb/mixer_quirks.c | 593 +++- sound/usb/mixer_scarlett.c | 4 +- sound/usb/power.c | 3 +- sound/usb/power.h | 1 + sound/usb/quirks-table.h | 2455 +++++-------- sound/usb/quirks.c | 62 +- sound/usb/stream.c | 21 +- sound/usb/usbaudio.h | 12 + sound/usb/usx2y/us122l.c | 45 +- sound/usb/usx2y/usX2Yhwdep.c | 25 +- sound/usb/usx2y/usb_stream.c | 95 +- sound/usb/usx2y/usb_stream.h | 1 + sound/usb/usx2y/usbusx2y.c | 7 +- sound/usb/usx2y/usbusx2yaudio.c | 67 +- sound/usb/usx2y/usx2yhwdeppcm.c | 54 +- tools/sound/dapm-graph | 44 +- tools/testing/selftests/alsa/Makefile | 4 +- tools/testing/selftests/alsa/global-timer.c | 87 + tools/testing/selftests/alsa/utimer-test.c | 164 + 648 files changed, 25012 insertions(+), 32651 deletions(-) create mode 100644 Documentation/devicetree/bindings/sound/cirrus,cs4271.yaml delete mode 100644 Documentation/devicetree/bindings/sound/cs4271.txt delete mode 100644 Documentation/devicetree/bindings/sound/da7213.txt create mode 100644 Documentation/devicetree/bindings/sound/dlg,da7213.yaml create mode 100644 Documentation/devicetree/bindings/sound/fsl,imx-audio-es8328.yaml create mode 100644 Documentation/devicetree/bindings/sound/fsl,saif.yaml delete mode 100644 Documentation/devicetree/bindings/sound/imx-audio-es8328.txt create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8365-afe.yaml create mode 100644 Documentation/devicetree/bindings/sound/mediatek,mt8365-mt6357.yaml delete mode 100644 Documentation/devicetree/bindings/sound/mxs-saif.txt delete mode 100644 Documentation/devicetree/bindings/sound/pcm512x.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,apq8016-sbc-sndcard.yaml create mode 100644 Documentation/devicetree/bindings/sound/ti,pcm512x.yaml create mode 100644 Documentation/devicetree/bindings/sound/ti,tlv320dac3100.yaml create mode 100644 Documentation/devicetree/bindings/sound/ti,tpa6130a2.yaml delete mode 100644 Documentation/devicetree/bindings/sound/tlv320aic31xx.txt delete mode 100644 Documentation/devicetree/bindings/sound/tpa6130a2.txt create mode 100644 Documentation/sound/utimers.rst create mode 100644 include/sound/soc_sdw_utils.h create mode 100644 include/sound/tas2563-tlv.h delete mode 100644 sound/core/memalloc_local.h delete mode 100644 sound/pci/hda/samsung_helper.c create mode 100644 sound/soc/amd/acp/acp-sdw-sof-mach.c create mode 100644 sound/soc/amd/acp/amd-acp63-acpi-match.c create mode 100644 sound/soc/amd/acp/soc_amd_sdw_common.h create mode 100644 sound/soc/codecs/mt6357.c create mode 100644 sound/soc/codecs/mt6357.h delete mode 100644 sound/soc/intel/boards/bxt_da7219_max98357a.c delete mode 100644 sound/soc/intel/boards/bxt_rt298.c delete mode 100644 sound/soc/intel/boards/kbl_da7219_max98357a.c delete mode 100644 sound/soc/intel/boards/kbl_da7219_max98927.c delete mode 100644 sound/soc/intel/boards/kbl_rt5660.c delete mode 100644 sound/soc/intel/boards/kbl_rt5663_max98927.c delete mode 100644 sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c delete mode 100644 sound/soc/intel/boards/skl_hda_dsp_common.c delete mode 100644 sound/soc/intel/boards/skl_hda_dsp_common.h delete mode 100644 sound/soc/intel/boards/skl_nau88l25_max98357a.c delete mode 100644 sound/soc/intel/boards/skl_nau88l25_ssm4567.c delete mode 100644 sound/soc/intel/boards/skl_rt286.c create mode 100644 sound/soc/intel/common/soc-acpi-intel-ptl-match.c delete mode 100644 sound/soc/intel/skylake/Makefile delete mode 100644 sound/soc/intel/skylake/bxt-sst.c delete mode 100644 sound/soc/intel/skylake/cnl-sst-dsp.c delete mode 100644 sound/soc/intel/skylake/cnl-sst-dsp.h delete mode 100644 sound/soc/intel/skylake/cnl-sst.c delete mode 100644 sound/soc/intel/skylake/skl-debug.c delete mode 100644 sound/soc/intel/skylake/skl-i2s.h delete mode 100644 sound/soc/intel/skylake/skl-messages.c delete mode 100644 sound/soc/intel/skylake/skl-nhlt.c delete mode 100644 sound/soc/intel/skylake/skl-pcm.c delete mode 100644 sound/soc/intel/skylake/skl-ssp-clk.c delete mode 100644 sound/soc/intel/skylake/skl-ssp-clk.h delete mode 100644 sound/soc/intel/skylake/skl-sst-cldma.c delete mode 100644 sound/soc/intel/skylake/skl-sst-cldma.h delete mode 100644 sound/soc/intel/skylake/skl-sst-dsp.c delete mode 100644 sound/soc/intel/skylake/skl-sst-dsp.h delete mode 100644 sound/soc/intel/skylake/skl-sst-ipc.c delete mode 100644 sound/soc/intel/skylake/skl-sst-ipc.h delete mode 100644 sound/soc/intel/skylake/skl-sst-utils.c delete mode 100644 sound/soc/intel/skylake/skl-sst.c delete mode 100644 sound/soc/intel/skylake/skl-topology.c delete mode 100644 sound/soc/intel/skylake/skl-topology.h delete mode 100644 sound/soc/intel/skylake/skl.c delete mode 100644 sound/soc/intel/skylake/skl.h create mode 100644 sound/soc/mediatek/mt8365/Makefile create mode 100644 sound/soc/mediatek/mt8365/mt8365-afe-clk.c create mode 100644 sound/soc/mediatek/mt8365/mt8365-afe-clk.h create mode 100644 sound/soc/mediatek/mt8365/mt8365-afe-common.h create mode 100644 sound/soc/mediatek/mt8365/mt8365-afe-pcm.c create mode 100644 sound/soc/mediatek/mt8365/mt8365-dai-adda.c create mode 100644 sound/soc/mediatek/mt8365/mt8365-dai-dmic.c create mode 100644 sound/soc/mediatek/mt8365/mt8365-dai-i2s.c create mode 100644 sound/soc/mediatek/mt8365/mt8365-dai-pcm.c create mode 100644 sound/soc/mediatek/mt8365/mt8365-mt6357.c create mode 100644 sound/soc/mediatek/mt8365/mt8365-reg.h create mode 100644 sound/soc/sdw_utils/Kconfig create mode 100644 sound/soc/sdw_utils/Makefile rename sound/soc/{intel/boards/bridge_cs35l56.c => sdw_utils/soc_sdw_bridge_cs35l56.c} (63%) rename sound/soc/{intel/boards/sof_sdw_cs42l42.c => sdw_utils/soc_sdw_cs42l42.c} (82%) rename sound/soc/{intel/boards/sof_sdw_cs42l43.c => sdw_utils/soc_sdw_cs42l43.c} (73%) rename sound/soc/{intel/boards/sof_sdw_cs_amp.c => sdw_utils/soc_sdw_cs_amp.c} (66%) rename sound/soc/{intel/boards/sof_sdw_dmic.c => sdw_utils/soc_sdw_dmic.c} (71%) rename sound/soc/{intel/boards/sof_sdw_maxim.c => sdw_utils/soc_sdw_maxim.c} (63%) rename sound/soc/{intel/boards/sof_sdw_rt5682.c => sdw_utils/soc_sdw_rt5682.c} (82%) rename sound/soc/{intel/boards/sof_sdw_rt700.c => sdw_utils/soc_sdw_rt700.c} (81%) rename sound/soc/{intel/boards/sof_sdw_rt711.c => sdw_utils/soc_sdw_rt711.c} (70%) rename sound/soc/{intel/boards/sof_sdw_rt712_sdca.c => sdw_utils/soc_sdw_rt712_sdca.c} (74%) rename sound/soc/{intel/boards/sof_sdw_rt722_sdca.c => sdw_utils/soc_sdw_rt722_sdca.c} (68%) rename sound/soc/{intel/boards/sof_sdw_rt_amp.c => sdw_utils/soc_sdw_rt_amp.c} (84%) rename sound/soc/{intel/boards/sof_sdw_amp_coeff_tables.h => sdw_utils/soc_sdw_rt_amp_coeff_tables.h} (97%) rename sound/soc/{intel/boards/sof_sdw_rt_dmic.c => sdw_utils/soc_sdw_rt_dmic.c} (70%) rename sound/soc/{intel/boards/sof_sdw_rt_sdca_jack_common.c => sdw_utils/soc_sdw_rt_sdca_jack_common.c} (78%) create mode 100644 sound/soc/sdw_utils/soc_sdw_utils.c create mode 100644 sound/soc/sof/amd/acp70.c create mode 100644 sound/soc/sof/amd/pci-acp70.c create mode 100644 sound/soc/sof/intel/pci-ptl.c create mode 100644 tools/testing/selftests/alsa/global-timer.c create mode 100644 tools/testing/selftests/alsa/utimer-test.c . Date: Sun, 15 Sep 2024 02:46:21 -0400 From: Paolo Bonzini To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Subject: [GIT PULL] First batch of KVM changes for Linux 6.12 Linus, The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/virt/kvm/kvm.git tags/for-linus-non-x86 for you to fetch changes up to 0cdcc99eeaedf2422c80d75760293fdbb476cec1: Merge tag 'kvm-riscv-6.12-1' of https://github.com/kvm-riscv/linux into HEAD (2024-09-15 02:43:17 -0400) These are the non-x86 changes (mostly ARM, as is usually the case). The generic and x86 changes will come later, in the meanwhile here is what's ready in case it helps you intersecting the travelling and pulling schedule. There is a trivial conflict in arch/arm64/include/asm/kvm_host.h with the arm64 tree. I'll also send a revert for 6.11 in a few minutes. Thanks, Paolo ---------------------------------------------------------------- ARM: * New Stage-2 page table dumper, reusing the main ptdump infrastructure * FP8 support * Nested virtualization now supports the address translation (FEAT_ATS1A) family of instructions * Add selftest checks for a bunch of timer emulation corner cases * Fix multiple cases where KVM/arm64 doesn't correctly handle the guest trying to use a GICv3 that wasn't advertised * Remove REG_HIDDEN_USER from the sysreg infrastructure, making things little simpler * Prevent MTE tags being restored by userspace if we are actively logging writes, as that's a recipe for disaster * Correct the refcount on a page that is not considered for MTE tag copying (such as a device) * When walking a page table to split block mappings, synchronize only at the end the walk rather than on every store * Fix boundary check when transfering memory using FFA * Fix pKVM TLB invalidation, only affecting currently out of tree code but worth addressing for peace of mind LoongArch: * Revert qspinlock to test-and-set simple lock on VM. * Add Loongson Binary Translation extension support. * Add PMU support for guest. * Enable paravirt feature control from VMM. * Implement function kvm_para_has_feature(). RISC-V: * Fix sbiret init before forwarding to userspace * Don't zero-out PMU snapshot area before freeing data * Allow legacy PMU access from guest * Fix to allow hpmcounter31 from the guest ---------------------------------------------------------------- Andrew Jones (1): RISC-V: KVM: Fix sbiret init before forwarding to userspace Anup Patel (1): RISC-V: KVM: Don't zero-out PMU snapshot area before freeing data Atish Patra (2): RISC-V: KVM: Allow legacy PMU access from guest RISC-V: KVM: Fix to allow hpmcounter31 from the guest Bibo Mao (6): LoongArch: Revert qspinlock to test-and-set simple lock on VM LoongArch: KVM: Add VM feature detection function LoongArch: KVM: Add Binary Translation extension support LoongArch: KVM: Add vm migration support for LBT registers LoongArch: KVM: Enable paravirt feature control from VMM LoongArch: KVM: Implement function kvm_para_has_feature() Colton Lewis (3): KVM: arm64: Move data barrier to end of split walk KVM: arm64: selftests: Ensure pending interrupts are handled in arch_timer test KVM: arm64: selftests: Add arch_timer_edge_cases selftest Joey Gouly (1): KVM: arm64: Make kvm_at() take an OP_AT_* Marc Zyngier (47): KVM: arm64: Move SVCR into the sysreg array KVM: arm64: Add predicate for FPMR support in a VM KVM: arm64: Move FPMR into the sysreg array KVM: arm64: Add save/restore support for FPMR KVM: arm64: Honor trap routing for FPMR KVM: arm64: Expose ID_AA64FPFR0_EL1 as a writable ID reg KVM: arm64: Enable FP8 support when available and configured KVM: arm64: Expose ID_AA64PFR2_EL1 to userspace and guests Merge branch kvm-arm64/tlbi-fixes-6.12 into kvmarm-master/next KVM: arm64: Move GICv3 trap configuration to kvm_calculate_traps() KVM: arm64: Force SRE traps when SRE access is not enabled KVM: arm64: Force GICv3 trap activation when no irqchip is configured on VHE KVM: arm64: Add helper for last ditch idreg adjustments KVM: arm64: Zero ID_AA64PFR0_EL1.GIC when no GICv3 is presented to the guest KVM: arm64: Add ICH_HCR_EL2 to the vcpu state KVM: arm64: Add trap routing information for ICH_HCR_EL2 KVM: arm64: Honor guest requested traps in GICv3 emulation KVM: arm64: Make most GICv3 accesses UNDEF if they trap KVM: arm64: Unify UNDEF injection helpers KVM: arm64: Add selftest checking how the absence of GICv3 is handled arm64: Add missing APTable and TCR_ELx.HPD masks arm64: Add PAR_EL1 field description arm64: Add system register encoding for PSTATE.PAN arm64: Add ESR_ELx_FSC_ADDRSZ_L() helper KVM: arm64: nv: Enforce S2 alignment when contiguous bit is set KVM: arm64: nv: Turn upper_attr for S2 walk into the full descriptor KVM: arm64: nv: Honor absence of FEAT_PAN2 KVM: arm64: nv: Add basic emulation of AT S1E{0,1}{R,W} KVM: arm64: nv: Add basic emulation of AT S1E1{R,W}P KVM: arm64: nv: Add basic emulation of AT S1E2{R,W} KVM: arm64: nv: Add emulation of AT S12E{0,1}{R,W} KVM: arm64: nv: Make ps_to_output_size() generally available KVM: arm64: nv: Add SW walker for AT S1 emulation KVM: arm64: nv: Sanitise SCTLR_EL1.EPAN according to VM configuration KVM: arm64: nv: Make AT+PAN instructions aware of FEAT_PAN3 KVM: arm64: nv: Plumb handling of AT S1* traps from EL2 KVM: arm64: nv: Add support for FEAT_ATS1A KVM: arm64: Simplify handling of CNTKCTL_EL12 KVM: arm64: Simplify visibility handling of AArch32 SPSR_* KVM: arm64: Get rid of REG_HIDDEN_USER visibility qualifier Merge branch kvm-arm64/mmu-misc-6.12 into kvmarm-master/next Merge branch kvm-arm64/fpmr into kvmarm-master/next Merge branch kvm-arm64/vgic-sre-traps into kvmarm-master/next Merge branch kvm-arm64/selftests-6.12 into kvmarm-master/next Merge branch kvm-arm64/nv-at-pan into kvmarm-master/next Merge branch kvm-arm64/s2-ptdump into kvmarm-master/next Merge branch kvm-arm64/visibility-cleanups into kvmarm-master/next Oliver Upton (1): KVM: arm64: selftests: Cope with lack of GICv3 in set_id_regs Paolo Bonzini (3): Merge tag 'kvmarm-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD Merge tag 'loongarch-kvm-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson into HEAD Merge tag 'kvm-riscv-6.12-1' of https://github.com/kvm-riscv/linux into HEAD Sean Christopherson (2): KVM: arm64: Release pfn, i.e. put page, if copying MTE tags hits ZONE_DEVICE KVM: arm64: Disallow copying MTE to guest memory while KVM is dirty logging Sebastian Ene (5): KVM: arm64: Move pagetable definitions to common header arm64: ptdump: Expose the attribute parsing functionality arm64: ptdump: Use the ptdump description from a local context arm64: ptdump: Don't override the level when operating on the stage-2 tables KVM: arm64: Register ptdump with debugfs on guest creation Snehal Koukuntla (1): KVM: arm64: Add memory length checks and remove inline in do_ffa_mem_xfer Song Gao (1): LoongArch: KVM: Add PMU support for guest Will Deacon (2): KVM: arm64: Invalidate EL1&0 TLB entries for all VMIDs in nvhe hyp init KVM: arm64: Ensure TLBI uses correct VMID after changing context arch/arm64/include/asm/esr.h | 5 +- arch/arm64/include/asm/kvm_arm.h | 1 + arch/arm64/include/asm/kvm_asm.h | 6 +- arch/arm64/include/asm/kvm_host.h | 22 +- arch/arm64/include/asm/kvm_mmu.h | 6 + arch/arm64/include/asm/kvm_nested.h | 40 +- arch/arm64/include/asm/kvm_pgtable.h | 42 + arch/arm64/include/asm/pgtable-hwdef.h | 9 + arch/arm64/include/asm/ptdump.h | 43 +- arch/arm64/include/asm/sysreg.h | 22 + arch/arm64/kvm/Kconfig | 17 + arch/arm64/kvm/Makefile | 3 +- arch/arm64/kvm/arm.c | 15 +- arch/arm64/kvm/at.c | 1101 ++++++++++++++++++++ arch/arm64/kvm/emulate-nested.c | 81 +- arch/arm64/kvm/fpsimd.c | 5 +- arch/arm64/kvm/guest.c | 6 + arch/arm64/kvm/hyp/include/hyp/fault.h | 2 +- arch/arm64/kvm/hyp/include/hyp/switch.h | 3 + arch/arm64/kvm/hyp/nvhe/ffa.c | 21 +- arch/arm64/kvm/hyp/nvhe/hyp-init.S | 2 +- arch/arm64/kvm/hyp/nvhe/hyp-main.c | 9 + arch/arm64/kvm/hyp/nvhe/switch.c | 9 + arch/arm64/kvm/hyp/nvhe/tlb.c | 6 +- arch/arm64/kvm/hyp/pgtable.c | 48 +- arch/arm64/kvm/hyp/vgic-v3-sr.c | 97 +- arch/arm64/kvm/hyp/vhe/switch.c | 3 + arch/arm64/kvm/nested.c | 55 +- arch/arm64/kvm/ptdump.c | 268 +++++ arch/arm64/kvm/sys_regs.c | 384 ++++--- arch/arm64/kvm/sys_regs.h | 23 +- arch/arm64/kvm/vgic/vgic-v3.c | 12 + arch/arm64/kvm/vgic/vgic.c | 14 +- arch/arm64/kvm/vgic/vgic.h | 6 +- arch/arm64/mm/ptdump.c | 70 +- arch/loongarch/include/asm/Kbuild | 1 - arch/loongarch/include/asm/kvm_csr.h | 6 + arch/loongarch/include/asm/kvm_host.h | 37 +- arch/loongarch/include/asm/kvm_para.h | 12 + arch/loongarch/include/asm/kvm_vcpu.h | 11 + arch/loongarch/include/asm/loongarch.h | 11 +- arch/loongarch/include/asm/paravirt.h | 7 + arch/loongarch/include/asm/qspinlock.h | 41 + arch/loongarch/include/uapi/asm/Kbuild | 2 - arch/loongarch/include/uapi/asm/kvm.h | 20 + arch/loongarch/include/uapi/asm/kvm_para.h | 21 + arch/loongarch/kernel/paravirt.c | 47 +- arch/loongarch/kernel/setup.c | 2 + arch/loongarch/kernel/smp.c | 4 +- arch/loongarch/kvm/exit.c | 46 +- arch/loongarch/kvm/vcpu.c | 340 +++++- arch/loongarch/kvm/vm.c | 69 +- arch/riscv/include/asm/kvm_vcpu_pmu.h | 21 +- arch/riscv/kvm/vcpu_pmu.c | 14 +- arch/riscv/kvm/vcpu_sbi.c | 4 +- tools/testing/selftests/kvm/Makefile | 2 + .../selftests/kvm/aarch64/arch_timer_edge_cases.c | 1062 +++++++++++++++++++ tools/testing/selftests/kvm/aarch64/no-vgic-v3.c | 175 ++++ tools/testing/selftests/kvm/aarch64/set_id_regs.c | 1 + tools/testing/selftests/kvm/aarch64/vgic_irq.c | 11 +- .../selftests/kvm/include/aarch64/arch_timer.h | 18 +- .../selftests/kvm/include/aarch64/processor.h | 3 + .../testing/selftests/kvm/lib/aarch64/processor.c | 6 + 63 files changed, 4041 insertions(+), 409 deletions(-) create mode 100644 arch/arm64/kvm/at.c create mode 100644 arch/arm64/kvm/ptdump.c create mode 100644 arch/loongarch/include/asm/qspinlock.h create mode 100644 arch/loongarch/include/uapi/asm/kvm_para.h create mode 100644 tools/testing/selftests/kvm/aarch64/arch_timer_edge_cases.c create mode 100644 tools/testing/selftests/kvm/aarch64/no-vgic-v3.c . Date: Sun, 15 Sep 2024 03:30:10 -0400 From: Paolo Bonzini To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Subject: [GIT PULL] KVM revert for Linux 6.11-rc8 (or final) Linus, The following changes since commit 59cbd4eea48fdbc68fc17a29ad71188fea74b28b: KVM: Remove HIGH_RES_TIMERS dependency (2024-09-05 12:04:54 -0400) are available in the Git repository at: https://git.kernel.org/pub/scm/virt/kvm/kvm.git tags/for-linus-6.11 for you to fetch changes up to 9d70f3fec14421e793ffbc0ec2f739b24e534900: Revert "KVM: VMX: Always honor guest PAT on CPUs that support self-snoop" (2024-09-15 02:49:33 -0400) ---------------------------------------------------------------- Do not always honor guest PAT on CPUs that support self-snoop. This triggers an issue in the bochsdrm driver, which used ioremap() instead of ioremap_wc() to map the video RAM. The revert lets video RAM use the WB memory type instead of the slower UC memory type. ---------------------------------------------------------------- Paolo Bonzini (1): Revert "KVM: VMX: Always honor guest PAT on CPUs that support self-snoop" arch/x86/kvm/mmu/mmu.c | 8 +++----- arch/x86/kvm/vmx/vmx.c | 10 ++++------ 2 files changed, 7 insertions(+), 11 deletions(-) . Date: Sun, 15 Sep 2024 12:53:44 +0200 From: Miquel Raynal To: Linus Torvalds Cc: linux-mtd@lists.infradead.org, Richard Weinberger , Tudor Ambarus , Vignesh Raghavendra , Frieder Schrempf , Michael Walle , Pratyush Yadav , linux-kernel@vger.kernel.org Subject: [GIT PULL] mtd: Changes for 6.12-rc1 Hello Linus, This is the MTD PR for v6.12-rc1. Thanks, Miqu=C3=A8l The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git tags/mtd/for-= 6.12 for you to fetch changes up to 869acb874f2b61c34063b677c2bd29595bf446a1: Merge tag 'nand/for-6.12' into mtd/next (2024-09-15 12:38:22 +0200) ---------------------------------------------------------------- * MTD changes No particularly important patchset this cycle, but we have a few usual improvements: like using a better/more recent helper or checking a return value. * Raw NAND changes The use of for_each_child_of_node_scoped() has been spread into the subsystem drivers. Aside from that, a couple of exit path have been fixed (mtk, denali), the TI GPMC bindings have been enhanced to comply with up-to-date partition descriptions and as always there is a load of small and misc fixes. * SPI-NAND changes The most impacting series this cycle is bringing support for continuous reads in the SPI-NAND subsystem. This is a feature already merged in the raw NAND subsystem which allows optimizing the internal fetch times in the chip while reading sequential pages within an eraseblock. For now only Macronix NANDs benefit from this feature. While we are talking about Macronix, some of their chip need an explicit action for selecting a different plane, and support for it has also been brought. The bitflip threshold has also been set to the same arbitrary level as in the raw NAND subsystem to optimize wear leveling decisions, and finally support for a new Winbond chip has been added. * SPI NOR changes Notable changes: - Add Write Protect support for N25Q064A. - New flash support for Zetta ZD25Q128C and Spansion S28HS256T. - Fix a NULL dereference in probe path for flashes without a name. The probe path tries to access the name without checking its existence first. S28HS256T is the first flash to define its entry without a name, uncovering this issue. ---------------------------------------------------------------- Alexander Dahl (1): mtd: rawnand: atmel: Add message on DMA usage Bartosz Golaszewski (1): mtd: rawnand: davinci: make platform_data private Brian Norris (1): mtd: spi-nor: micron-st: Add n25q064a WP support Charles Han (1): mtd: powernv: Add check devm_kasprintf() returned value Chen Ridong (1): mtd: rawnand: denali: Fix missing pci_release_regions in probe and re= move Cheng Ming Lin (2): mtd: spinand: Add support for setting plane select bits mtd: spinand: macronix: Flag parts needing explicit plane select Colin Ian King (1): mtd: parsers: bcm47xxpart: make read-only array possible_nvram_sizes = static const Cs=C3=B3k=C3=A1s, Bence (1): mtd: spi-nor: sst: Factor out common write operation to `sst_nor_writ= e_data()` Daniel Golle (1): mtd: spinand: set bitflip_threshold to 75% of ECC strength Jinjie Ruan (11): mtd: rawnand: denali: Use the devm_clk_get_enabled() helper function mtd: rawnand: arasan: Use for_each_child_of_node_scoped() mtd: rawnand: cadence: Use for_each_child_of_node_scoped() mtd: rawnand: pl353: Use for_each_child_of_node_scoped() mtd: rawnand: marvell: drm/rockchip: Use for_each_child_of_node_scope= d() mtd: rawnand: rockchip: Use for_each_child_of_node_scoped() mtd: rawnand: meson: Use for_each_child_of_node_scoped() mtd: rawnand: mtk: Use for_each_child_of_node_scoped() mtd: rawnand: renesas: Use for_each_child_of_node_scoped() mtd: rawnand: stm32_fmc2: Use for_each_child_of_node_scoped() mtd: rawnand: sunxi: Use for_each_child_of_node_scoped() Michael Walle (2): mtd: spi-nor: winbond: add Zetta ZD25Q128C support mtd: spi-nor: fix flash probing Miquel Raynal (14): mtd: nand: Rename the NAND IO iteration helper mtd: nand: Introduce a block iterator mtd: spi-nand: Isolate the MTD read logic in a helper mtd: spi-nand: Add continuous read support mtd: spi-nand: Expose spinand_write_reg_op() mtd: spi-nand: macronix: Fix helper name mtd: spi-nand: macronix: Extract the bitflip retrieval logic mtd: spi-nand: macronix: Add a possible bitflip status flag mtd: spi-nand: macronix: Continuous read support mtd: rawnand: meson: Fix typo in function name mtd: rawnand: mtk: Factorize out the logic cleaning mtk chips mtd: rawnand: mtk: Fix init error path Merge tag 'spi-nor/for-6.12' into mtd/next Merge tag 'nand/for-6.12' into mtd/next Mirsad Todorovac (1): mtd: slram: insert break after errors in parsing the map Rob Herring (Arm) (1): mtd: Use of_property_read_bool() Robert Marko (1): mtd: spinand: winbond: add support for W25N01KV Roger Quadros (1): dt-bindings: mtd: ti, gpmc-nand: support partitions node Takahiro Kuwano (1): mtd: spi-nor: spansion: Add support for S28HS256T Yan Zhen (1): mtd: concat: Use kmemdup_array instead of kmemdup for multiple alloca= tion Documentation/devicetree/bindings/mtd/ti,gpmc-nand.yaml | 5 +- drivers/mtd/devices/powernv_flash.c | 3 + drivers/mtd/devices/slram.c | 2 + drivers/mtd/mtdconcat.c | 2 +- drivers/mtd/nand/raw/arasan-nand-controller.c | 5 +- drivers/mtd/nand/raw/atmel/nand-controller.c | 5 +- drivers/mtd/nand/raw/cadence-nand-controller.c | 4 +- drivers/mtd/nand/raw/davinci_nand.c | 70 ++++++++++- drivers/mtd/nand/raw/denali_dt.c | 29 +---- drivers/mtd/nand/raw/denali_pci.c | 11 +- drivers/mtd/nand/raw/marvell_nand.c | 12 +- drivers/mtd/nand/raw/meson_nand.c | 10 +- drivers/mtd/nand/raw/mtk_nand.c | 36 +++--- drivers/mtd/nand/raw/pl35x-nand-controller.c | 5 +- drivers/mtd/nand/raw/renesas-nand-controller.c | 12 +- drivers/mtd/nand/raw/rockchip-nand-controller.c | 5 +- drivers/mtd/nand/raw/stm32_fmc2_nand.c | 7 +- drivers/mtd/nand/raw/sunxi_nand.c | 4 +- drivers/mtd/nand/spi/core.c | 223 ++++++++++++= ++++++++++++++++++++---- drivers/mtd/nand/spi/macronix.c | 146 ++++++++++++= +++++------ drivers/mtd/nand/spi/winbond.c | 26 +++++ drivers/mtd/parsers/bcm47xxpart.c | 2 +- drivers/mtd/parsers/ofpart_core.c | 4 +- drivers/mtd/spi-nor/core.c | 3 +- drivers/mtd/spi-nor/micron-st.c | 2 + drivers/mtd/spi-nor/spansion.c | 4 + drivers/mtd/spi-nor/sst.c | 39 +++---- drivers/mtd/spi-nor/winbond.c | 26 +++++ include/linux/mtd/nand.h | 90 ++++++++++++= +-- include/linux/mtd/spinand.h | 19 +++ include/linux/platform_data/mtd-davinci-aemif.h | 36 ------ include/linux/platform_data/mtd-davinci.h | 88 ------------= -- 32 files changed, 621 insertions(+), 314 deletions(-) delete mode 100644 include/linux/platform_data/mtd-davinci-aemif.h delete mode 100644 include/linux/platform_data/mtd-davinci.h . Date: Sun, 15 Sep 2024 22:40:57 +0200 From: Sebastian Reichel To: Linus Torvalds Cc: linux-kernel@vger.kernel.org Subject: [GIT PULL] hsi changes for 6.12 --nbhs5k7cbkf77ryp Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Linus, The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi.git tags/hsi-for-6.12 for you to fetch changes up to c3eddf5e8c30adb6f43fc0b149e88b9feb76f381: HSI: omap-ssi: Remove unnecessary debugfs_create_dir() error check (2024-08-27 15:28:56 +0200) ---------------------------------------------------------------- HSI changes for the 6.12 series * omap-ssi: remove unnecessary debugfs_create_dir() error check ---------------------------------------------------------------- Yang Ruibin (1): HSI: omap-ssi: Remove unnecessary debugfs_create_dir() error check drivers/hsi/controllers/omap_ssi_core.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) --nbhs5k7cbkf77ryp Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE72YNB0Y/i3JqeVQT2O7X88g7+poFAmbnRlYACgkQ2O7X88g7 +prU9xAAi9WJgTUZ9Eutpsre5R77CoF71zVRF2my1jH+ciMfhVUV7r3BBcJmoWot uZehebzG75QOvlGQLi/y1bE05Z2idB6GSChIt2aj5+SL31qUhSyDbTZGrArEDlyt F5425J1+hp5a/MkkrA7Ao2Ulj29M+ULL3mG4ICLYLKnkG4GfvHJn7M58PvUePg6a +RzeRcIveu12J6hHvyuDPq4QdSusOMIO3eUSexzcSlgZg7lKPWG/VTJz/3iYRhNK FaENzea12z21tvZ5WurjWq5ew8yD4K1DCJsc5ZtexePYKo5wptytoUoGou0OvpwT TKeJgxQ8LkdpMYMX3kgN1UZDvrF/8i+5ATMkjt+2cAiAT05qRMLc8e/ix5BwNip/ AE1LxiFI91zdR6LE5Yn1SQVHs5lHBbmiCirhSKz7gnblCokA4LeQ2fc14OEhl4KW 1DLAjgi24xn3jgKfBnRGjLwhnMK2boEAUgCg8P8aCA6Dp+LfvHFGgsa+e6Rrdmsl kAb+Ivafgi0qviraOdgCWOs89Dhi4h5Yt+/0PCIqM0/0BG7/EoSv6wSGDrV8UWF/ Q6a9xuIPJG1hO7NhD/VlG6Nw1E/oEMHBio2fG1pvxfkuUTX96KaNIcjCW2PBhHZ7 eYEtbxUiHSsb/RN1Lk9BTDPVE+NQ7veG0Nj2VcVFO9YroeF6cGM= =2ULi -----END PGP SIGNATURE----- --nbhs5k7cbkf77ryp-- . Date: Sun, 15 Sep 2024 22:41:02 +0200 From: Sebastian Reichel To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [GIT PULL] power-supply changes for 6.12 --v5iyho5naygwzboo Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi Linus, Lot's of small things this time. The pull contains two merges of immutable branches, one for the AXP717 support, which is shared with MFD and one for the usb_types change, which is shared with extcon to fix up a newly introduced driver using usb_types (also touching a couple of other subsystems). Everything but the last two commits have been in linux-next for at least 10 days. I only pushed the last two commits some minutes ago. Those two are fixes originally intended for 6.11. I received them a few days ago and gave them some testing while travelling to Vienna. I independently received a second patch fixing the issue, so it should be fixed soon and I will be on vacation with limited network access for 3 weeks after LPC. Thus I think its better to have them included now even though they received limited testing. Greetings, -- Sebastian The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.gi= t tags/for-v6.12 for you to fetch changes up to e50a57d16f897e45de1112eb6478577b197fab52: power: supply: hwmon: Fix missing temp1_max_alarm attribute (2024-09-14 1= 1:06:07 +0200) ---------------------------------------------------------------- power supply and reset changes for the 6.12 series * power-supply core - introduce power_supply_show_enum_with_available() helper - change usb_types from an array into a bitmask - fix early usage of power_supply_property_is_writeable() resulting in sysfs files not being writable - fix missing temp1_max_alarm attribute in power-supply's hwmon devices * drivers - max1720x: expose nvmem device - brcmstb: cleanup driver to use latest APIs - max77693: expose input and charging current limit - max17042_battery: fix state of charge reading for devices without current sensing - axp20x_battery: add AXP717 support - axp20x_battery: fix min/max voltage properties - axp20x_usb_power: add AXP717 support - axp20x_usb_power: add DT based input current limit * Documentation updates * misc. minor cleanups and fixes ---------------------------------------------------------------- Andres Salomon (1): ABI: testing: sysfs-class-power: clarify charge_type documentation Andrew Davis (5): power: reset: brcmstb: Use normal driver register function power: reset: brcmstb: Use device_get_match_data() for matching power: reset: brcmstb: Use syscon_regmap_lookup_by_phandle_args() hel= per power: reset: brcmstb: Use devm_register_sys_off_handler() power: reset: brcmstb: Do not go into infinite loop if reset fails Artur Weber (2): power: supply: max17042_battery: Fix SOC threshold calc w/ no current= sense power: supply: max77693: Expose input current limit and CC current pr= operties Asmaa Mnebhi (1): power: reset: pwr-mlxbf: support graceful shutdown Chen Ni (1): power: supply: cpcap-charger: Convert comma to semicolon Chris Morgan (11): power: supply: axp20x_battery: Remove design from min and max voltage power: supply: axp20x_battery: Make iio and battery config per device power: supply: axp20x_usb_power: Make VBUS and IIO config per device dt-bindings: power: supply: axp20x: Add input-current-limit-microamp power: supply: axp20x_usb_power: add input-current-limit-microamp dt-bindings: power: supply: axp20x-battery: Add monitored-battery mfd: axp20x: Add ADC, BAT, and USB cells for AXP717 dt-bindings: power: supply: axp20x: Add AXP717 compatible dt-bindings: power: supply: axp20x: Add AXP717 compatible power: supply: axp20x_usb_power: Add support for AXP717 power: supply: axp20x_battery: add support for AXP717 Colin Ian King (1): power: supply: axp20x_usb_power: Fix spelling mistake "reqested" -> "= requested" Dan Carpenter (1): power: supply: max1720x: fix a double free on error in probe() Dimitri Fedrau (1): power: supply: max1720x: add read support for nvmem Hans de Goede (8): power: supply: "usb_type" property may be written to power: supply: ucs1002: Adjust ucs1002_set_usb_type() to accept strin= g values power: supply: rt9467-charger: Remove "usb_type" property write suppo= rt power: supply: sysfs: Add power_supply_show_enum_with_available() hel= per power: supply: sysfs: Move power_supply_show_enum_with_available() up power: supply: Change usb_types from an array into a bitmask power: supply: Drop use_cnt check from power_supply_property_is_write= able() power: supply: hwmon: Fix missing temp1_max_alarm attribute Hongbo Li (1): power: supply: ab8500: Constify struct kobj_type Jinjie Ruan (1): power: supply: max8998_charger: Fix module autoloading Krzysztof Kozlowski (2): power: supply: core: simplify with cleanup.h power: supply: twl4030_charger: correct comparision with old current Sebastian Reichel (2): Merge tag 'ib-psy-usb-types-signed' into psy-next Merge tag 'tags/ib-mfd-for-iio-power-v6.12' into psy-next Stanislav Jakubek (1): dt-bindings: power: supply: sc27xx-fg: add low voltage alarm IRQ Thomas Wei=DFschuh (1): power: supply: core: constify psy_tzd_ops Documentation/ABI/testing/sysfs-class-power | 45 +- .../bindings/power/supply/sc27xx-fg.yaml | 6 + .../x-powers,axp20x-battery-power-supply.yaml | 7 + .../supply/x-powers,axp20x-usb-power-supply.yaml | 72 ++- drivers/extcon/extcon-intel-cht-wc.c | 15 +- drivers/mfd/axp20x.c | 25 +- drivers/phy/ti/phy-tusb1210.c | 11 +- drivers/power/reset/brcmstb-reboot.c | 59 +- drivers/power/reset/pwr-mlxbf.c | 16 +- drivers/power/supply/ab8500_fg.c | 2 +- drivers/power/supply/axp20x_battery.c | 591 +++++++++++++++++= ++-- drivers/power/supply/axp20x_usb_power.c | 368 +++++++++++-- drivers/power/supply/bq256xx_charger.c | 15 +- drivers/power/supply/cpcap-charger.c | 2 +- drivers/power/supply/cros_usbpd-charger.c | 22 +- drivers/power/supply/lenovo_yoga_c630_battery.c | 7 +- drivers/power/supply/max17042_battery.c | 5 +- drivers/power/supply/max1720x_battery.c | 209 +++++++- drivers/power/supply/max77693_charger.c | 52 ++ drivers/power/supply/max8998_charger.c | 1 + drivers/power/supply/mp2629_charger.c | 15 +- drivers/power/supply/mt6360_charger.c | 13 +- drivers/power/supply/mt6370-charger.c | 13 +- drivers/power/supply/power_supply_core.c | 19 +- drivers/power/supply/power_supply_hwmon.c | 3 +- drivers/power/supply/power_supply_sysfs.c | 66 +-- drivers/power/supply/qcom_battmgr.c | 37 +- drivers/power/supply/qcom_pmi8998_charger.c | 13 +- drivers/power/supply/rk817_charger.c | 9 +- drivers/power/supply/rn5t618_power.c | 13 +- drivers/power/supply/rt9467-charger.c | 16 +- drivers/power/supply/rt9471.c | 15 +- drivers/power/supply/twl4030_charger.c | 2 +- drivers/power/supply/ucs1002_power.c | 26 +- drivers/usb/typec/anx7411.c | 11 +- drivers/usb/typec/rt1719.c | 11 +- drivers/usb/typec/tcpm/tcpm.c | 11 +- drivers/usb/typec/tipd/core.c | 9 +- drivers/usb/typec/ucsi/psy.c | 11 +- include/linux/mfd/axp20x.h | 26 + include/linux/mfd/max77693-private.h | 5 + include/linux/power_supply.h | 3 +- 42 files changed, 1435 insertions(+), 442 deletions(-) --v5iyho5naygwzboo Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE72YNB0Y/i3JqeVQT2O7X88g7+poFAmbnRl4ACgkQ2O7X88g7 +powXg//Vf3fVIDf/G1bKemg7VNryDRxdlWp4Wv4He/odZESQvm71eedHrNTfHjH ySIVAPJbCIYcfpJVrNpJ08hGYkmO4MYAsG0faRtW9tL2dhnyQrcan1A9TS9RDvJl zaltwAOs118aNpZSNEWqT2iC8FJ/Sh/UK7NQORKn/tNx7/BkrA+w/LIY1iOj3LCq 3jjowsy4U0Ha2K/az6MfrBFQlOuX3McrTpDSljb2zitlNTRhh3pAmdCwc4ts0jp3 XFaIoZLv+dVBkEvCmkAcPG1gTTMpVe9hzZw4Wj2ZeRy+Yt7T0gQeD7ii7zkwcMbz fTe03KIRzlehdSj2qpzfml4wkwb9mOJiKqvgNTx5fs9vqXybY3Jk13T1uvCVwVwR 5lTZpCZQXIS0xnz3EVLUs2lJWPesjKtjk88mbLkUDa3Xms8Z0S1f26dto6bGo35M 6Sxj+RZ3ZHHVkvWdd05bed29seaTaJ8r1qp0Wu9K1JTZll+w+yq0jvIo0K1B5he8 5fvruXT7M609a7Emb7n5HafxmN8pJJ47EtZlYGXgmbHNVzOlxz8e6Z09MG14dOof FlBoq4K1CoM5cECdqoDKFSxFH/2DFYJHg0Qnk4s09ESVveeSKv3ddCQKvEqKgqdU 0nuoaljyc2y51A1NI7oflR+1caiCTaycV2eQo+Vlz3pudae/+RI= =QAp9 -----END PGP SIGNATURE----- --v5iyho5naygwzboo-- . Date: Mon, 16 Sep 2024 00:26:11 +0100 From: Mark Brown To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, Mark Brown Subject: [GIT PULL] regmap updates for v6.12 The following changes since commit 7c626ce4bae1ac14f60076d00eafe71af30450ba: Linux 6.11-rc3 (2024-08-11 14:27:14 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git tags/regmap-v6.12 for you to fetch changes up to c7edb7ac8472a57e0c56a3a95796db3af98b2383: regmap: kunit: Add coverage of spinlocked regmaps (2024-09-02 12:56:16 +0100) ---------------------------------------------------------------- regmap: Updates for v6.12 The main update here is Matti's work allowing regmap irqdomains to be given custom names (allowing multiple interrupt controllers associatd with a single struct device), this pulls in some commits from Thomas' tree which it depends on. Otherwise there's a bit of work on improving handling of regmaps protected with spinlocks when used with complex cache types, fixing some valid but harmless lockdep reports seen with some new driver work. ---------------------------------------------------------------- Marek Szyprowski (1): regcache: use map->alloc_flags also for allocating cache Mark Brown (4): regmap IRQ support for devices with multiple IRQs regmap: Hold the regmap lock when allocating and freeing the cache regmap: Use locking during kunit tests regmap: kunit: Add coverage of spinlocked regmaps Matti Vaittinen (3): irqdomain: Simplify simple and legacy domain creation irqdomain: Allow giving name suffix for domain regmap: Allow setting IRQ domain name suffix Thomas Gleixner (1): irqdomain: Cleanup domain name allocation drivers/base/regmap/regcache-flat.c | 2 +- drivers/base/regmap/regcache-maple.c | 2 +- drivers/base/regmap/regcache-rbtree.c | 2 +- drivers/base/regmap/regcache.c | 4 + drivers/base/regmap/regmap-irq.c | 37 +++++-- drivers/base/regmap/regmap-kunit.c | 19 +++- drivers/base/regmap/regmap.c | 1 + include/linux/irqdomain.h | 8 ++ include/linux/regmap.h | 4 + kernel/irq/irqdomain.c | 198 +++++++++++++++++++--------------- 10 files changed, 175 insertions(+), 102 deletions(-) . Date: Mon, 16 Sep 2024 00:26:27 +0100 From: Mark Brown To: Linus Torvalds Cc: Liam Girdwood , linux-kernel@vger.kernel.org, Mark Brown Subject: [GIT PULL] regulator updates for v6.12 The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git tags/regulator-v6.12 for you to fetch changes up to 4591a2271f2e4c320eaa63c348169e4e6e6f2852: regulator: sm5703: Remove because it is unused and fails to build (2024-09-13 19:08:14 +0100) ---------------------------------------------------------------- regulator: Updates for v6.12 This release is almost all cleanup work of various kinds, while the diffstat for the core is quite large this is almost all cleanups and documentation improvments with some small fixes rather than any new feature work. We do have support for a couple of new devices but these are small additions to existing drivers rather than new drivers. - Removal of the SM5703 driver which does not have it's dependencies available. - Support for Allwinner AXP717, and Qualcomm WCN6855. The Allwinner support shares some commits with the MFD tree. ---------------------------------------------------------------- Andre Przywara (3): dt-bindings: mfd: x-powers,axp152: add boost regulator mfd: axp20x: AXP717: Add support for boost regulator regulator: axp20x: AXP717: Add boost regulator Andrei Simion (2): regulator: mcp16502: Add supplier for regulators regulator: dt-bindings: microchip,mcp16502: Add voltage input supply documentation André Draszik (1): regulator: update some comments ([gs]et_voltage_vsel vs [gs]et_voltage_sel) Andy Shevchenko (1): regulator: of: Refactor of_get_*regulator() to decrease indentation Bartosz Golaszewski (3): regulator: dt-bindings: qcom,qca6390-pmu: fix the description for bt-enable-gpios regulator: dt-bindings: qcom,qca6390-pmu: document WCN6855 regulator: dt-bindings: qcom,qca6390-pmu: document the swctrl-gpios property Chen Ni (2): regulator: wm831x-isink: Convert comma to semicolon regulator: rt5120: Convert comma to semicolon Chen-Yu Tsai (15): regulator: Clarify error message for "id == NULL" in _regulator_get() regulator: Return actual error in of_regulator_bulk_get_all() regulator: Fully clean up on error in of_regulator_bulk_get_all() regulator: core: Fix short description for _regulator_check_status_enabled() regulator: core: Fix regulator_is_supported_voltage() kerneldoc return value regulator: core: Fix incorrectly formatted kerneldoc "Return" sections regulator: core: Add missing kerneldoc "Return" sections regulator: of: Fix incorrectly formatted kerneldoc "Return" sections regulator: fixed: Fix incorrectly formatted kerneldoc "Return" section regulator: fixed-helper: Add missing "Return" kerneldoc section regulator: irq_helpers: Fix regulator_irq_map_event_simple() kerneldoc regulator: of: Fix kerneldoc format for of_regulator_bulk_get_all() regulator: Unify "negative error number" terminology in comments regulator: Move OF-specific regulator lookup code to of_regulator.c regulator: Split up _regulator_get() Christophe JAILLET (6): regulator: bd9576: Constify struct linear_range regulator: mp5416: Constify struct regulator_desc regulator: da9211: Constify struct regulator_desc regulator: wm8400: Constify struct regulator_desc regulator: tps6287x: Constify struct regulator_desc regulator: sm5703: Remove because it is unused and fails to build Dan Carpenter (1): regulator: bd96801: Delete unnecessary check in probe() Jinjie Ruan (1): regulator: max8973: Use irq_get_trigger_type() helper Krzysztof Kozlowski (24): regulator: bd718x7: Use scoped device node handling to simplify error paths regulator: bd96801: Use scoped device node handling to simplify error paths regulator: max8997: Use scoped device node handling to simplify error paths regulator: s5m8767: Use scoped device node handling to simplify error paths regulator: qcom-rpmh: Simplify with scoped for each OF child loop regulator: qcom-smd: Simplify with scoped for each OF child loop regulator: scmi: Simplify with scoped for each OF child loop regulator: s2mps11: use scoped memory allocation to simplify probe regulator: da9052: Constify static data regulator: da9055: Constify static data regulator: da9063: Constify static data regulator: da9121: Constify static data regulator: hi6421: Constify static data regulator: hi6421v600: Constify static data regulator: tps65023: Constify static data regulator: max77826: Drop unused 'rdesc' in 'struct max77826_regulator_info' regulator: max77826: Constify static data regulator: mtk-dvfsrc: Constify static data regulator: pcap: Constify static data regulator: pfuze100: Constify static data regulator: qcom-refgen: Constify static data regulator: hi6421v530: Drop unused 'eco_microamp' regulator: hi6421v530: Use container_of and constify static data regulator: max77650: Use container_of and constify static data Macpaul Lin (1): regulator: dt-bindings: mediatek,mt6397-regulator: convert to YAML Mark Brown (5): Add input voltage suppliers for PMIC MCP16502 regulator: Use scoped device node handling to simplify regulator: Minor cleanups regulator: Add AXP717 boost support regulator: Few constifications of static data Rob Herring (Arm) (3): regulator: Use of_property_read_bool() regulator: qcom_spmi: Drop unnecessary of_find_property() call regulator: qcom_spmi: Use of_property_read_bool() Wei Fang (1): regulator: core: fix the broken behavior of regulator_dev_lookup() Yu Jiaoliang (1): regulator: Fix typos in the comment Yue Haibing (1): regulator: max77857: Make max77857_id static .../devicetree/bindings/mfd/x-powers,axp152.yaml | 2 +- .../regulator/mediatek,mt6397-regulator.yaml | 238 ++++++++++++++++ .../bindings/regulator/microchip,mcp16502.yaml | 20 ++ .../bindings/regulator/mt6397-regulator.txt | 220 --------------- .../bindings/regulator/qcom,qca6390-pmu.yaml | 22 +- drivers/mfd/axp20x.c | 2 + drivers/regulator/Kconfig | 7 - drivers/regulator/Makefile | 1 - drivers/regulator/act8865-regulator.c | 4 +- drivers/regulator/axp20x-regulator.c | 4 + drivers/regulator/bd718x7-regulator.c | 19 +- drivers/regulator/bd9576-regulator.c | 8 +- drivers/regulator/bd96801-regulator.c | 19 +- drivers/regulator/core.c | 310 +++++++++++---------- drivers/regulator/da903x-regulator.c | 2 +- drivers/regulator/da9052-regulator.c | 22 +- drivers/regulator/da9055-regulator.c | 28 +- drivers/regulator/da9063-regulator.c | 4 +- drivers/regulator/da9121-regulator.c | 20 +- drivers/regulator/da9211-regulator.c | 2 +- drivers/regulator/devres.c | 18 +- drivers/regulator/fan53555.c | 2 +- drivers/regulator/fixed-helper.c | 2 + drivers/regulator/fixed.c | 8 +- drivers/regulator/helpers.c | 8 +- drivers/regulator/hi6421-regulator.c | 14 +- drivers/regulator/hi6421v530-regulator.c | 27 +- drivers/regulator/hi6421v600-regulator.c | 10 +- drivers/regulator/internal.h | 13 +- drivers/regulator/irq_helpers.c | 17 +- drivers/regulator/max5970-regulator.c | 2 +- drivers/regulator/max77650-regulator.c | 31 +-- drivers/regulator/max77802-regulator.c | 4 +- drivers/regulator/max77826-regulator.c | 4 +- drivers/regulator/max77857-regulator.c | 2 +- drivers/regulator/max8973-regulator.c | 7 +- drivers/regulator/max8997-regulator.c | 16 +- drivers/regulator/mcp16502.c | 17 +- drivers/regulator/mp5416.c | 4 +- drivers/regulator/mt6357-regulator.c | 2 +- drivers/regulator/mtk-dvfsrc-regulator.c | 10 +- drivers/regulator/of_regulator.c | 150 ++++++++-- drivers/regulator/pcap-regulator.c | 12 +- drivers/regulator/pfuze100-regulator.c | 10 +- drivers/regulator/qcom-refgen-regulator.c | 4 +- drivers/regulator/qcom-rpmh-regulator.c | 17 +- drivers/regulator/qcom_smd-regulator.c | 13 +- drivers/regulator/qcom_spmi-regulator.c | 12 +- drivers/regulator/rt5120-regulator.c | 4 +- drivers/regulator/s2mps11.c | 17 +- drivers/regulator/s5m8767.c | 17 +- drivers/regulator/scmi-regulator.c | 8 +- drivers/regulator/sm5703-regulator.c | 170 ----------- drivers/regulator/tps6287x-regulator.c | 2 +- drivers/regulator/tps65023-regulator.c | 6 +- drivers/regulator/wm831x-isink.c | 8 +- drivers/regulator/wm8400-regulator.c | 2 +- include/linux/mfd/axp20x.h | 3 + 58 files changed, 809 insertions(+), 818 deletions(-) create mode 100644 Documentation/devicetree/bindings/regulator/mediatek,mt6397-regulator.yaml delete mode 100644 Documentation/devicetree/bindings/regulator/mt6397-regulator.txt delete mode 100644 drivers/regulator/sm5703-regulator.c . Date: Mon, 16 Sep 2024 00:26:43 +0100 From: Mark Brown To: Linus Torvalds Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Mark Brown Subject: [GIT PULL] SPI updates for v6.12 The following changes since commit b787a33864121a565aeb0e88561bf6062a19f99c: spi: geni-qcom: Fix incorrect free_irq() sequence (2024-09-09 12:57:33 +0100) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git tags/spi-v6.12 for you to fetch changes up to 07f1eb718db281c3e0cdb068ea7d73c30921a81c: spi: geni-qcom: Use devm functions to simplify code (2024-09-12 12:39:04 +0100) ---------------------------------------------------------------- spi: Updates for v6.12 This is quite a quiet release for sPI. The one new core feature here is support for configuring the state of the MOSI pin when the bus is idle, there are some devices which are very fragile in this regard even when the chip select signal is not asserted. Otherwise we have some new driver support, a bunch of small fixes and some general cleanup work. - Support for configuring the state of the MOSI pin when the the bus is idle. - Add the Elgin JG0309-01 in spidev. - Support for Marvell xSPI, Mediatek MTK7981, Microchip PIC64GX, NXP i.MX8ULP, and Rockchip RK3576 controllers. I also accidentally pulled in an IIO DT bindings update due to a typo when applying the MOSI idle state patches. ---------------------------------------------------------------- Andy Shevchenko (3): spi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ spi: ppc4xx: Revert "handle irq_of_parse_and_map() errors" spi: ppc4xx: Sort headers AngeloGioacchino Del Regno (1): spi: spi-mt65xx: Use threaded interrupt for non-SPIMEM transfer Bastien Curutchet (1): spi: davinci: Adapt transfer's timeout to transfer's length Biju Das (1): spi: rpc-if: Add missing MODULE_DEVICE_TABLE Chen Ni (1): spi: meson-spicc: convert comma to semicolon David Lechner (1): spi: axi-spi-engine: don't emit XFER_BITS for empty xfer Detlev Casanova (1): spi: dt-bindings: Add rockchip,rk3576-spi compatible Fabio Estevam (3): dt-bindings: trivial-devices: Document elgin,jg10309-01 spi: spidev: Add an entry for elgin,jg10309-01 spi: mxs: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS() Frank Li (1): spi: dt-bindings: convert spi-sc18is602.txt to yaml format Haibo Chen (3): dt-bindings: spi: nxp-fspi: add imx8ulp support spi: fspi: involve lut_num for struct nxp_fspi_devtype_data spi: fspi: add support for imx8ulp Hongbo Li (1): spi: spi-ppc4xx: Remove duplicate included header file linux/platform_device.h Jinjie Ruan (16): spi: cadence: Make cdns_mrvl_xspi_clk_div_list static spi: s3c64xx: Fix module autoloading spi: bcm63xx: Fix module autoloading spi: bcm63xx: Fix missing pm_runtime_disable() spi: wpcm-fiu: Use devm_platform_ioremap_resource_byname() spi: atmel-quadspi: Simpify resource lookup spi: bcmbca-hsspi: Simpify resource lookup spi: bcmbca-hsspi: Fix missing pm_runtime_disable() spi: bcmbca-hsspi: Use devm_spi_alloc_host() spi: atmel-quadspi: Fix uninitialized res spi: atmel-quadspi: Simplify with dev_err_probe() spi: wpcm-fiu: Fix uninitialized res spi: wpcm-fiu: Simplify with dev_err_probe() spi: zynqmp-gqspi: Use devm_spi_alloc_host() spi: zynqmp-gqspi: Simplify with dev_err_probe() spi: geni-qcom: Use devm functions to simplify code Krzysztof Kozlowski (1): spi: cadence-quadspi: Simplify with scoped for each OF child loop Kuan-Wei Chiu (1): spi: zynq-qspi: Replace kzalloc with kmalloc for buffer allocation Ma Ke (2): spi: ppc4xx: handle irq_of_parse_and_map() errors spi: ppc4xx: handle irq_of_parse_and_map() errors Marcelo Schmitt (5): spi: Enable controllers to extend the SPI protocol with MOSI idle configuration spi: bitbang: Implement support for MOSI idle state configuration spi: spi-gpio: Add support for MOSI idle state configuration spi: spi-axi-spi-engine: Add support for MOSI idle configuration dt-bindings: iio: adc: Add AD4000 Mark Brown (9): Add support for AD4000 series of ADCs Marvell HW overlay support for Cadence xSPI spi: Add dummy definitions for ACPI lookup functions spi: bcm63xx: Fix two bugs spi: wpcm-fiu: Fix uninitialized res spi: bcmbca-hsspi: Fix missing pm_runtime_disable() spi: atmel-quadspi: Fix uninitialized res Add device tree for ArmSoM Sige 5 board spi: Merge up fixes Nathan Chancellor (1): spi: Revert "spi: Insert the missing pci_dev_put()before return" Pierre-Henry Moussay (1): dt-bindings: spi: add PIC64GX SPI/QSPI compatibility to MPFS SPI/QSPI bindings RafaÅ‚ MiÅ‚ecki (1): spi: dt-bindings: mediatek,spi-mt65xx: add compatible for MT7981 Witold Sadowski (10): spi: dt-bindings: cadence: Add Marvell overlay bindings documentation for Cadence XSPI spi: cadence: Add static PHY configuration in Marvell overlay spi: cadence: Add clock configuration for Marvell xSPI overlay spi: cadence: Add Marvell SDMA operations spi: cadence: Add Marvell xSPI interrupt changes spi: cadence: Add Marvell xfer operation support spi: cadence: Change resource mapping spi: cadence: Change cs property reading. spi: cadence: Try to read spi-tx/rx-bus width property using ACPI spi: cadence: Add 64BIT Kconfig dependency Yan Zhen (1): spi: nxp-fspi: Use max macro Yang Ruibin (1): spi: Insert the missing pci_dev_put()before return Yang Yingliang (7): spi: switch to use spi_controller_is_target() spi: slave-time: switch to use spi_target_abort() spi: slave-system-control: switch to use spi_target_abort() spi: spidev: switch to use spi_target_abort() spi: slave-mt27xx: switch to use target_abort platform/olpc: olpc-xo175-ec: switch to use spi_target_abort(). spi: remove spi_controller_is_slave() and spi_slave_abort() zhang jiao (1): spi: spidev_fdx: Fix the wrong format specifier .../devicetree/bindings/iio/adc/adi,ad4000.yaml | 197 ++++++ .../devicetree/bindings/spi/cdns,xspi.yaml | 32 +- .../bindings/spi/mediatek,spi-mt65xx.yaml | 1 + .../bindings/spi/microchip,mpfs-spi.yaml | 7 +- .../devicetree/bindings/spi/nxp,sc18is.yaml | 51 ++ .../devicetree/bindings/spi/spi-nxp-fspi.yaml | 1 + .../devicetree/bindings/spi/spi-rockchip.yaml | 1 + .../devicetree/bindings/spi/spi-sc18is602.txt | 23 - .../devicetree/bindings/trivial-devices.yaml | 2 + Documentation/spi/spi-summary.rst | 83 +++ MAINTAINERS | 7 + drivers/platform/olpc/olpc-xo175-ec.c | 4 +- drivers/spi/Kconfig | 2 +- drivers/spi/atmel-quadspi.c | 31 +- drivers/spi/spi-axi-spi-engine.c | 17 +- drivers/spi/spi-bcm63xx.c | 9 +- drivers/spi/spi-bcmbca-hsspi.c | 25 +- drivers/spi/spi-bitbang.c | 24 + drivers/spi/spi-cadence-quadspi.c | 9 +- drivers/spi/spi-cadence-xspi.c | 692 ++++++++++++++++++++- drivers/spi/spi-davinci.c | 8 +- drivers/spi/spi-geni-qcom.c | 63 +- drivers/spi/spi-gpio.c | 12 +- drivers/spi/spi-meson-spicc.c | 22 +- drivers/spi/spi-mt65xx.c | 40 +- drivers/spi/spi-mxs.c | 11 +- drivers/spi/spi-nxp-fspi.c | 57 +- drivers/spi/spi-ppc4xx.c | 22 +- drivers/spi/spi-rpc-if.c | 7 + drivers/spi/spi-s3c64xx.c | 1 + drivers/spi/spi-slave-mt27xx.c | 12 +- drivers/spi/spi-slave-system-control.c | 2 +- drivers/spi/spi-slave-time.c | 2 +- drivers/spi/spi-wpcm-fiu.c | 17 +- drivers/spi/spi-zynq-qspi.c | 2 +- drivers/spi/spi-zynqmp-gqspi.c | 32 +- drivers/spi/spi.c | 27 +- drivers/spi/spidev.c | 2 +- include/linux/spi/spi.h | 12 +- include/linux/spi/spi_bitbang.h | 1 + include/uapi/linux/spi/spi.h | 5 +- tools/spi/spidev_fdx.c | 2 +- 42 files changed, 1305 insertions(+), 272 deletions(-) create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml create mode 100644 Documentation/devicetree/bindings/spi/nxp,sc18is.yaml delete mode 100644 Documentation/devicetree/bindings/spi/spi-sc18is602.txt . Date: Mon, 16 Sep 2024 01:24:35 -0700 From: Kees Cook To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, "Guilherme G. Piccoli" , Kees Cook , linux-hardening@vger.kernel.org, Mike Rapoport , Steven Rostedt , Tony Luck , Wen Yang Subject: [GIT PULL] pstore updates for v6.12-rc1 Hi Linus, Please pull these pstore updates for v6.12-rc1. Thanks! -Kees The following changes since commit de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed: Linux 6.11-rc2 (2024-08-04 13:50:53 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/pstore-v6.12-rc1 for you to fetch changes up to 1bf8012fc6997f2117f6919369cde16659db60e0: pstore: replace spinlock_t by raw_spinlock_t (2024-08-26 13:33:50 -0700) ---------------------------------------------------------------- pstore updates for v6.12-rc1 - ramoops: Fix .rst typo (Steven Rostedt) - pstore: replace spinlock_t by raw_spinlock_t (Wen Yang) ---------------------------------------------------------------- Steven Rostedt (1): pstore/ramoops: Fix typo as there is no "reserver" Wen Yang (1): pstore: replace spinlock_t by raw_spinlock_t Documentation/admin-guide/ramoops.rst | 2 +- fs/pstore/platform.c | 8 ++++---- include/linux/pstore.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) -- Kees Cook . Date: Mon, 16 Sep 2024 10:38:34 +0200 (CEST) From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] core/debugobjects for v6.12-rc1 Linus, please pull the latest core/debugobjects branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core-debugobject= s-2024-09-16 up to: 63a4a9b52c3c: debugobjects: Remove redundant checks in fill_pool() A set of updates for debugobjects: - Use the threshold to check for the pool refill condition and not the run time recorded all time low fill value, which is lower than the threshold and therefore causes refills to be delayed. - KCSAN annotation updates and simplification of the fill_pool() code. Thanks, tglx ------------------> Zhen Lei (3): debugobjects: Fix the compilation attributes of some global variables debugobjects: Fix conditions in fill_pool() debugobjects: Remove redundant checks in fill_pool() lib/debugobjects.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/debugobjects.c b/lib/debugobjects.c index 7cea91e193a8..5ce473ad499b 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -70,10 +70,10 @@ static HLIST_HEAD(obj_to_free); * made at debug_stats_show(). Both obj_pool_min_free and obj_pool_max_used * can be off. */ -static int obj_pool_min_free =3D ODEBUG_POOL_SIZE; -static int obj_pool_free =3D ODEBUG_POOL_SIZE; +static int __data_racy obj_pool_min_free =3D ODEBUG_POOL_SIZE; +static int __data_racy obj_pool_free =3D ODEBUG_POOL_SIZE; static int obj_pool_used; -static int obj_pool_max_used; +static int __data_racy obj_pool_max_used; static bool obj_freeing; /* The number of objs on the global free list */ static int obj_nr_tofree; @@ -84,9 +84,9 @@ static int __data_racy debug_objects_fixups __read_mostly; static int __data_racy debug_objects_warnings __read_mostly; static int __data_racy debug_objects_enabled __read_mostly =3D CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT; -static int __data_racy debug_objects_pool_size __read_mostly +static int debug_objects_pool_size __ro_after_init =3D ODEBUG_POOL_SIZE; -static int __data_racy debug_objects_pool_min_level __read_mostly +static int debug_objects_pool_min_level __ro_after_init =3D ODEBUG_POOL_MIN_LEVEL; =20 static const struct debug_obj_descr *descr_test __read_mostly; @@ -95,8 +95,8 @@ static struct kmem_cache *obj_cache __ro_after_init; /* * Track numbers of kmem_cache_alloc()/free() calls done. */ -static int debug_objects_allocated; -static int debug_objects_freed; +static int __data_racy debug_objects_allocated; +static int __data_racy debug_objects_freed; =20 static void free_obj_work(struct work_struct *work); static DECLARE_DELAYED_WORK(debug_obj_work, free_obj_work); @@ -135,20 +135,19 @@ static void fill_pool(void) return; =20 /* - * Reuse objs from the global free list; they will be reinitialized - * when allocating. + * Reuse objs from the global obj_to_free list; they will be + * reinitialized when allocating. * - * Both obj_nr_tofree and obj_pool_free are checked locklessly; the - * READ_ONCE()s pair with the WRITE_ONCE()s in pool_lock critical - * sections. + * obj_nr_tofree is checked locklessly; the READ_ONCE() pairs with + * the WRITE_ONCE() in pool_lock critical sections. */ - while (READ_ONCE(obj_nr_tofree) && (READ_ONCE(obj_pool_free) < obj_pool_min= _free)) { + if (READ_ONCE(obj_nr_tofree)) { raw_spin_lock_irqsave(&pool_lock, flags); /* * Recheck with the lock held as the worker thread might have * won the race and freed the global free list already. */ - while (obj_nr_tofree && (obj_pool_free < obj_pool_min_free)) { + while (obj_nr_tofree && (obj_pool_free < debug_objects_pool_min_level)) { obj =3D hlist_entry(obj_to_free.first, typeof(*obj), node); hlist_del(&obj->node); WRITE_ONCE(obj_nr_tofree, obj_nr_tofree - 1); . Date: Mon, 16 Sep 2024 10:38:37 +0200 (CEST) From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] smp/core for v6.12-rc1 Linus, please pull the latest smp/core branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git smp-core-2024-09= -16 up to: 1d07085402d1: smp: Mark smp_prepare_boot_cpu() __init A set of updates for CPU hotplug: - Prepare the core for supporting parallel hotplug on loongarch - A small set of cleanups and enhancements Thanks, tglx ------------------> Bibo Mao (1): smp: Mark smp_prepare_boot_cpu() __init Jiaxun Yang (2): cpu/hotplug: Make HOTPLUG_PARALLEL independent of HOTPLUG_SMT cpu/hotplug: Provide weak fallback for arch_cpuhp_init_parallel_bringup= () Thorsten Blum (1): cpu: Fix W=3D1 build kernel-doc warning arch/loongarch/kernel/smp.c | 2 +- arch/mips/kernel/smp.c | 2 +- arch/powerpc/kernel/smp.c | 2 +- include/linux/smp.h | 2 +- kernel/cpu.c | 20 +++++++++++++++++--- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c index ca405ab86aae..be2655c4c414 100644 --- a/arch/loongarch/kernel/smp.c +++ b/arch/loongarch/kernel/smp.c @@ -476,7 +476,7 @@ core_initcall(ipi_pm_init); #endif =20 /* Preload SMP state for boot cpu */ -void smp_prepare_boot_cpu(void) +void __init smp_prepare_boot_cpu(void) { unsigned int cpu, node, rr_node; =20 diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 0362fc5df7b0..39e193cad2b9 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c @@ -439,7 +439,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) } =20 /* preload SMP state for boot cpu */ -void smp_prepare_boot_cpu(void) +void __init smp_prepare_boot_cpu(void) { if (mp_ops->prepare_boot_cpu) mp_ops->prepare_boot_cpu(); diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 46e6d2cd7a2d..4ab9b8cee77a 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -1166,7 +1166,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) cpu_smt_set_num_threads(num_threads, threads_per_core); } =20 -void smp_prepare_boot_cpu(void) +void __init smp_prepare_boot_cpu(void) { BUG_ON(smp_processor_id() !=3D boot_cpuid); #ifdef CONFIG_PPC64 diff --git a/include/linux/smp.h b/include/linux/smp.h index fcd61dfe2af3..6a0813c905d0 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h @@ -109,7 +109,7 @@ static inline void on_each_cpu_cond(smp_cond_func_t cond_= func, * Architecture specific boot CPU setup. Defined as empty weak function in * init/main.c. Architectures can override it. */ -void smp_prepare_boot_cpu(void); +void __init smp_prepare_boot_cpu(void); =20 #ifdef CONFIG_SMP =20 diff --git a/kernel/cpu.c b/kernel/cpu.c index b1fd2a3db91a..0c9c5dfc8ddd 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -1808,6 +1808,7 @@ static int __init parallel_bringup_parse_param(char *ar= g) } early_param("cpuhp.parallel", parallel_bringup_parse_param); =20 +#ifdef CONFIG_HOTPLUG_SMT static inline bool cpuhp_smt_aware(void) { return cpu_smt_max_threads > 1; @@ -1817,6 +1818,21 @@ static inline const struct cpumask *cpuhp_get_primary_= thread_mask(void) { return cpu_primary_thread_mask; } +#else +static inline bool cpuhp_smt_aware(void) +{ + return false; +} +static inline const struct cpumask *cpuhp_get_primary_thread_mask(void) +{ + return cpu_none_mask; +} +#endif + +bool __weak arch_cpuhp_init_parallel_bringup(void) +{ + return true; +} =20 /* * On architectures which have enabled parallel bringup this invokes all BP @@ -2689,9 +2705,7 @@ int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval) return ret; } =20 -/** - * Check if the core a CPU belongs to is online - */ +/* Check if the core a CPU belongs to is online */ #if !defined(topology_is_core_online) static inline bool topology_is_core_online(unsigned int cpu) { . Date: Mon, 16 Sep 2024 10:38:39 +0200 (CEST) From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] timers/clocksource for v6.12-rc1 Linus, please pull the latest timers/clocksource branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers-clocksour= ce-2024-09-16 up to: 4ac1dd3245b9: clocksource: Set cs_watchdog_read() checks based on .un= certainty_margin Updates for the clocksource watchdog: - Make the uncertainty margin handling more robust to prevent false positives - Clarify comments Thanks, tglx ------------------> Borislav Petkov (1): clocksource: Improve comments for watchdog skew bounds Paul E. McKenney (2): clocksource: Fix comments on WATCHDOG_THRESHOLD & WATCHDOG_MAX_SKEW clocksource: Set cs_watchdog_read() checks based on .uncertainty_margin kernel/time/clocksource.c | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c index d0538a75f4c6..23336eecb4f4 100644 --- a/kernel/time/clocksource.c +++ b/kernel/time/clocksource.c @@ -113,7 +113,6 @@ static u64 suspend_start; =20 /* * Threshold: 0.0312s, when doubled: 0.0625s. - * Also a default for cs->uncertainty_margin when registering clocks. */ #define WATCHDOG_THRESHOLD (NSEC_PER_SEC >> 5) =20 @@ -125,6 +124,13 @@ static u64 suspend_start; * * The default of 500 parts per million is based on NTP's limits. * If a clocksource is good enough for NTP, it is good enough for us! + * + * In other words, by default, even if a clocksource is extremely + * precise (for example, with a sub-nanosecond period), the maximum + * permissible skew between the clocksource watchdog and the clocksource + * under test is not permitted to go below the 500ppm minimum defined + * by MAX_SKEW_USEC. This 500ppm minimum may be overridden using the + * CLOCKSOURCE_WATCHDOG_MAX_SKEW_US Kconfig option. */ #ifdef CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US #define MAX_SKEW_USEC CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US @@ -132,6 +138,13 @@ static u64 suspend_start; #define MAX_SKEW_USEC (125 * WATCHDOG_INTERVAL / HZ) #endif =20 +/* + * Default for maximum permissible skew when cs->uncertainty_margin is + * not specified, and the lower bound even when cs->uncertainty_margin + * is specified. This is also the default that is used when registering + * clocks with unspecifed cs->uncertainty_margin, so this macro is used + * even in CONFIG_CLOCKSOURCE_WATCHDOG=3Dn kernels. + */ #define WATCHDOG_MAX_SKEW (MAX_SKEW_USEC * NSEC_PER_USEC) =20 #ifdef CONFIG_CLOCKSOURCE_WATCHDOG @@ -231,6 +244,7 @@ enum wd_read_status { =20 static enum wd_read_status cs_watchdog_read(struct clocksource *cs, u64 *csn= ow, u64 *wdnow) { + int64_t md =3D 2 * watchdog->uncertainty_margin; unsigned int nretries, max_retries; int64_t wd_delay, wd_seq_delay; u64 wd_end, wd_end2; @@ -245,7 +259,7 @@ static enum wd_read_status cs_watchdog_read(struct clocks= ource *cs, u64 *csnow, local_irq_enable(); =20 wd_delay =3D cycles_to_nsec_safe(watchdog, *wdnow, wd_end); - if (wd_delay <=3D WATCHDOG_MAX_SKEW) { + if (wd_delay <=3D md + cs->uncertainty_margin) { if (nretries > 1 && nretries >=3D max_retries) { pr_warn("timekeeping watchdog on CPU%d: %s retried %d times before succe= ss\n", smp_processor_id(), watchdog->name, nretries); @@ -258,12 +272,12 @@ static enum wd_read_status cs_watchdog_read(struct cloc= ksource *cs, u64 *csnow, * there is too much external interferences that cause * significant delay in reading both clocksource and watchdog. * - * If consecutive WD read-back delay > WATCHDOG_MAX_SKEW/2, - * report system busy, reinit the watchdog and skip the current + * If consecutive WD read-back delay > md, report + * system busy, reinit the watchdog and skip the current * watchdog test. */ wd_seq_delay =3D cycles_to_nsec_safe(watchdog, wd_end, wd_end2); - if (wd_seq_delay > WATCHDOG_MAX_SKEW/2) + if (wd_seq_delay > md) goto skip_test; } =20 @@ -1146,14 +1160,19 @@ void __clocksource_update_freq_scale(struct clocksour= ce *cs, u32 scale, u32 freq } =20 /* - * If the uncertainty margin is not specified, calculate it. - * If both scale and freq are non-zero, calculate the clock - * period, but bound below at 2*WATCHDOG_MAX_SKEW. However, - * if either of scale or freq is zero, be very conservative and - * take the tens-of-milliseconds WATCHDOG_THRESHOLD value for the - * uncertainty margin. Allow stupidly small uncertainty margins - * to be specified by the caller for testing purposes, but warn - * to discourage production use of this capability. + * If the uncertainty margin is not specified, calculate it. If + * both scale and freq are non-zero, calculate the clock period, but + * bound below at 2*WATCHDOG_MAX_SKEW, that is, 500ppm by default. + * However, if either of scale or freq is zero, be very conservative + * and take the tens-of-milliseconds WATCHDOG_THRESHOLD value + * for the uncertainty margin. Allow stupidly small uncertainty + * margins to be specified by the caller for testing purposes, + * but warn to discourage production use of this capability. + * + * Bottom line: The sum of the uncertainty margins of the + * watchdog clocksource and the clocksource under test will be at + * least 500ppm by default. For more information, please see the + * comment preceding CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US above. */ if (scale && freq && !cs->uncertainty_margin) { cs->uncertainty_margin =3D NSEC_PER_SEC / (scale * freq); . Date: Mon, 16 Sep 2024 10:38:41 +0200 (CEST) From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] timers/core for v6.12-rc1 Linus, please pull the latest timers/core branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers-core-2024= -09-16 up to: 35b603f8a78b: ntp: Make sure RTC is synchronized when time goes backw= ards Updates for timers and timekeeping: - Core: - Overhaul of posix-timers in preparation of removing the workaround for periodic timers which have signal delivery ignored. - Remove the historical extra jiffie in msleep() msleep() adds an extra jiffie to the timeout value to ensure minimal sleep time. The timer wheel ensures minimal sleep time since the large rewrite to a non-cascading wheel, but the extra jiffie in msleep() remained unnoticed. Remove it. - Make the timer slack handling correct for realtime tasks. The procfs interface is inconsistent and does neither reflect reality nor conforms to the man page. Show the correct 0 slack for real time tasks and enforce it at the core level instead of having inconsistent individual checks in various timer setup functions. - The usual set of updates and enhancements all over the place. - Drivers: - Allow the ACPI PM timer to be turned off during suspend =09 - No new drivers - The usual updates and enhancements in various drivers Thanks, tglx ------------------> Ankit Agrawal (1): clocksource/drivers/qcom: Add missing iounmap() on errors in msm_dt_tim= er_init() Anna-Maria Behnsen (5): timers: Remove historical extra jiffie for timeout in msleep() timers: Annotate possible non critical data race of next_expiry timers: Rename next_expiry_recalc() to be unique cpu: Use already existing usleep_range() treewide: Fix wrong singular form of jiffies in comments Benjamin ROBIN (1): ntp: Make sure RTC is synchronized when time goes backwards Detlev Casanova (1): dt-bindings: timer: rockchip: Add rk3576 compatible Felix Moessbauer (1): hrtimer: Use and report correct timerslack values for realtime tasks Gaosheng Cui (2): clocksource/drivers/asm9260: Add missing clk_disable_unprepare in asm92= 60_timer_init clocksource/drivers/cadence-ttc: Add missing clk_disable_unprepare in t= tc_setup_clockevent Huan Yang (1): clocksource/drivers/ingenic: Use devm_clk_get_enabled() helpers Marek Maslanka (3): clocksource: acpi_pm: Add external callback for suspend/resume platform/x86:intel/pmc: Enable the ACPI PM Timer to be turned off when = suspended platform/x86:intel/pmc: Fix comment for the pmc_core_acpi_pm_timer_susp= end_resume function Sebastian Andrzej Siewior (2): timers: Add sparse annotation for timer_sync_wait_running(). hrtimer: Annotate hrtimer_cpu_base_.*_expiry() for sparse. Thomas Gleixner (24): selftests/timers/posix_timers: Simplify error handling selftests/timers/posix_timers: Add SIG_IGN test selftests/timers/posix_timers: Validate signal rules selftests/timers/posix-timers: Validate SIGEV_NONE selftests/timers/posix-timers: Validate timer_gettime() selftests/timers/posix-timers: Validate overrun after unblock posix-cpu-timers: Split up posix_cpu_timer_get() posix-cpu-timers: Save interval only for armed timers posix-cpu-timers: Handle interval timers correctly in timer_get() posix-cpu-timers: Handle SIGEV_NONE timers correctly in timer_get() posix-cpu-timers: Handle SIGEV_NONE timers correctly in timer_set() posix-cpu-timers: Replace old expiry retrieval in posix_cpu_timer_set() posix-cpu-timers: Do not arm SIGEV_NONE timers posix-cpu-timers: Use @now instead of @val for clarity posix-cpu-timers: Remove incorrect comment in posix_cpu_timer_set() posix-cpu-timers: Simplify posix_cpu_timer_set() posix-timers: Retrieve interval in common timer_settime() code posix-timers: Clear overrun in common_timer_set() posix-timers: Convert timer list to hlist posix-timers: Consolidate timer setup posix-cpu-timers: Make k_itimer::it_active consistent posix-timers: Consolidate signal queueing signal: Remove task argument from dequeue_signal() signal: Replace BUG_ON()s Uros Bizjak (1): clocksource/drivers/jcore: Use request_percpu_irq() Zhang Zekun (1): clocksource/drivers/arm_arch_timer: Using for_each_available_child_of_n= ode_scoped() Documentation/admin-guide/media/vivid.rst | 2 +- .../bindings/timer/rockchip,rk-timer.yaml | 1 + Documentation/timers/timers-howto.rst | 2 +- .../sp_SP/scheduler/sched-design-CFS.rst | 2 +- arch/arm/mach-versatile/spc.c | 2 +- arch/m68k/q40/q40ints.c | 2 +- arch/x86/kernel/cpu/mce/dev-mcelog.c | 2 +- drivers/char/ipmi/ipmi_ssif.c | 2 +- drivers/clocksource/acpi_pm.c | 32 ++ drivers/clocksource/arm_arch_timer.c | 11 +- drivers/clocksource/asm9260_timer.c | 1 + drivers/clocksource/ingenic-ost.c | 7 +- drivers/clocksource/jcore-pit.c | 7 +- drivers/clocksource/timer-cadence-ttc.c | 6 +- drivers/clocksource/timer-qcom.c | 7 +- drivers/dma-buf/st-dma-fence.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_wait.c | 2 +- drivers/gpu/drm/i915/gt/selftest_execlists.c | 4 +- drivers/gpu/drm/i915/i915_utils.c | 2 +- drivers/gpu/drm/v3d/v3d_bo.c | 2 +- drivers/isdn/mISDN/dsp_cmx.c | 2 +- drivers/net/ethernet/marvell/mvmdio.c | 2 +- drivers/platform/x86/intel/pmc/adl.c | 2 + drivers/platform/x86/intel/pmc/cnp.c | 2 + drivers/platform/x86/intel/pmc/core.c | 45 ++ drivers/platform/x86/intel/pmc/core.h | 8 + drivers/platform/x86/intel/pmc/icl.c | 2 + drivers/platform/x86/intel/pmc/mtl.c | 2 + drivers/platform/x86/intel/pmc/spt.c | 2 + drivers/platform/x86/intel/pmc/tgl.c | 2 + fs/proc/base.c | 15 +- fs/select.c | 11 +- fs/signalfd.c | 4 +- fs/xfs/xfs_buf.h | 2 +- include/linux/acpi_pmtmr.h | 13 + include/linux/jiffies.h | 2 +- include/linux/posix-timers.h | 2 +- include/linux/sched/signal.h | 7 +- include/linux/timekeeper_internal.h | 2 +- init/init_task.c | 2 +- kernel/cpu.c | 2 +- kernel/fork.c | 2 +- kernel/sched/syscalls.c | 8 + kernel/signal.c | 34 +- kernel/sys.c | 2 + kernel/time/alarmtimer.c | 9 +- kernel/time/clockevents.c | 2 +- kernel/time/hrtimer.c | 22 +- kernel/time/ntp.c | 10 +- kernel/time/ntp_internal.h | 4 +- kernel/time/posix-cpu-timers.c | 207 ++++---- kernel/time/posix-timers.c | 73 +-- kernel/time/posix-timers.h | 3 +- kernel/time/timekeeping.c | 4 +- kernel/time/timer.c | 62 ++- lib/Kconfig.debug | 2 +- net/batman-adv/types.h | 2 +- tools/testing/selftests/timers/posix_timers.c | 550 +++++++++++++++++--= -- 58 files changed, 848 insertions(+), 377 deletions(-) diff --git a/Documentation/admin-guide/media/vivid.rst b/Documentation/admin-= guide/media/vivid.rst index 1306f19ecb5a..c9d301ab46a3 100644 --- a/Documentation/admin-guide/media/vivid.rst +++ b/Documentation/admin-guide/media/vivid.rst @@ -328,7 +328,7 @@ and an HDMI input, one input for each input type. Those a= re described in more detail below. =20 Special attention has been given to the rate at which new frames become -available. The jitter will be around 1 jiffie (that depends on the HZ +available. The jitter will be around 1 jiffy (that depends on the HZ configuration of your kernel, so usually 1/100, 1/250 or 1/1000 of a second), but the long-term behavior is exactly following the framerate. So a framerate of 59.94 Hz is really different from 60 Hz. If the framerate diff --git a/Documentation/devicetree/bindings/timer/rockchip,rk-timer.yaml b= /Documentation/devicetree/bindings/timer/rockchip,rk-timer.yaml index 19e56b7577a0..6d0eb0014eee 100644 --- a/Documentation/devicetree/bindings/timer/rockchip,rk-timer.yaml +++ b/Documentation/devicetree/bindings/timer/rockchip,rk-timer.yaml @@ -24,6 +24,7 @@ properties: - rockchip,rk3228-timer - rockchip,rk3229-timer - rockchip,rk3368-timer + - rockchip,rk3576-timer - rockchip,rk3588-timer - rockchip,px30-timer - const: rockchip,rk3288-timer diff --git a/Documentation/timers/timers-howto.rst b/Documentation/timers/tim= ers-howto.rst index 5c169e3d29a8..ef7a4652ccc9 100644 --- a/Documentation/timers/timers-howto.rst +++ b/Documentation/timers/timers-howto.rst @@ -19,7 +19,7 @@ it really need to delay in atomic context?" If so... =20 ATOMIC CONTEXT: You must use the `*delay` family of functions. These - functions use the jiffie estimation of clock speed + functions use the jiffy estimation of clock speed and will busy wait for enough loop cycles to achieve the desired delay: =20 diff --git a/Documentation/translations/sp_SP/scheduler/sched-design-CFS.rst = b/Documentation/translations/sp_SP/scheduler/sched-design-CFS.rst index 90a153cad4e8..731c266beb1a 100644 --- a/Documentation/translations/sp_SP/scheduler/sched-design-CFS.rst +++ b/Documentation/translations/sp_SP/scheduler/sched-design-CFS.rst @@ -109,7 +109,7 @@ para que se ejecute, y la tarea en ejecuci=C3=B3n es inte= rrumpida. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D =20 CFS usa una granularidad de nanosegundos y no depende de ning=C3=BAn -jiffie o detalles como HZ. De este modo, el gestor de tareas CFS no tiene +jiffy o detalles como HZ. De este modo, el gestor de tareas CFS no tiene noci=C3=B3n de "ventanas de tiempo" de la forma en que ten=C3=ADa el gestor = de tareas previo, y tampoco tiene heur=C3=ADsticos. =C3=9Anicamente hay un par= =C3=A1metro central ajustable (se ha de cambiar en CONFIG_SCHED_DEBUG): diff --git a/arch/arm/mach-versatile/spc.c b/arch/arm/mach-versatile/spc.c index 5e44170e1a9a..790092734cf6 100644 --- a/arch/arm/mach-versatile/spc.c +++ b/arch/arm/mach-versatile/spc.c @@ -73,7 +73,7 @@ =20 /* * Even though the SPC takes max 3-5 ms to complete any OPP/COMMS - * operation, the operation could start just before jiffie is about + * operation, the operation could start just before jiffy is about * to be incremented. So setting timeout value of 20ms =3D 2jiffies@100Hz */ #define TIMEOUT_US 20000 diff --git a/arch/m68k/q40/q40ints.c b/arch/m68k/q40/q40ints.c index 10f1f294e91f..14b774b9d308 100644 --- a/arch/m68k/q40/q40ints.c +++ b/arch/m68k/q40/q40ints.c @@ -106,7 +106,7 @@ void __init q40_init_IRQ(void) * this stuff doesn't really belong here.. */ =20 -int ql_ticks; /* 200Hz ticks since last jiffie */ +int ql_ticks; /* 200Hz ticks since last jiffy */ static int sound_ticks; =20 #define SVOL 45 diff --git a/arch/x86/kernel/cpu/mce/dev-mcelog.c b/arch/x86/kernel/cpu/mce/d= ev-mcelog.c index a05ac0716ecf..a3aa0199222e 100644 --- a/arch/x86/kernel/cpu/mce/dev-mcelog.c +++ b/arch/x86/kernel/cpu/mce/dev-mcelog.c @@ -314,7 +314,7 @@ static ssize_t mce_chrdev_write(struct file *filp, const = char __user *ubuf, =20 /* * Need to give user space some time to set everything up, - * so do it a jiffie or two later everywhere. + * so do it a jiffy or two later everywhere. */ schedule_timeout(2); =20 diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c index 96ad571d041a..e093028391af 100644 --- a/drivers/char/ipmi/ipmi_ssif.c +++ b/drivers/char/ipmi/ipmi_ssif.c @@ -980,7 +980,7 @@ static void msg_written_handler(struct ssif_info *ssif_in= fo, int result, ipmi_ssif_unlock_cond(ssif_info, flags); start_get(ssif_info); } else { - /* Wait a jiffie then request the next message */ + /* Wait a jiffy then request the next message */ ssif_info->waiting_alert =3D true; ssif_info->retries_left =3D SSIF_RECV_RETRIES; if (!ssif_info->stopping) diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index 82338773602c..b4330a01a566 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c @@ -25,6 +25,10 @@ #include #include =20 +static void *suspend_resume_cb_data; + +static void (*suspend_resume_callback)(void *data, bool suspend); + /* * The I/O port the PMTMR resides at. * The location is detected during setup_arch(), @@ -58,6 +62,32 @@ u32 acpi_pm_read_verified(void) return v2; } =20 +void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool= suspend), void *data) +{ + suspend_resume_callback =3D cb; + suspend_resume_cb_data =3D data; +} +EXPORT_SYMBOL_GPL(acpi_pmtmr_register_suspend_resume_callback); + +void acpi_pmtmr_unregister_suspend_resume_callback(void) +{ + suspend_resume_callback =3D NULL; + suspend_resume_cb_data =3D NULL; +} +EXPORT_SYMBOL_GPL(acpi_pmtmr_unregister_suspend_resume_callback); + +static void acpi_pm_suspend(struct clocksource *cs) +{ + if (suspend_resume_callback) + suspend_resume_callback(suspend_resume_cb_data, true); +} + +static void acpi_pm_resume(struct clocksource *cs) +{ + if (suspend_resume_callback) + suspend_resume_callback(suspend_resume_cb_data, false); +} + static u64 acpi_pm_read(struct clocksource *cs) { return (u64)read_pmtmr(); @@ -69,6 +99,8 @@ static struct clocksource clocksource_acpi_pm =3D { .read =3D acpi_pm_read, .mask =3D (u64)ACPI_PM_MASK, .flags =3D CLOCK_SOURCE_IS_CONTINUOUS, + .suspend =3D acpi_pm_suspend, + .resume =3D acpi_pm_resume, }; =20 =20 diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_a= rch_timer.c index aeafc74181f0..03733101e231 100644 --- a/drivers/clocksource/arm_arch_timer.c +++ b/drivers/clocksource/arm_arch_timer.c @@ -1594,7 +1594,6 @@ static int __init arch_timer_mem_of_init(struct device_= node *np) { struct arch_timer_mem *timer_mem; struct arch_timer_mem_frame *frame; - struct device_node *frame_node; struct resource res; int ret =3D -EINVAL; u32 rate; @@ -1608,33 +1607,29 @@ static int __init arch_timer_mem_of_init(struct devic= e_node *np) timer_mem->cntctlbase =3D res.start; timer_mem->size =3D resource_size(&res); =20 - for_each_available_child_of_node(np, frame_node) { + for_each_available_child_of_node_scoped(np, frame_node) { u32 n; struct arch_timer_mem_frame *frame; =20 if (of_property_read_u32(frame_node, "frame-number", &n)) { pr_err(FW_BUG "Missing frame-number.\n"); - of_node_put(frame_node); goto out; } if (n >=3D ARCH_TIMER_MEM_MAX_FRAMES) { pr_err(FW_BUG "Wrong frame-number, only 0-%u are permitted.\n", ARCH_TIMER_MEM_MAX_FRAMES - 1); - of_node_put(frame_node); goto out; } frame =3D &timer_mem->frame[n]; =20 if (frame->valid) { pr_err(FW_BUG "Duplicated frame-number.\n"); - of_node_put(frame_node); goto out; } =20 - if (of_address_to_resource(frame_node, 0, &res)) { - of_node_put(frame_node); + if (of_address_to_resource(frame_node, 0, &res)) goto out; - } + frame->cntbase =3D res.start; frame->size =3D resource_size(&res); =20 diff --git a/drivers/clocksource/asm9260_timer.c b/drivers/clocksource/asm926= 0_timer.c index 5b39d3701fa3..8f97ab0b01ec 100644 --- a/drivers/clocksource/asm9260_timer.c +++ b/drivers/clocksource/asm9260_timer.c @@ -210,6 +210,7 @@ static int __init asm9260_timer_init(struct device_node *= np) DRIVER_NAME, &event_dev); if (ret) { pr_err("Failed to setup irq!\n"); + clk_disable_unprepare(clk); return ret; } =20 diff --git a/drivers/clocksource/ingenic-ost.c b/drivers/clocksource/ingenic-= ost.c index 9f7c280a1336..e0ec33307c84 100644 --- a/drivers/clocksource/ingenic-ost.c +++ b/drivers/clocksource/ingenic-ost.c @@ -93,14 +93,10 @@ static int __init ingenic_ost_probe(struct platform_devic= e *pdev) return PTR_ERR(map); } =20 - ost->clk =3D devm_clk_get(dev, "ost"); + ost->clk =3D devm_clk_get_enabled(dev, "ost"); if (IS_ERR(ost->clk)) return PTR_ERR(ost->clk); =20 - err =3D clk_prepare_enable(ost->clk); - if (err) - return err; - /* Clear counter high/low registers */ if (soc_info->is64bit) regmap_write(map, TCU_REG_OST_CNTL, 0); @@ -129,7 +125,6 @@ static int __init ingenic_ost_probe(struct platform_devic= e *pdev) err =3D clocksource_register_hz(cs, rate); if (err) { dev_err(dev, "clocksource registration failed"); - clk_disable_unprepare(ost->clk); return err; } =20 diff --git a/drivers/clocksource/jcore-pit.c b/drivers/clocksource/jcore-pit.c index a4a991101fa3..a3fe98cd3838 100644 --- a/drivers/clocksource/jcore-pit.c +++ b/drivers/clocksource/jcore-pit.c @@ -120,7 +120,7 @@ static int jcore_pit_local_init(unsigned cpu) =20 static irqreturn_t jcore_timer_interrupt(int irq, void *dev_id) { - struct jcore_pit *pit =3D this_cpu_ptr(dev_id); + struct jcore_pit *pit =3D dev_id; =20 if (clockevent_state_oneshot(&pit->ced)) jcore_pit_disable(pit); @@ -168,9 +168,8 @@ static int __init jcore_pit_init(struct device_node *node) return -ENOMEM; } =20 - err =3D request_irq(pit_irq, jcore_timer_interrupt, - IRQF_TIMER | IRQF_PERCPU, - "jcore_pit", jcore_pit_percpu); + err =3D request_percpu_irq(pit_irq, jcore_timer_interrupt, + "jcore_pit", jcore_pit_percpu); if (err) { pr_err("pit irq request failed: %d\n", err); free_percpu(jcore_pit_percpu); diff --git a/drivers/clocksource/timer-cadence-ttc.c b/drivers/clocksource/ti= mer-cadence-ttc.c index ca7a06489c40..b8a1cf59b9d6 100644 --- a/drivers/clocksource/timer-cadence-ttc.c +++ b/drivers/clocksource/timer-cadence-ttc.c @@ -435,7 +435,7 @@ static int __init ttc_setup_clockevent(struct clk *clk, &ttcce->ttc.clk_rate_change_nb); if (err) { pr_warn("Unable to register clock notifier.\n"); - goto out_kfree; + goto out_clk_unprepare; } =20 ttcce->ttc.freq =3D clk_get_rate(ttcce->ttc.clk); @@ -465,13 +465,15 @@ static int __init ttc_setup_clockevent(struct clk *clk, err =3D request_irq(irq, ttc_clock_event_interrupt, IRQF_TIMER, ttcce->ce.name, ttcce); if (err) - goto out_kfree; + goto out_clk_unprepare; =20 clockevents_config_and_register(&ttcce->ce, ttcce->ttc.freq / PRESCALE, 1, 0xfffe); =20 return 0; =20 +out_clk_unprepare: + clk_disable_unprepare(ttcce->ttc.clk); out_kfree: kfree(ttcce); return err; diff --git a/drivers/clocksource/timer-qcom.c b/drivers/clocksource/timer-qco= m.c index b4afe3a67583..eac4c95c6127 100644 --- a/drivers/clocksource/timer-qcom.c +++ b/drivers/clocksource/timer-qcom.c @@ -233,6 +233,7 @@ static int __init msm_dt_timer_init(struct device_node *n= p) } =20 if (of_property_read_u32(np, "clock-frequency", &freq)) { + iounmap(cpu0_base); pr_err("Unknown frequency\n"); return -EINVAL; } @@ -243,7 +244,11 @@ static int __init msm_dt_timer_init(struct device_node *= np) freq /=3D 4; writel_relaxed(DGT_CLK_CTL_DIV_4, source_base + DGT_CLK_CTL); =20 - return msm_timer_init(freq, 32, irq, !!percpu_offset); + ret =3D msm_timer_init(freq, 32, irq, !!percpu_offset); + if (ret) + iounmap(cpu0_base); + + return ret; } TIMER_OF_DECLARE(kpss_timer, "qcom,kpss-timer", msm_dt_timer_init); TIMER_OF_DECLARE(scss_timer, "qcom,scss-timer", msm_dt_timer_init); diff --git a/drivers/dma-buf/st-dma-fence.c b/drivers/dma-buf/st-dma-fence.c index 6a1bfcd0cc21..cf2ce3744ce6 100644 --- a/drivers/dma-buf/st-dma-fence.c +++ b/drivers/dma-buf/st-dma-fence.c @@ -402,7 +402,7 @@ static int test_wait_timeout(void *arg) =20 if (dma_fence_wait_timeout(wt.f, false, 2) =3D=3D -ETIME) { if (timer_pending(&wt.timer)) { - pr_notice("Timer did not fire within the jiffie!\n"); + pr_notice("Timer did not fire within the jiffy!\n"); err =3D 0; /* not our fault! */ } else { pr_err("Wait reported incomplete after timeout\n"); diff --git a/drivers/gpu/drm/i915/gem/i915_gem_wait.c b/drivers/gpu/drm/i915/= gem/i915_gem_wait.c index d4b918fb11ce..1f55e62044a4 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_wait.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_wait.c @@ -266,7 +266,7 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, s= truct drm_file *file) if (ret =3D=3D -ETIME && !nsecs_to_jiffies(args->timeout_ns)) args->timeout_ns =3D 0; =20 - /* Asked to wait beyond the jiffie/scheduler precision? */ + /* Asked to wait beyond the jiffy/scheduler precision? */ if (ret =3D=3D -ETIME && args->timeout_ns) ret =3D -EAGAIN; } diff --git a/drivers/gpu/drm/i915/gt/selftest_execlists.c b/drivers/gpu/drm/i= 915/gt/selftest_execlists.c index 4202df5b8c12..222ca7c44951 100644 --- a/drivers/gpu/drm/i915/gt/selftest_execlists.c +++ b/drivers/gpu/drm/i915/gt/selftest_execlists.c @@ -93,7 +93,7 @@ static int wait_for_reset(struct intel_engine_cs *engine, return -EINVAL; } =20 - /* Give the request a jiffie to complete after flushing the worker */ + /* Give the request a jiffy to complete after flushing the worker */ if (i915_request_wait(rq, 0, max(0l, (long)(timeout - jiffies)) + 1) < 0) { pr_err("%s: hanging request %llx:%lld did not complete\n", @@ -3426,7 +3426,7 @@ static int live_preempt_timeout(void *arg) cpu_relax(); =20 saved_timeout =3D engine->props.preempt_timeout_ms; - engine->props.preempt_timeout_ms =3D 1; /* in ms, -> 1 jiffie */ + engine->props.preempt_timeout_ms =3D 1; /* in ms, -> 1 jiffy */ =20 i915_request_get(rq); i915_request_add(rq); diff --git a/drivers/gpu/drm/i915/i915_utils.c b/drivers/gpu/drm/i915/i915_ut= ils.c index 6f9e7b354b54..f2ba51c20e97 100644 --- a/drivers/gpu/drm/i915/i915_utils.c +++ b/drivers/gpu/drm/i915/i915_utils.c @@ -110,7 +110,7 @@ void set_timer_ms(struct timer_list *t, unsigned long tim= eout) * Paranoia to make sure the compiler computes the timeout before * loading 'jiffies' as jiffies is volatile and may be updated in * the background by a timer tick. All to reduce the complexity - * of the addition and reduce the risk of losing a jiffie. + * of the addition and reduce the risk of losing a jiffy. */ barrier(); =20 diff --git a/drivers/gpu/drm/v3d/v3d_bo.c b/drivers/gpu/drm/v3d/v3d_bo.c index a165cbcdd27b..9eafe53a8f41 100644 --- a/drivers/gpu/drm/v3d/v3d_bo.c +++ b/drivers/gpu/drm/v3d/v3d_bo.c @@ -279,7 +279,7 @@ v3d_wait_bo_ioctl(struct drm_device *dev, void *data, else args->timeout_ns =3D 0; =20 - /* Asked to wait beyond the jiffie/scheduler precision? */ + /* Asked to wait beyond the jiffy/scheduler precision? */ if (ret =3D=3D -ETIME && args->timeout_ns) ret =3D -EAGAIN; =20 diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c index 61cb45c5d0d8..53fad9487574 100644 --- a/drivers/isdn/mISDN/dsp_cmx.c +++ b/drivers/isdn/mISDN/dsp_cmx.c @@ -82,7 +82,7 @@ * - has multiple clocks. * - has no usable clock due to jitter or packet loss (VoIP). * In this case the system's clock is used. The clock resolution depends on - * the jiffie resolution. + * the jiffy resolution. * * If a member joins a conference: * diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/mar= vell/mvmdio.c index 9190eff6c0bb..e1d003fdbc2e 100644 --- a/drivers/net/ethernet/marvell/mvmdio.c +++ b/drivers/net/ethernet/marvell/mvmdio.c @@ -104,7 +104,7 @@ static int orion_mdio_wait_ready(const struct orion_mdio_= ops *ops, return 0; } else { /* wait_event_timeout does not guarantee a delay of at - * least one whole jiffie, so timeout must be no less + * least one whole jiffy, so timeout must be no less * than two. */ timeout =3D max(usecs_to_jiffies(MVMDIO_SMI_TIMEOUT), 2); diff --git a/drivers/platform/x86/intel/pmc/adl.c b/drivers/platform/x86/inte= l/pmc/adl.c index e7878558fd90..9d9c07f44ff6 100644 --- a/drivers/platform/x86/intel/pmc/adl.c +++ b/drivers/platform/x86/intel/pmc/adl.c @@ -295,6 +295,8 @@ const struct pmc_reg_map adl_reg_map =3D { .ppfear_buckets =3D CNP_PPFEAR_NUM_ENTRIES, .pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET, .pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT, + .acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET, + .acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE, .ltr_ignore_max =3D ADL_NUM_IP_IGN_ALLOWED, .lpm_num_modes =3D ADL_LPM_NUM_MODES, .lpm_num_maps =3D ADL_LPM_NUM_MAPS, diff --git a/drivers/platform/x86/intel/pmc/cnp.c b/drivers/platform/x86/inte= l/pmc/cnp.c index dd72974bf71e..513c02670c5a 100644 --- a/drivers/platform/x86/intel/pmc/cnp.c +++ b/drivers/platform/x86/intel/pmc/cnp.c @@ -200,6 +200,8 @@ const struct pmc_reg_map cnp_reg_map =3D { .ppfear_buckets =3D CNP_PPFEAR_NUM_ENTRIES, .pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET, .pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT, + .acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET, + .acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE, .ltr_ignore_max =3D CNP_NUM_IP_IGN_ALLOWED, .etr3_offset =3D ETR3_OFFSET, }; diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/int= el/pmc/core.c index 01ae71c6df59..e2b4c74ce7f6 100644 --- a/drivers/platform/x86/intel/pmc/core.c +++ b/drivers/platform/x86/intel/pmc/core.c @@ -11,6 +11,7 @@ =20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt =20 +#include #include #include #include @@ -1208,6 +1209,38 @@ static bool pmc_core_is_pson_residency_enabled(struct = pmc_dev *pmcdev) return val =3D=3D 1; } =20 +/* + * Enable or disable ACPI PM Timer + * + * This function is intended to be a callback for ACPI PM suspend/resume eve= nt. + * The ACPI PM Timer is enabled on resume only if it was enabled during susp= end. + */ +static void pmc_core_acpi_pm_timer_suspend_resume(void *data, bool suspend) +{ + struct pmc_dev *pmcdev =3D data; + struct pmc *pmc =3D pmcdev->pmcs[PMC_IDX_MAIN]; + const struct pmc_reg_map *map =3D pmc->map; + bool enabled; + u32 reg; + + if (!map->acpi_pm_tmr_ctl_offset) + return; + + guard(mutex)(&pmcdev->lock); + + if (!suspend && !pmcdev->enable_acpi_pm_timer_on_resume) + return; + + reg =3D pmc_core_reg_read(pmc, map->acpi_pm_tmr_ctl_offset); + enabled =3D !(reg & map->acpi_pm_tmr_disable_bit); + if (suspend) + reg |=3D map->acpi_pm_tmr_disable_bit; + else + reg &=3D ~map->acpi_pm_tmr_disable_bit; + pmc_core_reg_write(pmc, map->acpi_pm_tmr_ctl_offset, reg); + + pmcdev->enable_acpi_pm_timer_on_resume =3D suspend && enabled; +} =20 static void pmc_core_dbgfs_unregister(struct pmc_dev *pmcdev) { @@ -1404,6 +1437,7 @@ static int pmc_core_probe(struct platform_device *pdev) struct pmc_dev *pmcdev; const struct x86_cpu_id *cpu_id; int (*core_init)(struct pmc_dev *pmcdev); + const struct pmc_reg_map *map; struct pmc *primary_pmc; int ret; =20 @@ -1462,6 +1496,11 @@ static int pmc_core_probe(struct platform_device *pdev) pm_report_max_hw_sleep(FIELD_MAX(SLP_S0_RES_COUNTER_MASK) * pmc_core_adjust_slp_s0_step(primary_pmc, 1)); =20 + map =3D primary_pmc->map; + if (map->acpi_pm_tmr_ctl_offset) + acpi_pmtmr_register_suspend_resume_callback(pmc_core_acpi_pm_timer_suspend= _resume, + pmcdev); + device_initialized =3D true; dev_info(&pdev->dev, " initialized\n"); =20 @@ -1471,6 +1510,12 @@ static int pmc_core_probe(struct platform_device *pdev) static void pmc_core_remove(struct platform_device *pdev) { struct pmc_dev *pmcdev =3D platform_get_drvdata(pdev); + const struct pmc *pmc =3D pmcdev->pmcs[PMC_IDX_MAIN]; + const struct pmc_reg_map *map =3D pmc->map; + + if (map->acpi_pm_tmr_ctl_offset) + acpi_pmtmr_unregister_suspend_resume_callback(); + pmc_core_dbgfs_unregister(pmcdev); pmc_core_clean_structure(pdev); } diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/int= el/pmc/core.h index ea04de7eb9e8..4d37ef7113d7 100644 --- a/drivers/platform/x86/intel/pmc/core.h +++ b/drivers/platform/x86/intel/pmc/core.h @@ -68,6 +68,8 @@ struct telem_endpoint; #define SPT_PMC_LTR_SCC 0x3A0 #define SPT_PMC_LTR_ISH 0x3A4 =20 +#define SPT_PMC_ACPI_PM_TMR_CTL_OFFSET 0x18FC + /* Sunrise Point: PGD PFET Enable Ack Status Registers */ enum ppfear_regs { SPT_PMC_XRAM_PPFEAR0A =3D 0x590, @@ -148,6 +150,8 @@ enum ppfear_regs { #define SPT_PMC_VRIC1_SLPS0LVEN BIT(13) #define SPT_PMC_VRIC1_XTALSDQDIS BIT(22) =20 +#define SPT_PMC_BIT_ACPI_PM_TMR_DISABLE BIT(1) + /* Cannonlake Power Management Controller register offsets */ #define CNP_PMC_SLPS0_DBG_OFFSET 0x10B4 #define CNP_PMC_PM_CFG_OFFSET 0x1818 @@ -351,6 +355,8 @@ struct pmc_reg_map { const u8 *lpm_reg_index; const u32 pson_residency_offset; const u32 pson_residency_counter_step; + const u32 acpi_pm_tmr_ctl_offset; + const u32 acpi_pm_tmr_disable_bit; }; =20 /** @@ -424,6 +430,8 @@ struct pmc_dev { u32 die_c6_offset; struct telem_endpoint *punit_ep; struct pmc_info *regmap_list; + + bool enable_acpi_pm_timer_on_resume; }; =20 enum pmc_index { diff --git a/drivers/platform/x86/intel/pmc/icl.c b/drivers/platform/x86/inte= l/pmc/icl.c index 71b0fd6cb7d8..cbbd44054468 100644 --- a/drivers/platform/x86/intel/pmc/icl.c +++ b/drivers/platform/x86/intel/pmc/icl.c @@ -46,6 +46,8 @@ const struct pmc_reg_map icl_reg_map =3D { .ppfear_buckets =3D ICL_PPFEAR_NUM_ENTRIES, .pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET, .pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT, + .acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET, + .acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE, .ltr_ignore_max =3D ICL_NUM_IP_IGN_ALLOWED, .etr3_offset =3D ETR3_OFFSET, }; diff --git a/drivers/platform/x86/intel/pmc/mtl.c b/drivers/platform/x86/inte= l/pmc/mtl.c index c7d15d864039..91f2fa728f5c 100644 --- a/drivers/platform/x86/intel/pmc/mtl.c +++ b/drivers/platform/x86/intel/pmc/mtl.c @@ -462,6 +462,8 @@ const struct pmc_reg_map mtl_socm_reg_map =3D { .ppfear_buckets =3D MTL_SOCM_PPFEAR_NUM_ENTRIES, .pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET, .pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT, + .acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET, + .acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE, .lpm_num_maps =3D ADL_LPM_NUM_MAPS, .ltr_ignore_max =3D MTL_SOCM_NUM_IP_IGN_ALLOWED, .lpm_res_counter_step_x2 =3D TGL_PMC_LPM_RES_COUNTER_STEP_X2, diff --git a/drivers/platform/x86/intel/pmc/spt.c b/drivers/platform/x86/inte= l/pmc/spt.c index ab993a69e33e..2cd2b3c68e46 100644 --- a/drivers/platform/x86/intel/pmc/spt.c +++ b/drivers/platform/x86/intel/pmc/spt.c @@ -130,6 +130,8 @@ const struct pmc_reg_map spt_reg_map =3D { .ppfear_buckets =3D SPT_PPFEAR_NUM_ENTRIES, .pm_cfg_offset =3D SPT_PMC_PM_CFG_OFFSET, .pm_read_disable_bit =3D SPT_PMC_READ_DISABLE_BIT, + .acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET, + .acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE, .ltr_ignore_max =3D SPT_NUM_IP_IGN_ALLOWED, .pm_vric1_offset =3D SPT_PMC_VRIC1_OFFSET, }; diff --git a/drivers/platform/x86/intel/pmc/tgl.c b/drivers/platform/x86/inte= l/pmc/tgl.c index e0580de18077..371b4e30f142 100644 --- a/drivers/platform/x86/intel/pmc/tgl.c +++ b/drivers/platform/x86/intel/pmc/tgl.c @@ -197,6 +197,8 @@ const struct pmc_reg_map tgl_reg_map =3D { .ppfear_buckets =3D ICL_PPFEAR_NUM_ENTRIES, .pm_cfg_offset =3D CNP_PMC_PM_CFG_OFFSET, .pm_read_disable_bit =3D CNP_PMC_READ_DISABLE_BIT, + .acpi_pm_tmr_ctl_offset =3D SPT_PMC_ACPI_PM_TMR_CTL_OFFSET, + .acpi_pm_tmr_disable_bit =3D SPT_PMC_BIT_ACPI_PM_TMR_DISABLE, .ltr_ignore_max =3D TGL_NUM_IP_IGN_ALLOWED, .lpm_num_maps =3D TGL_LPM_NUM_MAPS, .lpm_res_counter_step_x2 =3D TGL_PMC_LPM_RES_COUNTER_STEP_X2, diff --git a/fs/proc/base.c b/fs/proc/base.c index 72a1acd03675..afe573e8d8f1 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -2456,13 +2456,13 @@ static void *timers_start(struct seq_file *m, loff_t = *pos) if (!tp->sighand) return ERR_PTR(-ESRCH); =20 - return seq_list_start(&tp->task->signal->posix_timers, *pos); + return seq_hlist_start(&tp->task->signal->posix_timers, *pos); } =20 static void *timers_next(struct seq_file *m, void *v, loff_t *pos) { struct timers_private *tp =3D m->private; - return seq_list_next(v, &tp->task->signal->posix_timers, pos); + return seq_hlist_next(v, &tp->task->signal->posix_timers, pos); } =20 static void timers_stop(struct seq_file *m, void *v) @@ -2491,7 +2491,7 @@ static int show_timer(struct seq_file *m, void *v) [SIGEV_THREAD] =3D "thread", }; =20 - timer =3D list_entry((struct list_head *)v, struct k_itimer, list); + timer =3D hlist_entry((struct hlist_node *)v, struct k_itimer, list); notify =3D timer->it_sigev_notify; =20 seq_printf(m, "ID: %d\n", timer->it_id); @@ -2569,10 +2569,11 @@ static ssize_t timerslack_ns_write(struct file *file,= const char __user *buf, } =20 task_lock(p); - if (slack_ns =3D=3D 0) - p->timer_slack_ns =3D p->default_timer_slack_ns; - else - p->timer_slack_ns =3D slack_ns; + if (task_is_realtime(p)) + slack_ns =3D 0; + else if (slack_ns =3D=3D 0) + slack_ns =3D p->default_timer_slack_ns; + p->timer_slack_ns =3D slack_ns; task_unlock(p); =20 out: diff --git a/fs/select.c b/fs/select.c index 9515c3fa1a03..ad171b7a5c11 100644 --- a/fs/select.c +++ b/fs/select.c @@ -77,19 +77,16 @@ u64 select_estimate_accuracy(struct timespec64 *tv) { u64 ret; struct timespec64 now; + u64 slack =3D current->timer_slack_ns; =20 - /* - * Realtime tasks get a slack of 0 for obvious reasons. - */ - - if (rt_task(current)) + if (slack =3D=3D 0) return 0; =20 ktime_get_ts64(&now); now =3D timespec64_sub(*tv, now); ret =3D __estimate_accuracy(&now); - if (ret < current->timer_slack_ns) - return current->timer_slack_ns; + if (ret < slack) + return slack; return ret; } =20 diff --git a/fs/signalfd.c b/fs/signalfd.c index ec7b2da2477a..d0333bce015e 100644 --- a/fs/signalfd.c +++ b/fs/signalfd.c @@ -159,7 +159,7 @@ static ssize_t signalfd_dequeue(struct signalfd_ctx *ctx,= kernel_siginfo_t *info DECLARE_WAITQUEUE(wait, current); =20 spin_lock_irq(¤t->sighand->siglock); - ret =3D dequeue_signal(current, &ctx->sigmask, info, &type); + ret =3D dequeue_signal(&ctx->sigmask, info, &type); switch (ret) { case 0: if (!nonblock) @@ -174,7 +174,7 @@ static ssize_t signalfd_dequeue(struct signalfd_ctx *ctx,= kernel_siginfo_t *info add_wait_queue(¤t->sighand->signalfd_wqh, &wait); for (;;) { set_current_state(TASK_INTERRUPTIBLE); - ret =3D dequeue_signal(current, &ctx->sigmask, info, &type); + ret =3D dequeue_signal(&ctx->sigmask, info, &type); if (ret !=3D 0) break; if (signal_pending(current)) { diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h index b1580644501f..209a389f2abc 100644 --- a/fs/xfs/xfs_buf.h +++ b/fs/xfs/xfs_buf.h @@ -210,7 +210,7 @@ struct xfs_buf { * success the write is considered to be failed permanently and the * iodone handler will take appropriate action. * - * For retry timeouts, we record the jiffie of the first failure. This + * For retry timeouts, we record the jiffy of the first failure. This * means that we can change the retry timeout for buffers already under * I/O and thus avoid getting stuck in a retry loop with a long timeout. * diff --git a/include/linux/acpi_pmtmr.h b/include/linux/acpi_pmtmr.h index 50d88bf1498d..0ded9220d379 100644 --- a/include/linux/acpi_pmtmr.h +++ b/include/linux/acpi_pmtmr.h @@ -26,6 +26,19 @@ static inline u32 acpi_pm_read_early(void) return acpi_pm_read_verified() & ACPI_PM_MASK; } =20 +/** + * Register callback for suspend and resume event + * + * @cb Callback triggered on suspend and resume + * @data Data passed with the callback + */ +void acpi_pmtmr_register_suspend_resume_callback(void (*cb)(void *data, bool= suspend), void *data); + +/** + * Remove registered callback for suspend and resume event + */ +void acpi_pmtmr_unregister_suspend_resume_callback(void); + #else =20 static inline u32 acpi_pm_read_early(void) diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h index d9f1435a5a13..1220f0fbe5bf 100644 --- a/include/linux/jiffies.h +++ b/include/linux/jiffies.h @@ -418,7 +418,7 @@ extern unsigned long preset_lpj; #define NSEC_CONVERSION ((unsigned long)((((u64)1 << NSEC_JIFFIE_SC) +\ TICK_NSEC -1) / (u64)TICK_NSEC)) /* - * The maximum jiffie value is (MAX_INT >> 1). Here we translate that + * The maximum jiffy value is (MAX_INT >> 1). Here we translate that * into seconds. The 64-bit case will overflow if we are not careful, * so use the messy SH_DIV macro to do it. Still all constants. */ diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h index dc7b738de299..453691710839 100644 --- a/include/linux/posix-timers.h +++ b/include/linux/posix-timers.h @@ -158,7 +158,7 @@ static inline void posix_cputimers_init_work(void) { } * @rcu: RCU head for freeing the timer. */ struct k_itimer { - struct list_head list; + struct hlist_node list; struct hlist_node t_hash; spinlock_t it_lock; const struct k_clock *kclock; diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h index 0a0e23c45406..c8ed09ac29ac 100644 --- a/include/linux/sched/signal.h +++ b/include/linux/sched/signal.h @@ -137,7 +137,7 @@ struct signal_struct { =20 /* POSIX.1b Interval Timers */ unsigned int next_posix_timer_id; - struct list_head posix_timers; + struct hlist_head posix_timers; =20 /* ITIMER_REAL timer for the process */ struct hrtimer real_timer; @@ -276,8 +276,7 @@ static inline void signal_set_stop_flags(struct signal_st= ruct *sig, extern void flush_signals(struct task_struct *); extern void ignore_signals(struct task_struct *); extern void flush_signal_handlers(struct task_struct *, int force_default); -extern int dequeue_signal(struct task_struct *task, sigset_t *mask, - kernel_siginfo_t *info, enum pid_type *type); +extern int dequeue_signal(sigset_t *mask, kernel_siginfo_t *info, enum pid_t= ype *type); =20 static inline int kernel_dequeue_signal(void) { @@ -287,7 +286,7 @@ static inline int kernel_dequeue_signal(void) int ret; =20 spin_lock_irq(&task->sighand->siglock); - ret =3D dequeue_signal(task, &task->blocked, &__info, &__type); + ret =3D dequeue_signal(&task->blocked, &__info, &__type); spin_unlock_irq(&task->sighand->siglock); =20 return ret; diff --git a/include/linux/timekeeper_internal.h b/include/linux/timekeeper_i= nternal.h index 84ff2844df2a..902c20ef495a 100644 --- a/include/linux/timekeeper_internal.h +++ b/include/linux/timekeeper_internal.h @@ -73,7 +73,7 @@ struct tk_read_base { * @overflow_seen: Overflow warning flag (DEBUG_TIMEKEEPING) * * Note: For timespec(64) based interfaces wall_to_monotonic is what - * we need to add to xtime (or xtime corrected for sub jiffie times) + * we need to add to xtime (or xtime corrected for sub jiffy times) * to get to monotonic time. Monotonic is pegged at zero at system * boot time, so wall_to_monotonic will be negative, however, we will * ALWAYS keep the tv_nsec part positive so we can use the usual diff --git a/init/init_task.c b/init/init_task.c index eeb110c65fe2..5d0399bc8d2f 100644 --- a/init/init_task.c +++ b/init/init_task.c @@ -29,7 +29,7 @@ static struct signal_struct init_signals =3D { .cred_guard_mutex =3D __MUTEX_INITIALIZER(init_signals.cred_guard_mutex), .exec_update_lock =3D __RWSEM_INITIALIZER(init_signals.exec_update_lock), #ifdef CONFIG_POSIX_TIMERS - .posix_timers =3D LIST_HEAD_INIT(init_signals.posix_timers), + .posix_timers =3D HLIST_HEAD_INIT, .cputimer =3D { .cputime_atomic =3D INIT_CPUTIME_ATOMIC, }, diff --git a/kernel/cpu.c b/kernel/cpu.c index b1fd2a3db91a..5bfc2fdd7da0 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -330,7 +330,7 @@ static bool cpuhp_wait_for_sync_state(unsigned int cpu, e= num cpuhp_sync_state st /* Poll for one millisecond */ arch_cpuhp_sync_state_poll(); } else { - usleep_range_state(USEC_PER_MSEC, 2 * USEC_PER_MSEC, TASK_UNINTERRUPTIBLE= ); + usleep_range(USEC_PER_MSEC, 2 * USEC_PER_MSEC); } sync =3D atomic_read(st); } diff --git a/kernel/fork.c b/kernel/fork.c index cc760491f201..c1b343cba560 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1861,7 +1861,7 @@ static int copy_signal(unsigned long clone_flags, struc= t task_struct *tsk) prev_cputime_init(&sig->prev_cputime); =20 #ifdef CONFIG_POSIX_TIMERS - INIT_LIST_HEAD(&sig->posix_timers); + INIT_HLIST_HEAD(&sig->posix_timers); hrtimer_init(&sig->real_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); sig->real_timer.function =3D it_real_fn; #endif diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c index ae1b42775ef9..195d2f2834a9 100644 --- a/kernel/sched/syscalls.c +++ b/kernel/sched/syscalls.c @@ -406,6 +406,14 @@ static void __setscheduler_params(struct task_struct *p, else if (fair_policy(policy)) p->static_prio =3D NICE_TO_PRIO(attr->sched_nice); =20 + /* rt-policy tasks do not have a timerslack */ + if (task_is_realtime(p)) { + p->timer_slack_ns =3D 0; + } else if (p->timer_slack_ns =3D=3D 0) { + /* when switching back to non-rt policy, restore timerslack */ + p->timer_slack_ns =3D p->default_timer_slack_ns; + } + /* * __sched_setscheduler() ensures attr->sched_priority =3D=3D 0 when * !rt_policy. Always setting this ensures that things like diff --git a/kernel/signal.c b/kernel/signal.c index 60c737e423a1..6f3a5aa39b09 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -618,20 +618,18 @@ static int __dequeue_signal(struct sigpending *pending,= sigset_t *mask, } =20 /* - * Dequeue a signal and return the element to the caller, which is - * expected to free it. - * - * All callers have to hold the siglock. + * Try to dequeue a signal. If a deliverable signal is found fill in the + * caller provided siginfo and return the signal number. Otherwise return + * 0. */ -int dequeue_signal(struct task_struct *tsk, sigset_t *mask, - kernel_siginfo_t *info, enum pid_type *type) +int dequeue_signal(sigset_t *mask, kernel_siginfo_t *info, enum pid_type *ty= pe) { + struct task_struct *tsk =3D current; bool resched_timer =3D false; int signr; =20 - /* We only dequeue private signals from ourselves, we don't let - * signalfd steal them - */ + lockdep_assert_held(&tsk->sighand->siglock); + *type =3D PIDTYPE_PID; signr =3D __dequeue_signal(&tsk->pending, mask, info, &resched_timer); if (!signr) { @@ -1940,10 +1938,11 @@ struct sigqueue *sigqueue_alloc(void) =20 void sigqueue_free(struct sigqueue *q) { - unsigned long flags; spinlock_t *lock =3D ¤t->sighand->siglock; + unsigned long flags; =20 - BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); + if (WARN_ON_ONCE(!(q->flags & SIGQUEUE_PREALLOC))) + return; /* * We must hold ->siglock while testing q->list * to serialize with collect_signal() or with @@ -1971,7 +1970,10 @@ int send_sigqueue(struct sigqueue *q, struct pid *pid,= enum pid_type type) unsigned long flags; int ret, result; =20 - BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); + if (WARN_ON_ONCE(!(q->flags & SIGQUEUE_PREALLOC))) + return 0; + if (WARN_ON_ONCE(q->info.si_code !=3D SI_TIMER)) + return 0; =20 ret =3D -1; rcu_read_lock(); @@ -2006,7 +2008,6 @@ int send_sigqueue(struct sigqueue *q, struct pid *pid, = enum pid_type type) * If an SI_TIMER entry is already queue just increment * the overrun count. */ - BUG_ON(q->info.si_code !=3D SI_TIMER); q->info.si_overrun++; result =3D TRACE_SIGNAL_ALREADY_PENDING; goto out; @@ -2793,8 +2794,7 @@ bool get_signal(struct ksignal *ksig) type =3D PIDTYPE_PID; signr =3D dequeue_synchronous_signal(&ksig->info); if (!signr) - signr =3D dequeue_signal(current, ¤t->blocked, - &ksig->info, &type); + signr =3D dequeue_signal(¤t->blocked, &ksig->info, &type); =20 if (!signr) break; /* will return 0 */ @@ -3648,7 +3648,7 @@ static int do_sigtimedwait(const sigset_t *which, kerne= l_siginfo_t *info, signotset(&mask); =20 spin_lock_irq(&tsk->sighand->siglock); - sig =3D dequeue_signal(tsk, &mask, info, &type); + sig =3D dequeue_signal(&mask, info, &type); if (!sig && timeout) { /* * None ready, temporarily unblock those we're interested @@ -3667,7 +3667,7 @@ static int do_sigtimedwait(const sigset_t *which, kerne= l_siginfo_t *info, spin_lock_irq(&tsk->sighand->siglock); __set_task_blocked(tsk, &tsk->real_blocked); sigemptyset(&tsk->real_blocked); - sig =3D dequeue_signal(tsk, &mask, info, &type); + sig =3D dequeue_signal(&mask, info, &type); } spin_unlock_irq(&tsk->sighand->siglock); =20 diff --git a/kernel/sys.c b/kernel/sys.c index 3a2df1bd9f64..e3c4cffb520c 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -2557,6 +2557,8 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2= , unsigned long, arg3, error =3D current->timer_slack_ns; break; case PR_SET_TIMERSLACK: + if (task_is_realtime(current)) + break; if (arg2 <=3D 0) current->timer_slack_ns =3D current->default_timer_slack_ns; diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c index 5abfa4390673..8bf888641694 100644 --- a/kernel/time/alarmtimer.c +++ b/kernel/time/alarmtimer.c @@ -493,7 +493,7 @@ static u64 __alarm_forward_now(struct alarm *alarm, ktime= _t interval, bool throt * promised in the context of posix_timer_fn() never * materialized, but someone should really work on it. * - * To prevent DOS fake @now to be 1 jiffie out which keeps + * To prevent DOS fake @now to be 1 jiffy out which keeps * the overrun accounting correct but creates an * inconsistency vs. timer_gettime(2). */ @@ -574,15 +574,10 @@ static enum alarmtimer_restart alarm_handle_timer(struc= t alarm *alarm, it.alarm.alarmtimer); enum alarmtimer_restart result =3D ALARMTIMER_NORESTART; unsigned long flags; - int si_private =3D 0; =20 spin_lock_irqsave(&ptr->it_lock, flags); =20 - ptr->it_active =3D 0; - if (ptr->it_interval) - si_private =3D ++ptr->it_requeue_pending; - - if (posix_timer_event(ptr, si_private) && ptr->it_interval) { + if (posix_timer_queue_signal(ptr) && ptr->it_interval) { /* * Handle ignored signals and rearm the timer. This will go * away once we handle ignored signals proper. Ensure that diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 60a6484831b1..78c7bd64d0dd 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c @@ -190,7 +190,7 @@ int clockevents_tick_resume(struct clock_event_device *de= v) =20 #ifdef CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST =20 -/* Limit min_delta to a jiffie */ +/* Limit min_delta to a jiffy */ #define MIN_DELTA_LIMIT (NSEC_PER_SEC / HZ) =20 /** diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index b8ee320208d4..e834b2bd83df 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -1177,7 +1177,7 @@ static inline ktime_t hrtimer_update_lowres(struct hrti= mer *timer, ktime_t tim, /* * CONFIG_TIME_LOW_RES indicates that the system has no way to return * granular time values. For relative timers we add hrtimer_resolution - * (i.e. one jiffie) to prevent short timeouts. + * (i.e. one jiffy) to prevent short timeouts. */ timer->is_rel =3D mode & HRTIMER_MODE_REL; if (timer->is_rel) @@ -1351,11 +1351,13 @@ static void hrtimer_cpu_base_init_expiry_lock(struct = hrtimer_cpu_base *base) } =20 static void hrtimer_cpu_base_lock_expiry(struct hrtimer_cpu_base *base) + __acquires(&base->softirq_expiry_lock) { spin_lock(&base->softirq_expiry_lock); } =20 static void hrtimer_cpu_base_unlock_expiry(struct hrtimer_cpu_base *base) + __releases(&base->softirq_expiry_lock) { spin_unlock(&base->softirq_expiry_lock); } @@ -2072,14 +2074,9 @@ long hrtimer_nanosleep(ktime_t rqtp, const enum hrtime= r_mode mode, struct restart_block *restart; struct hrtimer_sleeper t; int ret =3D 0; - u64 slack; - - slack =3D current->timer_slack_ns; - if (rt_task(current)) - slack =3D 0; =20 hrtimer_init_sleeper_on_stack(&t, clockid, mode); - hrtimer_set_expires_range_ns(&t.timer, rqtp, slack); + hrtimer_set_expires_range_ns(&t.timer, rqtp, current->timer_slack_ns); ret =3D do_nanosleep(&t, mode); if (ret !=3D -ERESTART_RESTARTBLOCK) goto out; @@ -2249,7 +2246,7 @@ void __init hrtimers_init(void) /** * schedule_hrtimeout_range_clock - sleep until timeout * @expires: timeout value (ktime_t) - * @delta: slack in expires timeout (ktime_t) for SCHED_OTHER tasks + * @delta: slack in expires timeout (ktime_t) * @mode: timer mode * @clock_id: timer clock to be used */ @@ -2276,13 +2273,6 @@ schedule_hrtimeout_range_clock(ktime_t *expires, u64 d= elta, return -EINTR; } =20 - /* - * Override any slack passed by the user if under - * rt contraints. - */ - if (rt_task(current)) - delta =3D 0; - hrtimer_init_sleeper_on_stack(&t, clock_id, mode); hrtimer_set_expires_range_ns(&t.timer, *expires, delta); hrtimer_sleeper_start_expires(&t, mode); @@ -2302,7 +2292,7 @@ EXPORT_SYMBOL_GPL(schedule_hrtimeout_range_clock); /** * schedule_hrtimeout_range - sleep until timeout * @expires: timeout value (ktime_t) - * @delta: slack in expires timeout (ktime_t) for SCHED_OTHER tasks + * @delta: slack in expires timeout (ktime_t) * @mode: timer mode * * Make the current task sleep until the given expiry time has diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index 8d2dd214ec68..802b336f4b8c 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c @@ -660,8 +660,16 @@ static void sync_hw_clock(struct work_struct *work) sched_sync_hw_clock(offset_nsec, res !=3D 0); } =20 -void ntp_notify_cmos_timer(void) +void ntp_notify_cmos_timer(bool offset_set) { + /* + * If the time jumped (using ADJ_SETOFFSET) cancels sync timer, + * which may have been running if the time was synchronized + * prior to the ADJ_SETOFFSET call. + */ + if (offset_set) + hrtimer_cancel(&sync_hrtimer); + /* * When the work is currently executed but has not yet the timer * rearmed this queues the work immediately again. No big issue, diff --git a/kernel/time/ntp_internal.h b/kernel/time/ntp_internal.h index 23d1b74c3065..5a633dce9057 100644 --- a/kernel/time/ntp_internal.h +++ b/kernel/time/ntp_internal.h @@ -14,9 +14,9 @@ extern int __do_adjtimex(struct __kernel_timex *txc, extern void __hardpps(const struct timespec64 *phase_ts, const struct timesp= ec64 *raw_ts); =20 #if defined(CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC) -extern void ntp_notify_cmos_timer(void); +extern void ntp_notify_cmos_timer(bool offset_set); #else -static inline void ntp_notify_cmos_timer(void) { } +static inline void ntp_notify_cmos_timer(bool offset_set) { } #endif =20 #endif /* _LINUX_NTP_INTERNAL_H */ diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c index e9c6f9d0e42c..6bcee4704059 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -453,6 +453,7 @@ static void disarm_timer(struct k_itimer *timer, struct t= ask_struct *p) struct cpu_timer *ctmr =3D &timer->it.cpu; struct posix_cputimer_base *base; =20 + timer->it_active =3D 0; if (!cpu_timer_dequeue(ctmr)) return; =20 @@ -559,6 +560,7 @@ static void arm_timer(struct k_itimer *timer, struct task= _struct *p) struct cpu_timer *ctmr =3D &timer->it.cpu; u64 newexp =3D cpu_timer_getexpires(ctmr); =20 + timer->it_active =3D 1; if (!cpu_timer_enqueue(&base->tqhead, ctmr)) return; =20 @@ -584,12 +586,8 @@ static void cpu_timer_fire(struct k_itimer *timer) { struct cpu_timer *ctmr =3D &timer->it.cpu; =20 - if ((timer->it_sigev_notify & ~SIGEV_THREAD_ID) =3D=3D SIGEV_NONE) { - /* - * User don't want any signal. - */ - cpu_timer_setexpires(ctmr, 0); - } else if (unlikely(timer->sigq =3D=3D NULL)) { + timer->it_active =3D 0; + if (unlikely(timer->sigq =3D=3D NULL)) { /* * This a special case for clock_nanosleep, * not a normal timer from sys_timer_create. @@ -600,9 +598,9 @@ static void cpu_timer_fire(struct k_itimer *timer) /* * One-shot timer. Clear it as soon as it's fired. */ - posix_timer_event(timer, 0); + posix_timer_queue_signal(timer); cpu_timer_setexpires(ctmr, 0); - } else if (posix_timer_event(timer, ++timer->it_requeue_pending)) { + } else if (posix_timer_queue_signal(timer)) { /* * The signal did not get queued because the signal * was ignored, so we won't get any callback to @@ -614,6 +612,8 @@ static void cpu_timer_fire(struct k_itimer *timer) } } =20 +static void __posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec6= 4 *itp, u64 now); + /* * Guts of sys_timer_settime for CPU timers. * This is called with the timer locked and interrupts disabled. @@ -623,9 +623,10 @@ static void cpu_timer_fire(struct k_itimer *timer) static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags, struct itimerspec64 *new, struct itimerspec64 *old) { + bool sigev_none =3D timer->it_sigev_notify =3D=3D SIGEV_NONE; clockid_t clkid =3D CPUCLOCK_WHICH(timer->it_clock); - u64 old_expires, new_expires, old_incr, val; struct cpu_timer *ctmr =3D &timer->it.cpu; + u64 old_expires, new_expires, now; struct sighand_struct *sighand; struct task_struct *p; unsigned long flags; @@ -662,10 +663,7 @@ static int posix_cpu_timer_set(struct k_itimer *timer, i= nt timer_flags, return -ESRCH; } =20 - /* - * Disarm any old timer after extracting its expiry time. - */ - old_incr =3D timer->it_interval; + /* Retrieve the current expiry time before disarming the timer */ old_expires =3D cpu_timer_getexpires(ctmr); =20 if (unlikely(timer->it.cpu.firing)) { @@ -673,157 +671,122 @@ static int posix_cpu_timer_set(struct k_itimer *timer= , int timer_flags, ret =3D TIMER_RETRY; } else { cpu_timer_dequeue(ctmr); + timer->it_active =3D 0; } =20 /* - * We need to sample the current value to convert the new - * value from to relative and absolute, and to convert the - * old value from absolute to relative. To set a process - * timer, we need a sample to balance the thread expiry - * times (in arm_timer). With an absolute time, we must - * check if it's already passed. In short, we need a sample. + * Sample the current clock for saving the previous setting + * and for rearming the timer. */ if (CPUCLOCK_PERTHREAD(timer->it_clock)) - val =3D cpu_clock_sample(clkid, p); + now =3D cpu_clock_sample(clkid, p); else - val =3D cpu_clock_sample_group(clkid, p, true); + now =3D cpu_clock_sample_group(clkid, p, !sigev_none); =20 + /* Retrieve the previous expiry value if requested. */ if (old) { - if (old_expires =3D=3D 0) { - old->it_value.tv_sec =3D 0; - old->it_value.tv_nsec =3D 0; - } else { - /* - * Update the timer in case it has overrun already. - * If it has, we'll report it as having overrun and - * with the next reloaded timer already ticking, - * though we are swallowing that pending - * notification here to install the new setting. - */ - u64 exp =3D bump_cpu_timer(timer, val); - - if (val < exp) { - old_expires =3D exp - val; - old->it_value =3D ns_to_timespec64(old_expires); - } else { - old->it_value.tv_nsec =3D 1; - old->it_value.tv_sec =3D 0; - } - } + old->it_value =3D (struct timespec64){ }; + if (old_expires) + __posix_cpu_timer_get(timer, old, now); } =20 + /* Retry if the timer expiry is running concurrently */ if (unlikely(ret)) { - /* - * We are colliding with the timer actually firing. - * Punt after filling in the timer's old value, and - * disable this firing since we are already reporting - * it as an overrun (thanks to bump_cpu_timer above). - */ unlock_task_sighand(p, &flags); goto out; } =20 - if (new_expires !=3D 0 && !(timer_flags & TIMER_ABSTIME)) { - new_expires +=3D val; - } + /* Convert relative expiry time to absolute */ + if (new_expires && !(timer_flags & TIMER_ABSTIME)) + new_expires +=3D now; + + /* Set the new expiry time (might be 0) */ + cpu_timer_setexpires(ctmr, new_expires); =20 /* - * Install the new expiry time (or zero). - * For a timer with no notification action, we don't actually - * arm the timer (we'll just fake it for timer_gettime). + * Arm the timer if it is not disabled, the new expiry value has + * not yet expired and the timer requires signal delivery. + * SIGEV_NONE timers are never armed. In case the timer is not + * armed, enforce the reevaluation of the timer base so that the + * process wide cputime counter can be disabled eventually. */ - cpu_timer_setexpires(ctmr, new_expires); - if (new_expires !=3D 0 && val < new_expires) { - arm_timer(timer, p); + if (likely(!sigev_none)) { + if (new_expires && now < new_expires) + arm_timer(timer, p); + else + trigger_base_recalc_expires(timer, p); } =20 unlock_task_sighand(p, &flags); + + posix_timer_set_common(timer, new); + /* - * Install the new reload setting, and - * set up the signal and overrun bookkeeping. + * If the new expiry time was already in the past the timer was not + * queued. Fire it immediately even if the thread never runs to + * accumulate more time on this clock. */ - timer->it_interval =3D timespec64_to_ktime(new->it_interval); + if (!sigev_none && new_expires && now >=3D new_expires) + cpu_timer_fire(timer); +out: + rcu_read_unlock(); + return ret; +} + +static void __posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec6= 4 *itp, u64 now) +{ + bool sigev_none =3D timer->it_sigev_notify =3D=3D SIGEV_NONE; + u64 expires, iv =3D timer->it_interval; =20 /* - * This acts as a modification timestamp for the timer, - * so any automatic reload attempt will punt on seeing - * that we have reset the timer manually. + * Make sure that interval timers are moved forward for the + * following cases: + * - SIGEV_NONE timers which are never armed + * - Timers which expired, but the signal has not yet been + * delivered */ - timer->it_requeue_pending =3D (timer->it_requeue_pending + 2) & - ~REQUEUE_PENDING; - timer->it_overrun_last =3D 0; - timer->it_overrun =3D -1; - - if (val >=3D new_expires) { - if (new_expires !=3D 0) { - /* - * The designated time already passed, so we notify - * immediately, even if the thread never runs to - * accumulate more time on this clock. - */ - cpu_timer_fire(timer); - } + if (iv && ((timer->it_requeue_pending & REQUEUE_PENDING) || sigev_none)) + expires =3D bump_cpu_timer(timer, now); + else + expires =3D cpu_timer_getexpires(&timer->it.cpu); =20 + /* + * Expired interval timers cannot have a remaining time <=3D 0. + * The kernel has to move them forward so that the next + * timer expiry is > @now. + */ + if (now < expires) { + itp->it_value =3D ns_to_timespec64(expires - now); + } else { /* - * Make sure we don't keep around the process wide cputime - * counter or the tick dependency if they are not necessary. + * A single shot SIGEV_NONE timer must return 0, when it is + * expired! Timers which have a real signal delivery mode + * must return a remaining time greater than 0 because the + * signal has not yet been delivered. */ - sighand =3D lock_task_sighand(p, &flags); - if (!sighand) - goto out; - - if (!cpu_timer_queued(ctmr)) - trigger_base_recalc_expires(timer, p); - - unlock_task_sighand(p, &flags); + if (!sigev_none) + itp->it_value.tv_nsec =3D 1; } - out: - rcu_read_unlock(); - if (old) - old->it_interval =3D ns_to_timespec64(old_incr); - - return ret; } =20 static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec64 = *itp) { clockid_t clkid =3D CPUCLOCK_WHICH(timer->it_clock); - struct cpu_timer *ctmr =3D &timer->it.cpu; - u64 now, expires =3D cpu_timer_getexpires(ctmr); struct task_struct *p; + u64 now; =20 rcu_read_lock(); p =3D cpu_timer_task_rcu(timer); - if (!p) - goto out; + if (p && cpu_timer_getexpires(&timer->it.cpu)) { + itp->it_interval =3D ktime_to_timespec64(timer->it_interval); =20 - /* - * Easy part: convert the reload time. - */ - itp->it_interval =3D ktime_to_timespec64(timer->it_interval); - - if (!expires) - goto out; - - /* - * Sample the clock to take the difference with the expiry time. - */ - if (CPUCLOCK_PERTHREAD(timer->it_clock)) - now =3D cpu_clock_sample(clkid, p); - else - now =3D cpu_clock_sample_group(clkid, p, false); + if (CPUCLOCK_PERTHREAD(timer->it_clock)) + now =3D cpu_clock_sample(clkid, p); + else + now =3D cpu_clock_sample_group(clkid, p, false); =20 - if (now < expires) { - itp->it_value =3D ns_to_timespec64(expires - now); - } else { - /* - * The timer should have expired already, but the firing - * hasn't taken place yet. Say it's just about to expire. - */ - itp->it_value.tv_nsec =3D 1; - itp->it_value.tv_sec =3D 0; + __posix_cpu_timer_get(timer, itp, now); } -out: rcu_read_unlock(); } =20 diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c index b924f0f096fa..4576aaed13b2 100644 --- a/kernel/time/posix-timers.c +++ b/kernel/time/posix-timers.c @@ -277,10 +277,17 @@ void posixtimer_rearm(struct kernel_siginfo *info) unlock_timer(timr, flags); } =20 -int posix_timer_event(struct k_itimer *timr, int si_private) +int posix_timer_queue_signal(struct k_itimer *timr) { + int ret, si_private =3D 0; enum pid_type type; - int ret; + + lockdep_assert_held(&timr->it_lock); + + timr->it_active =3D 0; + if (timr->it_interval) + si_private =3D ++timr->it_requeue_pending; + /* * FIXME: if ->sigq is queued we can race with * dequeue_signal()->posixtimer_rearm(). @@ -309,19 +316,13 @@ int posix_timer_event(struct k_itimer *timr, int si_pri= vate) */ static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer) { + struct k_itimer *timr =3D container_of(timer, struct k_itimer, it.real.time= r); enum hrtimer_restart ret =3D HRTIMER_NORESTART; - struct k_itimer *timr; unsigned long flags; - int si_private =3D 0; =20 - timr =3D container_of(timer, struct k_itimer, it.real.timer); spin_lock_irqsave(&timr->it_lock, flags); =20 - timr->it_active =3D 0; - if (timr->it_interval !=3D 0) - si_private =3D ++timr->it_requeue_pending; - - if (posix_timer_event(timr, si_private)) { + if (posix_timer_queue_signal(timr)) { /* * The signal was not queued due to SIG_IGN. As a * consequence the timer is not going to be rearmed from @@ -338,14 +339,14 @@ static enum hrtimer_restart posix_timer_fn(struct hrtim= er *timer) * change to the signal handling code. * * For now let timers with an interval less than a - * jiffie expire every jiffie and recheck for a + * jiffy expire every jiffy and recheck for a * valid signal handler. * * This avoids interrupt starvation in case of a * very small interval, which would expire the * timer immediately again. * - * Moving now ahead of time by one jiffie tricks + * Moving now ahead of time by one jiffy tricks * hrtimer_forward() to expire the timer later, * while it still maintains the overrun accuracy * for the price of a slight inconsistency in the @@ -515,7 +516,7 @@ static int do_timer_create(clockid_t which_clock, struct = sigevent *event, spin_lock_irq(¤t->sighand->siglock); /* This makes the timer valid in the hash table */ WRITE_ONCE(new_timer->it_signal, current->signal); - list_add(&new_timer->list, ¤t->signal->posix_timers); + hlist_add_head(&new_timer->list, ¤t->signal->posix_timers); spin_unlock_irq(¤t->sighand->siglock); /* * After unlocking sighand::siglock @new_timer is subject to @@ -856,6 +857,23 @@ static struct k_itimer *timer_wait_running(struct k_itim= er *timer, return lock_timer(timer_id, flags); } =20 +/* + * Set up the new interval and reset the signal delivery data + */ +void posix_timer_set_common(struct k_itimer *timer, struct itimerspec64 *new= _setting) +{ + if (new_setting->it_value.tv_sec || new_setting->it_value.tv_nsec) + timer->it_interval =3D timespec64_to_ktime(new_setting->it_interval); + else + timer->it_interval =3D 0; + + /* Prevent reloading in case there is a signal pending */ + timer->it_requeue_pending =3D (timer->it_requeue_pending + 2) & ~REQUEUE_PE= NDING; + /* Reset overrun accounting */ + timer->it_overrun_last =3D 0; + timer->it_overrun =3D -1LL; +} + /* Set a POSIX.1b interval timer. */ int common_timer_set(struct k_itimer *timr, int flags, struct itimerspec64 *new_setting, @@ -878,15 +896,12 @@ int common_timer_set(struct k_itimer *timr, int flags, return TIMER_RETRY; =20 timr->it_active =3D 0; - timr->it_requeue_pending =3D (timr->it_requeue_pending + 2) & - ~REQUEUE_PENDING; - timr->it_overrun_last =3D 0; + posix_timer_set_common(timr, new_setting); =20 - /* Switch off the timer when it_value is zero */ + /* Keep timer disarmed when it_value is zero */ if (!new_setting->it_value.tv_sec && !new_setting->it_value.tv_nsec) return 0; =20 - timr->it_interval =3D timespec64_to_ktime(new_setting->it_interval); expires =3D timespec64_to_ktime(new_setting->it_value); if (flags & TIMER_ABSTIME) expires =3D timens_ktime_to_host(timr->it_clock, expires); @@ -904,7 +919,7 @@ static int do_timer_settime(timer_t timer_id, int tmr_fla= gs, const struct k_clock *kc; struct k_itimer *timr; unsigned long flags; - int error =3D 0; + int error; =20 if (!timespec64_valid(&new_spec64->it_interval) || !timespec64_valid(&new_spec64->it_value)) @@ -918,6 +933,9 @@ static int do_timer_settime(timer_t timer_id, int tmr_fla= gs, if (!timr) return -EINVAL; =20 + if (old_spec64) + old_spec64->it_interval =3D ktime_to_timespec64(timr->it_interval); + kc =3D timr->kclock; if (WARN_ON_ONCE(!kc || !kc->timer_set)) error =3D -EINVAL; @@ -1021,7 +1039,7 @@ SYSCALL_DEFINE1(timer_delete, timer_t, timer_id) } =20 spin_lock(¤t->sighand->siglock); - list_del(&timer->list); + hlist_del(&timer->list); spin_unlock(¤t->sighand->siglock); /* * A concurrent lookup could check timer::it_signal lockless. It @@ -1071,7 +1089,7 @@ static void itimer_delete(struct k_itimer *timer) =20 goto retry_delete; } - list_del(&timer->list); + hlist_del(&timer->list); =20 /* * Setting timer::it_signal to NULL is technically not required @@ -1092,22 +1110,19 @@ static void itimer_delete(struct k_itimer *timer) */ void exit_itimers(struct task_struct *tsk) { - struct list_head timers; - struct k_itimer *tmr; + struct hlist_head timers; =20 - if (list_empty(&tsk->signal->posix_timers)) + if (hlist_empty(&tsk->signal->posix_timers)) return; =20 /* Protect against concurrent read via /proc/$PID/timers */ spin_lock_irq(&tsk->sighand->siglock); - list_replace_init(&tsk->signal->posix_timers, &timers); + hlist_move_list(&tsk->signal->posix_timers, &timers); spin_unlock_irq(&tsk->sighand->siglock); =20 /* The timers are not longer accessible via tsk::signal */ - while (!list_empty(&timers)) { - tmr =3D list_first_entry(&timers, struct k_itimer, list); - itimer_delete(tmr); - } + while (!hlist_empty(&timers)) + itimer_delete(hlist_entry(timers.first, struct k_itimer, list)); } =20 SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock, diff --git a/kernel/time/posix-timers.h b/kernel/time/posix-timers.h index f32a2ebba9b8..4784ea65f685 100644 --- a/kernel/time/posix-timers.h +++ b/kernel/time/posix-timers.h @@ -36,10 +36,11 @@ extern const struct k_clock clock_process; extern const struct k_clock clock_thread; extern const struct k_clock alarm_clock; =20 -int posix_timer_event(struct k_itimer *timr, int si_private); +int posix_timer_queue_signal(struct k_itimer *timr); =20 void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_settin= g); int common_timer_set(struct k_itimer *timr, int flags, struct itimerspec64 *new_setting, struct itimerspec64 *old_setting); +void posix_timer_set_common(struct k_itimer *timer, struct itimerspec64 *new= _setting); int common_timer_del(struct k_itimer *timer); diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 5391e4167d60..7e6f409bf311 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -2553,6 +2553,7 @@ int do_adjtimex(struct __kernel_timex *txc) { struct timekeeper *tk =3D &tk_core.timekeeper; struct audit_ntp_data ad; + bool offset_set =3D false; bool clock_set =3D false; struct timespec64 ts; unsigned long flags; @@ -2575,6 +2576,7 @@ int do_adjtimex(struct __kernel_timex *txc) if (ret) return ret; =20 + offset_set =3D delta.tv_sec !=3D 0; audit_tk_injoffset(delta); } =20 @@ -2608,7 +2610,7 @@ int do_adjtimex(struct __kernel_timex *txc) if (clock_set) clock_was_set(CLOCK_SET_WALL); =20 - ntp_notify_cmos_timer(); + ntp_notify_cmos_timer(offset_set); =20 return ret; } diff --git a/kernel/time/timer.c b/kernel/time/timer.c index 64b0d8a0aa0f..2b38f3035a3e 100644 --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -365,7 +365,7 @@ static unsigned long round_jiffies_common(unsigned long j= , int cpu, rem =3D j % HZ; =20 /* - * If the target jiffie is just after a whole second (which can happen + * If the target jiffy is just after a whole second (which can happen * due to delays of the timer irq, long irq off times etc etc) then * we should round down to the whole second, not up. Use 1/4th second * as cutoff for this rounding as an extreme upper bound for this. @@ -672,7 +672,7 @@ static void enqueue_timer(struct timer_base *base, struct= timer_list *timer, * Set the next expiry time and kick the CPU so it * can reevaluate the wheel: */ - base->next_expiry =3D bucket_expiry; + WRITE_ONCE(base->next_expiry, bucket_expiry); base->timers_pending =3D true; base->next_expiry_recalc =3D false; trigger_dyntick_cpu(base, timer); @@ -1561,6 +1561,8 @@ static inline void timer_base_unlock_expiry(struct time= r_base *base) * the waiter to acquire the lock and make progress. */ static void timer_sync_wait_running(struct timer_base *base) + __releases(&base->lock) __releases(&base->expiry_lock) + __acquires(&base->expiry_lock) __acquires(&base->lock) { if (atomic_read(&base->timer_waiters)) { raw_spin_unlock_irq(&base->lock); @@ -1898,7 +1900,7 @@ static int next_pending_bucket(struct timer_base *base,= unsigned offset, * * Store next expiry time in base->next_expiry. */ -static void next_expiry_recalc(struct timer_base *base) +static void timer_recalc_next_expiry(struct timer_base *base) { unsigned long clk, next, adj; unsigned lvl, offset =3D 0; @@ -1928,7 +1930,7 @@ static void next_expiry_recalc(struct timer_base *base) * bits are zero, we look at the next level as is. If not we * need to advance it by one because that's going to be the * next expiring bucket in that level. base->clk is the next - * expiring jiffie. So in case of: + * expiring jiffy. So in case of: * * LVL5 LVL4 LVL3 LVL2 LVL1 LVL0 * 0 0 0 0 0 0 @@ -1964,7 +1966,7 @@ static void next_expiry_recalc(struct timer_base *base) clk +=3D adj; } =20 - base->next_expiry =3D next; + WRITE_ONCE(base->next_expiry, next); base->next_expiry_recalc =3D false; base->timers_pending =3D !(next =3D=3D base->clk + NEXT_TIMER_MAX_DELTA); } @@ -1993,7 +1995,7 @@ static u64 cmp_next_hrtimer_event(u64 basem, u64 expire= s) return basem; =20 /* - * Round up to the next jiffie. High resolution timers are + * Round up to the next jiffy. High resolution timers are * off, so the hrtimers are expired in the tick and we need to * make sure that this tick really expires the timer to avoid * a ping pong of the nohz stop code. @@ -2007,7 +2009,7 @@ static unsigned long next_timer_interrupt(struct timer_= base *base, unsigned long basej) { if (base->next_expiry_recalc) - next_expiry_recalc(base); + timer_recalc_next_expiry(base); =20 /* * Move next_expiry for the empty base into the future to prevent an @@ -2018,7 +2020,7 @@ static unsigned long next_timer_interrupt(struct timer_= base *base, * easy comparable to find out which base holds the first pending timer. */ if (!base->timers_pending) - base->next_expiry =3D basej + NEXT_TIMER_MAX_DELTA; + WRITE_ONCE(base->next_expiry, basej + NEXT_TIMER_MAX_DELTA); =20 return base->next_expiry; } @@ -2252,7 +2254,7 @@ static inline u64 __get_next_timer_interrupt(unsigned l= ong basej, u64 basem, base_global, &tevt); =20 /* - * If the next event is only one jiffie ahead there is no need to call + * If the next event is only one jiffy ahead there is no need to call * timer migration hierarchy related functions. The value for the next * global timer in @tevt struct equals then KTIME_MAX. This is also * true, when the timer base is idle. @@ -2411,7 +2413,7 @@ static inline void __run_timers(struct timer_base *base) * jiffies to avoid endless requeuing to current jiffies. */ base->clk++; - next_expiry_recalc(base); + timer_recalc_next_expiry(base); =20 while (levels--) expire_timers(base, heads + levels); @@ -2462,8 +2464,40 @@ static void run_local_timers(void) hrtimer_run_queues(); =20 for (int i =3D 0; i < NR_BASES; i++, base++) { - /* Raise the softirq only if required. */ - if (time_after_eq(jiffies, base->next_expiry) || + /* + * Raise the softirq only if required. + * + * timer_base::next_expiry can be written by a remote CPU while + * holding the lock. If this write happens at the same time than + * the lockless local read, sanity checker could complain about + * data corruption. + * + * There are two possible situations where + * timer_base::next_expiry is written by a remote CPU: + * + * 1. Remote CPU expires global timers of this CPU and updates + * timer_base::next_expiry of BASE_GLOBAL afterwards in + * next_timer_interrupt() or timer_recalc_next_expiry(). The + * worst outcome is a superfluous raise of the timer softirq + * when the not yet updated value is read. + * + * 2. A new first pinned timer is enqueued by a remote CPU + * and therefore timer_base::next_expiry of BASE_LOCAL is + * updated. When this update is missed, this isn't a + * problem, as an IPI is executed nevertheless when the CPU + * was idle before. When the CPU wasn't idle but the update + * is missed, then the timer would expire one jiffy late - + * bad luck. + * + * Those unlikely corner cases where the worst outcome is only a + * one jiffy delay or a superfluous raise of the softirq are + * not that expensive as doing the check always while holding + * the lock. + * + * Possible remote writers are using WRITE_ONCE(). Local reader + * uses therefore READ_ONCE(). + */ + if (time_after_eq(jiffies, READ_ONCE(base->next_expiry)) || (i =3D=3D BASE_DEF && tmigr_requires_handle_remote())) { raise_softirq(TIMER_SOFTIRQ); return; @@ -2730,7 +2764,7 @@ void __init init_timers(void) */ void msleep(unsigned int msecs) { - unsigned long timeout =3D msecs_to_jiffies(msecs) + 1; + unsigned long timeout =3D msecs_to_jiffies(msecs); =20 while (timeout) timeout =3D schedule_timeout_uninterruptible(timeout); @@ -2744,7 +2778,7 @@ EXPORT_SYMBOL(msleep); */ unsigned long msleep_interruptible(unsigned int msecs) { - unsigned long timeout =3D msecs_to_jiffies(msecs) + 1; + unsigned long timeout =3D msecs_to_jiffies(msecs); =20 while (timeout && !signal_pending(current)) timeout =3D schedule_timeout_interruptible(timeout); diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index a30c03a66172..a40aa606cd04 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -97,7 +97,7 @@ config BOOT_PRINTK_DELAY using "boot_delay=3DN". =20 It is likely that you would also need to use "lpj=3DM" to preset - the "loops per jiffie" value. + the "loops per jiffy" value. See a previous boot log for the "lpj" value to use for your system, and then set "lpj=3DM" before setting "boot_delay=3DN". NOTE: Using this option may adversely affect SMP systems. diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h index 00840d5784fe..04f6398b3a40 100644 --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h @@ -287,7 +287,7 @@ struct batadv_frag_table_entry { /** @lock: lock to protect the list of fragments */ spinlock_t lock; =20 - /** @timestamp: time (jiffie) of last received fragment */ + /** @timestamp: time (jiffy) of last received fragment */ unsigned long timestamp; =20 /** @seqno: sequence number of the fragments in the list */ diff --git a/tools/testing/selftests/timers/posix_timers.c b/tools/testing/se= lftests/timers/posix_timers.c index 07c81c0093c0..16bd49492efa 100644 --- a/tools/testing/selftests/timers/posix_timers.c +++ b/tools/testing/selftests/timers/posix_timers.c @@ -6,10 +6,13 @@ * * Kernel loop code stolen from Steven Rostedt */ - +#define _GNU_SOURCE #include +#include #include #include +#include +#include #include #include #include @@ -18,6 +21,21 @@ =20 #define DELAY 2 #define USECS_PER_SEC 1000000 +#define NSECS_PER_SEC 1000000000 + +static void __fatal_error(const char *test, const char *name, const char *wh= at) +{ + char buf[64]; + + strerror_r(errno, buf, sizeof(buf)); + + if (name && strlen(name)) + ksft_exit_fail_msg("%s %s %s %s\n", test, name, what, buf); + else + ksft_exit_fail_msg("%s %s %s\n", test, what, buf); +} + +#define fatal_error(name, what) __fatal_error(__func__, name, what) =20 static volatile int done; =20 @@ -74,24 +92,13 @@ static int check_diff(struct timeval start, struct timeva= l end) return 0; } =20 -static int check_itimer(int which) +static void check_itimer(int which, const char *name) { - const char *name; - int err; struct timeval start, end; struct itimerval val =3D { .it_value.tv_sec =3D DELAY, }; =20 - if (which =3D=3D ITIMER_VIRTUAL) - name =3D "ITIMER_VIRTUAL"; - else if (which =3D=3D ITIMER_PROF) - name =3D "ITIMER_PROF"; - else if (which =3D=3D ITIMER_REAL) - name =3D "ITIMER_REAL"; - else - return -1; - done =3D 0; =20 if (which =3D=3D ITIMER_VIRTUAL) @@ -101,17 +108,11 @@ static int check_itimer(int which) else if (which =3D=3D ITIMER_REAL) signal(SIGALRM, sig_handler); =20 - err =3D gettimeofday(&start, NULL); - if (err < 0) { - ksft_perror("Can't call gettimeofday()"); - return -1; - } + if (gettimeofday(&start, NULL) < 0) + fatal_error(name, "gettimeofday()"); =20 - err =3D setitimer(which, &val, NULL); - if (err < 0) { - ksft_perror("Can't set timer"); - return -1; - } + if (setitimer(which, &val, NULL) < 0) + fatal_error(name, "setitimer()"); =20 if (which =3D=3D ITIMER_VIRTUAL) user_loop(); @@ -120,68 +121,41 @@ static int check_itimer(int which) else if (which =3D=3D ITIMER_REAL) idle_loop(); =20 - err =3D gettimeofday(&end, NULL); - if (err < 0) { - ksft_perror("Can't call gettimeofday()"); - return -1; - } + if (gettimeofday(&end, NULL) < 0) + fatal_error(name, "gettimeofday()"); =20 ksft_test_result(check_diff(start, end) =3D=3D 0, "%s\n", name); - - return 0; } =20 -static int check_timer_create(int which) +static void check_timer_create(int which, const char *name) { - const char *type; - int err; - timer_t id; struct timeval start, end; struct itimerspec val =3D { .it_value.tv_sec =3D DELAY, }; - - if (which =3D=3D CLOCK_THREAD_CPUTIME_ID) { - type =3D "thread"; - } else if (which =3D=3D CLOCK_PROCESS_CPUTIME_ID) { - type =3D "process"; - } else { - ksft_print_msg("Unknown timer_create() type %d\n", which); - return -1; - } + timer_t id; =20 done =3D 0; - err =3D timer_create(which, NULL, &id); - if (err < 0) { - ksft_perror("Can't create timer"); - return -1; - } - signal(SIGALRM, sig_handler); =20 - err =3D gettimeofday(&start, NULL); - if (err < 0) { - ksft_perror("Can't call gettimeofday()"); - return -1; - } + if (timer_create(which, NULL, &id) < 0) + fatal_error(name, "timer_create()"); =20 - err =3D timer_settime(id, 0, &val, NULL); - if (err < 0) { - ksft_perror("Can't set timer"); - return -1; - } + if (signal(SIGALRM, sig_handler) =3D=3D SIG_ERR) + fatal_error(name, "signal()"); + + if (gettimeofday(&start, NULL) < 0) + fatal_error(name, "gettimeofday()"); + + if (timer_settime(id, 0, &val, NULL) < 0) + fatal_error(name, "timer_settime()"); =20 user_loop(); =20 - err =3D gettimeofday(&end, NULL); - if (err < 0) { - ksft_perror("Can't call gettimeofday()"); - return -1; - } + if (gettimeofday(&end, NULL) < 0) + fatal_error(name, "gettimeofday()"); =20 ksft_test_result(check_diff(start, end) =3D=3D 0, - "timer_create() per %s\n", type); - - return 0; + "timer_create() per %s\n", name); } =20 static pthread_t ctd_thread; @@ -209,15 +183,14 @@ static void *ctd_thread_func(void *arg) =20 ctd_count =3D 100; if (timer_create(CLOCK_PROCESS_CPUTIME_ID, NULL, &id)) - return "Can't create timer\n"; + fatal_error(NULL, "timer_create()"); if (timer_settime(id, 0, &val, NULL)) - return "Can't set timer\n"; - + fatal_error(NULL, "timer_settime()"); while (ctd_count > 0 && !ctd_failed) ; =20 if (timer_delete(id)) - return "Can't delete timer\n"; + fatal_error(NULL, "timer_delete()"); =20 return NULL; } @@ -225,19 +198,16 @@ static void *ctd_thread_func(void *arg) /* * Test that only the running thread receives the timer signal. */ -static int check_timer_distribution(void) +static void check_timer_distribution(void) { - const char *errmsg; + if (signal(SIGALRM, ctd_sighandler) =3D=3D SIG_ERR) + fatal_error(NULL, "signal()"); =20 - signal(SIGALRM, ctd_sighandler); - - errmsg =3D "Can't create thread\n"; if (pthread_create(&ctd_thread, NULL, ctd_thread_func, NULL)) - goto err; + fatal_error(NULL, "pthread_create()"); =20 - errmsg =3D "Can't join thread\n"; - if (pthread_join(ctd_thread, (void **)&errmsg) || errmsg) - goto err; + if (pthread_join(ctd_thread, NULL)) + fatal_error(NULL, "pthread_join()"); =20 if (!ctd_failed) ksft_test_result_pass("check signal distribution\n"); @@ -245,31 +215,399 @@ static int check_timer_distribution(void) ksft_test_result_fail("check signal distribution\n"); else ksft_test_result_skip("check signal distribution (old kernel)\n"); - return 0; -err: - ksft_print_msg("%s", errmsg); - return -1; +} + +struct tmrsig { + int signals; + int overruns; +}; + +static void siginfo_handler(int sig, siginfo_t *si, void *uc) +{ + struct tmrsig *tsig =3D si ? si->si_ptr : NULL; + + if (tsig) { + tsig->signals++; + tsig->overruns +=3D si->si_overrun; + } +} + +static void *ignore_thread(void *arg) +{ + unsigned int *tid =3D arg; + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + if (sigprocmask(SIG_BLOCK, &set, NULL)) + fatal_error(NULL, "sigprocmask(SIG_BLOCK)"); + + *tid =3D gettid(); + sleep(100); + + if (sigprocmask(SIG_UNBLOCK, &set, NULL)) + fatal_error(NULL, "sigprocmask(SIG_UNBLOCK)"); + return NULL; +} + +static void check_sig_ign(int thread) +{ + struct tmrsig tsig =3D { }; + struct itimerspec its; + unsigned int tid =3D 0; + struct sigaction sa; + struct sigevent sev; + pthread_t pthread; + timer_t timerid; + sigset_t set; + + if (thread) { + if (pthread_create(&pthread, NULL, ignore_thread, &tid)) + fatal_error(NULL, "pthread_create()"); + sleep(1); + } + + sa.sa_flags =3D SA_SIGINFO; + sa.sa_sigaction =3D siginfo_handler; + sigemptyset(&sa.sa_mask); + if (sigaction(SIGUSR1, &sa, NULL)) + fatal_error(NULL, "sigaction()"); + + /* Block the signal */ + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + if (sigprocmask(SIG_BLOCK, &set, NULL)) + fatal_error(NULL, "sigprocmask(SIG_BLOCK)"); + + memset(&sev, 0, sizeof(sev)); + sev.sigev_notify =3D SIGEV_SIGNAL; + sev.sigev_signo =3D SIGUSR1; + sev.sigev_value.sival_ptr =3D &tsig; + if (thread) { + sev.sigev_notify =3D SIGEV_THREAD_ID; + sev._sigev_un._tid =3D tid; + } + + if (timer_create(CLOCK_MONOTONIC, &sev, &timerid)) + fatal_error(NULL, "timer_create()"); + + /* Start the timer to expire in 100ms and 100ms intervals */ + its.it_value.tv_sec =3D 0; + its.it_value.tv_nsec =3D 100000000; + its.it_interval.tv_sec =3D 0; + its.it_interval.tv_nsec =3D 100000000; + timer_settime(timerid, 0, &its, NULL); + + sleep(1); + + /* Set the signal to be ignored */ + if (signal(SIGUSR1, SIG_IGN) =3D=3D SIG_ERR) + fatal_error(NULL, "signal(SIG_IGN)"); + + sleep(1); + + if (thread) { + /* Stop the thread first. No signal should be delivered to it */ + if (pthread_cancel(pthread)) + fatal_error(NULL, "pthread_cancel()"); + if (pthread_join(pthread, NULL)) + fatal_error(NULL, "pthread_join()"); + } + + /* Restore the handler */ + if (sigaction(SIGUSR1, &sa, NULL)) + fatal_error(NULL, "sigaction()"); + + sleep(1); + + /* Unblock it, which should deliver the signal in the !thread case*/ + if (sigprocmask(SIG_UNBLOCK, &set, NULL)) + fatal_error(NULL, "sigprocmask(SIG_UNBLOCK)"); + + if (timer_delete(timerid)) + fatal_error(NULL, "timer_delete()"); + + if (!thread) { + ksft_test_result(tsig.signals =3D=3D 1 && tsig.overruns =3D=3D 29, + "check_sig_ign SIGEV_SIGNAL\n"); + } else { + ksft_test_result(tsig.signals =3D=3D 0 && tsig.overruns =3D=3D 0, + "check_sig_ign SIGEV_THREAD_ID\n"); + } +} + +static void check_rearm(void) +{ + struct tmrsig tsig =3D { }; + struct itimerspec its; + struct sigaction sa; + struct sigevent sev; + timer_t timerid; + sigset_t set; + + sa.sa_flags =3D SA_SIGINFO; + sa.sa_sigaction =3D siginfo_handler; + sigemptyset(&sa.sa_mask); + if (sigaction(SIGUSR1, &sa, NULL)) + fatal_error(NULL, "sigaction()"); + + /* Block the signal */ + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + if (sigprocmask(SIG_BLOCK, &set, NULL)) + fatal_error(NULL, "sigprocmask(SIG_BLOCK)"); + + memset(&sev, 0, sizeof(sev)); + sev.sigev_notify =3D SIGEV_SIGNAL; + sev.sigev_signo =3D SIGUSR1; + sev.sigev_value.sival_ptr =3D &tsig; + if (timer_create(CLOCK_MONOTONIC, &sev, &timerid)) + fatal_error(NULL, "timer_create()"); + + /* Start the timer to expire in 100ms and 100ms intervals */ + its.it_value.tv_sec =3D 0; + its.it_value.tv_nsec =3D 100000000; + its.it_interval.tv_sec =3D 0; + its.it_interval.tv_nsec =3D 100000000; + if (timer_settime(timerid, 0, &its, NULL)) + fatal_error(NULL, "timer_settime()"); + + sleep(1); + + /* Reprogram the timer to single shot */ + its.it_value.tv_sec =3D 10; + its.it_value.tv_nsec =3D 0; + its.it_interval.tv_sec =3D 0; + its.it_interval.tv_nsec =3D 0; + if (timer_settime(timerid, 0, &its, NULL)) + fatal_error(NULL, "timer_settime()"); + + /* Unblock it, which should not deliver a signal */ + if (sigprocmask(SIG_UNBLOCK, &set, NULL)) + fatal_error(NULL, "sigprocmask(SIG_UNBLOCK)"); + + if (timer_delete(timerid)) + fatal_error(NULL, "timer_delete()"); + + ksft_test_result(!tsig.signals, "check_rearm\n"); +} + +static void check_delete(void) +{ + struct tmrsig tsig =3D { }; + struct itimerspec its; + struct sigaction sa; + struct sigevent sev; + timer_t timerid; + sigset_t set; + + sa.sa_flags =3D SA_SIGINFO; + sa.sa_sigaction =3D siginfo_handler; + sigemptyset(&sa.sa_mask); + if (sigaction(SIGUSR1, &sa, NULL)) + fatal_error(NULL, "sigaction()"); + + /* Block the signal */ + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + if (sigprocmask(SIG_BLOCK, &set, NULL)) + fatal_error(NULL, "sigprocmask(SIG_BLOCK)"); + + memset(&sev, 0, sizeof(sev)); + sev.sigev_notify =3D SIGEV_SIGNAL; + sev.sigev_signo =3D SIGUSR1; + sev.sigev_value.sival_ptr =3D &tsig; + if (timer_create(CLOCK_MONOTONIC, &sev, &timerid)) + fatal_error(NULL, "timer_create()"); + + /* Start the timer to expire in 100ms and 100ms intervals */ + its.it_value.tv_sec =3D 0; + its.it_value.tv_nsec =3D 100000000; + its.it_interval.tv_sec =3D 0; + its.it_interval.tv_nsec =3D 100000000; + if (timer_settime(timerid, 0, &its, NULL)) + fatal_error(NULL, "timer_settime()"); + + sleep(1); + + if (timer_delete(timerid)) + fatal_error(NULL, "timer_delete()"); + + /* Unblock it, which should not deliver a signal */ + if (sigprocmask(SIG_UNBLOCK, &set, NULL)) + fatal_error(NULL, "sigprocmask(SIG_UNBLOCK)"); + + ksft_test_result(!tsig.signals, "check_delete\n"); +} + +static inline int64_t calcdiff_ns(struct timespec t1, struct timespec t2) +{ + int64_t diff; + + diff =3D NSECS_PER_SEC * (int64_t)((int) t1.tv_sec - (int) t2.tv_sec); + diff +=3D ((int) t1.tv_nsec - (int) t2.tv_nsec); + return diff; +} + +static void check_sigev_none(int which, const char *name) +{ + struct timespec start, now; + struct itimerspec its; + struct sigevent sev; + timer_t timerid; + + memset(&sev, 0, sizeof(sev)); + sev.sigev_notify =3D SIGEV_NONE; + + if (timer_create(which, &sev, &timerid)) + fatal_error(name, "timer_create()"); + + /* Start the timer to expire in 100ms and 100ms intervals */ + its.it_value.tv_sec =3D 0; + its.it_value.tv_nsec =3D 100000000; + its.it_interval.tv_sec =3D 0; + its.it_interval.tv_nsec =3D 100000000; + timer_settime(timerid, 0, &its, NULL); + + if (clock_gettime(which, &start)) + fatal_error(name, "clock_gettime()"); + + do { + if (clock_gettime(which, &now)) + fatal_error(name, "clock_gettime()"); + } while (calcdiff_ns(now, start) < NSECS_PER_SEC); + + if (timer_gettime(timerid, &its)) + fatal_error(name, "timer_gettime()"); + + if (timer_delete(timerid)) + fatal_error(name, "timer_delete()"); + + ksft_test_result(its.it_value.tv_sec || its.it_value.tv_nsec, + "check_sigev_none %s\n", name); +} + +static void check_gettime(int which, const char *name) +{ + struct itimerspec its, prev; + struct timespec start, now; + struct sigevent sev; + timer_t timerid; + int wraps =3D 0; + sigset_t set; + + /* Block the signal */ + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + if (sigprocmask(SIG_BLOCK, &set, NULL)) + fatal_error(name, "sigprocmask(SIG_BLOCK)"); + + memset(&sev, 0, sizeof(sev)); + sev.sigev_notify =3D SIGEV_SIGNAL; + sev.sigev_signo =3D SIGUSR1; + + if (timer_create(which, &sev, &timerid)) + fatal_error(name, "timer_create()"); + + /* Start the timer to expire in 100ms and 100ms intervals */ + its.it_value.tv_sec =3D 0; + its.it_value.tv_nsec =3D 100000000; + its.it_interval.tv_sec =3D 0; + its.it_interval.tv_nsec =3D 100000000; + if (timer_settime(timerid, 0, &its, NULL)) + fatal_error(name, "timer_settime()"); + + if (timer_gettime(timerid, &prev)) + fatal_error(name, "timer_gettime()"); + + if (clock_gettime(which, &start)) + fatal_error(name, "clock_gettime()"); + + do { + if (clock_gettime(which, &now)) + fatal_error(name, "clock_gettime()"); + if (timer_gettime(timerid, &its)) + fatal_error(name, "timer_gettime()"); + if (its.it_value.tv_nsec > prev.it_value.tv_nsec) + wraps++; + prev =3D its; + + } while (calcdiff_ns(now, start) < NSECS_PER_SEC); + + if (timer_delete(timerid)) + fatal_error(name, "timer_delete()"); + + ksft_test_result(wraps > 1, "check_gettime %s\n", name); +} + +static void check_overrun(int which, const char *name) +{ + struct timespec start, now; + struct tmrsig tsig =3D { }; + struct itimerspec its; + struct sigaction sa; + struct sigevent sev; + timer_t timerid; + sigset_t set; + + sa.sa_flags =3D SA_SIGINFO; + sa.sa_sigaction =3D siginfo_handler; + sigemptyset(&sa.sa_mask); + if (sigaction(SIGUSR1, &sa, NULL)) + fatal_error(name, "sigaction()"); + + /* Block the signal */ + sigemptyset(&set); + sigaddset(&set, SIGUSR1); + if (sigprocmask(SIG_BLOCK, &set, NULL)) + fatal_error(name, "sigprocmask(SIG_BLOCK)"); + + memset(&sev, 0, sizeof(sev)); + sev.sigev_notify =3D SIGEV_SIGNAL; + sev.sigev_signo =3D SIGUSR1; + sev.sigev_value.sival_ptr =3D &tsig; + if (timer_create(which, &sev, &timerid)) + fatal_error(name, "timer_create()"); + + /* Start the timer to expire in 100ms and 100ms intervals */ + its.it_value.tv_sec =3D 0; + its.it_value.tv_nsec =3D 100000000; + its.it_interval.tv_sec =3D 0; + its.it_interval.tv_nsec =3D 100000000; + if (timer_settime(timerid, 0, &its, NULL)) + fatal_error(name, "timer_settime()"); + + if (clock_gettime(which, &start)) + fatal_error(name, "clock_gettime()"); + + do { + if (clock_gettime(which, &now)) + fatal_error(name, "clock_gettime()"); + } while (calcdiff_ns(now, start) < NSECS_PER_SEC); + + /* Unblock it, which should deliver a signal */ + if (sigprocmask(SIG_UNBLOCK, &set, NULL)) + fatal_error(name, "sigprocmask(SIG_UNBLOCK)"); + + if (timer_delete(timerid)) + fatal_error(name, "timer_delete()"); + + ksft_test_result(tsig.signals =3D=3D 1 && tsig.overruns =3D=3D 9, + "check_overrun %s\n", name); } =20 int main(int argc, char **argv) { ksft_print_header(); - ksft_set_plan(6); + ksft_set_plan(18); =20 ksft_print_msg("Testing posix timers. False negative may happen on CPU exec= ution \n"); ksft_print_msg("based timers if other threads run on the CPU...\n"); =20 - if (check_itimer(ITIMER_VIRTUAL) < 0) - ksft_exit_fail(); - - if (check_itimer(ITIMER_PROF) < 0) - ksft_exit_fail(); - - if (check_itimer(ITIMER_REAL) < 0) - ksft_exit_fail(); - - if (check_timer_create(CLOCK_THREAD_CPUTIME_ID) < 0) - ksft_exit_fail(); + check_itimer(ITIMER_VIRTUAL, "ITIMER_VIRTUAL"); + check_itimer(ITIMER_PROF, "ITIMER_PROF"); + check_itimer(ITIMER_REAL, "ITIMER_REAL"); + check_timer_create(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID"); =20 /* * It's unfortunately hard to reliably test a timer expiration @@ -280,11 +618,21 @@ int main(int argc, char **argv) * to ensure true parallelism. So test only one thread until we * find a better solution. */ - if (check_timer_create(CLOCK_PROCESS_CPUTIME_ID) < 0) - ksft_exit_fail(); - - if (check_timer_distribution() < 0) - ksft_exit_fail(); + check_timer_create(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID"); + check_timer_distribution(); + + check_sig_ign(0); + check_sig_ign(1); + check_rearm(); + check_delete(); + check_sigev_none(CLOCK_MONOTONIC, "CLOCK_MONOTONIC"); + check_sigev_none(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID"); + check_gettime(CLOCK_MONOTONIC, "CLOCK_MONOTONIC"); + check_gettime(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID"); + check_gettime(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID"); + check_overrun(CLOCK_MONOTONIC, "CLOCK_MONOTONIC"); + check_overrun(CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID"); + check_overrun(CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID"); =20 ksft_finished(); } . Date: Mon, 16 Sep 2024 10:38:36 +0200 (CEST) From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] irq/core for v6.12-rc1 Linus, please pull the latest irq/core branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-core-2024-09= -16 up to: a6fe30d1e365: genirq: Use cpumask_intersects() Updates for the interrupt subsystem: - Core: - Remove a global lock in the affinity setting code The lock protects a cpumask for intermediate results and the lock causes a bottleneck on simultaneous start of multiple virtual machines. Replace the lock and the static cpumask with a per CPU cpumask which is nicely serialized by raw spinlock held when executing this code. - Provide support for giving a suffix to interrupt domain names. That's required to support devices with subfunctions so that the domain names are distinct even if they originate from the same device node. - The usual set of cleanups and enhancements all over the place - Drivers: - Support for longarch AVEC interrupt chip - Refurbishment of the Armada driver so it can be extended for new variants. - The usual set of cleanups and enhancements all over the place Thanks, tglx ------------------> Andy Shevchenko (2): irqdomain: Clarify checks for bus_token irqdomain: Remove stray '-' in the domain name Anshuman Khandual (1): irqchip/gic-v4.1: Replace bare number with ID_AA64PFR0_EL1_GIC_V4P1 Caleb Sander Mateos (1): softirq: Remove unused 'action' parameter from action callback Costa Shulyupin (3): genirq: Fix typo in struct comment genirq/cpuhotplug: Use cpumask_intersects() genirq: Use cpumask_intersects() Hongbo Li (1): irqdomain: Use IS_ERR_OR_NULL() in irq_domain_trim_hierarchy() Huacai Chen (4): irqchip/loongson-pch-msi: Switch to MSI parent domains LoongArch: Move irqchip function prototypes to irq-loongson.h LoongArch: Architectural preparation for AVEC irqchip irqchip/loongson-eiointc: Rename CPUHP_AP_IRQ_LOONGARCH_STARTING Jeff Xie (2): genirq/proc: Correctly set file permissions for affinity control files genirq/proc: Change the return value for set affinity permission error Jinjie Ruan (3): irqchip: Remove asmlinkage for handlers registered with set_handle_irq() genirq/proc: Use irq_move_pending() in show_irq_affinity() genirq/msi: Use kmemdup_array() instead of kmemdup() Jiri Slaby (SUSE) (3): genirq/irq_sim: Remove unused irq_sim_work_ctx:: Irq_base genirq: Remove unused irq_chip_generic:: {type,polarity}_cache genirq: Remove irq_chip_regs:: Polarity Konrad Dybcio (1): irqchip/apple-aic: Only access system registers on SoCs which provide t= hem Marc Zyngier (1): genirq: Get rid of global lock in irq_do_set_affinity() Marek Beh=C3=BAn (41): irqchip/armada-370-xp: Drop _OFFS suffix from some register constants irqchip/armada-370-xp: Change register constant suffix from _MSK to _MA= SK irqchip/armada-370-xp: Change spaces to tabs irqchip/armada-370-xp: Use BIT() and GENMASK() macros irqchip/armada-370-xp: Cosmetic fix parentheses in register constant de= finitions irqchip/armada-370-xp: Change register constants prefix to MPIC_ irqchip/armada-370-xp: Use correct type for cpu variable irqchip/armada-370-xp: Simplify is_percpu_irq() code irqchip/armada-370-xp: Change to SPDX license identifier irqchip/armada-370-xp: Declare iterators in for loop irqchip/armada-370-xp: Rename variable for consistency irqchip/armada-370-xp: Use unsigned int type for virqs irqchip/armada-370-xp: Use !virq instead of virq =3D=3D 0 in condition irqchip/armada-370-xp: Simplify ipi_resume() code irqchip/armada-370-xp: Improve indentation irqchip/armada-370-xp: Change symbol prefixes to mpic irqchip/armada-370-xp: Don't read number of supported interrupts multip= le times irqchip/armada-370-xp: Use FIELD_GET() and named register constant irqchip/armada-370-xp: Refactor mpic_handle_msi_irq() code irqchip/armada-370-xp: Refactor handling IPI interrupts irqchip/armada-370-xp: Use consistent variable names for hwirqs irqchip/armada-370-xp: Use consistent types when iterating interrupts irqchip/armada-370-xp: Use consistent name for struct irq_data variables irqchip/armada-370-xp: Simplify mpic_reenable_percpu() and mpic_resume() irqchip/armada-370-xp: Drop redundant continue irqchip/armada-370-xp: Rename variable for consistency irqchip/armada-370-xp: Use u32 type instead of unsigned long where poss= ieble irqchip/armada-370-xp: Refactor initial memory regions mapping irqchip/armada-370-xp: Print error and return error code on initializat= ion failure irqchip/armada-370-xp: Drop IPI_DOORBELL_START and rename IPI_DOORBELL_= END irqchip/armada-370-xp: Drop msi_doorbell_end() irqchip/armada-370-xp: Add the __init attribute to mpic_msi_init() irqchip/armada-370-xp: Put __init attribute after return type in mpic_i= pi_init() irqchip/armada-370-xp: Put static variables into driver private structu= re irqchip/armada-370-xp: Put MSI doorbell limits into the mpic structure irqchip/armada-370-xp: Pass around the driver private structure irqchip/armada-370-xp: Dynamically allocate the driver private structure irqchip/armada-370-xp: Fix reenabling last per-CPU interrupt irqchip/armada-370-xp: Iterate only valid bits of the per-CPU interrupt= cause register irqchip/armada-370-xp: Allow mapping only per-CPU interrupts irqchip/armada-370-xp: Use mpic_is_ipi_available() in mpic_of_init() Matti Vaittinen (3): irqdomain: Simplify simple and legacy domain creation irqdomain: Allow giving name suffix for domain irqdomain: Always associate interrupts for legacy domains Nick Chan (3): dt-bindings: apple,aic: Document A7-A11 compatibles irqchip/apple-aic: Skip unnecessary enabling of use_fast_ipi irqchip/apple-aic: Add a new "Global fast IPIs only" feature level Thomas Gleixner (1): irqdomain: Cleanup domain name allocation Tianyang Zhang (2): irqchip/loongson-pch-msi: Prepare get_pch_msi_handle() for AVECINTC irqchip/loongarch-avec: Add AVEC irqchip support Zhang Zekun (1): irqchip/mbigen: Simplify code logic with for_each_child_of_node_scoped() .../bindings/interrupt-controller/apple,aic.yaml | 14 +- arch/loongarch/Kconfig | 1 + arch/loongarch/include/asm/cpu-features.h | 1 + arch/loongarch/include/asm/cpu.h | 2 + arch/loongarch/include/asm/hardirq.h | 3 +- arch/loongarch/include/asm/irq.h | 31 +- arch/loongarch/include/asm/loongarch.h | 18 +- arch/loongarch/include/asm/smp.h | 2 + arch/loongarch/kernel/cpu-probe.c | 3 +- arch/loongarch/kernel/irq.c | 12 + arch/loongarch/kernel/paravirt.c | 5 + arch/loongarch/kernel/smp.c | 6 + block/blk-mq.c | 2 +- drivers/irqchip/Kconfig | 1 + drivers/irqchip/Makefile | 2 +- drivers/irqchip/irq-apple-aic.c | 59 +- drivers/irqchip/irq-armada-370-xp.c | 861 +++++++++++--------= -- drivers/irqchip/irq-atmel-aic.c | 3 +- drivers/irqchip/irq-atmel-aic5.c | 3 +- drivers/irqchip/irq-clps711x.c | 2 +- drivers/irqchip/irq-davinci-cp-intc.c | 3 +- drivers/irqchip/irq-ftintc010.c | 2 +- drivers/irqchip/irq-gic-v3.c | 2 +- drivers/irqchip/irq-gic-v4.c | 2 +- drivers/irqchip/irq-ixp4xx.c | 3 +- drivers/irqchip/irq-loongarch-avec.c | 425 ++++++++++ drivers/irqchip/irq-loongarch-cpu.c | 7 +- drivers/irqchip/irq-loongson-eiointc.c | 9 +- drivers/irqchip/irq-loongson-htvec.c | 2 + drivers/irqchip/irq-loongson-liointc.c | 2 + drivers/irqchip/irq-loongson-pch-lpc.c | 2 + drivers/irqchip/irq-loongson-pch-msi.c | 83 +- drivers/irqchip/irq-loongson-pch-pic.c | 2 + drivers/irqchip/irq-loongson.h | 27 + drivers/irqchip/irq-mbigen.c | 24 +- drivers/irqchip/irq-omap-intc.c | 3 +- drivers/irqchip/irq-sa11x0.c | 3 +- drivers/irqchip/irq-versatile-fpga.c | 2 +- include/linux/cpuhotplug.h | 3 +- include/linux/interrupt.h | 6 +- include/linux/irq.h | 6 - include/linux/irqdomain.h | 8 + kernel/irq/chip.c | 2 +- kernel/irq/cpuhotplug.c | 4 +- kernel/irq/irq_sim.c | 1 - kernel/irq/irqdomain.c | 210 +++-- kernel/irq/manage.c | 21 +- kernel/irq/migration.c | 4 +- kernel/irq/msi.c | 2 +- kernel/irq/proc.c | 17 +- kernel/rcu/tiny.c | 2 +- kernel/rcu/tree.c | 2 +- kernel/sched/fair.c | 2 +- kernel/softirq.c | 15 +- kernel/time/hrtimer.c | 2 +- kernel/time/timer.c | 2 +- lib/irq_poll.c | 2 +- net/core/dev.c | 4 +- 58 files changed, 1267 insertions(+), 682 deletions(-) create mode 100644 drivers/irqchip/irq-loongarch-avec.c create mode 100644 drivers/irqchip/irq-loongson.h diff --git a/Documentation/devicetree/bindings/interrupt-controller/apple,aic= .yaml b/Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml index 698588e9aa86..4be9b596a790 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml +++ b/Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml @@ -31,13 +31,25 @@ description: | This device also represents the FIQ interrupt sources on platforms using A= IC, which do not go through a discrete interrupt controller. =20 + IPIs may be performed via MMIO registers on all variants of AIC. Starting + from A11, system registers may also be used for "fast" IPIs. Starting from + M1, even faster IPIs within the same cluster may be achieved by writing to + a "local" fast IPI register as opposed to using the "global" fast IPI + register. + allOf: - $ref: /schemas/interrupt-controller.yaml# =20 properties: compatible: items: - - const: apple,t8103-aic + - enum: + - apple,s5l8960x-aic + - apple,t7000-aic + - apple,s8000-aic + - apple,t8010-aic + - apple,t8015-aic + - apple,t8103-aic - const: apple,aic =20 interrupt-controller: true diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig index 70f169210b52..0e3abf7b0bd3 100644 --- a/arch/loongarch/Kconfig +++ b/arch/loongarch/Kconfig @@ -85,6 +85,7 @@ config LOONGARCH select GENERIC_ENTRY select GENERIC_GETTIMEOFDAY select GENERIC_IOREMAP if !ARCH_IOREMAP + select GENERIC_IRQ_MATRIX_ALLOCATOR select GENERIC_IRQ_MULTI_HANDLER select GENERIC_IRQ_PROBE select GENERIC_IRQ_SHOW diff --git a/arch/loongarch/include/asm/cpu-features.h b/arch/loongarch/inclu= de/asm/cpu-features.h index 2eafe6a6aca8..16a716f88a5c 100644 --- a/arch/loongarch/include/asm/cpu-features.h +++ b/arch/loongarch/include/asm/cpu-features.h @@ -65,5 +65,6 @@ #define cpu_has_guestid cpu_opt(LOONGARCH_CPU_GUESTID) #define cpu_has_hypervisor cpu_opt(LOONGARCH_CPU_HYPERVISOR) #define cpu_has_ptw cpu_opt(LOONGARCH_CPU_PTW) +#define cpu_has_avecint cpu_opt(LOONGARCH_CPU_AVECINT) =20 #endif /* __ASM_CPU_FEATURES_H */ diff --git a/arch/loongarch/include/asm/cpu.h b/arch/loongarch/include/asm/cp= u.h index 48b9f7168bcc..843f9c4ec980 100644 --- a/arch/loongarch/include/asm/cpu.h +++ b/arch/loongarch/include/asm/cpu.h @@ -99,6 +99,7 @@ enum cpu_type_enum { #define CPU_FEATURE_GUESTID 24 /* CPU has GuestID feature */ #define CPU_FEATURE_HYPERVISOR 25 /* CPU has hypervisor (running in VM) */ #define CPU_FEATURE_PTW 26 /* CPU has hardware page table walker */ +#define CPU_FEATURE_AVECINT 27 /* CPU has avec interrupt */ =20 #define LOONGARCH_CPU_CPUCFG BIT_ULL(CPU_FEATURE_CPUCFG) #define LOONGARCH_CPU_LAM BIT_ULL(CPU_FEATURE_LAM) @@ -127,5 +128,6 @@ enum cpu_type_enum { #define LOONGARCH_CPU_GUESTID BIT_ULL(CPU_FEATURE_GUESTID) #define LOONGARCH_CPU_HYPERVISOR BIT_ULL(CPU_FEATURE_HYPERVISOR) #define LOONGARCH_CPU_PTW BIT_ULL(CPU_FEATURE_PTW) +#define LOONGARCH_CPU_AVECINT BIT_ULL(CPU_FEATURE_AVECINT) =20 #endif /* _ASM_CPU_H */ diff --git a/arch/loongarch/include/asm/hardirq.h b/arch/loongarch/include/as= m/hardirq.h index 1d7feb719515..10da8d6961cb 100644 --- a/arch/loongarch/include/asm/hardirq.h +++ b/arch/loongarch/include/asm/hardirq.h @@ -12,12 +12,13 @@ extern void ack_bad_irq(unsigned int irq); #define ack_bad_irq ack_bad_irq =20 -#define NR_IPI 3 +#define NR_IPI 4 =20 enum ipi_msg_type { IPI_RESCHEDULE, IPI_CALL_FUNCTION, IPI_IRQ_WORK, + IPI_CLEAR_VECTOR, }; =20 typedef struct { diff --git a/arch/loongarch/include/asm/irq.h b/arch/loongarch/include/asm/ir= q.h index 480418bc5071..9c2ca785faa9 100644 --- a/arch/loongarch/include/asm/irq.h +++ b/arch/loongarch/include/asm/irq.h @@ -39,11 +39,22 @@ void spurious_interrupt(void); =20 #define NR_IRQS_LEGACY 16 =20 +/* + * 256 Vectors Mapping for AVECINTC: + * + * 0 - 15: Mapping classic IPs, e.g. IP0-12. + * 16 - 255: Mapping vectors for external IRQ. + * + */ +#define NR_VECTORS 256 +#define NR_LEGACY_VECTORS 16 +#define IRQ_MATRIX_BITS NR_VECTORS + #define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace void arch_trigger_cpumask_backtrace(const struct cpumask *mask, int exclude_= cpu); =20 #define MAX_IO_PICS 2 -#define NR_IRQS (64 + (256 * MAX_IO_PICS)) +#define NR_IRQS (64 + NR_VECTORS * (NR_CPUS + MAX_IO_PICS)) =20 struct acpi_vector_group { int node; @@ -65,7 +76,7 @@ extern struct acpi_vector_group msi_group[MAX_IO_PICS]; #define LOONGSON_LPC_LAST_IRQ (LOONGSON_LPC_IRQ_BASE + 15) =20 #define LOONGSON_CPU_IRQ_BASE 16 -#define LOONGSON_CPU_LAST_IRQ (LOONGSON_CPU_IRQ_BASE + 14) +#define LOONGSON_CPU_LAST_IRQ (LOONGSON_CPU_IRQ_BASE + 15) =20 #define LOONGSON_PCH_IRQ_BASE 64 #define LOONGSON_PCH_ACPI_IRQ (LOONGSON_PCH_IRQ_BASE + 47) @@ -88,20 +99,8 @@ struct acpi_madt_bio_pic; struct acpi_madt_msi_pic; struct acpi_madt_lpc_pic; =20 -int liointc_acpi_init(struct irq_domain *parent, - struct acpi_madt_lio_pic *acpi_liointc); -int eiointc_acpi_init(struct irq_domain *parent, - struct acpi_madt_eio_pic *acpi_eiointc); - -int htvec_acpi_init(struct irq_domain *parent, - struct acpi_madt_ht_pic *acpi_htvec); -int pch_lpc_acpi_init(struct irq_domain *parent, - struct acpi_madt_lpc_pic *acpi_pchlpc); -int pch_msi_acpi_init(struct irq_domain *parent, - struct acpi_madt_msi_pic *acpi_pchmsi); -int pch_pic_acpi_init(struct irq_domain *parent, - struct acpi_madt_bio_pic *acpi_pchpic); -int find_pch_pic(u32 gsi); +void complete_irq_moving(void); + struct fwnode_handle *get_pch_msi_handle(int pci_segment); =20 extern struct acpi_madt_lio_pic *acpi_liointc; diff --git a/arch/loongarch/include/asm/loongarch.h b/arch/loongarch/include/= asm/loongarch.h index 04a78010fc72..631d249b3ef2 100644 --- a/arch/loongarch/include/asm/loongarch.h +++ b/arch/loongarch/include/asm/loongarch.h @@ -253,8 +253,8 @@ #define CSR_ESTAT_EXC_WIDTH 6 #define CSR_ESTAT_EXC (_ULCAST_(0x3f) << CSR_ESTAT_EXC_SHIFT) #define CSR_ESTAT_IS_SHIFT 0 -#define CSR_ESTAT_IS_WIDTH 14 -#define CSR_ESTAT_IS (_ULCAST_(0x3fff) << CSR_ESTAT_IS_SHIFT) +#define CSR_ESTAT_IS_WIDTH 15 +#define CSR_ESTAT_IS (_ULCAST_(0x7fff) << CSR_ESTAT_IS_SHIFT) =20 #define LOONGARCH_CSR_ERA 0x6 /* ERA */ =20 @@ -649,6 +649,13 @@ =20 #define LOONGARCH_CSR_CTAG 0x98 /* TagLo + TagHi */ =20 +#define LOONGARCH_CSR_ISR0 0xa0 +#define LOONGARCH_CSR_ISR1 0xa1 +#define LOONGARCH_CSR_ISR2 0xa2 +#define LOONGARCH_CSR_ISR3 0xa3 + +#define LOONGARCH_CSR_IRR 0xa4 + #define LOONGARCH_CSR_PRID 0xc0 =20 /* Shadow MCSR : 0xc0 ~ 0xff */ @@ -1011,7 +1018,7 @@ /* * CSR_ECFG IM */ -#define ECFG0_IM 0x00001fff +#define ECFG0_IM 0x00005fff #define ECFGB_SIP0 0 #define ECFGF_SIP0 (_ULCAST_(1) << ECFGB_SIP0) #define ECFGB_SIP1 1 @@ -1054,6 +1061,7 @@ #define IOCSRF_EIODECODE BIT_ULL(9) #define IOCSRF_FLATMODE BIT_ULL(10) #define IOCSRF_VM BIT_ULL(11) +#define IOCSRF_AVEC BIT_ULL(15) =20 #define LOONGARCH_IOCSR_VENDOR 0x10 =20 @@ -1065,6 +1073,7 @@ #define IOCSR_MISC_FUNC_SOFT_INT BIT_ULL(10) #define IOCSR_MISC_FUNC_TIMER_RESET BIT_ULL(21) #define IOCSR_MISC_FUNC_EXT_IOI_EN BIT_ULL(48) +#define IOCSR_MISC_FUNC_AVEC_EN BIT_ULL(51) =20 #define LOONGARCH_IOCSR_CPUTEMP 0x428 =20 @@ -1387,9 +1396,10 @@ __BUILD_CSR_OP(tlbidx) #define INT_TI 11 /* Timer */ #define INT_IPI 12 #define INT_NMI 13 +#define INT_AVEC 14 =20 /* ExcCodes corresponding to interrupts */ -#define EXCCODE_INT_NUM (INT_NMI + 1) +#define EXCCODE_INT_NUM (INT_AVEC + 1) #define EXCCODE_INT_START 64 #define EXCCODE_INT_END (EXCCODE_INT_START + EXCCODE_INT_NUM - 1) =20 diff --git a/arch/loongarch/include/asm/smp.h b/arch/loongarch/include/asm/sm= p.h index 50db503f44e3..3383c9d24e94 100644 --- a/arch/loongarch/include/asm/smp.h +++ b/arch/loongarch/include/asm/smp.h @@ -70,10 +70,12 @@ extern int __cpu_logical_map[NR_CPUS]; #define ACTION_RESCHEDULE 1 #define ACTION_CALL_FUNCTION 2 #define ACTION_IRQ_WORK 3 +#define ACTION_CLEAR_VECTOR 4 #define SMP_BOOT_CPU BIT(ACTION_BOOT_CPU) #define SMP_RESCHEDULE BIT(ACTION_RESCHEDULE) #define SMP_CALL_FUNCTION BIT(ACTION_CALL_FUNCTION) #define SMP_IRQ_WORK BIT(ACTION_IRQ_WORK) +#define SMP_CLEAR_VECTOR BIT(ACTION_CLEAR_VECTOR) =20 struct secondary_data { unsigned long stack; diff --git a/arch/loongarch/kernel/cpu-probe.c b/arch/loongarch/kernel/cpu-pr= obe.c index 55320813ee08..14f0449f5452 100644 --- a/arch/loongarch/kernel/cpu-probe.c +++ b/arch/loongarch/kernel/cpu-probe.c @@ -106,7 +106,6 @@ static void cpu_probe_common(struct cpuinfo_loongarch *c) elf_hwcap |=3D HWCAP_LOONGARCH_CRC32; } =20 - config =3D read_cpucfg(LOONGARCH_CPUCFG2); if (config & CPUCFG2_LAM) { c->options |=3D LOONGARCH_CPU_LAM; @@ -174,6 +173,8 @@ static void cpu_probe_common(struct cpuinfo_loongarch *c) c->options |=3D LOONGARCH_CPU_FLATMODE; if (config & IOCSRF_EIODECODE) c->options |=3D LOONGARCH_CPU_EIODECODE; + if (config & IOCSRF_AVEC) + c->options |=3D LOONGARCH_CPU_AVECINT; if (config & IOCSRF_VM) c->options |=3D LOONGARCH_CPU_HYPERVISOR; =20 diff --git a/arch/loongarch/kernel/irq.c b/arch/loongarch/kernel/irq.c index f4991c03514f..414f5249d70a 100644 --- a/arch/loongarch/kernel/irq.c +++ b/arch/loongarch/kernel/irq.c @@ -87,6 +87,18 @@ static void __init init_vec_parent_group(void) acpi_table_parse(ACPI_SIG_MCFG, early_pci_mcfg_parse); } =20 +int __init arch_probe_nr_irqs(void) +{ + int nr_io_pics =3D bitmap_weight(loongson_sysconf.cores_io_master, NR_CPUS); + + if (!cpu_has_avecint) + nr_irqs =3D (64 + NR_VECTORS * nr_io_pics); + else + nr_irqs =3D (64 + NR_VECTORS * (nr_cpu_ids + nr_io_pics)); + + return NR_IRQS_LEGACY; +} + void __init init_IRQ(void) { int i; diff --git a/arch/loongarch/kernel/paravirt.c b/arch/loongarch/kernel/paravir= t.c index 9c9b75b76f62..4d736a4e488d 100644 --- a/arch/loongarch/kernel/paravirt.c +++ b/arch/loongarch/kernel/paravirt.c @@ -134,6 +134,11 @@ static irqreturn_t pv_ipi_interrupt(int irq, void *dev) info->ipi_irqs[IPI_IRQ_WORK]++; } =20 + if (action & SMP_CLEAR_VECTOR) { + complete_irq_moving(); + info->ipi_irqs[IPI_CLEAR_VECTOR]++; + } + return IRQ_HANDLED; } =20 diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c index ca405ab86aae..4adbbef3450a 100644 --- a/arch/loongarch/kernel/smp.c +++ b/arch/loongarch/kernel/smp.c @@ -72,6 +72,7 @@ static const char *ipi_types[NR_IPI] __tracepoint_string = =3D { [IPI_RESCHEDULE] =3D "Rescheduling interrupts", [IPI_CALL_FUNCTION] =3D "Function call interrupts", [IPI_IRQ_WORK] =3D "IRQ work interrupts", + [IPI_CLEAR_VECTOR] =3D "Clear vector interrupts", }; =20 void show_ipi_list(struct seq_file *p, int prec) @@ -248,6 +249,11 @@ static irqreturn_t loongson_ipi_interrupt(int irq, void = *dev) per_cpu(irq_stat, cpu).ipi_irqs[IPI_IRQ_WORK]++; } =20 + if (action & SMP_CLEAR_VECTOR) { + complete_irq_moving(); + per_cpu(irq_stat, cpu).ipi_irqs[IPI_CLEAR_VECTOR]++; + } + return IRQ_HANDLED; } =20 diff --git a/block/blk-mq.c b/block/blk-mq.c index e3c3c0c21b55..aa28157b1aaf 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1128,7 +1128,7 @@ static void blk_complete_reqs(struct llist_head *list) rq->q->mq_ops->complete(rq); } =20 -static __latent_entropy void blk_done_softirq(struct softirq_action *h) +static __latent_entropy void blk_done_softirq(void) { blk_complete_reqs(this_cpu_ptr(&blk_cpu_done)); } diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig index d078bdc48c38..341cd9ca5a05 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -685,6 +685,7 @@ config LOONGSON_PCH_MSI depends on PCI default MACH_LOONGSON64 select IRQ_DOMAIN_HIERARCHY + select IRQ_MSI_LIB select PCI_MSI help Support for the Loongson PCH MSI Controller. diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile index 15635812b2d6..e3679ec2b9f7 100644 --- a/drivers/irqchip/Makefile +++ b/drivers/irqchip/Makefile @@ -110,7 +110,7 @@ obj-$(CONFIG_LS1X_IRQ) +=3D irq-ls1x.o obj-$(CONFIG_TI_SCI_INTR_IRQCHIP) +=3D irq-ti-sci-intr.o obj-$(CONFIG_TI_SCI_INTA_IRQCHIP) +=3D irq-ti-sci-inta.o obj-$(CONFIG_TI_PRUSS_INTC) +=3D irq-pruss-intc.o -obj-$(CONFIG_IRQ_LOONGARCH_CPU) +=3D irq-loongarch-cpu.o +obj-$(CONFIG_IRQ_LOONGARCH_CPU) +=3D irq-loongarch-cpu.o irq-loongarch-avec= .o obj-$(CONFIG_LOONGSON_LIOINTC) +=3D irq-loongson-liointc.o obj-$(CONFIG_LOONGSON_EIOINTC) +=3D irq-loongson-eiointc.o obj-$(CONFIG_LOONGSON_HTPIC) +=3D irq-loongson-htpic.o diff --git a/drivers/irqchip/irq-apple-aic.c b/drivers/irqchip/irq-apple-aic.c index 5c534d9fd2b0..da5250f0155c 100644 --- a/drivers/irqchip/irq-apple-aic.c +++ b/drivers/irqchip/irq-apple-aic.c @@ -234,7 +234,10 @@ enum fiq_hwirq { AIC_NR_FIQ }; =20 +/* True if UNCORE/UNCORE2 and Sn_... IPI registers are present and used (A11= +) */ static DEFINE_STATIC_KEY_TRUE(use_fast_ipi); +/* True if SYS_IMP_APL_IPI_RR_LOCAL_EL1 exists for local fast IPIs (M1+) */ +static DEFINE_STATIC_KEY_TRUE(use_local_fast_ipi); =20 struct aic_info { int version; @@ -252,6 +255,7 @@ struct aic_info { =20 /* Features */ bool fast_ipi; + bool local_fast_ipi; }; =20 static const struct aic_info aic1_info __initconst =3D { @@ -270,17 +274,32 @@ static const struct aic_info aic1_fipi_info __initconst= =3D { .fast_ipi =3D true, }; =20 +static const struct aic_info aic1_local_fipi_info __initconst =3D { + .version =3D 1, + + .event =3D AIC_EVENT, + .target_cpu =3D AIC_TARGET_CPU, + + .fast_ipi =3D true, + .local_fast_ipi =3D true, +}; + static const struct aic_info aic2_info __initconst =3D { .version =3D 2, =20 .irq_cfg =3D AIC2_IRQ_CFG, =20 .fast_ipi =3D true, + .local_fast_ipi =3D true, }; =20 static const struct of_device_id aic_info_match[] =3D { { .compatible =3D "apple,t8103-aic", + .data =3D &aic1_local_fipi_info, + }, + { + .compatible =3D "apple,t8015-aic", .data =3D &aic1_fipi_info, }, { @@ -532,14 +551,9 @@ static void __exception_irq_entry aic_handle_fiq(struct = pt_regs *regs) * we check for everything here, even things we don't support yet. */ =20 - if (read_sysreg_s(SYS_IMP_APL_IPI_SR_EL1) & IPI_SR_PENDING) { - if (static_branch_likely(&use_fast_ipi)) { - aic_handle_ipi(regs); - } else { - pr_err_ratelimited("Fast IPI fired. Acking.\n"); - write_sysreg_s(IPI_SR_PENDING, SYS_IMP_APL_IPI_SR_EL1); - } - } + if (static_branch_likely(&use_fast_ipi) && + (read_sysreg_s(SYS_IMP_APL_IPI_SR_EL1) & IPI_SR_PENDING)) + aic_handle_ipi(regs); =20 if (TIMER_FIRING(read_sysreg(cntp_ctl_el0))) generic_handle_domain_irq(aic_irqc->hw_domain, @@ -574,8 +588,9 @@ static void __exception_irq_entry aic_handle_fiq(struct p= t_regs *regs) AIC_FIQ_HWIRQ(irq)); } =20 - if (FIELD_GET(UPMCR0_IMODE, read_sysreg_s(SYS_IMP_APL_UPMCR0_EL1)) =3D=3D U= PMCR0_IMODE_FIQ && - (read_sysreg_s(SYS_IMP_APL_UPMSR_EL1) & UPMSR_IACT)) { + if (static_branch_likely(&use_fast_ipi) && + (FIELD_GET(UPMCR0_IMODE, read_sysreg_s(SYS_IMP_APL_UPMCR0_EL1)) =3D=3D = UPMCR0_IMODE_FIQ) && + (read_sysreg_s(SYS_IMP_APL_UPMSR_EL1) & UPMSR_IACT)) { /* Same story with uncore PMCs */ pr_err_ratelimited("Uncore PMC FIQ fired. Masking.\n"); sysreg_clear_set_s(SYS_IMP_APL_UPMCR0_EL1, UPMCR0_IMODE, @@ -750,12 +765,12 @@ static void aic_ipi_send_fast(int cpu) u64 cluster =3D MPIDR_CLUSTER(mpidr); u64 idx =3D MPIDR_CPU(mpidr); =20 - if (MPIDR_CLUSTER(my_mpidr) =3D=3D cluster) - write_sysreg_s(FIELD_PREP(IPI_RR_CPU, idx), - SYS_IMP_APL_IPI_RR_LOCAL_EL1); - else + if (static_branch_likely(&use_local_fast_ipi) && MPIDR_CLUSTER(my_mpidr) = =3D=3D cluster) { + write_sysreg_s(FIELD_PREP(IPI_RR_CPU, idx), SYS_IMP_APL_IPI_RR_LOCAL_EL1); + } else { write_sysreg_s(FIELD_PREP(IPI_RR_CPU, idx) | FIELD_PREP(IPI_RR_CLUSTER, cl= uster), SYS_IMP_APL_IPI_RR_GLOBAL_EL1); + } isb(); } =20 @@ -811,7 +826,8 @@ static int aic_init_cpu(unsigned int cpu) /* Mask all hard-wired per-CPU IRQ/FIQ sources */ =20 /* Pending Fast IPI FIQs */ - write_sysreg_s(IPI_SR_PENDING, SYS_IMP_APL_IPI_SR_EL1); + if (static_branch_likely(&use_fast_ipi)) + write_sysreg_s(IPI_SR_PENDING, SYS_IMP_APL_IPI_SR_EL1); =20 /* Timer FIQs */ sysreg_clear_set(cntp_ctl_el0, 0, ARCH_TIMER_CTRL_IT_MASK); @@ -832,8 +848,10 @@ static int aic_init_cpu(unsigned int cpu) FIELD_PREP(PMCR0_IMODE, PMCR0_IMODE_OFF)); =20 /* Uncore PMC FIQ */ - sysreg_clear_set_s(SYS_IMP_APL_UPMCR0_EL1, UPMCR0_IMODE, - FIELD_PREP(UPMCR0_IMODE, UPMCR0_IMODE_OFF)); + if (static_branch_likely(&use_fast_ipi)) { + sysreg_clear_set_s(SYS_IMP_APL_UPMCR0_EL1, UPMCR0_IMODE, + FIELD_PREP(UPMCR0_IMODE, UPMCR0_IMODE_OFF)); + } =20 /* Commit all of the above */ isb(); @@ -987,11 +1005,12 @@ static int __init aic_of_ic_init(struct device_node *n= ode, struct device_node *p off +=3D sizeof(u32) * (irqc->max_irq >> 5); /* MASK_CLR */ off +=3D sizeof(u32) * (irqc->max_irq >> 5); /* HW_STATE */ =20 - if (irqc->info.fast_ipi) - static_branch_enable(&use_fast_ipi); - else + if (!irqc->info.fast_ipi) static_branch_disable(&use_fast_ipi); =20 + if (!irqc->info.local_fast_ipi) + static_branch_disable(&use_local_fast_ipi); + irqc->info.die_stride =3D off - start_off; =20 irqc->hw_domain =3D irq_domain_create_tree(of_node_to_fwnode(node), diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada= -370-xp.c index dce2b80bf439..d7c5ef248474 100644 --- a/drivers/irqchip/irq-armada-370-xp.c +++ b/drivers/irqchip/irq-armada-370-xp.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0-only /* * Marvell Armada 370 and Armada XP SoC IRQ handling * @@ -7,13 +8,11 @@ * Gregory CLEMENT * Thomas Petazzoni * Ben Dooks - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. */ =20 +#include #include +#include #include #include #include @@ -66,19 +65,17 @@ * device * * The "global interrupt mask/unmask" is modified using the - * ARMADA_370_XP_INT_SET_ENABLE_OFFS and - * ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS registers, which are relative - * to "main_int_base". + * MPIC_INT_SET_ENABLE and MPIC_INT_CLEAR_ENABLE + * registers, which are relative to "mpic->base". * - * The "per-CPU mask/unmask" is modified using the - * ARMADA_370_XP_INT_SET_MASK_OFFS and - * ARMADA_370_XP_INT_CLEAR_MASK_OFFS registers, which are relative to - * "per_cpu_int_base". This base address points to a special address, + * The "per-CPU mask/unmask" is modified using the MPIC_INT_SET_MASK + * and MPIC_INT_CLEAR_MASK registers, which are relative to + * "mpic->per_cpu". This base address points to a special address, * which automatically accesses the registers of the current CPU. * * The per-CPU mask/unmask can also be adjusted using the global - * per-interrupt ARMADA_370_XP_INT_SOURCE_CTL register, which we use - * to configure interrupt affinity. + * per-interrupt MPIC_INT_SOURCE_CTL register, which we use to + * configure interrupt affinity. * * Due to this model, all interrupts need to be mask/unmasked at two * different levels: at the global level and at the per-CPU level. @@ -92,9 +89,8 @@ * the current CPU, running the ->map() code. This allows to have * the interrupt unmasked at this level in non-SMP * configurations. In SMP configurations, the ->set_affinity() - * callback is called, which using the - * ARMADA_370_XP_INT_SOURCE_CTL() readjusts the per-CPU mask/unmask - * for the interrupt. + * callback is called, which using the MPIC_INT_SOURCE_CTL() + * readjusts the per-CPU mask/unmask for the interrupt. * * The ->mask() and ->unmask() operations only mask/unmask the * interrupt at the "global" level. @@ -116,58 +112,84 @@ * at the per-CPU level. */ =20 -/* Registers relative to main_int_base */ -#define ARMADA_370_XP_INT_CONTROL (0x00) -#define ARMADA_370_XP_SW_TRIG_INT_OFFS (0x04) -#define ARMADA_370_XP_INT_SET_ENABLE_OFFS (0x30) -#define ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS (0x34) -#define ARMADA_370_XP_INT_SOURCE_CTL(irq) (0x100 + irq*4) -#define ARMADA_370_XP_INT_SOURCE_CPU_MASK 0xF -#define ARMADA_370_XP_INT_IRQ_FIQ_MASK(cpuid) ((BIT(0) | BIT(8)) << cpuid) - -/* Registers relative to per_cpu_int_base */ -#define ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS (0x08) -#define ARMADA_370_XP_IN_DRBEL_MSK_OFFS (0x0c) -#define ARMADA_375_PPI_CAUSE (0x10) -#define ARMADA_370_XP_CPU_INTACK_OFFS (0x44) -#define ARMADA_370_XP_INT_SET_MASK_OFFS (0x48) -#define ARMADA_370_XP_INT_CLEAR_MASK_OFFS (0x4C) -#define ARMADA_370_XP_INT_FABRIC_MASK_OFFS (0x54) -#define ARMADA_370_XP_INT_CAUSE_PERF(cpu) (1 << cpu) - -#define ARMADA_370_XP_MAX_PER_CPU_IRQS (28) +/* Registers relative to mpic->base */ +#define MPIC_INT_CONTROL 0x00 +#define MPIC_INT_CONTROL_NUMINT_MASK GENMASK(12, 2) +#define MPIC_SW_TRIG_INT 0x04 +#define MPIC_INT_SET_ENABLE 0x30 +#define MPIC_INT_CLEAR_ENABLE 0x34 +#define MPIC_INT_SOURCE_CTL(hwirq) (0x100 + (hwirq) * 4) +#define MPIC_INT_SOURCE_CPU_MASK GENMASK(3, 0) +#define MPIC_INT_IRQ_FIQ_MASK(cpuid) ((BIT(0) | BIT(8)) << (cpuid)) + +/* Registers relative to mpic->per_cpu */ +#define MPIC_IN_DRBEL_CAUSE 0x08 +#define MPIC_IN_DRBEL_MASK 0x0c +#define MPIC_PPI_CAUSE 0x10 +#define MPIC_CPU_INTACK 0x44 +#define MPIC_CPU_INTACK_IID_MASK GENMASK(9, 0) +#define MPIC_INT_SET_MASK 0x48 +#define MPIC_INT_CLEAR_MASK 0x4C +#define MPIC_INT_FABRIC_MASK 0x54 +#define MPIC_INT_CAUSE_PERF(cpu) BIT(cpu) + +#define MPIC_PER_CPU_IRQS_NR 29 =20 /* IPI and MSI interrupt definitions for IPI platforms */ -#define IPI_DOORBELL_START (0) -#define IPI_DOORBELL_END (8) -#define IPI_DOORBELL_MASK 0xFF -#define PCI_MSI_DOORBELL_START (16) -#define PCI_MSI_DOORBELL_NR (16) -#define PCI_MSI_DOORBELL_END (32) -#define PCI_MSI_DOORBELL_MASK 0xFFFF0000 +#define IPI_DOORBELL_NR 8 +#define IPI_DOORBELL_MASK GENMASK(7, 0) +#define PCI_MSI_DOORBELL_START 16 +#define PCI_MSI_DOORBELL_NR 16 +#define PCI_MSI_DOORBELL_MASK GENMASK(31, 16) =20 /* MSI interrupt definitions for non-IPI platforms */ #define PCI_MSI_FULL_DOORBELL_START 0 #define PCI_MSI_FULL_DOORBELL_NR 32 -#define PCI_MSI_FULL_DOORBELL_END 32 #define PCI_MSI_FULL_DOORBELL_MASK GENMASK(31, 0) #define PCI_MSI_FULL_DOORBELL_SRC0_MASK GENMASK(15, 0) #define PCI_MSI_FULL_DOORBELL_SRC1_MASK GENMASK(31, 16) =20 -static void __iomem *per_cpu_int_base; -static void __iomem *main_int_base; -static struct irq_domain *armada_370_xp_mpic_domain; -static u32 doorbell_mask_reg; -static int parent_irq; +/** + * struct mpic - MPIC private data structure + * @base: MPIC registers base address + * @per_cpu: per-CPU registers base address + * @parent_irq: parent IRQ if MPIC is not top-level interrupt controller + * @domain: MPIC main interrupt domain + * @ipi_domain: IPI domain + * @msi_domain: MSI domain + * @msi_inner_domain: MSI inner domain + * @msi_used: bitmap of used MSI numbers + * @msi_lock: mutex serializing access to @msi_used + * @msi_doorbell_addr: physical address of MSI doorbell register + * @msi_doorbell_mask: mask of available doorbell bits for MSIs (either PCI_= MSI_DOORBELL_MASK or + * PCI_MSI_FULL_DOORBELL_MASK) + * @msi_doorbell_start: first set bit in @msi_doorbell_mask + * @msi_doorbell_size: number of set bits in @msi_doorbell_mask + * @doorbell_mask: doorbell mask of MSIs and IPIs, stored on suspend, restor= ed on resume + */ +struct mpic { + void __iomem *base; + void __iomem *per_cpu; + int parent_irq; + struct irq_domain *domain; +#ifdef CONFIG_SMP + struct irq_domain *ipi_domain; +#endif #ifdef CONFIG_PCI_MSI -static struct irq_domain *armada_370_xp_msi_domain; -static struct irq_domain *armada_370_xp_msi_inner_domain; -static DECLARE_BITMAP(msi_used, PCI_MSI_FULL_DOORBELL_NR); -static DEFINE_MUTEX(msi_used_lock); -static phys_addr_t msi_doorbell_addr; + struct irq_domain *msi_domain; + struct irq_domain *msi_inner_domain; + DECLARE_BITMAP(msi_used, PCI_MSI_FULL_DOORBELL_NR); + struct mutex msi_lock; + phys_addr_t msi_doorbell_addr; + u32 msi_doorbell_mask; + unsigned int msi_doorbell_start, msi_doorbell_size; #endif + u32 doorbell_mask; +}; + +static struct mpic *mpic_data __ro_after_init; =20 -static inline bool is_ipi_available(void) +static inline bool mpic_is_ipi_available(struct mpic *mpic) { /* * We distinguish IPI availability in the IC by the IC not having a @@ -175,39 +197,12 @@ static inline bool is_ipi_available(void) * interrupt controller (e.g. GIC) that takes care of inter-processor * interrupts. */ - return parent_irq <=3D 0; -} - -static inline u32 msi_doorbell_mask(void) -{ - return is_ipi_available() ? PCI_MSI_DOORBELL_MASK : - PCI_MSI_FULL_DOORBELL_MASK; -} - -static inline unsigned int msi_doorbell_start(void) -{ - return is_ipi_available() ? PCI_MSI_DOORBELL_START : - PCI_MSI_FULL_DOORBELL_START; + return mpic->parent_irq <=3D 0; } =20 -static inline unsigned int msi_doorbell_size(void) +static inline bool mpic_is_percpu_irq(irq_hw_number_t hwirq) { - return is_ipi_available() ? PCI_MSI_DOORBELL_NR : - PCI_MSI_FULL_DOORBELL_NR; -} - -static inline unsigned int msi_doorbell_end(void) -{ - return is_ipi_available() ? PCI_MSI_DOORBELL_END : - PCI_MSI_FULL_DOORBELL_END; -} - -static inline bool is_percpu_irq(irq_hw_number_t irq) -{ - if (irq <=3D ARMADA_370_XP_MAX_PER_CPU_IRQS) - return true; - - return false; + return hwirq < MPIC_PER_CPU_IRQS_NR; } =20 /* @@ -215,55 +210,53 @@ static inline bool is_percpu_irq(irq_hw_number_t irq) * For shared global interrupts, mask/unmask global enable bit * For CPU interrupts, mask/unmask the calling CPU's bit */ -static void armada_370_xp_irq_mask(struct irq_data *d) +static void mpic_irq_mask(struct irq_data *d) { + struct mpic *mpic =3D irq_data_get_irq_chip_data(d); irq_hw_number_t hwirq =3D irqd_to_hwirq(d); =20 - if (!is_percpu_irq(hwirq)) - writel(hwirq, main_int_base + - ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS); + if (!mpic_is_percpu_irq(hwirq)) + writel(hwirq, mpic->base + MPIC_INT_CLEAR_ENABLE); else - writel(hwirq, per_cpu_int_base + - ARMADA_370_XP_INT_SET_MASK_OFFS); + writel(hwirq, mpic->per_cpu + MPIC_INT_SET_MASK); } =20 -static void armada_370_xp_irq_unmask(struct irq_data *d) +static void mpic_irq_unmask(struct irq_data *d) { + struct mpic *mpic =3D irq_data_get_irq_chip_data(d); irq_hw_number_t hwirq =3D irqd_to_hwirq(d); =20 - if (!is_percpu_irq(hwirq)) - writel(hwirq, main_int_base + - ARMADA_370_XP_INT_SET_ENABLE_OFFS); + if (!mpic_is_percpu_irq(hwirq)) + writel(hwirq, mpic->base + MPIC_INT_SET_ENABLE); else - writel(hwirq, per_cpu_int_base + - ARMADA_370_XP_INT_CLEAR_MASK_OFFS); + writel(hwirq, mpic->per_cpu + MPIC_INT_CLEAR_MASK); } =20 #ifdef CONFIG_PCI_MSI =20 -static struct irq_chip armada_370_xp_msi_irq_chip =3D { - .name =3D "MPIC MSI", - .irq_mask =3D pci_msi_mask_irq, - .irq_unmask =3D pci_msi_unmask_irq, +static struct irq_chip mpic_msi_irq_chip =3D { + .name =3D "MPIC MSI", + .irq_mask =3D pci_msi_mask_irq, + .irq_unmask =3D pci_msi_unmask_irq, }; =20 -static struct msi_domain_info armada_370_xp_msi_domain_info =3D { +static struct msi_domain_info mpic_msi_domain_info =3D { .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS | MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX), - .chip =3D &armada_370_xp_msi_irq_chip, + .chip =3D &mpic_msi_irq_chip, }; =20 -static void armada_370_xp_compose_msi_msg(struct irq_data *data, struct msi_= msg *msg) +static void mpic_compose_msi_msg(struct irq_data *d, struct msi_msg *msg) { - unsigned int cpu =3D cpumask_first(irq_data_get_effective_affinity_mask(dat= a)); + unsigned int cpu =3D cpumask_first(irq_data_get_effective_affinity_mask(d)); + struct mpic *mpic =3D irq_data_get_irq_chip_data(d); =20 - msg->address_lo =3D lower_32_bits(msi_doorbell_addr); - msg->address_hi =3D upper_32_bits(msi_doorbell_addr); - msg->data =3D BIT(cpu + 8) | (data->hwirq + msi_doorbell_start()); + msg->address_lo =3D lower_32_bits(mpic->msi_doorbell_addr); + msg->address_hi =3D upper_32_bits(mpic->msi_doorbell_addr); + msg->data =3D BIT(cpu + 8) | (d->hwirq + mpic->msi_doorbell_start); } =20 -static int armada_370_xp_msi_set_affinity(struct irq_data *irq_data, - const struct cpumask *mask, bool force) +static int mpic_msi_set_affinity(struct irq_data *d, const struct cpumask *m= ask, bool force) { unsigned int cpu; =20 @@ -275,33 +268,34 @@ static int armada_370_xp_msi_set_affinity(struct irq_da= ta *irq_data, if (cpu >=3D nr_cpu_ids) return -EINVAL; =20 - irq_data_update_effective_affinity(irq_data, cpumask_of(cpu)); + irq_data_update_effective_affinity(d, cpumask_of(cpu)); =20 return IRQ_SET_MASK_OK; } =20 -static struct irq_chip armada_370_xp_msi_bottom_irq_chip =3D { +static struct irq_chip mpic_msi_bottom_irq_chip =3D { .name =3D "MPIC MSI", - .irq_compose_msi_msg =3D armada_370_xp_compose_msi_msg, - .irq_set_affinity =3D armada_370_xp_msi_set_affinity, + .irq_compose_msi_msg =3D mpic_compose_msi_msg, + .irq_set_affinity =3D mpic_msi_set_affinity, }; =20 -static int armada_370_xp_msi_alloc(struct irq_domain *domain, unsigned int v= irq, - unsigned int nr_irqs, void *args) +static int mpic_msi_alloc(struct irq_domain *domain, unsigned int virq, unsi= gned int nr_irqs, + void *args) { - int hwirq, i; + struct mpic *mpic =3D domain->host_data; + int hwirq; =20 - mutex_lock(&msi_used_lock); - hwirq =3D bitmap_find_free_region(msi_used, msi_doorbell_size(), + mutex_lock(&mpic->msi_lock); + hwirq =3D bitmap_find_free_region(mpic->msi_used, mpic->msi_doorbell_size, order_base_2(nr_irqs)); - mutex_unlock(&msi_used_lock); + mutex_unlock(&mpic->msi_lock); =20 if (hwirq < 0) return -ENOSPC; =20 - for (i =3D 0; i < nr_irqs; i++) { + for (unsigned int i =3D 0; i < nr_irqs; i++) { irq_domain_set_info(domain, virq + i, hwirq + i, - &armada_370_xp_msi_bottom_irq_chip, + &mpic_msi_bottom_irq_chip, domain->host_data, handle_simple_irq, NULL, NULL); } @@ -309,76 +303,84 @@ static int armada_370_xp_msi_alloc(struct irq_domain *d= omain, unsigned int virq, return 0; } =20 -static void armada_370_xp_msi_free(struct irq_domain *domain, - unsigned int virq, unsigned int nr_irqs) +static void mpic_msi_free(struct irq_domain *domain, unsigned int virq, unsi= gned int nr_irqs) { struct irq_data *d =3D irq_domain_get_irq_data(domain, virq); + struct mpic *mpic =3D domain->host_data; =20 - mutex_lock(&msi_used_lock); - bitmap_release_region(msi_used, d->hwirq, order_base_2(nr_irqs)); - mutex_unlock(&msi_used_lock); + mutex_lock(&mpic->msi_lock); + bitmap_release_region(mpic->msi_used, d->hwirq, order_base_2(nr_irqs)); + mutex_unlock(&mpic->msi_lock); } =20 -static const struct irq_domain_ops armada_370_xp_msi_domain_ops =3D { - .alloc =3D armada_370_xp_msi_alloc, - .free =3D armada_370_xp_msi_free, +static const struct irq_domain_ops mpic_msi_domain_ops =3D { + .alloc =3D mpic_msi_alloc, + .free =3D mpic_msi_free, }; =20 -static void armada_370_xp_msi_reenable_percpu(void) +static void mpic_msi_reenable_percpu(struct mpic *mpic) { u32 reg; =20 /* Enable MSI doorbell mask and combined cpu local interrupt */ - reg =3D readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); - reg |=3D msi_doorbell_mask(); - writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + reg =3D readl(mpic->per_cpu + MPIC_IN_DRBEL_MASK); + reg |=3D mpic->msi_doorbell_mask; + writel(reg, mpic->per_cpu + MPIC_IN_DRBEL_MASK); =20 /* Unmask local doorbell interrupt */ - writel(1, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); + writel(1, mpic->per_cpu + MPIC_INT_CLEAR_MASK); } =20 -static int armada_370_xp_msi_init(struct device_node *node, - phys_addr_t main_int_phys_base) +static int __init mpic_msi_init(struct mpic *mpic, struct device_node *node, + phys_addr_t main_int_phys_base) { - msi_doorbell_addr =3D main_int_phys_base + - ARMADA_370_XP_SW_TRIG_INT_OFFS; + mpic->msi_doorbell_addr =3D main_int_phys_base + MPIC_SW_TRIG_INT; + + mutex_init(&mpic->msi_lock); + + if (mpic_is_ipi_available(mpic)) { + mpic->msi_doorbell_start =3D PCI_MSI_DOORBELL_START; + mpic->msi_doorbell_size =3D PCI_MSI_DOORBELL_NR; + mpic->msi_doorbell_mask =3D PCI_MSI_DOORBELL_MASK; + } else { + mpic->msi_doorbell_start =3D PCI_MSI_FULL_DOORBELL_START; + mpic->msi_doorbell_size =3D PCI_MSI_FULL_DOORBELL_NR; + mpic->msi_doorbell_mask =3D PCI_MSI_FULL_DOORBELL_MASK; + } =20 - armada_370_xp_msi_inner_domain =3D - irq_domain_add_linear(NULL, msi_doorbell_size(), - &armada_370_xp_msi_domain_ops, NULL); - if (!armada_370_xp_msi_inner_domain) + mpic->msi_inner_domain =3D irq_domain_add_linear(NULL, mpic->msi_doorbell_s= ize, + &mpic_msi_domain_ops, mpic); + if (!mpic->msi_inner_domain) return -ENOMEM; =20 - armada_370_xp_msi_domain =3D - pci_msi_create_irq_domain(of_node_to_fwnode(node), - &armada_370_xp_msi_domain_info, - armada_370_xp_msi_inner_domain); - if (!armada_370_xp_msi_domain) { - irq_domain_remove(armada_370_xp_msi_inner_domain); + mpic->msi_domain =3D pci_msi_create_irq_domain(of_node_to_fwnode(node), &mp= ic_msi_domain_info, + mpic->msi_inner_domain); + if (!mpic->msi_domain) { + irq_domain_remove(mpic->msi_inner_domain); return -ENOMEM; } =20 - armada_370_xp_msi_reenable_percpu(); + mpic_msi_reenable_percpu(mpic); =20 /* Unmask low 16 MSI irqs on non-IPI platforms */ - if (!is_ipi_available()) - writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); + if (!mpic_is_ipi_available(mpic)) + writel(0, mpic->per_cpu + MPIC_INT_CLEAR_MASK); =20 return 0; } #else -static __maybe_unused void armada_370_xp_msi_reenable_percpu(void) {} +static __maybe_unused void mpic_msi_reenable_percpu(struct mpic *mpic) {} =20 -static inline int armada_370_xp_msi_init(struct device_node *node, - phys_addr_t main_int_phys_base) +static inline int mpic_msi_init(struct mpic *mpic, struct device_node *node, + phys_addr_t main_int_phys_base) { return 0; } #endif =20 -static void armada_xp_mpic_perf_init(void) +static void mpic_perf_init(struct mpic *mpic) { - unsigned long cpuid; + u32 cpuid; =20 /* * This Performance Counter Overflow interrupt is specific for @@ -390,38 +392,39 @@ static void armada_xp_mpic_perf_init(void) cpuid =3D cpu_logical_map(smp_processor_id()); =20 /* Enable Performance Counter Overflow interrupts */ - writel(ARMADA_370_XP_INT_CAUSE_PERF(cpuid), - per_cpu_int_base + ARMADA_370_XP_INT_FABRIC_MASK_OFFS); + writel(MPIC_INT_CAUSE_PERF(cpuid), mpic->per_cpu + MPIC_INT_FABRIC_MASK); } =20 #ifdef CONFIG_SMP -static struct irq_domain *ipi_domain; - -static void armada_370_xp_ipi_mask(struct irq_data *d) +static void mpic_ipi_mask(struct irq_data *d) { + struct mpic *mpic =3D irq_data_get_irq_chip_data(d); u32 reg; - reg =3D readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + + reg =3D readl(mpic->per_cpu + MPIC_IN_DRBEL_MASK); reg &=3D ~BIT(d->hwirq); - writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + writel(reg, mpic->per_cpu + MPIC_IN_DRBEL_MASK); } =20 -static void armada_370_xp_ipi_unmask(struct irq_data *d) +static void mpic_ipi_unmask(struct irq_data *d) { + struct mpic *mpic =3D irq_data_get_irq_chip_data(d); u32 reg; - reg =3D readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + + reg =3D readl(mpic->per_cpu + MPIC_IN_DRBEL_MASK); reg |=3D BIT(d->hwirq); - writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + writel(reg, mpic->per_cpu + MPIC_IN_DRBEL_MASK); } =20 -static void armada_370_xp_ipi_send_mask(struct irq_data *d, - const struct cpumask *mask) +static void mpic_ipi_send_mask(struct irq_data *d, const struct cpumask *mas= k) { - unsigned long map =3D 0; - int cpu; + struct mpic *mpic =3D irq_data_get_irq_chip_data(d); + unsigned int cpu; + u32 map =3D 0; =20 /* Convert our logical CPU mask into a physical one. */ for_each_cpu(cpu, mask) - map |=3D 1 << cpu_logical_map(cpu); + map |=3D BIT(cpu_logical_map(cpu)); =20 /* * Ensure that stores to Normal memory are visible to the @@ -430,451 +433,465 @@ static void armada_370_xp_ipi_send_mask(struct irq_da= ta *d, dsb(); =20 /* submit softirq */ - writel((map << 8) | d->hwirq, main_int_base + - ARMADA_370_XP_SW_TRIG_INT_OFFS); + writel((map << 8) | d->hwirq, mpic->base + MPIC_SW_TRIG_INT); } =20 -static void armada_370_xp_ipi_ack(struct irq_data *d) +static void mpic_ipi_ack(struct irq_data *d) { - writel(~BIT(d->hwirq), per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS= ); + struct mpic *mpic =3D irq_data_get_irq_chip_data(d); + + writel(~BIT(d->hwirq), mpic->per_cpu + MPIC_IN_DRBEL_CAUSE); } =20 -static struct irq_chip ipi_irqchip =3D { +static struct irq_chip mpic_ipi_irqchip =3D { .name =3D "IPI", - .irq_ack =3D armada_370_xp_ipi_ack, - .irq_mask =3D armada_370_xp_ipi_mask, - .irq_unmask =3D armada_370_xp_ipi_unmask, - .ipi_send_mask =3D armada_370_xp_ipi_send_mask, + .irq_ack =3D mpic_ipi_ack, + .irq_mask =3D mpic_ipi_mask, + .irq_unmask =3D mpic_ipi_unmask, + .ipi_send_mask =3D mpic_ipi_send_mask, }; =20 -static int armada_370_xp_ipi_alloc(struct irq_domain *d, - unsigned int virq, - unsigned int nr_irqs, void *args) +static int mpic_ipi_alloc(struct irq_domain *d, unsigned int virq, + unsigned int nr_irqs, void *args) { - int i; - - for (i =3D 0; i < nr_irqs; i++) { + for (unsigned int i =3D 0; i < nr_irqs; i++) { irq_set_percpu_devid(virq + i); - irq_domain_set_info(d, virq + i, i, &ipi_irqchip, - d->host_data, - handle_percpu_devid_irq, - NULL, NULL); + irq_domain_set_info(d, virq + i, i, &mpic_ipi_irqchip, d->host_data, + handle_percpu_devid_irq, NULL, NULL); } =20 return 0; } =20 -static void armada_370_xp_ipi_free(struct irq_domain *d, - unsigned int virq, - unsigned int nr_irqs) +static void mpic_ipi_free(struct irq_domain *d, unsigned int virq, + unsigned int nr_irqs) { /* Not freeing IPIs */ } =20 -static const struct irq_domain_ops ipi_domain_ops =3D { - .alloc =3D armada_370_xp_ipi_alloc, - .free =3D armada_370_xp_ipi_free, +static const struct irq_domain_ops mpic_ipi_domain_ops =3D { + .alloc =3D mpic_ipi_alloc, + .free =3D mpic_ipi_free, }; =20 -static void ipi_resume(void) +static void mpic_ipi_resume(struct mpic *mpic) { - int i; - - for (i =3D 0; i < IPI_DOORBELL_END; i++) { - int irq; + for (irq_hw_number_t i =3D 0; i < IPI_DOORBELL_NR; i++) { + unsigned int virq =3D irq_find_mapping(mpic->ipi_domain, i); + struct irq_data *d; =20 - irq =3D irq_find_mapping(ipi_domain, i); - if (irq <=3D 0) + if (!virq || !irq_percpu_is_enabled(virq)) continue; - if (irq_percpu_is_enabled(irq)) { - struct irq_data *d; - d =3D irq_domain_get_irq_data(ipi_domain, irq); - armada_370_xp_ipi_unmask(d); - } + + d =3D irq_domain_get_irq_data(mpic->ipi_domain, virq); + mpic_ipi_unmask(d); } } =20 -static __init void armada_xp_ipi_init(struct device_node *node) +static int __init mpic_ipi_init(struct mpic *mpic, struct device_node *node) { int base_ipi; =20 - ipi_domain =3D irq_domain_create_linear(of_node_to_fwnode(node), - IPI_DOORBELL_END, - &ipi_domain_ops, NULL); - if (WARN_ON(!ipi_domain)) - return; + mpic->ipi_domain =3D irq_domain_create_linear(of_node_to_fwnode(node), IPI_= DOORBELL_NR, + &mpic_ipi_domain_ops, mpic); + if (WARN_ON(!mpic->ipi_domain)) + return -ENOMEM; =20 - irq_domain_update_bus_token(ipi_domain, DOMAIN_BUS_IPI); - base_ipi =3D irq_domain_alloc_irqs(ipi_domain, IPI_DOORBELL_END, NUMA_NO_NO= DE, NULL); + irq_domain_update_bus_token(mpic->ipi_domain, DOMAIN_BUS_IPI); + base_ipi =3D irq_domain_alloc_irqs(mpic->ipi_domain, IPI_DOORBELL_NR, NUMA_= NO_NODE, NULL); if (WARN_ON(!base_ipi)) - return; + return -ENOMEM; + + set_smp_ipi_range(base_ipi, IPI_DOORBELL_NR); =20 - set_smp_ipi_range(base_ipi, IPI_DOORBELL_END); + return 0; } =20 -static int armada_xp_set_affinity(struct irq_data *d, - const struct cpumask *mask_val, bool force) +static int mpic_set_affinity(struct irq_data *d, const struct cpumask *mask_= val, bool force) { + struct mpic *mpic =3D irq_data_get_irq_chip_data(d); irq_hw_number_t hwirq =3D irqd_to_hwirq(d); - int cpu; + unsigned int cpu; =20 /* Select a single core from the affinity mask which is online */ cpu =3D cpumask_any_and(mask_val, cpu_online_mask); =20 - atomic_io_modify(main_int_base + ARMADA_370_XP_INT_SOURCE_CTL(hwirq), - ARMADA_370_XP_INT_SOURCE_CPU_MASK, - BIT(cpu_logical_map(cpu))); + atomic_io_modify(mpic->base + MPIC_INT_SOURCE_CTL(hwirq), + MPIC_INT_SOURCE_CPU_MASK, BIT(cpu_logical_map(cpu))); =20 irq_data_update_effective_affinity(d, cpumask_of(cpu)); =20 return IRQ_SET_MASK_OK; } =20 -static void armada_xp_mpic_smp_cpu_init(void) +static void mpic_smp_cpu_init(struct mpic *mpic) { - u32 control; - int nr_irqs, i; - - control =3D readl(main_int_base + ARMADA_370_XP_INT_CONTROL); - nr_irqs =3D (control >> 2) & 0x3ff; + for (irq_hw_number_t i =3D 0; i < mpic->domain->hwirq_max; i++) + writel(i, mpic->per_cpu + MPIC_INT_SET_MASK); =20 - for (i =3D 0; i < nr_irqs; i++) - writel(i, per_cpu_int_base + ARMADA_370_XP_INT_SET_MASK_OFFS); - - if (!is_ipi_available()) + if (!mpic_is_ipi_available(mpic)) return; =20 /* Disable all IPIs */ - writel(0, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + writel(0, mpic->per_cpu + MPIC_IN_DRBEL_MASK); =20 /* Clear pending IPIs */ - writel(0, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS); + writel(0, mpic->per_cpu + MPIC_IN_DRBEL_CAUSE); =20 /* Unmask IPI interrupt */ - writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); + writel(0, mpic->per_cpu + MPIC_INT_CLEAR_MASK); } =20 -static void armada_xp_mpic_reenable_percpu(void) +static void mpic_reenable_percpu(struct mpic *mpic) { - unsigned int irq; - /* Re-enable per-CPU interrupts that were enabled before suspend */ - for (irq =3D 0; irq < ARMADA_370_XP_MAX_PER_CPU_IRQS; irq++) { - struct irq_data *data; - int virq; - - virq =3D irq_linear_revmap(armada_370_xp_mpic_domain, irq); - if (virq =3D=3D 0) - continue; - - data =3D irq_get_irq_data(virq); + for (irq_hw_number_t i =3D 0; i < MPIC_PER_CPU_IRQS_NR; i++) { + unsigned int virq =3D irq_linear_revmap(mpic->domain, i); + struct irq_data *d; =20 - if (!irq_percpu_is_enabled(virq)) + if (!virq || !irq_percpu_is_enabled(virq)) continue; =20 - armada_370_xp_irq_unmask(data); + d =3D irq_get_irq_data(virq); + mpic_irq_unmask(d); } =20 - if (is_ipi_available()) - ipi_resume(); + if (mpic_is_ipi_available(mpic)) + mpic_ipi_resume(mpic); =20 - armada_370_xp_msi_reenable_percpu(); + mpic_msi_reenable_percpu(mpic); } =20 -static int armada_xp_mpic_starting_cpu(unsigned int cpu) +static int mpic_starting_cpu(unsigned int cpu) { - armada_xp_mpic_perf_init(); - armada_xp_mpic_smp_cpu_init(); - armada_xp_mpic_reenable_percpu(); + struct mpic *mpic =3D irq_get_default_host()->host_data; + + mpic_perf_init(mpic); + mpic_smp_cpu_init(mpic); + mpic_reenable_percpu(mpic); + return 0; } =20 static int mpic_cascaded_starting_cpu(unsigned int cpu) { - armada_xp_mpic_perf_init(); - armada_xp_mpic_reenable_percpu(); - enable_percpu_irq(parent_irq, IRQ_TYPE_NONE); + struct mpic *mpic =3D mpic_data; + + mpic_perf_init(mpic); + mpic_reenable_percpu(mpic); + enable_percpu_irq(mpic->parent_irq, IRQ_TYPE_NONE); + return 0; } #else -static void armada_xp_mpic_smp_cpu_init(void) {} -static void ipi_resume(void) {} +static void mpic_smp_cpu_init(struct mpic *mpic) {} +static void mpic_ipi_resume(struct mpic *mpic) {} #endif =20 -static struct irq_chip armada_370_xp_irq_chip =3D { +static struct irq_chip mpic_irq_chip =3D { .name =3D "MPIC", - .irq_mask =3D armada_370_xp_irq_mask, - .irq_mask_ack =3D armada_370_xp_irq_mask, - .irq_unmask =3D armada_370_xp_irq_unmask, + .irq_mask =3D mpic_irq_mask, + .irq_mask_ack =3D mpic_irq_mask, + .irq_unmask =3D mpic_irq_unmask, #ifdef CONFIG_SMP - .irq_set_affinity =3D armada_xp_set_affinity, + .irq_set_affinity =3D mpic_set_affinity, #endif .flags =3D IRQCHIP_SKIP_SET_WAKE | IRQCHIP_MASK_ON_SUSPEND, }; =20 -static int armada_370_xp_mpic_irq_map(struct irq_domain *h, - unsigned int virq, irq_hw_number_t hw) +static int mpic_irq_map(struct irq_domain *domain, unsigned int virq, irq_hw= _number_t hwirq) { + struct mpic *mpic =3D domain->host_data; + /* IRQs 0 and 1 cannot be mapped, they are handled internally */ - if (hw <=3D 1) + if (hwirq <=3D 1) return -EINVAL; =20 - armada_370_xp_irq_mask(irq_get_irq_data(virq)); - if (!is_percpu_irq(hw)) - writel(hw, per_cpu_int_base + - ARMADA_370_XP_INT_CLEAR_MASK_OFFS); + irq_set_chip_data(virq, mpic); + + mpic_irq_mask(irq_get_irq_data(virq)); + if (!mpic_is_percpu_irq(hwirq)) + writel(hwirq, mpic->per_cpu + MPIC_INT_CLEAR_MASK); else - writel(hw, main_int_base + ARMADA_370_XP_INT_SET_ENABLE_OFFS); + writel(hwirq, mpic->base + MPIC_INT_SET_ENABLE); irq_set_status_flags(virq, IRQ_LEVEL); =20 - if (is_percpu_irq(hw)) { + if (mpic_is_percpu_irq(hwirq)) { irq_set_percpu_devid(virq); - irq_set_chip_and_handler(virq, &armada_370_xp_irq_chip, - handle_percpu_devid_irq); + irq_set_chip_and_handler(virq, &mpic_irq_chip, handle_percpu_devid_irq); } else { - irq_set_chip_and_handler(virq, &armada_370_xp_irq_chip, - handle_level_irq); + irq_set_chip_and_handler(virq, &mpic_irq_chip, handle_level_irq); irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq))); } irq_set_probe(virq); - return 0; } =20 -static const struct irq_domain_ops armada_370_xp_mpic_irq_ops =3D { - .map =3D armada_370_xp_mpic_irq_map, - .xlate =3D irq_domain_xlate_onecell, +static const struct irq_domain_ops mpic_irq_ops =3D { + .map =3D mpic_irq_map, + .xlate =3D irq_domain_xlate_onecell, }; =20 #ifdef CONFIG_PCI_MSI -static void armada_370_xp_handle_msi_irq(struct pt_regs *regs, bool is_chain= ed) +static void mpic_handle_msi_irq(struct mpic *mpic) { - u32 msimask, msinr; - - msimask =3D readl_relaxed(per_cpu_int_base + - ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS); - msimask &=3D msi_doorbell_mask(); + unsigned long cause; + unsigned int i; =20 - writel(~msimask, per_cpu_int_base + - ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS); + cause =3D readl_relaxed(mpic->per_cpu + MPIC_IN_DRBEL_CAUSE); + cause &=3D mpic->msi_doorbell_mask; + writel(~cause, mpic->per_cpu + MPIC_IN_DRBEL_CAUSE); =20 - for (msinr =3D msi_doorbell_start(); - msinr < msi_doorbell_end(); msinr++) { - unsigned int irq; + for_each_set_bit(i, &cause, BITS_PER_LONG) + generic_handle_domain_irq(mpic->msi_inner_domain, i - mpic->msi_doorbell_s= tart); +} +#else +static void mpic_handle_msi_irq(struct mpic *mpic) {} +#endif =20 - if (!(msimask & BIT(msinr))) - continue; +#ifdef CONFIG_SMP +static void mpic_handle_ipi_irq(struct mpic *mpic) +{ + unsigned long cause; + irq_hw_number_t i; =20 - irq =3D msinr - msi_doorbell_start(); + cause =3D readl_relaxed(mpic->per_cpu + MPIC_IN_DRBEL_CAUSE); + cause &=3D IPI_DOORBELL_MASK; =20 - generic_handle_domain_irq(armada_370_xp_msi_inner_domain, irq); - } + for_each_set_bit(i, &cause, IPI_DOORBELL_NR) + generic_handle_domain_irq(mpic->ipi_domain, i); } #else -static void armada_370_xp_handle_msi_irq(struct pt_regs *r, bool b) {} +static inline void mpic_handle_ipi_irq(struct mpic *mpic) {} #endif =20 -static void armada_370_xp_mpic_handle_cascade_irq(struct irq_desc *desc) +static void mpic_handle_cascade_irq(struct irq_desc *desc) { + struct mpic *mpic =3D irq_desc_get_handler_data(desc); struct irq_chip *chip =3D irq_desc_get_chip(desc); - unsigned long irqmap, irqn, irqsrc, cpuid; + unsigned long cause; + u32 irqsrc, cpuid; + irq_hw_number_t i; =20 chained_irq_enter(chip, desc); =20 - irqmap =3D readl_relaxed(per_cpu_int_base + ARMADA_375_PPI_CAUSE); + cause =3D readl_relaxed(mpic->per_cpu + MPIC_PPI_CAUSE); cpuid =3D cpu_logical_map(smp_processor_id()); =20 - for_each_set_bit(irqn, &irqmap, BITS_PER_LONG) { - irqsrc =3D readl_relaxed(main_int_base + - ARMADA_370_XP_INT_SOURCE_CTL(irqn)); + for_each_set_bit(i, &cause, MPIC_PER_CPU_IRQS_NR) { + irqsrc =3D readl_relaxed(mpic->base + MPIC_INT_SOURCE_CTL(i)); =20 /* Check if the interrupt is not masked on current CPU. * Test IRQ (0-1) and FIQ (8-9) mask bits. */ - if (!(irqsrc & ARMADA_370_XP_INT_IRQ_FIQ_MASK(cpuid))) + if (!(irqsrc & MPIC_INT_IRQ_FIQ_MASK(cpuid))) continue; =20 - if (irqn =3D=3D 0 || irqn =3D=3D 1) { - armada_370_xp_handle_msi_irq(NULL, true); + if (i =3D=3D 0 || i =3D=3D 1) { + mpic_handle_msi_irq(mpic); continue; } =20 - generic_handle_domain_irq(armada_370_xp_mpic_domain, irqn); + generic_handle_domain_irq(mpic->domain, i); } =20 chained_irq_exit(chip, desc); } =20 -static void __exception_irq_entry -armada_370_xp_handle_irq(struct pt_regs *regs) +static void __exception_irq_entry mpic_handle_irq(struct pt_regs *regs) { - u32 irqstat, irqnr; + struct mpic *mpic =3D irq_get_default_host()->host_data; + irq_hw_number_t i; + u32 irqstat; =20 do { - irqstat =3D readl_relaxed(per_cpu_int_base + - ARMADA_370_XP_CPU_INTACK_OFFS); - irqnr =3D irqstat & 0x3FF; + irqstat =3D readl_relaxed(mpic->per_cpu + MPIC_CPU_INTACK); + i =3D FIELD_GET(MPIC_CPU_INTACK_IID_MASK, irqstat); =20 - if (irqnr > 1022) + if (i > 1022) break; =20 - if (irqnr > 1) { - generic_handle_domain_irq(armada_370_xp_mpic_domain, - irqnr); - continue; - } + if (i > 1) + generic_handle_domain_irq(mpic->domain, i); =20 /* MSI handling */ - if (irqnr =3D=3D 1) - armada_370_xp_handle_msi_irq(regs, false); + if (i =3D=3D 1) + mpic_handle_msi_irq(mpic); =20 -#ifdef CONFIG_SMP /* IPI Handling */ - if (irqnr =3D=3D 0) { - unsigned long ipimask; - int ipi; - - ipimask =3D readl_relaxed(per_cpu_int_base + - ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS) - & IPI_DOORBELL_MASK; - - for_each_set_bit(ipi, &ipimask, IPI_DOORBELL_END) - generic_handle_domain_irq(ipi_domain, ipi); - } -#endif - + if (i =3D=3D 0) + mpic_handle_ipi_irq(mpic); } while (1); } =20 -static int armada_370_xp_mpic_suspend(void) +static int mpic_suspend(void) { - doorbell_mask_reg =3D readl(per_cpu_int_base + - ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + struct mpic *mpic =3D mpic_data; + + mpic->doorbell_mask =3D readl(mpic->per_cpu + MPIC_IN_DRBEL_MASK); + return 0; } =20 -static void armada_370_xp_mpic_resume(void) +static void mpic_resume(void) { + struct mpic *mpic =3D mpic_data; bool src0, src1; - int nirqs; - irq_hw_number_t irq; =20 /* Re-enable interrupts */ - nirqs =3D (readl(main_int_base + ARMADA_370_XP_INT_CONTROL) >> 2) & 0x3ff; - for (irq =3D 0; irq < nirqs; irq++) { - struct irq_data *data; - int virq; + for (irq_hw_number_t i =3D 0; i < mpic->domain->hwirq_max; i++) { + unsigned int virq =3D irq_linear_revmap(mpic->domain, i); + struct irq_data *d; =20 - virq =3D irq_linear_revmap(armada_370_xp_mpic_domain, irq); - if (virq =3D=3D 0) + if (!virq) continue; =20 - data =3D irq_get_irq_data(virq); + d =3D irq_get_irq_data(virq); =20 - if (!is_percpu_irq(irq)) { + if (!mpic_is_percpu_irq(i)) { /* Non per-CPU interrupts */ - writel(irq, per_cpu_int_base + - ARMADA_370_XP_INT_CLEAR_MASK_OFFS); - if (!irqd_irq_disabled(data)) - armada_370_xp_irq_unmask(data); + writel(i, mpic->per_cpu + MPIC_INT_CLEAR_MASK); + if (!irqd_irq_disabled(d)) + mpic_irq_unmask(d); } else { /* Per-CPU interrupts */ - writel(irq, main_int_base + - ARMADA_370_XP_INT_SET_ENABLE_OFFS); + writel(i, mpic->base + MPIC_INT_SET_ENABLE); =20 /* - * Re-enable on the current CPU, - * armada_xp_mpic_reenable_percpu() will take - * care of secondary CPUs when they come up. + * Re-enable on the current CPU, mpic_reenable_percpu() + * will take care of secondary CPUs when they come up. */ if (irq_percpu_is_enabled(virq)) - armada_370_xp_irq_unmask(data); + mpic_irq_unmask(d); } } =20 /* Reconfigure doorbells for IPIs and MSIs */ - writel(doorbell_mask_reg, - per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + writel(mpic->doorbell_mask, mpic->per_cpu + MPIC_IN_DRBEL_MASK); =20 - if (is_ipi_available()) { - src0 =3D doorbell_mask_reg & IPI_DOORBELL_MASK; - src1 =3D doorbell_mask_reg & PCI_MSI_DOORBELL_MASK; + if (mpic_is_ipi_available(mpic)) { + src0 =3D mpic->doorbell_mask & IPI_DOORBELL_MASK; + src1 =3D mpic->doorbell_mask & PCI_MSI_DOORBELL_MASK; } else { - src0 =3D doorbell_mask_reg & PCI_MSI_FULL_DOORBELL_SRC0_MASK; - src1 =3D doorbell_mask_reg & PCI_MSI_FULL_DOORBELL_SRC1_MASK; + src0 =3D mpic->doorbell_mask & PCI_MSI_FULL_DOORBELL_SRC0_MASK; + src1 =3D mpic->doorbell_mask & PCI_MSI_FULL_DOORBELL_SRC1_MASK; } =20 if (src0) - writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); + writel(0, mpic->per_cpu + MPIC_INT_CLEAR_MASK); if (src1) - writel(1, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); + writel(1, mpic->per_cpu + MPIC_INT_CLEAR_MASK); =20 - if (is_ipi_available()) - ipi_resume(); + if (mpic_is_ipi_available(mpic)) + mpic_ipi_resume(mpic); } =20 -static struct syscore_ops armada_370_xp_mpic_syscore_ops =3D { - .suspend =3D armada_370_xp_mpic_suspend, - .resume =3D armada_370_xp_mpic_resume, +static struct syscore_ops mpic_syscore_ops =3D { + .suspend =3D mpic_suspend, + .resume =3D mpic_resume, }; =20 -static int __init armada_370_xp_mpic_of_init(struct device_node *node, - struct device_node *parent) +static int __init mpic_map_region(struct device_node *np, int index, + void __iomem **base, phys_addr_t *phys_base) { - struct resource main_int_res, per_cpu_int_res; - int nr_irqs, i; - u32 control; + struct resource res; + int err; + + err =3D of_address_to_resource(np, index, &res); + if (WARN_ON(err)) + goto fail; + + if (WARN_ON(!request_mem_region(res.start, resource_size(&res), np->full_na= me))) { + err =3D -EBUSY; + goto fail; + } + + *base =3D ioremap(res.start, resource_size(&res)); + if (WARN_ON(!*base)) { + err =3D -ENOMEM; + goto fail; + } =20 - BUG_ON(of_address_to_resource(node, 0, &main_int_res)); - BUG_ON(of_address_to_resource(node, 1, &per_cpu_int_res)); + if (phys_base) + *phys_base =3D res.start; =20 - BUG_ON(!request_mem_region(main_int_res.start, - resource_size(&main_int_res), - node->full_name)); - BUG_ON(!request_mem_region(per_cpu_int_res.start, - resource_size(&per_cpu_int_res), - node->full_name)); + return 0; + +fail: + pr_err("%pOF: Unable to map resource %d: %pE\n", np, index, ERR_PTR(err)); + return err; +} =20 - main_int_base =3D ioremap(main_int_res.start, - resource_size(&main_int_res)); - BUG_ON(!main_int_base); +static int __init mpic_of_init(struct device_node *node, struct device_node = *parent) +{ + phys_addr_t phys_base; + unsigned int nr_irqs; + struct mpic *mpic; + int err; + + mpic =3D kzalloc(sizeof(*mpic), GFP_KERNEL); + if (WARN_ON(!mpic)) + return -ENOMEM; =20 - per_cpu_int_base =3D ioremap(per_cpu_int_res.start, - resource_size(&per_cpu_int_res)); - BUG_ON(!per_cpu_int_base); + mpic_data =3D mpic; =20 - control =3D readl(main_int_base + ARMADA_370_XP_INT_CONTROL); - nr_irqs =3D (control >> 2) & 0x3ff; + err =3D mpic_map_region(node, 0, &mpic->base, &phys_base); + if (err) + return err; =20 - for (i =3D 0; i < nr_irqs; i++) - writel(i, main_int_base + ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS); + err =3D mpic_map_region(node, 1, &mpic->per_cpu, NULL); + if (err) + return err; =20 - armada_370_xp_mpic_domain =3D - irq_domain_add_linear(node, nr_irqs, - &armada_370_xp_mpic_irq_ops, NULL); - BUG_ON(!armada_370_xp_mpic_domain); - irq_domain_update_bus_token(armada_370_xp_mpic_domain, DOMAIN_BUS_WIRED); + nr_irqs =3D FIELD_GET(MPIC_INT_CONTROL_NUMINT_MASK, readl(mpic->base + MPIC= _INT_CONTROL)); + + for (irq_hw_number_t i =3D 0; i < nr_irqs; i++) + writel(i, mpic->base + MPIC_INT_CLEAR_ENABLE); + + /* + * Initialize mpic->parent_irq before calling any other functions, since + * it is used to distinguish between IPI and non-IPI platforms. + */ + mpic->parent_irq =3D irq_of_parse_and_map(node, 0); =20 /* - * Initialize parent_irq before calling any other functions, since it is - * used to distinguish between IPI and non-IPI platforms. + * On non-IPI platforms the driver currently supports only the per-CPU + * interrupts (the first 29 interrupts). See mpic_handle_cascade_irq(). */ - parent_irq =3D irq_of_parse_and_map(node, 0); + if (!mpic_is_ipi_available(mpic)) + nr_irqs =3D MPIC_PER_CPU_IRQS_NR; + + mpic->domain =3D irq_domain_add_linear(node, nr_irqs, &mpic_irq_ops, mpic); + if (!mpic->domain) { + pr_err("%pOF: Unable to add IRQ domain\n", node); + return -ENOMEM; + } + + irq_domain_update_bus_token(mpic->domain, DOMAIN_BUS_WIRED); =20 /* Setup for the boot CPU */ - armada_xp_mpic_perf_init(); - armada_xp_mpic_smp_cpu_init(); + mpic_perf_init(mpic); + mpic_smp_cpu_init(mpic); =20 - armada_370_xp_msi_init(node, main_int_res.start); + err =3D mpic_msi_init(mpic, node, phys_base); + if (err) { + pr_err("%pOF: Unable to initialize MSI domain\n", node); + return err; + } =20 - if (parent_irq <=3D 0) { - irq_set_default_host(armada_370_xp_mpic_domain); - set_handle_irq(armada_370_xp_handle_irq); + if (mpic_is_ipi_available(mpic)) { + irq_set_default_host(mpic->domain); + set_handle_irq(mpic_handle_irq); #ifdef CONFIG_SMP - armada_xp_ipi_init(node); + err =3D mpic_ipi_init(mpic, node); + if (err) { + pr_err("%pOF: Unable to initialize IPI domain\n", node); + return err; + } + cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_ARMADA_XP_STARTING, "irqchip/armada/ipi:starting", - armada_xp_mpic_starting_cpu, NULL); + mpic_starting_cpu, NULL); #endif } else { #ifdef CONFIG_SMP @@ -882,13 +899,13 @@ static int __init armada_370_xp_mpic_of_init(struct dev= ice_node *node, "irqchip/armada/cascade:starting", mpic_cascaded_starting_cpu, NULL); #endif - irq_set_chained_handler(parent_irq, - armada_370_xp_mpic_handle_cascade_irq); + irq_set_chained_handler_and_data(mpic->parent_irq, + mpic_handle_cascade_irq, mpic); } =20 - register_syscore_ops(&armada_370_xp_mpic_syscore_ops); + register_syscore_ops(&mpic_syscore_ops); =20 return 0; } =20 -IRQCHIP_DECLARE(armada_370_xp_mpic, "marvell,mpic", armada_370_xp_mpic_of_in= it); +IRQCHIP_DECLARE(marvell_mpic, "marvell,mpic", mpic_of_init); diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c index 4631f6847953..3839ad79ad31 100644 --- a/drivers/irqchip/irq-atmel-aic.c +++ b/drivers/irqchip/irq-atmel-aic.c @@ -57,8 +57,7 @@ =20 static struct irq_domain *aic_domain; =20 -static asmlinkage void __exception_irq_entry -aic_handle(struct pt_regs *regs) +static void __exception_irq_entry aic_handle(struct pt_regs *regs) { struct irq_domain_chip_generic *dgc =3D aic_domain->gc; struct irq_chip_generic *gc =3D dgc->gc[0]; diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic= 5.c index 145535bd7560..c0f55dc7b050 100644 --- a/drivers/irqchip/irq-atmel-aic5.c +++ b/drivers/irqchip/irq-atmel-aic5.c @@ -67,8 +67,7 @@ =20 static struct irq_domain *aic5_domain; =20 -static asmlinkage void __exception_irq_entry -aic5_handle(struct pt_regs *regs) +static void __exception_irq_entry aic5_handle(struct pt_regs *regs) { struct irq_chip_generic *bgc =3D irq_get_domain_generic_chip(aic5_domain, 0= ); u32 irqnr; diff --git a/drivers/irqchip/irq-clps711x.c b/drivers/irqchip/irq-clps711x.c index e731e0784f7e..806ebb1de201 100644 --- a/drivers/irqchip/irq-clps711x.c +++ b/drivers/irqchip/irq-clps711x.c @@ -69,7 +69,7 @@ static struct { struct irq_domain_ops ops; } *clps711x_intc; =20 -static asmlinkage void __exception_irq_entry clps711x_irqh(struct pt_regs *r= egs) +static void __exception_irq_entry clps711x_irqh(struct pt_regs *regs) { u32 irqstat; =20 diff --git a/drivers/irqchip/irq-davinci-cp-intc.c b/drivers/irqchip/irq-davi= nci-cp-intc.c index 7482c8ed34b2..f4f8e9fadbbf 100644 --- a/drivers/irqchip/irq-davinci-cp-intc.c +++ b/drivers/irqchip/irq-davinci-cp-intc.c @@ -116,8 +116,7 @@ static struct irq_chip davinci_cp_intc_irq_chip =3D { .flags =3D IRQCHIP_SKIP_SET_WAKE, }; =20 -static asmlinkage void __exception_irq_entry -davinci_cp_intc_handle_irq(struct pt_regs *regs) +static void __exception_irq_entry davinci_cp_intc_handle_irq(struct pt_regs = *regs) { int gpir, irqnr, none; =20 diff --git a/drivers/irqchip/irq-ftintc010.c b/drivers/irqchip/irq-ftintc010.c index 359efc1d1be7..b91c358ea6db 100644 --- a/drivers/irqchip/irq-ftintc010.c +++ b/drivers/irqchip/irq-ftintc010.c @@ -125,7 +125,7 @@ static struct irq_chip ft010_irq_chip =3D { /* Local static for the IRQ entry call */ static struct ft010_irq_data firq; =20 -static asmlinkage void __exception_irq_entry ft010_irqchip_handle_irq(struct= pt_regs *regs) +static void __exception_irq_entry ft010_irqchip_handle_irq(struct pt_regs *r= egs) { struct ft010_irq_data *f =3D &firq; int irq; diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index c19083bfb943..0efa3443c323 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -930,7 +930,7 @@ static void __gic_handle_irq_from_irqsoff(struct pt_regs = *regs) __gic_handle_nmi(irqnr, regs); } =20 -static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *= regs) +static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) { if (unlikely(gic_supports_nmi() && !interrupts_enabled(regs))) __gic_handle_irq_from_irqsoff(regs); diff --git a/drivers/irqchip/irq-gic-v4.c b/drivers/irqchip/irq-gic-v4.c index ca32ac19d284..58c28895f8c4 100644 --- a/drivers/irqchip/irq-gic-v4.c +++ b/drivers/irqchip/irq-gic-v4.c @@ -97,7 +97,7 @@ bool gic_cpuif_has_vsgi(void) =20 fld =3D cpuid_feature_extract_unsigned_field(reg, ID_AA64PFR0_EL1_GIC_SHIFT= ); =20 - return fld >=3D 0x3; + return fld >=3D ID_AA64PFR0_EL1_GIC_V4P1; } #else bool gic_cpuif_has_vsgi(void) diff --git a/drivers/irqchip/irq-ixp4xx.c b/drivers/irqchip/irq-ixp4xx.c index 5fba907b9052..f23b02f62a5c 100644 --- a/drivers/irqchip/irq-ixp4xx.c +++ b/drivers/irqchip/irq-ixp4xx.c @@ -105,8 +105,7 @@ static void ixp4xx_irq_unmask(struct irq_data *d) } } =20 -static asmlinkage void __exception_irq_entry -ixp4xx_handle_irq(struct pt_regs *regs) +static void __exception_irq_entry ixp4xx_handle_irq(struct pt_regs *regs) { struct ixp4xx_irq *ixi =3D &ixirq; unsigned long status; diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loong= arch-avec.c new file mode 100644 index 000000000000..0f6e465dd309 --- /dev/null +++ b/drivers/irqchip/irq-loongarch-avec.c @@ -0,0 +1,425 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2020-2024 Loongson Technologies, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "irq-msi-lib.h" +#include "irq-loongson.h" + +#define VECTORS_PER_REG 64 +#define IRR_VECTOR_MASK 0xffUL +#define IRR_INVALID_MASK 0x80000000UL +#define AVEC_MSG_OFFSET 0x100000 + +#ifdef CONFIG_SMP +struct pending_list { + struct list_head head; +}; + +static struct cpumask intersect_mask; +static DEFINE_PER_CPU(struct pending_list, pending_list); +#endif + +static DEFINE_PER_CPU(struct irq_desc * [NR_VECTORS], irq_map); + +struct avecintc_chip { + raw_spinlock_t lock; + struct fwnode_handle *fwnode; + struct irq_domain *domain; + struct irq_matrix *vector_matrix; + phys_addr_t msi_base_addr; +}; + +static struct avecintc_chip loongarch_avec; + +struct avecintc_data { + struct list_head entry; + unsigned int cpu; + unsigned int vec; + unsigned int prev_cpu; + unsigned int prev_vec; + unsigned int moving; +}; + +static inline void avecintc_ack_irq(struct irq_data *d) +{ +} + +static inline void avecintc_mask_irq(struct irq_data *d) +{ +} + +static inline void avecintc_unmask_irq(struct irq_data *d) +{ +} + +#ifdef CONFIG_SMP +static inline void pending_list_init(int cpu) +{ + struct pending_list *plist =3D per_cpu_ptr(&pending_list, cpu); + + INIT_LIST_HEAD(&plist->head); +} + +static void avecintc_sync(struct avecintc_data *adata) +{ + struct pending_list *plist; + + if (cpu_online(adata->prev_cpu)) { + plist =3D per_cpu_ptr(&pending_list, adata->prev_cpu); + list_add_tail(&adata->entry, &plist->head); + adata->moving =3D 1; + mp_ops.send_ipi_single(adata->prev_cpu, ACTION_CLEAR_VECTOR); + } +} + +static int avecintc_set_affinity(struct irq_data *data, const struct cpumask= *dest, bool force) +{ + int cpu, ret, vector; + struct avecintc_data *adata; + + scoped_guard(raw_spinlock, &loongarch_avec.lock) { + adata =3D irq_data_get_irq_chip_data(data); + + if (adata->moving) + return -EBUSY; + + if (cpu_online(adata->cpu) && cpumask_test_cpu(adata->cpu, dest)) + return 0; + + cpumask_and(&intersect_mask, dest, cpu_online_mask); + + ret =3D irq_matrix_alloc(loongarch_avec.vector_matrix, &intersect_mask, fa= lse, &cpu); + if (ret < 0) + return ret; + + vector =3D ret; + adata->cpu =3D cpu; + adata->vec =3D vector; + per_cpu_ptr(irq_map, adata->cpu)[adata->vec] =3D irq_data_to_desc(data); + avecintc_sync(adata); + } + + irq_data_update_effective_affinity(data, cpumask_of(cpu)); + + return IRQ_SET_MASK_OK; +} + +static int avecintc_cpu_online(unsigned int cpu) +{ + if (!loongarch_avec.vector_matrix) + return 0; + + guard(raw_spinlock)(&loongarch_avec.lock); + + irq_matrix_online(loongarch_avec.vector_matrix); + + pending_list_init(cpu); + + return 0; +} + +static int avecintc_cpu_offline(unsigned int cpu) +{ + struct pending_list *plist =3D per_cpu_ptr(&pending_list, cpu); + + if (!loongarch_avec.vector_matrix) + return 0; + + guard(raw_spinlock)(&loongarch_avec.lock); + + if (!list_empty(&plist->head)) + pr_warn("CPU#%d vector is busy\n", cpu); + + irq_matrix_offline(loongarch_avec.vector_matrix); + + return 0; +} + +void complete_irq_moving(void) +{ + struct pending_list *plist =3D this_cpu_ptr(&pending_list); + struct avecintc_data *adata, *tdata; + int cpu, vector, bias; + uint64_t isr; + + guard(raw_spinlock)(&loongarch_avec.lock); + + list_for_each_entry_safe(adata, tdata, &plist->head, entry) { + cpu =3D adata->prev_cpu; + vector =3D adata->prev_vec; + bias =3D vector / VECTORS_PER_REG; + switch (bias) { + case 0: + isr =3D csr_read64(LOONGARCH_CSR_ISR0); + break; + case 1: + isr =3D csr_read64(LOONGARCH_CSR_ISR1); + break; + case 2: + isr =3D csr_read64(LOONGARCH_CSR_ISR2); + break; + case 3: + isr =3D csr_read64(LOONGARCH_CSR_ISR3); + break; + } + + if (isr & (1UL << (vector % VECTORS_PER_REG))) { + mp_ops.send_ipi_single(cpu, ACTION_CLEAR_VECTOR); + continue; + } + list_del(&adata->entry); + irq_matrix_free(loongarch_avec.vector_matrix, cpu, vector, false); + this_cpu_write(irq_map[vector], NULL); + adata->moving =3D 0; + adata->prev_cpu =3D adata->cpu; + adata->prev_vec =3D adata->vec; + } +} +#endif + +static void avecintc_compose_msi_msg(struct irq_data *d, struct msi_msg *msg) +{ + struct avecintc_data *adata =3D irq_data_get_irq_chip_data(d); + + msg->address_hi =3D 0x0; + msg->address_lo =3D (loongarch_avec.msi_base_addr | (adata->vec & 0xff) << = 4) + | ((cpu_logical_map(adata->cpu & 0xffff)) << 12); + msg->data =3D 0x0; +} + +static struct irq_chip avec_irq_controller =3D { + .name =3D "AVECINTC", + .irq_ack =3D avecintc_ack_irq, + .irq_mask =3D avecintc_mask_irq, + .irq_unmask =3D avecintc_unmask_irq, +#ifdef CONFIG_SMP + .irq_set_affinity =3D avecintc_set_affinity, +#endif + .irq_compose_msi_msg =3D avecintc_compose_msi_msg, +}; + +static void avecintc_irq_dispatch(struct irq_desc *desc) +{ + struct irq_chip *chip =3D irq_desc_get_chip(desc); + struct irq_desc *d; + + chained_irq_enter(chip, desc); + + while (true) { + unsigned long vector =3D csr_read64(LOONGARCH_CSR_IRR); + if (vector & IRR_INVALID_MASK) + break; + + vector &=3D IRR_VECTOR_MASK; + + d =3D this_cpu_read(irq_map[vector]); + if (d) { + generic_handle_irq_desc(d); + } else { + spurious_interrupt(); + pr_warn("Unexpected IRQ occurs on CPU#%d [vector %ld]\n", smp_processor_i= d(), vector); + } + } + + chained_irq_exit(chip, desc); +} + +static int avecintc_alloc_vector(struct irq_data *irqd, struct avecintc_data= *adata) +{ + int cpu, ret; + + guard(raw_spinlock_irqsave)(&loongarch_avec.lock); + + ret =3D irq_matrix_alloc(loongarch_avec.vector_matrix, cpu_online_mask, fal= se, &cpu); + if (ret < 0) + return ret; + + adata->prev_cpu =3D adata->cpu =3D cpu; + adata->prev_vec =3D adata->vec =3D ret; + per_cpu_ptr(irq_map, adata->cpu)[adata->vec] =3D irq_data_to_desc(irqd); + + return 0; +} + +static int avecintc_domain_alloc(struct irq_domain *domain, unsigned int vir= q, + unsigned int nr_irqs, void *arg) +{ + for (unsigned int i =3D 0; i < nr_irqs; i++) { + struct irq_data *irqd =3D irq_domain_get_irq_data(domain, virq + i); + struct avecintc_data *adata =3D kzalloc(sizeof(*adata), GFP_KERNEL); + int ret; + + if (!adata) + return -ENOMEM; + + ret =3D avecintc_alloc_vector(irqd, adata); + if (ret < 0) { + kfree(adata); + return ret; + } + + irq_domain_set_info(domain, virq + i, virq + i, &avec_irq_controller, + adata, handle_edge_irq, NULL, NULL); + irqd_set_single_target(irqd); + irqd_set_affinity_on_activate(irqd); + } + + return 0; +} + +static void avecintc_free_vector(struct irq_data *irqd, struct avecintc_data= *adata) +{ + guard(raw_spinlock_irqsave)(&loongarch_avec.lock); + + per_cpu(irq_map, adata->cpu)[adata->vec] =3D NULL; + irq_matrix_free(loongarch_avec.vector_matrix, adata->cpu, adata->vec, false= ); + +#ifdef CONFIG_SMP + if (!adata->moving) + return; + + per_cpu(irq_map, adata->prev_cpu)[adata->prev_vec] =3D NULL; + irq_matrix_free(loongarch_avec.vector_matrix, adata->prev_cpu, adata->prev_= vec, false); + list_del_init(&adata->entry); +#endif +} + +static void avecintc_domain_free(struct irq_domain *domain, unsigned int vir= q, + unsigned int nr_irqs) +{ + for (unsigned int i =3D 0; i < nr_irqs; i++) { + struct irq_data *d =3D irq_domain_get_irq_data(domain, virq + i); + + if (d) { + struct avecintc_data *adata =3D irq_data_get_irq_chip_data(d); + + avecintc_free_vector(d, adata); + irq_domain_reset_irq_data(d); + kfree(adata); + } + } +} + +static const struct irq_domain_ops avecintc_domain_ops =3D { + .alloc =3D avecintc_domain_alloc, + .free =3D avecintc_domain_free, + .select =3D msi_lib_irq_domain_select, +}; + +static int __init irq_matrix_init(void) +{ + loongarch_avec.vector_matrix =3D irq_alloc_matrix(NR_VECTORS, 0, NR_VECTORS= ); + if (!loongarch_avec.vector_matrix) + return -ENOMEM; + + for (int i =3D 0; i < NR_LEGACY_VECTORS; i++) + irq_matrix_assign_system(loongarch_avec.vector_matrix, i, false); + + irq_matrix_online(loongarch_avec.vector_matrix); + + return 0; +} + +static int __init avecintc_init(struct irq_domain *parent) +{ + int ret, parent_irq; + unsigned long value; + + raw_spin_lock_init(&loongarch_avec.lock); + + loongarch_avec.fwnode =3D irq_domain_alloc_named_fwnode("AVECINTC"); + if (!loongarch_avec.fwnode) { + pr_err("Unable to allocate domain handle\n"); + ret =3D -ENOMEM; + goto out; + } + + loongarch_avec.domain =3D irq_domain_create_tree(loongarch_avec.fwnode, + &avecintc_domain_ops, NULL); + if (!loongarch_avec.domain) { + pr_err("Unable to create IRQ domain\n"); + ret =3D -ENOMEM; + goto out_free_handle; + } + + parent_irq =3D irq_create_mapping(parent, INT_AVEC); + if (!parent_irq) { + pr_err("Failed to mapping hwirq\n"); + ret =3D -EINVAL; + goto out_remove_domain; + } + + ret =3D irq_matrix_init(); + if (ret < 0) { + pr_err("Failed to init irq matrix\n"); + goto out_remove_domain; + } + irq_set_chained_handler_and_data(parent_irq, avecintc_irq_dispatch, NULL); + +#ifdef CONFIG_SMP + pending_list_init(0); + cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_AVECINTC_STARTING, + "irqchip/loongarch/avecintc:starting", + avecintc_cpu_online, avecintc_cpu_offline); +#endif + value =3D iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC); + value |=3D IOCSR_MISC_FUNC_AVEC_EN; + iocsr_write64(value, LOONGARCH_IOCSR_MISC_FUNC); + + return ret; + +out_remove_domain: + irq_domain_remove(loongarch_avec.domain); +out_free_handle: + irq_domain_free_fwnode(loongarch_avec.fwnode); +out: + return ret; +} + +static int __init pch_msi_parse_madt(union acpi_subtable_headers *header, + const unsigned long end) +{ + struct acpi_madt_msi_pic *pchmsi_entry =3D (struct acpi_madt_msi_pic *)head= er; + + loongarch_avec.msi_base_addr =3D pchmsi_entry->msg_address - AVEC_MSG_OFFSE= T; + + return pch_msi_acpi_init_avec(loongarch_avec.domain); +} + +static inline int __init acpi_cascade_irqdomain_init(void) +{ + return acpi_table_parse_madt(ACPI_MADT_TYPE_MSI_PIC, pch_msi_parse_madt, 1); +} + +int __init avecintc_acpi_init(struct irq_domain *parent) +{ + int ret =3D avecintc_init(parent); + if (ret < 0) { + pr_err("Failed to init IRQ domain\n"); + return ret; + } + + ret =3D acpi_cascade_irqdomain_init(); + if (ret < 0) { + pr_err("Failed to init cascade IRQ domain\n"); + return ret; + } + + return ret; +} diff --git a/drivers/irqchip/irq-loongarch-cpu.c b/drivers/irqchip/irq-loonga= rch-cpu.c index 9d8f2c406043..bcbd7fd33178 100644 --- a/drivers/irqchip/irq-loongarch-cpu.c +++ b/drivers/irqchip/irq-loongarch-cpu.c @@ -13,6 +13,8 @@ #include #include =20 +#include "irq-loongson.h" + static struct irq_domain *irq_domain; struct fwnode_handle *cpuintc_handle; =20 @@ -138,7 +140,10 @@ static int __init acpi_cascade_irqdomain_init(void) if (r < 0) return r; =20 - return 0; + if (cpu_has_avecint) + r =3D avecintc_acpi_init(irq_domain); + + return r; } =20 static int __init cpuintc_acpi_init(union acpi_subtable_headers *header, diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loo= ngson-eiointc.c index b1f2080be2be..e24db71a8783 100644 --- a/drivers/irqchip/irq-loongson-eiointc.c +++ b/drivers/irqchip/irq-loongson-eiointc.c @@ -17,6 +17,8 @@ #include #include =20 +#include "irq-loongson.h" + #define EIOINTC_REG_NODEMAP 0x14a0 #define EIOINTC_REG_IPMAP 0x14c0 #define EIOINTC_REG_ENABLE 0x1600 @@ -360,6 +362,9 @@ static int __init acpi_cascade_irqdomain_init(void) if (r < 0) return r; =20 + if (cpu_has_avecint) + return 0; + r =3D acpi_table_parse_madt(ACPI_MADT_TYPE_MSI_PIC, pch_msi_parse_madt, 1); if (r < 0) return r; @@ -396,8 +401,8 @@ static int __init eiointc_init(struct eiointc_priv *priv,= int parent_irq, =20 if (nr_pics =3D=3D 1) { register_syscore_ops(&eiointc_syscore_ops); - cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_LOONGARCH_STARTING, - "irqchip/loongarch/intc:starting", + cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_EIOINTC_STARTING, + "irqchip/loongarch/eiointc:starting", eiointc_router_init, NULL); } =20 diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loong= son-htvec.c index 0bff728b25e3..5da02c7ad0b3 100644 --- a/drivers/irqchip/irq-loongson-htvec.c +++ b/drivers/irqchip/irq-loongson-htvec.c @@ -17,6 +17,8 @@ #include #include =20 +#include "irq-loongson.h" + /* Registers */ #define HTVEC_EN_OFF 0x20 #define HTVEC_MAX_PARENT_IRQ 8 diff --git a/drivers/irqchip/irq-loongson-liointc.c b/drivers/irqchip/irq-loo= ngson-liointc.c index 7c4fe7ab4b83..2b1bd4a96665 100644 --- a/drivers/irqchip/irq-loongson-liointc.c +++ b/drivers/irqchip/irq-loongson-liointc.c @@ -22,6 +22,8 @@ #include #endif =20 +#include "irq-loongson.h" + #define LIOINTC_CHIP_IRQ 32 #define LIOINTC_NUM_PARENT 4 #define LIOINTC_NUM_CORES 4 diff --git a/drivers/irqchip/irq-loongson-pch-lpc.c b/drivers/irqchip/irq-loo= ngson-pch-lpc.c index 9b35492fb6be..2d4c3ec128b8 100644 --- a/drivers/irqchip/irq-loongson-pch-lpc.c +++ b/drivers/irqchip/irq-loongson-pch-lpc.c @@ -15,6 +15,8 @@ #include #include =20 +#include "irq-loongson.h" + /* Registers */ #define LPC_INT_CTL 0x00 #define LPC_INT_ENA 0x04 diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loo= ngson-pch-msi.c index dd4d699170f4..bd337ecddb40 100644 --- a/drivers/irqchip/irq-loongson-pch-msi.c +++ b/drivers/irqchip/irq-loongson-pch-msi.c @@ -15,6 +15,9 @@ #include #include =20 +#include "irq-msi-lib.h" +#include "irq-loongson.h" + static int nr_pics; =20 struct pch_msi_data { @@ -27,26 +30,6 @@ struct pch_msi_data { =20 static struct fwnode_handle *pch_msi_handle[MAX_IO_PICS]; =20 -static void pch_msi_mask_msi_irq(struct irq_data *d) -{ - pci_msi_mask_irq(d); - irq_chip_mask_parent(d); -} - -static void pch_msi_unmask_msi_irq(struct irq_data *d) -{ - irq_chip_unmask_parent(d); - pci_msi_unmask_irq(d); -} - -static struct irq_chip pch_msi_irq_chip =3D { - .name =3D "PCH PCI MSI", - .irq_mask =3D pch_msi_mask_msi_irq, - .irq_unmask =3D pch_msi_unmask_msi_irq, - .irq_ack =3D irq_chip_ack_parent, - .irq_set_affinity =3D irq_chip_set_affinity_parent, -}; - static int pch_msi_allocate_hwirq(struct pch_msi_data *priv, int num_req) { int first; @@ -85,12 +68,6 @@ static void pch_msi_compose_msi_msg(struct irq_data *data, msg->data =3D data->hwirq; } =20 -static struct msi_domain_info pch_msi_domain_info =3D { - .flags =3D MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS | - MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX, - .chip =3D &pch_msi_irq_chip, -}; - static struct irq_chip middle_irq_chip =3D { .name =3D "PCH MSI", .irq_mask =3D irq_chip_mask_parent, @@ -155,13 +132,31 @@ static void pch_msi_middle_domain_free(struct irq_domai= n *domain, static const struct irq_domain_ops pch_msi_middle_domain_ops =3D { .alloc =3D pch_msi_middle_domain_alloc, .free =3D pch_msi_middle_domain_free, + .select =3D msi_lib_irq_domain_select, +}; + +#define PCH_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \ + MSI_FLAG_USE_DEF_CHIP_OPS | \ + MSI_FLAG_PCI_MSI_MASK_PARENT) + +#define PCH_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK | \ + MSI_FLAG_PCI_MSIX | \ + MSI_FLAG_MULTI_PCI_MSI) + +static struct msi_parent_ops pch_msi_parent_ops =3D { + .required_flags =3D PCH_MSI_FLAGS_REQUIRED, + .supported_flags =3D PCH_MSI_FLAGS_SUPPORTED, + .bus_select_mask =3D MATCH_PCI_MSI, + .bus_select_token =3D DOMAIN_BUS_NEXUS, + .prefix =3D "PCH-", + .init_dev_msi_info =3D msi_lib_init_dev_msi_info, }; =20 static int pch_msi_init_domains(struct pch_msi_data *priv, struct irq_domain *parent, struct fwnode_handle *domain_handle) { - struct irq_domain *middle_domain, *msi_domain; + struct irq_domain *middle_domain; =20 middle_domain =3D irq_domain_create_hierarchy(parent, 0, priv->num_irqs, domain_handle, @@ -174,14 +169,8 @@ static int pch_msi_init_domains(struct pch_msi_data *pri= v, =20 irq_domain_update_bus_token(middle_domain, DOMAIN_BUS_NEXUS); =20 - msi_domain =3D pci_msi_create_irq_domain(domain_handle, - &pch_msi_domain_info, - middle_domain); - if (!msi_domain) { - pr_err("Failed to create PCI MSI domain\n"); - irq_domain_remove(middle_domain); - return -ENOMEM; - } + middle_domain->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + middle_domain->msi_parent_ops =3D &pch_msi_parent_ops; =20 return 0; } @@ -266,17 +255,17 @@ IRQCHIP_DECLARE(pch_msi, "loongson,pch-msi-1.0", pch_ms= i_of_init); #ifdef CONFIG_ACPI struct fwnode_handle *get_pch_msi_handle(int pci_segment) { - int i; + if (cpu_has_avecint) + return pch_msi_handle[0]; =20 - for (i =3D 0; i < MAX_IO_PICS; i++) { + for (int i =3D 0; i < MAX_IO_PICS; i++) { if (msi_group[i].pci_segment =3D=3D pci_segment) return pch_msi_handle[i]; } - return NULL; + return pch_msi_handle[0]; } =20 -int __init pch_msi_acpi_init(struct irq_domain *parent, - struct acpi_madt_msi_pic *acpi_pchmsi) +int __init pch_msi_acpi_init(struct irq_domain *parent, struct acpi_madt_msi= _pic *acpi_pchmsi) { int ret; struct fwnode_handle *domain_handle; @@ -289,4 +278,18 @@ int __init pch_msi_acpi_init(struct irq_domain *parent, =20 return ret; } + +int __init pch_msi_acpi_init_avec(struct irq_domain *parent) +{ + if (pch_msi_handle[0]) + return 0; + + pch_msi_handle[0] =3D parent->fwnode; + irq_domain_update_bus_token(parent, DOMAIN_BUS_NEXUS); + + parent->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + parent->msi_parent_ops =3D &pch_msi_parent_ops; + + return 0; +} #endif diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loo= ngson-pch-pic.c index cbaef65e804c..69efda35a8e7 100644 --- a/drivers/irqchip/irq-loongson-pch-pic.c +++ b/drivers/irqchip/irq-loongson-pch-pic.c @@ -17,6 +17,8 @@ #include #include =20 +#include "irq-loongson.h" + /* Registers */ #define PCH_PIC_MASK 0x20 #define PCH_PIC_HTMSI_EN 0x40 diff --git a/drivers/irqchip/irq-loongson.h b/drivers/irqchip/irq-loongson.h new file mode 100644 index 000000000000..11fa138d1f44 --- /dev/null +++ b/drivers/irqchip/irq-loongson.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2024 Loongson Technology Corporation Limited + */ + +#ifndef _DRIVERS_IRQCHIP_IRQ_LOONGSON_H +#define _DRIVERS_IRQCHIP_IRQ_LOONGSON_H + +int find_pch_pic(u32 gsi); + +int liointc_acpi_init(struct irq_domain *parent, + struct acpi_madt_lio_pic *acpi_liointc); +int eiointc_acpi_init(struct irq_domain *parent, + struct acpi_madt_eio_pic *acpi_eiointc); +int avecintc_acpi_init(struct irq_domain *parent); + +int htvec_acpi_init(struct irq_domain *parent, + struct acpi_madt_ht_pic *acpi_htvec); +int pch_lpc_acpi_init(struct irq_domain *parent, + struct acpi_madt_lpc_pic *acpi_pchlpc); +int pch_pic_acpi_init(struct irq_domain *parent, + struct acpi_madt_bio_pic *acpi_pchpic); +int pch_msi_acpi_init(struct irq_domain *parent, + struct acpi_madt_msi_pic *acpi_pchmsi); +int pch_msi_acpi_init_avec(struct irq_domain *parent); + +#endif /* _DRIVERS_IRQCHIP_IRQ_LOONGSON_H */ diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c index 093fd42893a7..12919836dadb 100644 --- a/drivers/irqchip/irq-mbigen.c +++ b/drivers/irqchip/irq-mbigen.c @@ -222,37 +222,27 @@ static int mbigen_of_create_domain(struct platform_devi= ce *pdev, struct mbigen_device *mgn_chip) { struct platform_device *child; - struct device_node *np; u32 num_pins; - int ret =3D 0; =20 - for_each_child_of_node(pdev->dev.of_node, np) { + for_each_child_of_node_scoped(pdev->dev.of_node, np) { if (!of_property_read_bool(np, "interrupt-controller")) continue; =20 child =3D of_platform_device_create(np, NULL, NULL); - if (!child) { - ret =3D -ENOMEM; - break; - } + if (!child) + return -ENOMEM; =20 if (of_property_read_u32(child->dev.of_node, "num-pins", &num_pins) < 0) { dev_err(&pdev->dev, "No num-pins property\n"); - ret =3D -EINVAL; - break; + return -EINVAL; } =20 - if (!mbigen_create_device_domain(&child->dev, num_pins, mgn_chip)) { - ret =3D -ENOMEM; - break; - } + if (!mbigen_create_device_domain(&child->dev, num_pins, mgn_chip)) + return -ENOMEM; } =20 - if (ret) - of_node_put(np); - - return ret; + return 0; } =20 #ifdef CONFIG_ACPI diff --git a/drivers/irqchip/irq-omap-intc.c b/drivers/irqchip/irq-omap-intc.c index dc82162ba763..ad84a2f03368 100644 --- a/drivers/irqchip/irq-omap-intc.c +++ b/drivers/irqchip/irq-omap-intc.c @@ -325,8 +325,7 @@ static int __init omap_init_irq(u32 base, struct device_n= ode *node) return ret; } =20 -static asmlinkage void __exception_irq_entry -omap_intc_handle_irq(struct pt_regs *regs) +static void __exception_irq_entry omap_intc_handle_irq(struct pt_regs *regs) { extern unsigned long irq_err_count; u32 irqnr; diff --git a/drivers/irqchip/irq-sa11x0.c b/drivers/irqchip/irq-sa11x0.c index 31c202a1ae62..9d0b80271949 100644 --- a/drivers/irqchip/irq-sa11x0.c +++ b/drivers/irqchip/irq-sa11x0.c @@ -127,8 +127,7 @@ static int __init sa1100irq_init_devicefs(void) =20 device_initcall(sa1100irq_init_devicefs); =20 -static asmlinkage void __exception_irq_entry -sa1100_handle_irq(struct pt_regs *regs) +static void __exception_irq_entry sa1100_handle_irq(struct pt_regs *regs) { uint32_t icip, icmr, mask; =20 diff --git a/drivers/irqchip/irq-versatile-fpga.c b/drivers/irqchip/irq-versa= tile-fpga.c index 5018a06060e6..ca471c6fee99 100644 --- a/drivers/irqchip/irq-versatile-fpga.c +++ b/drivers/irqchip/irq-versatile-fpga.c @@ -128,7 +128,7 @@ static int handle_one_fpga(struct fpga_irq_data *f, struc= t pt_regs *regs) * Keep iterating over all registered FPGA IRQ controllers until there are * no pending interrupts. */ -static asmlinkage void __exception_irq_entry fpga_handle_irq(struct pt_regs = *regs) +static void __exception_irq_entry fpga_handle_irq(struct pt_regs *regs) { int i, handled; =20 diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index 51ba681b915a..55a726d317d4 100644 --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h @@ -145,7 +145,8 @@ enum cpuhp_state { CPUHP_AP_IRQ_ARMADA_XP_STARTING, CPUHP_AP_IRQ_BCM2836_STARTING, CPUHP_AP_IRQ_MIPS_GIC_STARTING, - CPUHP_AP_IRQ_LOONGARCH_STARTING, + CPUHP_AP_IRQ_EIOINTC_STARTING, + CPUHP_AP_IRQ_AVECINTC_STARTING, CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING, CPUHP_AP_IRQ_RISCV_IMSIC_STARTING, CPUHP_AP_ARM_MVEBU_COHERENCY, diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 3f30c88e0b4c..457151f9f263 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -276,7 +276,7 @@ struct irq_affinity_notify { #define IRQ_AFFINITY_MAX_SETS 4 =20 /** - * struct irq_affinity - Description for automatic irq affinity assignements + * struct irq_affinity - Description for automatic irq affinity assignments * @pre_vectors: Don't apply affinity to @pre_vectors at beginning of * the MSI(-X) vector space * @post_vectors: Don't apply affinity to @post_vectors at end of @@ -594,7 +594,7 @@ extern const char * const softirq_to_name[NR_SOFTIRQS]; =20 struct softirq_action { - void (*action)(struct softirq_action *); + void (*action)(void); }; =20 asmlinkage void do_softirq(void); @@ -609,7 +609,7 @@ static inline void do_softirq_post_smp_call_flush(unsigne= d int unused) } #endif =20 -extern void open_softirq(int nr, void (*action)(struct softirq_action *)); +extern void open_softirq(int nr, void (*action)(void)); extern void softirq_init(void); extern void __raise_softirq_irqoff(unsigned int nr); =20 diff --git a/include/linux/irq.h b/include/linux/irq.h index 1f5dbf1f92c9..fa711f80957b 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -991,7 +991,6 @@ void irq_init_desc(unsigned int irq); * @ack: Ack register offset to reg_base * @eoi: Eoi register offset to reg_base * @type: Type configuration register offset to reg_base - * @polarity: Polarity configuration register offset to reg_base */ struct irq_chip_regs { unsigned long enable; @@ -1000,7 +999,6 @@ struct irq_chip_regs { unsigned long ack; unsigned long eoi; unsigned long type; - unsigned long polarity; }; =20 /** @@ -1040,8 +1038,6 @@ struct irq_chip_type { * @irq_base: Interrupt base nr for this chip * @irq_cnt: Number of interrupts handled by this chip * @mask_cache: Cached mask register shared between all chip types - * @type_cache: Cached type register - * @polarity_cache: Cached polarity register * @wake_enabled: Interrupt can wakeup from suspend * @wake_active: Interrupt is marked as an wakeup from suspend source * @num_ct: Number of available irq_chip_type instances (usually 1) @@ -1068,8 +1064,6 @@ struct irq_chip_generic { unsigned int irq_base; unsigned int irq_cnt; u32 mask_cache; - u32 type_cache; - u32 polarity_cache; u32 wake_enabled; u32 wake_active; unsigned int num_ct; diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index de6105f68fec..e432b6a12a32 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h @@ -291,7 +291,12 @@ struct irq_domain_chip_generic_info; * @hwirq_max: Maximum number of interrupts supported by controller * @direct_max: Maximum value of direct maps; * Use ~0 for no limit; 0 for no direct mapping + * @hwirq_base: The first hardware interrupt number (legacy domains only) + * @virq_base: The first Linux interrupt number for legacy domains to + * immediately associate the interrupts after domain creation * @bus_token: Domain bus token + * @name_suffix: Optional name suffix to avoid collisions when multiple + * domains are added using same fwnode * @ops: Domain operation callbacks * @host_data: Controller private data pointer * @dgc_info: Geneneric chip information structure pointer used to @@ -307,7 +312,10 @@ struct irq_domain_info { unsigned int size; irq_hw_number_t hwirq_max; int direct_max; + unsigned int hwirq_base; + unsigned int virq_base; enum irq_domain_bus_token bus_token; + const char *name_suffix; const struct irq_domain_ops *ops; void *host_data; #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index dc94e0bf2c94..271e9139de77 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -198,7 +198,7 @@ __irq_startup_managed(struct irq_desc *desc, const struct= cpumask *aff, =20 irqd_clr_managed_shutdown(d); =20 - if (cpumask_any_and(aff, cpu_online_mask) >=3D nr_cpu_ids) { + if (!cpumask_intersects(aff, cpu_online_mask)) { /* * Catch code which fiddles with enable_irq() on a managed * and potentially shutdown IRQ. Chained interrupt diff --git a/kernel/irq/cpuhotplug.c b/kernel/irq/cpuhotplug.c index eb8628390156..15a7654eff68 100644 --- a/kernel/irq/cpuhotplug.c +++ b/kernel/irq/cpuhotplug.c @@ -37,7 +37,7 @@ static inline bool irq_needs_fixup(struct irq_data *d) * has been removed from the online mask already. */ if (cpumask_any_but(m, cpu) < nr_cpu_ids && - cpumask_any_and(m, cpu_online_mask) >=3D nr_cpu_ids) { + !cpumask_intersects(m, cpu_online_mask)) { /* * If this happens then there was a missed IRQ fixup at some * point. Warn about it and enforce fixup. @@ -110,7 +110,7 @@ static bool migrate_one_irq(struct irq_desc *desc) if (maskchip && chip->irq_mask) chip->irq_mask(d); =20 - if (cpumask_any_and(affinity, cpu_online_mask) >=3D nr_cpu_ids) { + if (!cpumask_intersects(affinity, cpu_online_mask)) { /* * If the interrupt is managed, then shut it down and leave * the affinity untouched. diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c index 3d4036db15ac..1a3d483548e2 100644 --- a/kernel/irq/irq_sim.c +++ b/kernel/irq/irq_sim.c @@ -13,7 +13,6 @@ =20 struct irq_sim_work_ctx { struct irq_work work; - int irq_base; unsigned int irq_count; unsigned long *pending; struct irq_domain *domain; diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index cea8f6874b1f..e0bff21f30e0 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -128,72 +128,98 @@ void irq_domain_free_fwnode(struct fwnode_handle *fwnod= e) } EXPORT_SYMBOL_GPL(irq_domain_free_fwnode); =20 -static int irq_domain_set_name(struct irq_domain *domain, - const struct fwnode_handle *fwnode, - enum irq_domain_bus_token bus_token) +static int alloc_name(struct irq_domain *domain, char *base, enum irq_domain= _bus_token bus_token) +{ + if (bus_token =3D=3D DOMAIN_BUS_ANY) + domain->name =3D kasprintf(GFP_KERNEL, "%s", base); + else + domain->name =3D kasprintf(GFP_KERNEL, "%s-%d", base, bus_token); + if (!domain->name) + return -ENOMEM; + + domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; + return 0; +} + +static int alloc_fwnode_name(struct irq_domain *domain, const struct fwnode_= handle *fwnode, + enum irq_domain_bus_token bus_token, const char *suffix) +{ + const char *sep =3D suffix ? "-" : ""; + const char *suf =3D suffix ? : ""; + char *name; + + if (bus_token =3D=3D DOMAIN_BUS_ANY) + name =3D kasprintf(GFP_KERNEL, "%pfw%s%s", fwnode, sep, suf); + else + name =3D kasprintf(GFP_KERNEL, "%pfw%s%s-%d", fwnode, sep, suf, bus_token); + if (!name) + return -ENOMEM; + + /* + * fwnode paths contain '/', which debugfs is legitimately unhappy + * about. Replace them with ':', which does the trick and is not as + * offensive as '\'... + */ + domain->name =3D strreplace(name, '/', ':'); + domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; + return 0; +} + +static int alloc_unknown_name(struct irq_domain *domain, enum irq_domain_bus= _token bus_token) { static atomic_t unknown_domains; - struct irqchip_fwid *fwid; + int id =3D atomic_inc_return(&unknown_domains); + + if (bus_token =3D=3D DOMAIN_BUS_ANY) + domain->name =3D kasprintf(GFP_KERNEL, "unknown-%d", id); + else + domain->name =3D kasprintf(GFP_KERNEL, "unknown-%d-%d", id, bus_token); + if (!domain->name) + return -ENOMEM; + + domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; + return 0; +} + +static int irq_domain_set_name(struct irq_domain *domain, const struct irq_d= omain_info *info) +{ + enum irq_domain_bus_token bus_token =3D info->bus_token; + const struct fwnode_handle *fwnode =3D info->fwnode; =20 if (is_fwnode_irqchip(fwnode)) { - fwid =3D container_of(fwnode, struct irqchip_fwid, fwnode); + struct irqchip_fwid *fwid =3D container_of(fwnode, struct irqchip_fwid, fw= node); + + /* + * The name_suffix is only intended to be used to avoid a name + * collision when multiple domains are created for a single + * device and the name is picked using a real device node. + * (Typical use-case is regmap-IRQ controllers for devices + * providing more than one physical IRQ.) There should be no + * need to use name_suffix with irqchip-fwnode. + */ + if (info->name_suffix) + return -EINVAL; =20 switch (fwid->type) { case IRQCHIP_FWNODE_NAMED: case IRQCHIP_FWNODE_NAMED_ID: - domain->name =3D bus_token ? - kasprintf(GFP_KERNEL, "%s-%d", - fwid->name, bus_token) : - kstrdup(fwid->name, GFP_KERNEL); - if (!domain->name) - return -ENOMEM; - domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; - break; + return alloc_name(domain, fwid->name, bus_token); default: domain->name =3D fwid->name; - if (bus_token) { - domain->name =3D kasprintf(GFP_KERNEL, "%s-%d", - fwid->name, bus_token); - if (!domain->name) - return -ENOMEM; - domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; - } - break; + if (bus_token !=3D DOMAIN_BUS_ANY) + return alloc_name(domain, fwid->name, bus_token); } - } else if (is_of_node(fwnode) || is_acpi_device_node(fwnode) || - is_software_node(fwnode)) { - char *name; - - /* - * fwnode paths contain '/', which debugfs is legitimately - * unhappy about. Replace them with ':', which does - * the trick and is not as offensive as '\'... - */ - name =3D bus_token ? - kasprintf(GFP_KERNEL, "%pfw-%d", fwnode, bus_token) : - kasprintf(GFP_KERNEL, "%pfw", fwnode); - if (!name) - return -ENOMEM; =20 - domain->name =3D strreplace(name, '/', ':'); - domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; + } else if (is_of_node(fwnode) || is_acpi_device_node(fwnode) || is_software= _node(fwnode)) { + return alloc_fwnode_name(domain, fwnode, bus_token, info->name_suffix); } =20 - if (!domain->name) { - if (fwnode) - pr_err("Invalid fwnode type for irqdomain\n"); - domain->name =3D bus_token ? - kasprintf(GFP_KERNEL, "unknown-%d-%d", - atomic_inc_return(&unknown_domains), - bus_token) : - kasprintf(GFP_KERNEL, "unknown-%d", - atomic_inc_return(&unknown_domains)); - if (!domain->name) - return -ENOMEM; - domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; - } + if (domain->name) + return 0; =20 - return 0; + if (fwnode) + pr_err("Invalid fwnode type for irqdomain\n"); + return alloc_unknown_name(domain, bus_token); } =20 static struct irq_domain *__irq_domain_create(const struct irq_domain_info *= info) @@ -211,7 +237,7 @@ static struct irq_domain *__irq_domain_create(const struc= t irq_domain_info *info if (!domain) return ERR_PTR(-ENOMEM); =20 - err =3D irq_domain_set_name(domain, info->fwnode, info->bus_token); + err =3D irq_domain_set_name(domain, info); if (err) { kfree(domain); return ERR_PTR(err); @@ -267,13 +293,20 @@ static void irq_domain_free(struct irq_domain *domain) kfree(domain); } =20 -/** - * irq_domain_instantiate() - Instantiate a new irq domain data structure - * @info: Domain information pointer pointing to the information for this do= main - * - * Return: A pointer to the instantiated irq domain or an ERR_PTR value. - */ -struct irq_domain *irq_domain_instantiate(const struct irq_domain_info *info) +static void irq_domain_instantiate_descs(const struct irq_domain_info *info) +{ + if (!IS_ENABLED(CONFIG_SPARSE_IRQ)) + return; + + if (irq_alloc_descs(info->virq_base, info->virq_base, info->size, + of_node_to_nid(to_of_node(info->fwnode))) < 0) { + pr_info("Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n", + info->virq_base); + } +} + +static struct irq_domain *__irq_domain_instantiate(const struct irq_domain_i= nfo *info, + bool cond_alloc_descs, bool force_associate) { struct irq_domain *domain; int err; @@ -306,6 +339,19 @@ struct irq_domain *irq_domain_instantiate(const struct i= rq_domain_info *info) =20 __irq_domain_publish(domain); =20 + if (cond_alloc_descs && info->virq_base > 0) + irq_domain_instantiate_descs(info); + + /* + * Legacy interrupt domains have a fixed Linux interrupt number + * associated. Other interrupt domains can request association by + * providing a Linux interrupt number > 0. + */ + if (force_associate || info->virq_base > 0) { + irq_domain_associate_many(domain, info->virq_base, info->hwirq_base, + info->size - info->hwirq_base); + } + return domain; =20 err_domain_gc_remove: @@ -315,6 +361,17 @@ struct irq_domain *irq_domain_instantiate(const struct i= rq_domain_info *info) irq_domain_free(domain); return ERR_PTR(err); } + +/** + * irq_domain_instantiate() - Instantiate a new irq domain data structure + * @info: Domain information pointer pointing to the information for this do= main + * + * Return: A pointer to the instantiated irq domain or an ERR_PTR value. + */ +struct irq_domain *irq_domain_instantiate(const struct irq_domain_info *info) +{ + return __irq_domain_instantiate(info, false, false); +} EXPORT_SYMBOL_GPL(irq_domain_instantiate); =20 /** @@ -413,28 +470,13 @@ struct irq_domain *irq_domain_create_simple(struct fwno= de_handle *fwnode, .fwnode =3D fwnode, .size =3D size, .hwirq_max =3D size, + .virq_base =3D first_irq, .ops =3D ops, .host_data =3D host_data, }; - struct irq_domain *domain; - - domain =3D irq_domain_instantiate(&info); - if (IS_ERR(domain)) - return NULL; + struct irq_domain *domain =3D __irq_domain_instantiate(&info, true, false); =20 - if (first_irq > 0) { - if (IS_ENABLED(CONFIG_SPARSE_IRQ)) { - /* attempt to allocated irq_descs */ - int rc =3D irq_alloc_descs(first_irq, first_irq, size, - of_node_to_nid(to_of_node(fwnode))); - if (rc < 0) - pr_info("Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n", - first_irq); - } - irq_domain_associate_many(domain, first_irq, 0, size); - } - - return domain; + return IS_ERR(domain) ? NULL : domain; } EXPORT_SYMBOL_GPL(irq_domain_create_simple); =20 @@ -476,18 +518,14 @@ struct irq_domain *irq_domain_create_legacy(struct fwno= de_handle *fwnode, .fwnode =3D fwnode, .size =3D first_hwirq + size, .hwirq_max =3D first_hwirq + size, + .hwirq_base =3D first_hwirq, + .virq_base =3D first_irq, .ops =3D ops, .host_data =3D host_data, }; - struct irq_domain *domain; + struct irq_domain *domain =3D __irq_domain_instantiate(&info, false, true); =20 - domain =3D irq_domain_instantiate(&info); - if (IS_ERR(domain)) - return NULL; - - irq_domain_associate_many(domain, first_irq, first_hwirq, size); - - return domain; + return IS_ERR(domain) ? NULL : domain; } EXPORT_SYMBOL_GPL(irq_domain_create_legacy); =20 @@ -1365,7 +1403,7 @@ static int irq_domain_trim_hierarchy(unsigned int virq) tail =3D NULL; =20 /* The first entry must have a valid irqchip */ - if (!irq_data->chip || IS_ERR(irq_data->chip)) + if (IS_ERR_OR_NULL(irq_data->chip)) return -EINVAL; =20 /* diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index dd53298ef1a5..f0803d6bd296 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -218,21 +218,20 @@ static void irq_validate_effective_affinity(struct irq_= data *data) static inline void irq_validate_effective_affinity(struct irq_data *data) { } #endif =20 +static DEFINE_PER_CPU(struct cpumask, __tmp_mask); + int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask, bool force) { + struct cpumask *tmp_mask =3D this_cpu_ptr(&__tmp_mask); struct irq_desc *desc =3D irq_data_to_desc(data); struct irq_chip *chip =3D irq_data_get_irq_chip(data); const struct cpumask *prog_mask; int ret; =20 - static DEFINE_RAW_SPINLOCK(tmp_mask_lock); - static struct cpumask tmp_mask; - if (!chip || !chip->irq_set_affinity) return -EINVAL; =20 - raw_spin_lock(&tmp_mask_lock); /* * If this is a managed interrupt and housekeeping is enabled on * it check whether the requested affinity mask intersects with @@ -258,11 +257,11 @@ int irq_do_set_affinity(struct irq_data *data, const st= ruct cpumask *mask, =20 hk_mask =3D housekeeping_cpumask(HK_TYPE_MANAGED_IRQ); =20 - cpumask_and(&tmp_mask, mask, hk_mask); - if (!cpumask_intersects(&tmp_mask, cpu_online_mask)) + cpumask_and(tmp_mask, mask, hk_mask); + if (!cpumask_intersects(tmp_mask, cpu_online_mask)) prog_mask =3D mask; else - prog_mask =3D &tmp_mask; + prog_mask =3D tmp_mask; } else { prog_mask =3D mask; } @@ -272,16 +271,14 @@ int irq_do_set_affinity(struct irq_data *data, const st= ruct cpumask *mask, * unless we are being asked to force the affinity (in which * case we do as we are told). */ - cpumask_and(&tmp_mask, prog_mask, cpu_online_mask); - if (!force && !cpumask_empty(&tmp_mask)) - ret =3D chip->irq_set_affinity(data, &tmp_mask, force); + cpumask_and(tmp_mask, prog_mask, cpu_online_mask); + if (!force && !cpumask_empty(tmp_mask)) + ret =3D chip->irq_set_affinity(data, tmp_mask, force); else if (force) ret =3D chip->irq_set_affinity(data, mask, force); else ret =3D -EINVAL; =20 - raw_spin_unlock(&tmp_mask_lock); - switch (ret) { case IRQ_SET_MASK_OK: case IRQ_SET_MASK_OK_DONE: diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c index 61ca924ef4b4..eb150afd671f 100644 --- a/kernel/irq/migration.c +++ b/kernel/irq/migration.c @@ -26,7 +26,7 @@ bool irq_fixup_move_pending(struct irq_desc *desc, bool for= ce_clear) * The outgoing CPU might be the last online target in a pending * interrupt move. If that's the case clear the pending move bit. */ - if (cpumask_any_and(desc->pending_mask, cpu_online_mask) >=3D nr_cpu_ids) { + if (!cpumask_intersects(desc->pending_mask, cpu_online_mask)) { irqd_clr_move_pending(data); return false; } @@ -74,7 +74,7 @@ void irq_move_masked_irq(struct irq_data *idata) * For correct operation this depends on the caller * masking the irqs. */ - if (cpumask_any_and(desc->pending_mask, cpu_online_mask) < nr_cpu_ids) { + if (cpumask_intersects(desc->pending_mask, cpu_online_mask)) { int ret; =20 ret =3D irq_do_set_affinity(data, desc->pending_mask, false); diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c index 5fa0547ece0c..1c7e5159064c 100644 --- a/kernel/irq/msi.c +++ b/kernel/irq/msi.c @@ -82,7 +82,7 @@ static struct msi_desc *msi_alloc_desc(struct device *dev, = int nvec, desc->dev =3D dev; desc->nvec_used =3D nvec; if (affinity) { - desc->affinity =3D kmemdup(affinity, nvec * sizeof(*desc->affinity), GFP_K= ERNEL); + desc->affinity =3D kmemdup_array(affinity, nvec, sizeof(*desc->affinity), = GFP_KERNEL); if (!desc->affinity) { kfree(desc); return NULL; diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index 8cccdf40725a..9081ada81c3d 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c @@ -52,10 +52,8 @@ static int show_irq_affinity(int type, struct seq_file *m) case AFFINITY: case AFFINITY_LIST: mask =3D desc->irq_common_data.affinity; -#ifdef CONFIG_GENERIC_PENDING_IRQ - if (irqd_is_setaffinity_pending(&desc->irq_data)) - mask =3D desc->pending_mask; -#endif + if (irq_move_pending(&desc->irq_data)) + mask =3D irq_desc_get_pending_mask(desc); break; case EFFECTIVE: case EFFECTIVE_LIST: @@ -142,7 +140,7 @@ static ssize_t write_irq_affinity(int type, struct file *= file, int err; =20 if (!irq_can_set_affinity_usr(irq) || no_irq_affinity) - return -EIO; + return -EPERM; =20 if (!zalloc_cpumask_var(&new_value, GFP_KERNEL)) return -ENOMEM; @@ -362,8 +360,13 @@ void register_irq_proc(unsigned int irq, struct irq_desc= *desc) goto out_unlock; =20 #ifdef CONFIG_SMP + umode_t umode =3D S_IRUGO; + + if (irq_can_set_affinity_usr(desc->irq_data.irq)) + umode |=3D S_IWUSR; + /* create /proc/irq//smp_affinity */ - proc_create_data("smp_affinity", 0644, desc->dir, + proc_create_data("smp_affinity", umode, desc->dir, &irq_affinity_proc_ops, irqp); =20 /* create /proc/irq//affinity_hint */ @@ -371,7 +374,7 @@ void register_irq_proc(unsigned int irq, struct irq_desc = *desc) irq_affinity_hint_proc_show, irqp); =20 /* create /proc/irq//smp_affinity_list */ - proc_create_data("smp_affinity_list", 0644, desc->dir, + proc_create_data("smp_affinity_list", umode, desc->dir, &irq_affinity_list_proc_ops, irqp); =20 proc_create_single_data("node", 0444, desc->dir, irq_node_proc_show, diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c index 4402d6f5f857..b3b3ce34df63 100644 --- a/kernel/rcu/tiny.c +++ b/kernel/rcu/tiny.c @@ -105,7 +105,7 @@ static inline bool rcu_reclaim_tiny(struct rcu_head *head) } =20 /* Invoke the RCU callbacks whose grace period has elapsed. */ -static __latent_entropy void rcu_process_callbacks(struct softirq_action *un= used) +static __latent_entropy void rcu_process_callbacks(void) { struct rcu_head *next, *list; unsigned long flags; diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index e641cc681901..93bd665637c0 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -2855,7 +2855,7 @@ static __latent_entropy void rcu_core(void) queue_work_on(rdp->cpu, rcu_gp_wq, &rdp->strict_work); } =20 -static void rcu_core_si(struct softirq_action *h) +static void rcu_core_si(void) { rcu_core(); } diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 9057584ec06d..8dc9385f6da4 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -12483,7 +12483,7 @@ static int sched_balance_newidle(struct rq *this_rq, = struct rq_flags *rf) * - indirectly from a remote scheduler_tick() for NOHZ idle balancing * through the SMP cross-call nohz_csd_func() */ -static __latent_entropy void sched_balance_softirq(struct softirq_action *h) +static __latent_entropy void sched_balance_softirq(void) { struct rq *this_rq =3D this_rq(); enum cpu_idle_type idle =3D this_rq->idle_balance; diff --git a/kernel/softirq.c b/kernel/softirq.c index 02582017759a..d082e7840f88 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -551,7 +551,7 @@ static void handle_softirqs(bool ksirqd) kstat_incr_softirqs_this_cpu(vec_nr); =20 trace_softirq_entry(vec_nr); - h->action(h); + h->action(); trace_softirq_exit(vec_nr); if (unlikely(prev_count !=3D preempt_count())) { pr_err("huh, entered softirq %u %s %p with preempt_count %08x, exited wit= h %08x?\n", @@ -700,7 +700,7 @@ void __raise_softirq_irqoff(unsigned int nr) or_softirq_pending(1UL << nr); } =20 -void open_softirq(int nr, void (*action)(struct softirq_action *)) +void open_softirq(int nr, void (*action)(void)) { softirq_vec[nr].action =3D action; } @@ -760,8 +760,7 @@ static bool tasklet_clear_sched(struct tasklet_struct *t) return false; } =20 -static void tasklet_action_common(struct softirq_action *a, - struct tasklet_head *tl_head, +static void tasklet_action_common(struct tasklet_head *tl_head, unsigned int softirq_nr) { struct tasklet_struct *list; @@ -805,16 +804,16 @@ static void tasklet_action_common(struct softirq_action= *a, } } =20 -static __latent_entropy void tasklet_action(struct softirq_action *a) +static __latent_entropy void tasklet_action(void) { workqueue_softirq_action(false); - tasklet_action_common(a, this_cpu_ptr(&tasklet_vec), TASKLET_SOFTIRQ); + tasklet_action_common(this_cpu_ptr(&tasklet_vec), TASKLET_SOFTIRQ); } =20 -static __latent_entropy void tasklet_hi_action(struct softirq_action *a) +static __latent_entropy void tasklet_hi_action(void) { workqueue_softirq_action(true); - tasklet_action_common(a, this_cpu_ptr(&tasklet_hi_vec), HI_SOFTIRQ); + tasklet_action_common(this_cpu_ptr(&tasklet_hi_vec), HI_SOFTIRQ); } =20 void tasklet_setup(struct tasklet_struct *t, diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index b8ee320208d4..836157e09e25 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -1757,7 +1757,7 @@ static void __hrtimer_run_queues(struct hrtimer_cpu_bas= e *cpu_base, ktime_t now, } } =20 -static __latent_entropy void hrtimer_run_softirq(struct softirq_action *h) +static __latent_entropy void hrtimer_run_softirq(void) { struct hrtimer_cpu_base *cpu_base =3D this_cpu_ptr(&hrtimer_bases); unsigned long flags; diff --git a/kernel/time/timer.c b/kernel/time/timer.c index 64b0d8a0aa0f..760bbeb1f331 100644 --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -2440,7 +2440,7 @@ static void run_timer_base(int index) /* * This function runs timers and the timer-tq in bottom half context. */ -static __latent_entropy void run_timer_softirq(struct softirq_action *h) +static __latent_entropy void run_timer_softirq(void) { run_timer_base(BASE_LOCAL); if (IS_ENABLED(CONFIG_NO_HZ_COMMON)) { diff --git a/lib/irq_poll.c b/lib/irq_poll.c index 2d5329a42105..08b242bbdbdf 100644 --- a/lib/irq_poll.c +++ b/lib/irq_poll.c @@ -75,7 +75,7 @@ void irq_poll_complete(struct irq_poll *iop) } EXPORT_SYMBOL(irq_poll_complete); =20 -static void __latent_entropy irq_poll_softirq(struct softirq_action *h) +static void __latent_entropy irq_poll_softirq(void) { struct list_head *list =3D this_cpu_ptr(&blk_cpu_iopoll); int rearm =3D 0, budget =3D irq_poll_budget; diff --git a/net/core/dev.c b/net/core/dev.c index 6ea1d20676fb..e24a3bcb496d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -5247,7 +5247,7 @@ int netif_rx(struct sk_buff *skb) } EXPORT_SYMBOL(netif_rx); =20 -static __latent_entropy void net_tx_action(struct softirq_action *h) +static __latent_entropy void net_tx_action(void) { struct softnet_data *sd =3D this_cpu_ptr(&softnet_data); =20 @@ -6920,7 +6920,7 @@ static int napi_threaded_poll(void *data) return 0; } =20 -static __latent_entropy void net_rx_action(struct softirq_action *h) +static __latent_entropy void net_rx_action(void) { struct softnet_data *sd =3D this_cpu_ptr(&softnet_data); unsigned long time_limit =3D jiffies + . Date: Mon, 16 Sep 2024 01:39:39 -0700 From: Kees Cook To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, Allen Pais , Brian Mak , "Eric W. Biederman" , Jeff Xu , Kees Cook , Roman Kisel Subject: [GIT PULL] execve updates for v6.12-rc1 Hi Linus, Please pull these execve updates for v6.12-rc1. Note there is a trivial merge conflict between this and mm, which was resolved in -next with: https://lore.kernel.org/linux-next/20240909171843.78c294da@canb.auug.org.au/ Thanks! -Kees The following changes since commit de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed: Linux 6.11-rc2 (2024-08-04 13:50:53 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/execve-v6.12-rc1 for you to fetch changes up to 44f65d900698278a8451988abe0d5ca37fd46882: binfmt_elf: mseal address zero (2024-08-14 09:56:48 -0700) ---------------------------------------------------------------- execve updates for v6.12-rc1 - binfmt_elf: Dump smaller VMAs first in ELF cores (Brian Mak) - binfmt_elf: mseal address zero (Jeff Xu) - binfmt_elf, coredump: Log the reason of the failed core dumps (Roman Kisel) ---------------------------------------------------------------- Brian Mak (1): binfmt_elf: Dump smaller VMAs first in ELF cores Jeff Xu (1): binfmt_elf: mseal address zero Roman Kisel (2): coredump: Standartize and fix logging binfmt_elf, coredump: Log the reason of the failed core dumps fs/binfmt_elf.c | 53 +++++++++++---- fs/coredump.c | 166 ++++++++++++++++++++++++++++++++++------------- include/linux/coredump.h | 30 ++++++++- include/linux/mm.h | 10 +++ kernel/signal.c | 21 +++++- mm/mseal.c | 2 +- 6 files changed, 220 insertions(+), 62 deletions(-) -- Kees Cook . Date: Mon, 16 Sep 2024 10:44:05 +0200 (CEST) From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] core/debugobjects for v6.12-rc1 Linus, please pull the latest core/debugobjects branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core-debugobject= s-2024-09-16 up to: 63a4a9b52c3c: debugobjects: Remove redundant checks in fill_pool() A set of updates for debugobjects: - Use the threshold to check for the pool refill condition and not the run time recorded all time low fill value, which is lower than the threshold and therefore causes refills to be delayed. - KCSAN annotation updates and simplification of the fill_pool() code. Thanks, tglx ------------------> Zhen Lei (3): debugobjects: Fix the compilation attributes of some global variables debugobjects: Fix conditions in fill_pool() debugobjects: Remove redundant checks in fill_pool() lib/debugobjects.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/debugobjects.c b/lib/debugobjects.c index 7cea91e193a8..5ce473ad499b 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -70,10 +70,10 @@ static HLIST_HEAD(obj_to_free); * made at debug_stats_show(). Both obj_pool_min_free and obj_pool_max_used * can be off. */ -static int obj_pool_min_free =3D ODEBUG_POOL_SIZE; -static int obj_pool_free =3D ODEBUG_POOL_SIZE; +static int __data_racy obj_pool_min_free =3D ODEBUG_POOL_SIZE; +static int __data_racy obj_pool_free =3D ODEBUG_POOL_SIZE; static int obj_pool_used; -static int obj_pool_max_used; +static int __data_racy obj_pool_max_used; static bool obj_freeing; /* The number of objs on the global free list */ static int obj_nr_tofree; @@ -84,9 +84,9 @@ static int __data_racy debug_objects_fixups __read_mostly; static int __data_racy debug_objects_warnings __read_mostly; static int __data_racy debug_objects_enabled __read_mostly =3D CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT; -static int __data_racy debug_objects_pool_size __read_mostly +static int debug_objects_pool_size __ro_after_init =3D ODEBUG_POOL_SIZE; -static int __data_racy debug_objects_pool_min_level __read_mostly +static int debug_objects_pool_min_level __ro_after_init =3D ODEBUG_POOL_MIN_LEVEL; =20 static const struct debug_obj_descr *descr_test __read_mostly; @@ -95,8 +95,8 @@ static struct kmem_cache *obj_cache __ro_after_init; /* * Track numbers of kmem_cache_alloc()/free() calls done. */ -static int debug_objects_allocated; -static int debug_objects_freed; +static int __data_racy debug_objects_allocated; +static int __data_racy debug_objects_freed; =20 static void free_obj_work(struct work_struct *work); static DECLARE_DELAYED_WORK(debug_obj_work, free_obj_work); @@ -135,20 +135,19 @@ static void fill_pool(void) return; =20 /* - * Reuse objs from the global free list; they will be reinitialized - * when allocating. + * Reuse objs from the global obj_to_free list; they will be + * reinitialized when allocating. * - * Both obj_nr_tofree and obj_pool_free are checked locklessly; the - * READ_ONCE()s pair with the WRITE_ONCE()s in pool_lock critical - * sections. + * obj_nr_tofree is checked locklessly; the READ_ONCE() pairs with + * the WRITE_ONCE() in pool_lock critical sections. */ - while (READ_ONCE(obj_nr_tofree) && (READ_ONCE(obj_pool_free) < obj_pool_min= _free)) { + if (READ_ONCE(obj_nr_tofree)) { raw_spin_lock_irqsave(&pool_lock, flags); /* * Recheck with the lock held as the worker thread might have * won the race and freed the global free list already. */ - while (obj_nr_tofree && (obj_pool_free < obj_pool_min_free)) { + while (obj_nr_tofree && (obj_pool_free < debug_objects_pool_min_level)) { obj =3D hlist_entry(obj_to_free.first, typeof(*obj), node); hlist_del(&obj->node); WRITE_ONCE(obj_nr_tofree, obj_nr_tofree - 1); . Date: Mon, 16 Sep 2024 02:39:12 -0700 From: Kees Cook To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, Andy Shevchenko , Andy Shevchenko , Bryan O'Donoghue , Dikshita Agarwal , "Gustavo A. R. Silva" , Hongbo Li , Justin Stitt , Kees Cook , Laurent Pinchart , Masahiro Yamada , Michal Wajdeczko , Miguel Ojeda , Vikash Garodia Subject: [GIT PULL] hardening updates for v6.12-rc1 Hi Linus, Please pull these hardening updates for v6.12-rc1. Most of this is string_choice additions, with some more straggling flexible array fixes, selftest build improvements, and a new check for nonstring arguments. A notable conflict is that str_up_down() got defined in drm too. So it needs to be removed during the merge, which is rather awkward. It was solved in linux-next with this: https://lore.kernel.org/linux-next/20240909195939.067c1c13@canb.auug.org.au/ Thanks! -Kees The following changes since commit de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed: Linux 6.11-rc2 (2024-08-04 13:50:53 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/hardening-v6.12-rc1 for you to fetch changes up to c121d5cc3a993cdbfab46a152bdd50227a4d5e8c: lib/string_choices: Add some comments to make more clear for string choices helpers. (2024-09-05 09:50:16 -0700) ---------------------------------------------------------------- hardening updates for v6.12-rc1 - lib/string_choices: Add str_up_down() helper (Michal Wajdeczko) - lib/string_choices: Add str_true_false()/str_false_true() helper (Hongbo Li) - lib/string_choices: Introduce several opposite string choice helpers (Hongbo Li) - lib/string_helpers: rework overflow-dependent code (Justin Stitt) - fortify: refactor test_fortify Makefile to fix some build problems (Masahiro Yamada) - string: Check for "nonstring" attribute on strscpy() arguments - virt: vbox: Replace 1-element arrays with flexible arrays - media: venus: hfi_cmds: Replace 1-element arrays with flexible arrays ---------------------------------------------------------------- Hongbo Li (3): lib/string_choices: Add str_true_false()/str_false_true() helper lib/string_choices: Introduce several opposite string choice helpers lib/string_choices: Add some comments to make more clear for string choices helpers. Justin Stitt (1): lib/string_helpers: rework overflow-dependent code Kees Cook (6): string_choices: Add wrapper for str_down_up() coccinelle: Add rules to find str_down_up() replacements virt: vbox: struct vmmdev_hgcm_pagelist: Replace 1-element array with flexible array media: venus: hfi_cmds: struct hfi_session_release_buffer_pkt: Replace 1-element array with flexible array media: venus: hfi_cmds: struct hfi_session_release_buffer_pkt: Add __counted_by annotation string: Check for "nonstring" attribute on strscpy() arguments Masahiro Yamada (3): fortify: refactor test_fortify Makefile to fix some build problems fortify: move test_fortify.sh to lib/test_fortify/ fortify: use if_changed_dep to record header dependency in *.cmd files Michal Wajdeczko (2): lib/string_choices: Add str_up_down() helper coccinelle: Add rules to find str_up_down() replacements MAINTAINERS | 1 - drivers/media/platform/qcom/venus/hfi_cmds.h | 2 +- include/linux/compiler.h | 3 ++ include/linux/compiler_types.h | 7 ++++ include/linux/string.h | 12 ++++--- include/linux/string_choices.h | 29 +++++++++++++++++ include/uapi/linux/vbox_vmmdev_types.h | 5 ++- lib/.gitignore | 2 -- lib/Makefile | 38 +--------------------- lib/string_helpers.c | 3 ++ lib/test_fortify/.gitignore | 2 ++ lib/test_fortify/Makefile | 28 ++++++++++++++++ {scripts => lib/test_fortify}/test_fortify.sh | 0 scripts/coccinelle/api/string_choices.cocci | 46 +++++++++++++++++++++++++++ scripts/remove-stale-files | 2 ++ 15 files changed, 134 insertions(+), 46 deletions(-) create mode 100644 lib/test_fortify/.gitignore create mode 100644 lib/test_fortify/Makefile rename {scripts => lib/test_fortify}/test_fortify.sh (100%) -- Kees Cook . Date: Mon, 16 Sep 2024 11:45:42 +0200 From: Vlastimil Babka To: Linus Torvalds Cc: David Rientjes , Christoph Lameter , Andrew Morton , "linux-mm@kvack.org" , LKML , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Christian Brauner , RCU , Shakeel Butt , "Uladzislau Rezki (Sony)" Subject: [GIT PULL] slab updates for 6.11 Hi Linus, please pull the latest slab updates from: git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab.git tags/slab-for-6.12 There's a small conflict with the rcu tree: https://lore.kernel.org/lkml/20240812124748.3725011b@canb.auug.org.au/ For Christian's kmem_cache_create refactoring series, a commit in the vfs.file tree was merged as a prerequisity, and you have already merged vfs.file. Due to vfs.tree based on 6.11-rc4 and slab on v6.11-rc5, the git pull-rq generated diffstat below now however seems to contain also changes from rc5 commits. The shortlog is accurate. Thanks, Vlastimil ====================================== This time it's mostly refactoring and improving APIs for slab users in the kernel, along with some debugging improvements. * kmem_cache_create() refactoring (Christian Brauner) Over the years have been growing new parameters to kmem_cache_create() where most of them are needed only for a small number of caches - most recently the rcu_freeptr_offset parameter. To avoid adding new parameters to kmem_cache_create() and adjusting all its callers, or creating new wrappers such as kmem_cache_create_rcu(), we can now pass extra parameters using the new struct kmem_cache_args. Not explicitly initialized fields default to values interpreted as unused. kmem_cache_create() is for now a wrapper that works both with the new form: kmem_cache_create(name, object_size, args, flags) and the legacy form: kmem_cache_create(name, object_size, align, flags, ctor) * kmem_cache_destroy() waits for kfree_rcu()'s in flight (Vlastimil Babka, Uladislau Rezki) Since SLOB removal, kfree() is allowed for freeing objects allocated by kmem_cache_create(). By extension kfree_rcu() as allowed as well, which can allow converting simple call_rcu() callbacks that only do kmem_cache_free(), as there was never a kmem_cache_free_rcu() variant. However, for caches that can be destroyed e.g. on module removal, the cache owners knew to issue rcu_barrier() first to wait for the pending call_rcu()'s, and this is not sufficient for pending kfree_rcu()'s due to its internal batching optimizations. Ulad has provided a new kvfree_rcu_barrier() and to make the usage less error-prone, kmem_cache_destroy() calls it. Additionally, destroying SLAB_TYPESAFE_BY_RCU caches now again issues rcu_barrier() synchronously instead of using an async work, because the past motivation for async work no longer applies. Users of custom call_rcu() callbacks should however keep calling rcu_barrier() before cache destruction. * Debugging use-after-free in SLAB_TYPESAFE_BY_RCU caches (Jann Horn) Currently, KASAN cannot catch UAFs in such caches as it is legal to access them within a grace period, and we only track the grace period when trying to free the underlying slab page. The new CONFIG_SLUB_RCU_DEBUG option changes the freeing of individual object to be RCU-delayed, after which KASAN can poison them. * Delayed memcg charging (Shakeel Butt) In some cases, the memcg is uknown at allocation time, such as receiving network packets in softirq context. With kmem_cache_charge() these may be now charged later when the user and its memcg is known. * Misc fixes and improvements (Pedro Falcato, Axel Rasmussen, Christoph Lameter, Yan Zhen, Peng Fan, Xavier). ---------------------------------------------------------------- Axel Rasmussen (1): mm, slub: print CPU id (and its node) on slab OOM Christian Brauner (17): slab: s/__kmem_cache_create/do_kmem_cache_create/g slab: add struct kmem_cache_args slab: port kmem_cache_create() to struct kmem_cache_args slab: port kmem_cache_create_rcu() to struct kmem_cache_args slab: port kmem_cache_create_usercopy() to struct kmem_cache_args slab: pass struct kmem_cache_args to create_cache() slab: pull kmem_cache_open() into do_kmem_cache_create() slab: pass struct kmem_cache_args to do_kmem_cache_create() slab: remove rcu_freeptr_offset from struct kmem_cache slab: port KMEM_CACHE() to struct kmem_cache_args slab: port KMEM_CACHE_USERCOPY() to struct kmem_cache_args slab: create kmem_cache_create() compatibility layer file: port to struct kmem_cache_args slab: remove kmem_cache_create_rcu() slab: make kmem_cache_create_usercopy() static inline slab: make __kmem_cache_create() static inline io_uring: port to struct kmem_cache_args Christoph Lameter (1): Reenable NUMA policy support in the slab allocator Jann Horn (2): kasan: catch invalid free before SLUB reinitializes the object slub: Introduce CONFIG_SLUB_RCU_DEBUG Pedro Falcato (1): slab: Warn on duplicate cache names when DEBUG_VM=y Peng Fan (1): mm, slub: avoid zeroing kmalloc redzone Shakeel Butt (1): memcg: add charging of already allocated slab objects Uladzislau Rezki (Sony) (1): rcu/kvfree: Add kvfree_rcu_barrier() API Vlastimil Babka (10): mm, slab: dissolve shutdown_cache() into its caller mm, slab: unlink slabinfo, sysfs and debugfs immediately mm, slab: move kfence_shutdown_cache() outside slab_mutex mm, slab: reintroduce rcu_barrier() into kmem_cache_destroy() mm, slab: call kvfree_rcu_barrier() from kmem_cache_destroy() kunit, slub: add test_kfree_rcu() and test_leak_destroy() Merge branch 'vfs.file' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs into slab/for-6.12/kmem_cache_args mm, slab: restore kerneldoc for kmem_cache_create() Merge branch 'slab/for-6.12/rcu_barriers' into slab/for-next Merge branch 'slab/for-6.12/kmem_cache_args' into slab/for-next Xavier (1): mm/slab: Optimize the code logic in find_mergeable() Yan Zhen (1): mm, slab: use kmem_cache_free() to free from kmem_buckets_cache Documentation/core-api/workqueue.rst | 2 +- .../bindings/input/touchscreen/edt-ft5x06.yaml | 1 + Documentation/filesystems/erofs.rst | 2 +- Documentation/filesystems/smb/ksmbd.rst | 26 +- Documentation/kbuild/llvm.rst | 2 +- MAINTAINERS | 36 +- Makefile | 4 +- arch/arm64/kvm/mmu.c | 9 +- arch/arm64/kvm/sys_regs.c | 6 + arch/arm64/kvm/vgic/vgic-debug.c | 2 +- arch/arm64/kvm/vgic/vgic-init.c | 9 +- arch/arm64/kvm/vgic/vgic.c | 5 + arch/arm64/kvm/vgic/vgic.h | 7 + arch/mips/kernel/cevt-r4k.c | 15 +- arch/mips/kernel/cpu-probe.c | 4 + arch/s390/Kconfig | 13 + arch/s390/boot/startup.c | 58 +-- arch/s390/boot/vmem.c | 14 +- arch/s390/boot/vmlinux.lds.S | 7 +- arch/s390/include/asm/page.h | 3 +- arch/s390/kernel/setup.c | 19 +- arch/s390/kernel/vmlinux.lds.S | 2 +- arch/s390/tools/relocs.c | 2 +- block/blk-lib.c | 25 +- drivers/accessibility/speakup/genmap.c | 1 - drivers/accessibility/speakup/makemapdata.c | 1 - drivers/acpi/video_detect.c | 22 ++ drivers/ata/pata_macio.c | 30 +- drivers/bluetooth/btintel.c | 10 - drivers/bluetooth/btintel_pcie.c | 3 - drivers/bluetooth/btmtksdio.c | 3 - drivers/bluetooth/btrtl.c | 1 - drivers/bluetooth/btusb.c | 4 +- drivers/bluetooth/hci_qca.c | 4 +- drivers/bluetooth/hci_vhci.c | 2 - drivers/cxl/core/pci.c | 10 +- drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.c | 3 + drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 5 +- drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 18 +- drivers/gpu/drm/i915/display/intel_dp_hdcp.c | 4 +- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 4 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 4 +- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 14 +- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 20 +- drivers/gpu/drm/msm/dp/dp_ctrl.c | 2 + drivers/gpu/drm/msm/dp/dp_panel.c | 19 +- drivers/gpu/drm/msm/msm_mdss.c | 2 +- drivers/gpu/drm/nouveau/nvkm/core/firmware.c | 9 +- drivers/gpu/drm/nouveau/nvkm/falcon/fw.c | 6 + drivers/gpu/drm/xe/Makefile | 2 + drivers/gpu/drm/xe/display/xe_display.c | 28 +- drivers/gpu/drm/xe/display/xe_dsb_buffer.c | 8 + drivers/gpu/drm/xe/display/xe_fb_pin.c | 3 + drivers/gpu/drm/xe/regs/xe_gt_regs.h | 9 + drivers/gpu/drm/xe/xe_bo.c | 6 +- drivers/gpu/drm/xe/xe_device.c | 32 ++ drivers/gpu/drm/xe/xe_device.h | 1 + drivers/gpu/drm/xe/xe_exec_queue.c | 24 +- drivers/gpu/drm/xe/xe_exec_queue_types.h | 2 - drivers/gpu/drm/xe/xe_gsc.c | 8 +- drivers/gpu/drm/xe/xe_gt.c | 55 +++ drivers/gpu/drm/xe/xe_gt_pagefault.c | 18 +- drivers/gpu/drm/xe/xe_gt_types.h | 6 + drivers/gpu/drm/xe/xe_guc_submit.c | 4 +- drivers/gpu/drm/xe/xe_hw_fence.c | 9 +- drivers/gpu/drm/xe/xe_hw_fence_types.h | 7 +- drivers/gpu/drm/xe/xe_mmio.c | 28 +- drivers/gpu/drm/xe/xe_observation.c | 1 - drivers/gpu/drm/xe/xe_pat.c | 11 +- drivers/gpu/drm/xe/xe_pm.c | 11 +- drivers/gpu/drm/xe/xe_preempt_fence.c | 3 +- drivers/gpu/drm/xe/xe_preempt_fence_types.h | 2 + drivers/gpu/drm/xe/xe_sched_job.c | 3 +- drivers/gpu/drm/xe/xe_trace.h | 2 +- drivers/gpu/drm/xe/xe_wa.c | 18 + drivers/gpu/drm/xe/xe_wa_oob.rules | 1 + drivers/hid/amd-sfh-hid/amd_sfh_hid.c | 4 +- drivers/hid/hid-asus.c | 3 + drivers/hid/hid-cougar.c | 2 +- drivers/hid/hid-ids.h | 3 + drivers/hid/hid-multitouch.c | 33 ++ drivers/hid/wacom_wac.c | 4 +- drivers/input/joystick/adc-joystick.c | 7 +- drivers/input/misc/uinput.c | 14 + drivers/input/mouse/synaptics.c | 1 + drivers/input/serio/i8042-acpipnpio.h | 29 +- drivers/input/serio/i8042.c | 10 +- drivers/input/touchscreen/ads7846.c | 2 +- drivers/input/touchscreen/edt-ft5x06.c | 6 + drivers/input/touchscreen/himax_hx83112b.c | 14 +- drivers/iommu/iommufd/device.c | 2 +- drivers/iommu/iommufd/selftest.c | 2 +- drivers/mmc/core/mmc_test.c | 9 +- drivers/mmc/host/dw_mmc.c | 8 + drivers/mmc/host/mtk-sd.c | 8 +- drivers/net/bonding/bond_main.c | 21 +- drivers/net/bonding/bond_options.c | 2 +- drivers/net/dsa/microchip/ksz_ptp.c | 5 +- drivers/net/dsa/mv88e6xxx/global1_atu.c | 3 +- drivers/net/dsa/ocelot/felix.c | 126 +++++- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 +- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 - drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 4 - drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 5 - drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c | 3 +- .../net/ethernet/freescale/dpaa2/dpaa2-switch.c | 7 +- .../net/ethernet/intel/ice/devlink/devlink_port.c | 4 +- drivers/net/ethernet/intel/ice/ice_base.c | 21 +- drivers/net/ethernet/intel/ice/ice_txrx.c | 47 +-- drivers/net/ethernet/intel/igb/igb_main.c | 1 + .../net/ethernet/marvell/octeontx2/af/rvu_cpt.c | 23 +- drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 + drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 21 +- drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 26 +- .../mellanox/mlx5/core/lib/ipsec_fs_roce.c | 6 +- drivers/net/ethernet/mscc/ocelot.c | 279 ++++++++++++- drivers/net/ethernet/mscc/ocelot_fdma.c | 3 +- drivers/net/ethernet/mscc/ocelot_vcap.c | 1 + drivers/net/ethernet/mscc/ocelot_vsc7514.c | 4 + drivers/net/ethernet/wangxun/ngbe/ngbe_mdio.c | 8 +- drivers/net/ethernet/xilinx/xilinx_axienet.h | 1 + drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 25 +- drivers/net/phy/realtek.c | 3 +- drivers/net/virtio_net.c | 2 +- drivers/nvme/host/core.c | 2 +- drivers/nvme/host/nvme.h | 1 - drivers/platform/surface/aggregator/controller.c | 3 +- .../platform/surface/surface_aggregator_registry.c | 58 ++- drivers/platform/x86/asus-wmi.c | 16 +- drivers/platform/x86/dell/Kconfig | 1 + drivers/platform/x86/dell/dell-uart-backlight.c | 8 + .../x86/intel/speed_select_if/isst_tpmi_core.c | 3 +- drivers/pmdomain/imx/imx93-pd.c | 5 +- drivers/pmdomain/imx/scu-pd.c | 5 - drivers/power/sequencing/pwrseq-qcom-wcn.c | 2 +- drivers/s390/crypto/ap_bus.c | 7 +- drivers/scsi/sd.c | 3 + drivers/spi/spi-cadence-quadspi.c | 14 +- drivers/spi/spi-fsl-lpspi.c | 31 +- drivers/spi/spi-pxa2xx-pci.c | 15 +- drivers/spi/spi-pxa2xx-platform.c | 26 +- drivers/spi/spi-pxa2xx.c | 20 +- drivers/spi/spi-pxa2xx.h | 3 +- drivers/spi/spi-zynqmp-gqspi.c | 30 +- .../staging/media/atomisp/include/linux/atomisp.h | 1 - drivers/thermal/thermal_debugfs.c | 6 +- drivers/thermal/thermal_of.c | 23 +- drivers/ufs/core/ufshcd.c | 6 +- drivers/ufs/host/ufs-qcom.c | 6 +- fs/bcachefs/alloc_background.c | 66 ++-- fs/bcachefs/alloc_background_format.h | 1 + fs/bcachefs/bcachefs_format.h | 3 +- fs/bcachefs/btree_cache.c | 25 ++ fs/bcachefs/btree_cache.h | 2 + fs/bcachefs/btree_iter.h | 9 + fs/bcachefs/btree_key_cache.c | 31 +- fs/bcachefs/btree_update_interior.c | 46 ++- fs/bcachefs/buckets.c | 74 ++-- fs/bcachefs/buckets_waiting_for_journal.c | 4 +- fs/bcachefs/data_update.c | 209 +++++----- fs/bcachefs/extents.c | 41 ++ fs/bcachefs/extents.h | 1 + fs/bcachefs/fs-io-buffered.c | 2 +- fs/bcachefs/fs-ioctl.c | 3 +- fs/bcachefs/fsck.c | 6 +- fs/bcachefs/journal.c | 2 +- fs/bcachefs/journal_sb.c | 15 + fs/bcachefs/movinggc.c | 2 +- fs/bcachefs/recovery.c | 9 +- fs/bcachefs/replicas.c | 3 +- fs/bcachefs/sb-downgrade.c | 8 +- fs/bcachefs/util.c | 1 - fs/bcachefs/xattr.c | 12 +- fs/erofs/dir.c | 35 +- fs/erofs/inode.c | 18 +- fs/erofs/internal.h | 2 +- fs/erofs/super.c | 26 +- fs/erofs/zutil.c | 3 +- fs/file_table.c | 11 +- fs/nfs/callback_xdr.c | 6 +- fs/nfs/delegation.c | 15 +- fs/nfs/nfs4proc.c | 12 +- fs/nfs/pnfs.c | 5 +- fs/nfs/super.c | 2 + fs/smb/client/cifsfs.c | 6 +- fs/smb/client/cifsglob.h | 6 +- fs/smb/client/connect.c | 3 + fs/smb/client/file.c | 4 +- fs/smb/client/ioctl.c | 2 + fs/smb/client/link.c | 1 + fs/smb/client/reparse.c | 11 +- fs/smb/server/connection.c | 34 +- fs/smb/server/connection.h | 3 +- fs/smb/server/mgmt/user_session.c | 9 + fs/smb/server/oplock.c | 2 +- fs/smb/server/smb2pdu.c | 31 +- fs/smb/server/smb_common.h | 4 +- fs/super.c | 4 +- include/acpi/video.h | 1 + include/linux/blkdev.h | 7 +- include/linux/dsa/ocelot.h | 47 +++ include/linux/kasan.h | 63 ++- include/linux/panic.h | 1 + include/linux/rcutiny.h | 5 + include/linux/rcutree.h | 1 + include/linux/slab.h | 228 ++++++++++- include/net/bluetooth/hci.h | 17 +- include/net/bluetooth/hci_core.h | 2 +- include/net/dsa.h | 16 +- include/net/kcm.h | 1 + include/scsi/scsi_cmnd.h | 2 +- include/soc/mscc/ocelot.h | 12 +- include/soc/mscc/ocelot_vcap.h | 2 + include/trace/events/rpcrdma.h | 36 ++ include/uapi/drm/xe_drm.h | 8 +- include/ufs/ufshcd.h | 8 + io_uring/io_uring.c | 14 +- io_uring/kbuf.c | 9 +- kernel/cgroup/cpuset.c | 38 +- kernel/panic.c | 8 +- kernel/printk/printk.c | 2 +- kernel/rcu/tree.c | 109 +++++- kernel/workqueue.c | 50 +-- lib/slub_kunit.c | 31 ++ mm/Kconfig.debug | 32 ++ mm/kasan/common.c | 62 +-- mm/kasan/kasan_test.c | 46 +++ mm/slab.h | 13 +- mm/slab_common.c | 354 ++++++----------- mm/slub.c | 412 +++++++++++++------- net/bluetooth/hci_core.c | 19 +- net/bluetooth/hci_event.c | 2 +- net/bluetooth/mgmt.c | 4 + net/bluetooth/smp.c | 144 +++---- net/core/netpoll.c | 2 - net/dsa/tag.c | 5 +- net/dsa/tag.h | 135 +++++-- net/dsa/tag_ocelot.c | 37 +- net/ipv4/inet_connection_sock.c | 5 +- net/ipv4/tcp_ipv4.c | 14 + net/ipv4/udp_offload.c | 3 +- net/ipv6/ip6_output.c | 10 + net/ipv6/ip6_tunnel.c | 12 +- net/iucv/iucv.c | 4 +- net/kcm/kcmsock.c | 4 + net/mctp/test/route-test.c | 2 +- net/mptcp/pm.c | 13 - net/mptcp/pm_netlink.c | 142 ++++--- net/mptcp/protocol.h | 3 - net/netfilter/nf_flow_table_inet.c | 3 + net/netfilter/nf_flow_table_ip.c | 3 + net/netfilter/nft_counter.c | 9 +- net/openvswitch/datapath.c | 2 +- net/sched/sch_netem.c | 47 ++- net/sunrpc/xprtrdma/ib_client.c | 6 +- samples/trace_events/trace_custom_sched.c | 1 - scripts/Makefile.build | 2 +- scripts/Makefile.lib | 28 +- scripts/Makefile.modfinal | 2 +- scripts/Makefile.vmlinux | 2 +- scripts/Makefile.vmlinux_o | 2 +- scripts/kconfig/merge_config.sh | 2 + scripts/link-vmlinux.sh | 3 +- sound/soc/codecs/cs42l42.c | 1 - tools/testing/cxl/Kbuild | 1 + tools/testing/cxl/test/mock.c | 12 + .../selftests/drivers/net/mlxsw/ethtool_lanes.sh | 3 +- .../selftests/net/forwarding/bridge_vlan_aware.sh | 54 ++- tools/testing/selftests/net/forwarding/lib.sh | 57 +++ .../selftests/net/forwarding/local_termination.sh | 431 +++++++++++++++++---- tools/testing/selftests/net/mptcp/mptcp_join.sh | 76 +++- tools/testing/selftests/net/udpgro.sh | 53 +-- tools/testing/selftests/tc-testing/tdc.py | 1 - 275 files changed, 4049 insertions(+), 1673 deletions(-) . Date: Mon, 16 Sep 2024 12:07:47 +0200 From: Joerg Roedel To: Linus Torvalds Cc: Will Deacon , linux-kernel@vger.kernel.org, iommu@lists.linux.dev Subject: [git pull] IOMMU Updates for Linux v6.12 Hi Linus, The following changes since commit da3ea35007d0af457a0afc87e84fddaebc4e0b63: Linux 6.11-rc7 (2024-09-08 14:50:28 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux.git tags/iommu-updates-v6.12 for you to fetch changes up to 97162f6093d263aa1c2c7e883912f922ea633512: Merge branches 'fixes', 'arm/smmu', 'intel/vt-d', 'amd/amd-vi' and 'core' into next (2024-09-13 12:53:05 +0200) ---------------------------------------------------------------- IOMMU Updates for Linux v6.12 Including: - Core changes: - Allow ATS on VF when parent device is identity mapped. - Optimize unmap path on ARM io-pagetable implementation. - Use of_property_present(). - ARM-SMMU changes: - SMMUv2: - Devicetree binding updates for Qualcomm MMU-500 implementations. - Extend workarounds for broken Qualcomm hypervisor to avoid touching features that are not available (e.g. 16KiB page support, reserved context banks). - SMMUv3: - Support for NVIDIA's custom virtual command queue hardware. - Fix Stage-2 stall configuration and extend tests to cover this area. - A bunch of driver cleanups, including simplification of the master rbtree code. - Plus minor cleanups and fixes across both drivers. - Intel VT-d changes: - Retire si_domain and convert to use static identity domain. - Batched IOTLB/dev-IOTLB invalidation. - Small code refactoring and cleanups. - AMD-Vi changes: - Cleanup and refactoring of io-pagetable code. - Add parameter to limit the used io-pagesizes. - Other cleanups and fixes. ---------------------------------------------------------------- Ashish Mhetre (1): iommu/io-pgtable-arm: Optimise non-coherent unmap Dan Carpenter (2): iommu/arm-smmu-v3: Fix a NULL vs IS_ERR() check iommu/tegra241-cmdqv: Fix ioremap() error handling in probe() Dmitry Baryshkov (1): iommu/arm-smmu-qcom: apply num_context_bank fixes for SDM630 / SDM660 Eliav Bar-ilan (1): iommu/amd: Fix argument order in amd_iommu_dev_flush_pasid_all() Jason Gunthorpe (26): iommu: Allow ATS to work on VFs when the PF uses IDENTITY iommu/arm-smmu-v3: Add struct arm_smmu_impl_ops iommu/amd: Move allocation of the top table into v1_alloc_pgtable iommu/amd: Allocate the page table root using GFP_KERNEL iommu/amd: Set the pgsize_bitmap correctly iommu/amd: Remove amd_iommu_domain_update() from page table freeing iommu/amd: Remove the amd_iommu_domain_set_pt_root() and related iommu/amd: Rename struct amd_io_pgtable iopt to pgtbl iommu/amd: Remove amd_io_pgtable::pgtbl_cfg iommu/amd: Store the nid in io_pgtable_cfg instead of the domain iommu/amd: Narrow the use of struct protection_domain to invalidation iommu/amd: Remove conditions from domain free paths iommu/amd: Fix typo of , instead of ; iommu/amd: Remove the confusing dummy iommu_flush_ops tlb ops iommu/amd: Correct the reported page sizes from the V1 table iommu/amd: Do not set the D bit on AMD v2 table entries iommu/arm-smmu-v3: Use the new rb tree helpers iommu/arm-smmu-v3: Add arm_smmu_strtab_l1/2_idx() iommu/arm-smmu-v3: Add types for each level of the 2 level stream table iommu/arm-smmu-v3: Reorganize struct arm_smmu_strtab_cfg iommu/arm-smmu-v3: Remove strtab_base/cfg iommu/arm-smmu-v3: Do not use devm for the cd table allocations iommu/arm-smmu-v3: Shrink the cdtab l1_desc array iommu/arm-smmu-v3: Add types for each level of the CD table iommu/arm-smmu-v3: Reorganize struct arm_smmu_ctx_desc_cfg iommu/amd: Test for PAGING domains before freeing a domain Joerg Roedel (2): iommu/amd: Add kernel parameters to limit V1 page-sizes Merge branches 'fixes', 'arm/smmu', 'intel/vt-d', 'amd/amd-vi' and 'core' into next Konrad Dybcio (1): iommu/arm-smmu-qcom: Work around SDM845 Adreno SMMU w/ 16K pages Lu Baolu (10): iommu/vt-d: Require DMA domain if hardware not support passthrough iommu/vt-d: Remove identity mappings from si_domain iommu/vt-d: Always reserve a domain ID for identity setup iommu/vt-d: Remove has_iotlb_device flag iommu/vt-d: Factor out helpers from domain_context_mapping_one() iommu/vt-d: Add support for static identity domain iommu/vt-d: Cleanup si_domain iommu/vt-d: Move PCI PASID enablement to probe path iommu/vt-d: Unconditionally flush device TLB for pasid table updates iommu/vt-d: Add qi_batch for dmar_domain Marc Gonzalez (1): iommu/arm-smmu-qcom: hide last LPASS SMMU context bank from linux Mostafa Saleh (2): iommu/arm-smmu-v3: Match Stall behaviour for S2 iommu/arm-smmu-v3-test: Test masters with stall enabled Nate Watterson (1): iommu/arm-smmu-v3: Add in-kernel support for NVIDIA Tegra241 (Grace) CMDQV Nicolin Chen (11): iommu/arm-smmu-v3: Issue a batch of commands to the same cmdq iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_build_sync_cmd iommu/arm-smmu-v3: Pass in cmdq pointer to arm_smmu_cmdq_init iommu/arm-smmu-v3: Make symbols public for CONFIG_TEGRA241_CMDQV iommu/arm-smmu-v3: Add ARM_SMMU_OPT_TEGRA241_CMDQV iommu/arm-smmu-v3: Add acpi_smmu_iort_probe_model for impl iommu/arm-smmu-v3: Start a new batch if new command is not supported iommu/tegra241-cmdqv: Limit CMDs for VCMDQs of a guest owned VINTF iommu/tegra241-cmdqv: Fix -Wformat-truncation warnings in lvcmdq_error_header iommu/tegra241-cmdqv: Drop static at local variable iommu/tegra241-cmdqv: Do not allocate vcmdq until dma_set_mask_and_coherent Nikunj Kela (1): dt-bindings: arm-smmu: document the support on SA8255p Rob Clark (1): iommu/arm-smmu: Un-demote unhandled-fault msg Rob Herring (Arm) (1): iommu: Use of_property_present() Sanjay K Kumar (1): iommu/vt-d: Fix potential lockup if qi_submit_sync called with 0 count Suravee Suthikulpanit (1): iommu/amd: Update PASID, GATS, GLX, SNPAVICSUP feature related macros Tina Zhang (3): iommu/vt-d: Factor out invalidation descriptor composition iommu/vt-d: Refactor IOTLB and Dev-IOTLB flush for batching iommu/vt-d: Introduce batched cache invalidation Vasant Hegde (9): iommu/amd: Add blocked domain support iommu/amd: Update event log pointer as soon as processing is complete iommu/amd: Make amd_iommu_is_attach_deferred() static iommu/amd: Remove unused DTE_GCR3_INDEX_* macros iommu/amd: Handle error path in amd_iommu_probe_device() iommu/amd: Make amd_iommu_dev_flush_pasid_all() static iommu/amd: Make amd_iommu_domain_flush_complete() static iommu/amd: Rework amd_iommu_update_and_flush_device_table() iommu/amd: Make amd_iommu_dev_update_dte() static Will Deacon (1): Merge branch 'for-joerg/arm-smmu/bindings' into for-joerg/arm-smmu/updates Zhang Zekun (1): iommu/arm-smmu-v3: Remove the unused empty definition Zhenhua Huang (1): dt-bindings: arm-smmu: Add compatible for QCS8300 SoC Documentation/admin-guide/kernel-parameters.txt | 17 +- .../devicetree/bindings/iommu/arm,smmu.yaml | 5 + MAINTAINERS | 1 + drivers/iommu/Kconfig | 11 + drivers/iommu/amd/amd_iommu.h | 26 +- drivers/iommu/amd/amd_iommu_types.h | 35 +- drivers/iommu/amd/init.c | 16 +- drivers/iommu/amd/io_pgtable.c | 105 +-- drivers/iommu/amd/io_pgtable_v2.c | 56 +- drivers/iommu/amd/iommu.c | 210 +++-- drivers/iommu/amd/pasid.c | 2 +- drivers/iommu/arm/arm-smmu-v3/Makefile | 1 + drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-test.c | 83 +- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 578 +++++++------ drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 135 ++- drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 909 +++++++++++++++++++++ drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 28 + drivers/iommu/arm/arm-smmu/arm-smmu.c | 2 +- drivers/iommu/fsl_pamu_domain.c | 4 +- drivers/iommu/intel/cache.c | 239 ++++-- drivers/iommu/intel/dmar.c | 109 +-- drivers/iommu/intel/iommu.c | 504 +++++------- drivers/iommu/intel/iommu.h | 128 ++- drivers/iommu/intel/nested.c | 3 +- drivers/iommu/intel/pasid.c | 12 +- drivers/iommu/intel/svm.c | 7 +- drivers/iommu/io-pgtable-arm.c | 31 +- drivers/iommu/of_iommu.c | 2 +- drivers/pci/ats.c | 33 + include/linux/io-pgtable.h | 4 + include/linux/pci-ats.h | 3 + 31 files changed, 2259 insertions(+), 1040 deletions(-) create mode 100644 drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c Please pull. Thanks, Joerg . Date: Mon, 16 Sep 2024 11:50:34 +0000 From: Tzung-Bi Shih To: torvalds@linux-foundation.org Cc: tzungbi@kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev Subject: [GIT PULL] chrome-platform changes for v6.12 --I1sVqA+P9SxrzZQb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Linus, Please pull chrome-platform changes for v6.12. Thanks, TzungBi ------ The following changes since commit de9c2c66ad8e787abec7c9d7eff4f8c3cdd28aed: Linux 6.11-rc2 (2024-08-04 13:50:53 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git tags/chrome-platform-for-6.12 for you to fetch changes up to d1b35e6d34e9b46fbf98444dd7aa114c032e9ac0: platform/chrome: chromeos_laptop: Use kmemdup_array (2024-08-23 21:48:43 +0800) ---------------------------------------------------------------- chrome platform changes for 6.12 * Improvements - Adjust DMI match table for Framework Laptop for improving maintainabilities for both legacy and new models. - Add .remove driver callback for cros_ec_typec for allowing the driver to be rebound. - Use kmemdup_array() for taking care possible overflows. ---------------------------------------------------------------- Dustin L. Howett (1): platform/chrome: cros_ec_lpc: switch primary DMI data for Framework Laptop Thadeu Lima de Souza Cascardo (1): platform/chrome: cros_ec_typec: add remove driver hook Yu Jiaoliang (1): platform/chrome: chromeos_laptop: Use kmemdup_array drivers/platform/chrome/chromeos_laptop.c | 7 +++--- drivers/platform/chrome/cros_ec_lpc.c | 36 +++++++++++++++++++++++-------- drivers/platform/chrome/cros_ec_typec.c | 10 +++++++++ 3 files changed, 40 insertions(+), 13 deletions(-) --I1sVqA+P9SxrzZQb Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQS0yQeDP3cjLyifNRUrxTEGBto89AUCZugbigAKCRArxTEGBto8 9JbqAP4gSmeGYr+Wpp/WDYLezcR8Ag9Yg2oA6EDvttljrACQVwEA8KDshHAl52lt VpLGWmcf5q8+WZ7M3t8GBRmvY1LGigI= =E9hl -----END PGP SIGNATURE----- --I1sVqA+P9SxrzZQb-- . Date: Mon, 16 Sep 2024 14:13:58 +0200 From: "Jason A. Donenfeld" To: Linus Torvalds Cc: linux-kernel@vger.kernel.org Subject: [GIT PULL] random number generator updates for 6.12-rc1 Hi Linus, Originally I'd planned on sending each of the vDSO getrandom() architecture ports to their respective arch trees. But as we started to work on this, we found lots of interesting issues in the shared code and infrastructure, the fixes for which the various archs needed to base their work. So in the end, this turned into a nice collaborative effort fixing up issues and porting to 5 new architectures -- arm64, powerpc64, powerpc32, s390x, and loongarch64 -- with everybody pitching in and commenting on each other's code. It was a fun development cycle. This pull request contains: - Numerous fixups to the vDSO selftest infrastructure, getting it running successfully on more platforms, and fixing bugs in it. - Additions to the vDSO getrandom & chacha selftests. Basically every time manual review unearthed a bug in a revision of an arch patch, or an ambiguity, the tests were augmented. By the time the last arch was submitted for review, s390x, v1 of the series was essentially fine right out of the gate. - Fixes to the the generic C implementation of vDSO getrandom, to build and run successfully on all archs, decoupling it from assumptions we had (unintentionally) made on x86_64 that didn't carry through to the other architectures. - Port of vDSO getrandom to LoongArch64, from Xi Ruoyao and acked by Huacai Chen. - Port of vDSO getrandom to ARM64, from Adhemerval Zanella and acked by Will Deacon. - Port of vDSO getrandom to PowerPC, in both 32-bit and 64-bit varieties, from Christophe Leroy and acked by Michael Ellerman. - Port of vDSO getrandom to S390X from Heiko Carstens, the arch maintainer. While it'd be natural for there to be things to fix up over the course of the 6.12 cycle, these patches got a decent amount of review from a fairly diverse crew of folks on the mailing lists, and, for the most part, they've been cooking in linux-next, which has been helpful for ironing out build issues. In terms of architectures, I think that mostly takes care of the important 64-bit archs with hardware still being produced and running production loads in settings where vDSO getrandom is likely to help. Arguably there's still RISC-V left, and we'll see for 6.13 whether they find it useful and submit a port. I haven't seen any merge conflicts from Stephen with linux-next. But this pull does touch lots of different archs, so I was thinking it'd probably make sense to merge this early in the cycle, before merging the architectures pulls from the various archs. But you know best there, of course. On a more personal note, sorry I'm unable to make it to Vienna this year; it would have been nice to talk about things face to face. We'll see about next year. Please pull! Thanks, Jason The following changes since commit d5d547aa7b51467b15d9caa86b116f8c2507c72a: Merge tag 'random-6.11-rc6-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/crng/random (2024-08-29 13:59:18 +1200) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/crng/random.git tags/random-6.12-rc1-for-linus for you to fetch changes up to 210860e7f7337e47e77577fa5bb168767e2d8a1e: selftests: vDSO: check cpu caps before running chacha test (2024-09-16 13:22:04 +0200) ---------------------------------------------------------------- Random number generator updates for Linux 6.12-rc1. ---------------------------------------------------------------- Adhemerval Zanella (1): arm64: vDSO: Wire up getrandom() vDSO implementation Christophe Leroy (21): selftests: vDSO: don't hard-code location of vDSO sources selftests: vDSO: fix include order in build of test_vdso_chacha selftests: vDSO: look for arch-specific function name in getrandom test selftests: vDSO: fix vDSO name for powerpc selftests: vDSO: fix vdso_config for powerpc selftests: vDSO: fix vDSO symbols lookup for powerpc64 selftests: vDSO: fix the way vDSO functions are called for powerpc selftests: vDSO: use parse_vdso.h in vdso_test_abi random: vDSO: don't use 64-bit atomics on 32-bit architectures random: vDSO: add __arch_get_k_vdso_rng_data() helper for data page access random: vDSO: add missing c-getrandom-y in Makefile random: vDSO: avoid call to out of line memset() random: vDSO: minimize and simplify header includes selftests: vDSO: build tests with O2 optimization selftests: vDSO: also test counter in vdso_test_chacha powerpc/vdso: Fix VDSO data access when running in a non-root time namespace mm: Define VM_DROPPABLE for powerpc/32 powerpc/vdso32: Add crtsavres powerpc/vdso: Refactor CFLAGS for CVDSO build powerpc/vdso: Wire up getrandom() vDSO implementation on VDSO32 powerpc/vdso: Wire up getrandom() vDSO implementation on VDSO64 Heiko Carstens (8): selftests: vDSO: fix vdso_config for s390 s390/facility: Disable compile time optimization for decompressor code s390/alternatives: Remove ALT_FACILITY_EARLY s390/facility: Let test_facility() generate static branch if possible s390/module: Provide find_section() helper s390/vdso: Allow alternatives in vdso code s390/vdso: Move vdso symbol handling to separate header file s390/vdso: Wire up getrandom() vdso implementation Jason A. Donenfeld (11): selftests: vDSO: simplify getrandom thread local storage and structs selftests: vDSO: separate LDLIBS from CFLAGS for libsodium selftests: vDSO: remove unnecessary command line defs from chacha test selftests: vDSO: skip getrandom test if architecture is unsupported selftests: vDSO: quash clang omitted parameter warning in getrandom test selftests: vDSO: ensure vgetrandom works in a time namespace random: vDSO: move prototype of arch chacha function to vdso/getrandom.h selftests: vDSO: open code basic chacha instead of linking to libsodium selftests: vDSO: fix cross build for getrandom and chacha tests selftests: vDSO: don't include generated headers for chacha test selftests: vDSO: check cpu caps before running chacha test Jens Remus (1): selftests: vDSO: fix ELF hash table entry size for s390x Mark Rutland (1): arm64: alternative: make alternative_has_cap_likely() VDSO compatible Xi Ruoyao (4): selftests: vDSO: add --cflags for pkg-config command querying libsodium selftests: vDSO: use KHDR_INCLUDES for UAPI headers for getrandom test random: vDSO: add a __vdso_getrandom prototype for all architectures LoongArch: vDSO: Wire up getrandom() vDSO implementation Documentation/ABI/stable/vdso | 8 +- arch/arm64/Kconfig | 1 + arch/arm64/include/asm/alternative-macros.h | 4 + arch/arm64/include/asm/mman.h | 6 +- arch/arm64/include/asm/vdso/getrandom.h | 50 +++ arch/arm64/include/asm/vdso/vsyscall.h | 15 + arch/arm64/kernel/vdso.c | 6 - arch/arm64/kernel/vdso/Makefile | 25 +- arch/arm64/kernel/vdso/vdso.lds.S | 4 + arch/arm64/kernel/vdso/vgetrandom-chacha.S | 172 ++++++++++ arch/arm64/kernel/vdso/vgetrandom.c | 15 + arch/loongarch/Kconfig | 1 + arch/loongarch/include/asm/vdso/getrandom.h | 39 +++ arch/loongarch/include/asm/vdso/vdso.h | 6 + arch/loongarch/include/asm/vdso/vsyscall.h | 8 + arch/loongarch/kernel/vdso.c | 1 + arch/loongarch/vdso/Makefile | 7 +- arch/loongarch/vdso/vdso.lds.S | 1 + arch/loongarch/vdso/vgetrandom-chacha.S | 242 ++++++++++++++ arch/loongarch/vdso/vgetrandom.c | 10 + arch/powerpc/Kconfig | 1 + arch/powerpc/include/asm/mman.h | 2 +- arch/powerpc/include/asm/vdso/getrandom.h | 54 +++ arch/powerpc/include/asm/vdso/vsyscall.h | 6 + arch/powerpc/include/asm/vdso_datapage.h | 17 + arch/powerpc/kernel/asm-offsets.c | 3 + arch/powerpc/kernel/vdso/Makefile | 57 ++-- arch/powerpc/kernel/vdso/cacheflush.S | 2 +- arch/powerpc/kernel/vdso/datapage.S | 4 +- arch/powerpc/kernel/vdso/getrandom.S | 58 ++++ arch/powerpc/kernel/vdso/gettimeofday.S | 13 - arch/powerpc/kernel/vdso/vdso32.lds.S | 1 + arch/powerpc/kernel/vdso/vdso64.lds.S | 1 + arch/powerpc/kernel/vdso/vgetrandom-chacha.S | 365 +++++++++++++++++++++ arch/powerpc/kernel/vdso/vgetrandom.c | 14 + arch/s390/Kconfig | 1 + arch/s390/include/asm/alternative.h | 6 +- arch/s390/include/asm/facility.h | 37 ++- arch/s390/include/asm/fpu-insn-asm.h | 22 ++ arch/s390/include/asm/module.h | 14 + arch/s390/include/asm/vdso-symbols.h | 17 + arch/s390/include/asm/vdso.h | 12 - arch/s390/include/asm/vdso/getrandom.h | 40 +++ arch/s390/include/asm/vdso/vsyscall.h | 15 + arch/s390/kernel/compat_signal.c | 2 +- arch/s390/kernel/entry.S | 2 +- arch/s390/kernel/signal.c | 2 +- arch/s390/kernel/vdso.c | 26 +- arch/s390/kernel/vdso64/Makefile | 9 +- arch/s390/kernel/vdso64/vdso.h | 1 + arch/s390/kernel/vdso64/vdso64.lds.S | 7 + arch/s390/kernel/vdso64/vgetrandom-chacha.S | 185 +++++++++++ arch/s390/kernel/vdso64/vgetrandom.c | 14 + arch/x86/entry/vdso/vgetrandom.c | 2 - arch/x86/entry/vdso/vma.c | 3 + arch/x86/include/asm/pvclock.h | 1 + arch/x86/include/asm/vdso/getrandom.h | 13 - arch/x86/include/asm/vdso/vsyscall.h | 10 +- drivers/char/random.c | 12 +- fs/proc/task_mmu.c | 4 +- include/asm-generic/unaligned.h | 11 +- include/linux/mm.h | 4 +- include/trace/events/mmflags.h | 4 +- include/vdso/getrandom.h | 28 ++ include/vdso/helpers.h | 1 + include/vdso/unaligned.h | 15 + lib/vdso/Makefile | 1 + lib/vdso/getrandom.c | 27 +- tools/arch/arm64/vdso | 1 + tools/arch/loongarch/vdso | 1 + tools/arch/powerpc/vdso | 1 + tools/arch/s390/vdso | 1 + tools/arch/x86/vdso | 1 + tools/include/asm/alternative.h | 10 + tools/include/generated/asm-offsets.h | 0 tools/include/generated/asm/cpucap-defs.h | 0 tools/include/generated/asm/sysreg-defs.h | 0 tools/include/linux/compiler.h | 4 + tools/include/linux/linkage.h | 4 + tools/testing/selftests/vDSO/Makefile | 21 +- tools/testing/selftests/vDSO/parse_vdso.c | 17 +- tools/testing/selftests/vDSO/vdso_call.h | 70 ++++ tools/testing/selftests/vDSO/vdso_config.h | 18 +- tools/testing/selftests/vDSO/vdso_test_abi.c | 14 +- tools/testing/selftests/vDSO/vdso_test_chacha.c | 103 +++++- .../testing/selftests/vDSO/vdso_test_correctness.c | 21 +- tools/testing/selftests/vDSO/vdso_test_getcpu.c | 3 +- tools/testing/selftests/vDSO/vdso_test_getrandom.c | 128 +++++--- .../selftests/vDSO/vdso_test_gettimeofday.c | 3 +- 89 files changed, 1949 insertions(+), 239 deletions(-) create mode 100644 arch/arm64/include/asm/vdso/getrandom.h create mode 100644 arch/arm64/kernel/vdso/vgetrandom-chacha.S create mode 100644 arch/arm64/kernel/vdso/vgetrandom.c create mode 100644 arch/loongarch/include/asm/vdso/getrandom.h create mode 100644 arch/loongarch/vdso/vgetrandom-chacha.S create mode 100644 arch/loongarch/vdso/vgetrandom.c create mode 100644 arch/powerpc/include/asm/vdso/getrandom.h create mode 100644 arch/powerpc/kernel/vdso/getrandom.S create mode 100644 arch/powerpc/kernel/vdso/vgetrandom-chacha.S create mode 100644 arch/powerpc/kernel/vdso/vgetrandom.c create mode 100644 arch/s390/include/asm/vdso-symbols.h create mode 100644 arch/s390/include/asm/vdso/getrandom.h create mode 100644 arch/s390/kernel/vdso64/vgetrandom-chacha.S create mode 100644 arch/s390/kernel/vdso64/vgetrandom.c create mode 100644 include/vdso/unaligned.h create mode 120000 tools/arch/arm64/vdso create mode 120000 tools/arch/loongarch/vdso create mode 120000 tools/arch/powerpc/vdso create mode 120000 tools/arch/s390/vdso create mode 120000 tools/arch/x86/vdso create mode 100644 tools/include/generated/asm-offsets.h create mode 100644 tools/include/generated/asm/cpucap-defs.h create mode 100644 tools/include/generated/asm/sysreg-defs.h create mode 100644 tools/testing/selftests/vDSO/vdso_call.h . Date: Mon, 16 Sep 2024 07:35:05 -0600 From: Jonathan Corbet To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Subject: [GIT PULL] Documentation for 6.12 The following changes since commit 431c1646e1f86b949fa3685efc50b660a364c2b6: Linux 6.11-rc6 (2024-09-01 19:46:02 +1200) are available in the Git repository at: git://git.lwn.net/linux.git tags/docs-6.12 for you to fetch changes up to 4f77c3462308c62ffe7129cc18b9ac937f44b5a5: Remove duplicate "and" in 'Linux NVMe docs. (2024-09-10 15:44:20 -0600) ---------------------------------------------------------------- Another relatively mundane cycle for docs: - The beginning of an EEVDF scheduler document - More Chinese translations - A rethrashing of our bisection documentation ...plus the usual array of smaller fixes, and more than the usual number of typo fixes. ---------------------------------------------------------------- Abdul Rahim (1): Documentation: PCI: fix typo in pci.rst Akira Yokosawa (1): docs: kerneldoc-preamble.sty: Suppress extra spaces in CJK literal bl= ocks Alyssa Ross (1): Documentation: ioctl: document 0x07 ioctl code Amit Vadhavana (1): Documentation: Fix spelling mistakes Andrew Kreimer (2): accel/qaic: Fix a typo docs/process: fix typos Aryabhatta Dey (3): docs: process: fix typos in Documentation/process/backporting.rst docs: leds: fix typo in Documentation/leds/leds-mlxcpld.rst Documentation/gpu: Fix typo in Documentation/gpu/komeda-kms.rst Benjamin Poirier (1): Documentation: Add detailed explanation for 'N' taint flag Bibo Mao (1): Loongarch: KVM: Add KVM hypercalls documentation for LoongArch Breno Leitao (1): docs: fault-injection: document cache-filter feature for failslab Carlos Bilbao (1): docs: scheduler: Start documenting the EEVDF scheduler Dave Martin (1): docs/core-api: memory-allocation: GFP_NOWAIT doesn't need __GFP_NOWARN David Hunter (1): Documentation: Capitalize Fahrenheit in watchdog-api.rst Dennis Lam (4): docs:mm: fix spelling mistakes in heterogeneous memory management page docs:mm: fixed spelling and grammar mistakes on vmalloc kernel stack = page docs:filesystem: fix mispelled words on autofs page docs:filesystems: fix spelling and grammar mistakes Dongliang Mu (6): docs/zh_CN: add the translation of kbuild/headers_install.rst scripts: fix all issues reported by pylint doc-guide: add help documentation checktransupdate.rst docs/zh_CN: fix a broken reference docs/zh_CN: update the translation of security-bugs docs/zh_CN: add the translation of kbuild/gcc-plugins.rst Dr. David Alan Gilbert (1): Documentation/fs/9p: Expand goo.gl link Gianfranco Trad (1): Fix typo "allocateed" to allocated Guilherme G. Piccoli (1): Documentation: Document the kernel flag bdev_allow_write_mounted Haoyang Liu (2): docs/zh_CN: Add dev-tools/kcsan Chinese translation docs: update dev-tools/kcsan.rst url about KTSAN I Hsin Cheng (1): docs: scheduler: completion: Update member of struct completion Jakub Kicinski (1): MAINTAINERS: add Documentation/dev-tools/ to workflows@ Jani Nikula (2): get_maintainer: add --bug option to print bug reporting info Documentation: admin-guide: direct people to bug trackers, if specifi= ed Jiamu Sun (1): docs: improve comment consistency in .muttrc example configuration Jonathan Corbet (1): Merge tag 'v6.11-rc6' into docs-mw Karol Przybylski (1): docs: block: Fix grammar and spelling mistakes in bfq-iosched.rst Mark Brown (1): docs: submitting-patches: Advertise b4 Ming Lei (1): Documentation: add ublk driver ioctl numbers Philipp Stanner (1): Documentation: devres: fix error about PCI devres Sebastian Muxel (1): scripts: sphinx-pre-install: remove unnecessary double check for $cur= _version SeongJae Park (2): Docs/translations/ko_KR: link howto.rst with other language versions Docs/translations/ko_KR: link memory-barriers wrapper with other lang= uage versions Sergio Gonz=C3=A1lez Collado (1): docs/sp_Sp: Add translation to spanish of the documentation related t= o EEVDF Shibu Kumar (1): docs: dm-crypt: Removal of unexpected indentation error Shivam Chaudhary (1): Remove duplicate "and" in 'Linux NVMe docs. Thorsten Leemhuis (1): docs: bug-bisect: rewrite to better match the other bisecting text Thorsten Scherer (1): doc: iio: Fix sysfs paths ganjie (1): Documentation: dontdiff: remove 'utf8data.h' Documentation/PCI/pci.rst | 2 +- Documentation/accel/qaic/qaic.rst | 2 +- Documentation/admin-guide/bug-bisect.rst | 208 +++++++++----- Documentation/admin-guide/bug-hunting.rst | 17 +- .../admin-guide/device-mapper/dm-crypt.rst | 11 +- Documentation/admin-guide/kernel-parameters.txt | 12 + Documentation/admin-guide/tainted-kernels.rst | 2 + .../arch/arm/stm32/stm32-dma-mdma-chaining.rst | 4 +- Documentation/arch/arm64/cpu-hotplug.rst | 2 +- Documentation/arch/powerpc/ultravisor.rst | 2 +- Documentation/arch/riscv/vector.rst | 2 +- Documentation/arch/x86/mds.rst | 2 +- Documentation/arch/x86/x86_64/fsgs.rst | 4 +- Documentation/block/bfq-iosched.rst | 22 +- Documentation/core-api/memory-allocation.rst | 5 +- Documentation/dev-tools/kcsan.rst | 3 +- Documentation/doc-guide/checktransupdate.rst | 54 ++++ Documentation/doc-guide/index.rst | 1 + Documentation/dontdiff | 2 +- Documentation/driver-api/driver-model/devres.rst | 2 +- Documentation/driver-api/iio/buffers.rst | 8 +- Documentation/driver-api/iio/core.rst | 14 +- Documentation/fault-injection/fault-injection.rst | 22 +- Documentation/filesystems/9p.rst | 2 +- Documentation/filesystems/autofs.rst | 4 +- Documentation/filesystems/journalling.rst | 6 +- Documentation/gpu/komeda-kms.rst | 2 +- Documentation/leds/leds-mlxcpld.rst | 2 +- Documentation/mm/hmm.rst | 10 +- Documentation/mm/vmalloced-kernel-stacks.rst | 8 +- Documentation/nvme/feature-and-quirk-policy.rst | 6 +- Documentation/process/backporting.rst | 6 +- Documentation/process/coding-style.rst | 2 +- Documentation/process/email-clients.rst | 2 +- Documentation/process/maintainer-tip.rst | 2 +- Documentation/process/submitting-patches.rst | 8 + Documentation/scheduler/completion.rst | 2 +- Documentation/scheduler/index.rst | 1 + Documentation/scheduler/sched-design-CFS.rst | 10 +- Documentation/scheduler/sched-eevdf.rst | 43 +++ Documentation/sphinx/kerneldoc-preamble.sty | 2 + .../ko_KR/core-api/wrappers/memory-barriers.rst | 18 ++ Documentation/translations/ko_KR/index.rst | 16 +- .../translations/ko_KR/{ =3D> process}/howto.rst | 0 .../translations/sp_SP/scheduler/index.rst | 1 + .../sp_SP/scheduler/sched-design-CFS.rst | 8 +- .../translations/sp_SP/scheduler/sched-eevdf.rst | 58 ++++ .../translations/zh_CN/admin-guide/index.rst | 1 - .../zh_CN/admin-guide/reporting-issues.rst | 4 +- .../translations/zh_CN/dev-tools/index.rst | 2 +- .../translations/zh_CN/dev-tools/kcsan.rst | 320 +++++++++++++++++= ++++ .../zh_CN/doc-guide/checktransupdate.rst | 55 ++++ .../translations/zh_CN/doc-guide/index.rst | 1 + Documentation/translations/zh_CN/index.rst | 2 +- .../translations/zh_CN/kbuild/gcc-plugins.rst | 126 ++++++++ .../translations/zh_CN/kbuild/headers_install.rst | 39 +++ Documentation/translations/zh_CN/kbuild/index.rst | 35 +++ Documentation/translations/zh_CN/process/index.rst | 3 +- .../{admin-guide =3D> process}/security-bugs.rst | 42 +-- .../zh_CN/process/submitting-patches.rst | 2 +- .../zh_TW/admin-guide/reporting-issues.rst | 4 +- .../zh_TW/process/submitting-patches.rst | 2 +- Documentation/userspace-api/ioctl/ioctl-number.rst | 2 + Documentation/virt/kvm/index.rst | 1 + Documentation/virt/kvm/loongarch/hypercalls.rst | 89 ++++++ Documentation/virt/kvm/loongarch/index.rst | 10 + Documentation/watchdog/watchdog-api.rst | 2 +- MAINTAINERS | 3 + scripts/checktransupdate.py | 214 +++++++++----- scripts/get_maintainer.pl | 17 +- scripts/sphinx-pre-install | 2 - 71 files changed, 1329 insertions(+), 271 deletions(-) create mode 100644 Documentation/doc-guide/checktransupdate.rst create mode 100644 Documentation/scheduler/sched-eevdf.rst create mode 100644 Documentation/translations/ko_KR/core-api/wrappers/memo= ry-barriers.rst rename Documentation/translations/ko_KR/{ =3D> process}/howto.rst (100%) create mode 100644 Documentation/translations/sp_SP/scheduler/sched-eevdf.= rst create mode 100644 Documentation/translations/zh_CN/dev-tools/kcsan.rst create mode 100644 Documentation/translations/zh_CN/doc-guide/checktransup= date.rst create mode 100644 Documentation/translations/zh_CN/kbuild/gcc-plugins.rst create mode 100644 Documentation/translations/zh_CN/kbuild/headers_install= .rst create mode 100644 Documentation/translations/zh_CN/kbuild/index.rst rename Documentation/translations/zh_CN/{admin-guide =3D> process}/securit= y-bugs.rst (57%) create mode 100644 Documentation/virt/kvm/loongarch/hypercalls.rst create mode 100644 Documentation/virt/kvm/loongarch/index.rst . Date: Mon, 16 Sep 2024 15:54:44 +0200 From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, Lee Jones , Linus Walleij , Bartosz Golaszewski Subject: [GIT PULL] pwm: Changes for 6.12-rc1 --adbwfppeizvdptnh Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello Linus, the following changes since commit 10c48e9a8fd5e524d37559cf4a06039b4c25db48: pwm: stm32: Use the right CCxNP bit in stm32_pwm_enable() (2024-09-05 11:= 12:01 +0200) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux.git tags/p= wm/for-6.12-rc1 for you to fetch changes up to d242feaf81d63b25d8c1fb1a68738dc33966a376: pwm: stm32: Fix a typo (2024-09-16 15:24:59 +0200) This is mostly what is in next for a while, I just found a broken commit hash in a Fixes line during my last-minute-pre-PR checks, so I rewrote 00576dc859b82267e65b600dedc762d258f35e43 to a550d6ae4d73dc4b9f1a2b3ad3d8d9e355b396be. The commits above changed their IDs accordingly and the top commit is relatively new (but an obvious spelling fix in a code comment, so should be harmless). Please pull for v6.12-rc1. Greetings to Vienna, Uwe ---------------------------------------------------------------- pwm: Changes for v6.12-rc1 This pull request contains some cleanups to the core and some mostly minor updates to a bunch of drivers and device tree bindings. One thing worth pointing out is that it contains an immutable branch containing support for a new mfd chip (Analog Devices ADP5585) with several sub drivers. So expect to get the four affected commits also from my fellow MFD and GPIO maintainers. Thanks go to Andrew Kreimer, Clark Wang, Conor Dooley, David Lechner, Dmitry Rokosov, Frank Li, Geert Uytterhoeven, George Stark, Jiapeng Chong, Krzysztof Kozlowski, Laurent Pinchart, Liao Chen, Liu Ying, Rob Herring and Wolfram Sang for code contributions and reviews and to Lee Jones for preparing the above mentioned immutable branch. ---------------------------------------------------------------- Andrew Kreimer (1): pwm: stm32: Fix a typo Clark Wang (1): pwm: adp5585: Add Analog Devices ADP5585 support David Lechner (1): pwm: axi-pwmgen: use shared macro for version reg George Stark (2): dt-bindings: pwm: amlogic: Add optional power-domains dt-bindings: pwm: amlogic: Add new bindings for meson A1 PWM Haibo Chen (2): mfd: adp5585: Add Analog Devices ADP5585 core support gpio: adp5585: Add Analog Devices ADP5585 support Jiapeng Chong (1): pwm: lp3943: Fix an incorrect type in lp3943_pwm_parse_dt() Krzysztof Kozlowski (1): dt-bindings: pwm: allwinner,sun4i-a10-pwm: add top-level constraints Laurent Pinchart (1): dt-bindings: mfd: Add Analog Devices ADP5585 Liao Chen (2): pwm: atmel-hlcdc: Enable module autoloading pwm: atmel-hlcdc: Drop trailing comma Liu Ying (1): pwm: adp5585: Set OSC_EN bit to 1 when PWM state is enabled Rob Herring (Arm) (2): pwm: lp3943: Use of_property_count_u32_elems() to get property length pwm: omap-dmtimer: Use of_property_read_bool() Uwe Kleine-K=F6nig (5): pwm: Make info in traces about affected pwm more useful pwm: Don't export pwm_capture() pwm: Simplify pwm_capture() Merge tag 'ib-mfd-gpio-pwm-v6.12' of https://git.kernel.org/pub/scm/l= inux/kernel/git/lee/mfd pwm: Switch back to struct platform_driver::remove() Wolfram Sang (2): dt-bindings: pwm: renesas,pwm-rcar: Add r8a779h0 support dt-bindings: pwm: renesas,tpu: Add r8a779h0 support .../devicetree/bindings/mfd/adi,adp5585.yaml | 92 +++++++++ .../bindings/pwm/allwinner,sun4i-a10-pwm.yaml | 9 +- .../devicetree/bindings/pwm/pwm-amlogic.yaml | 17 ++ .../devicetree/bindings/pwm/renesas,pwm-rcar.yaml | 1 + .../devicetree/bindings/pwm/renesas,tpu-pwm.yaml | 1 + .../devicetree/bindings/trivial-devices.yaml | 4 - MAINTAINERS | 11 + drivers/gpio/Kconfig | 7 + drivers/gpio/Makefile | 1 + drivers/gpio/gpio-adp5585.c | 229 +++++++++++++++++= ++++ drivers/mfd/Kconfig | 12 ++ drivers/mfd/Makefile | 1 + drivers/mfd/adp5585.c | 205 ++++++++++++++++++ drivers/pwm/Kconfig | 7 + drivers/pwm/Makefile | 1 + drivers/pwm/core.c | 13 +- drivers/pwm/pwm-adp5585.c | 188 +++++++++++++++++ drivers/pwm/pwm-atmel-hlcdc.c | 7 +- drivers/pwm/pwm-atmel-tcb.c | 2 +- drivers/pwm/pwm-axi-pwmgen.c | 3 +- drivers/pwm/pwm-clk.c | 2 +- drivers/pwm/pwm-hibvt.c | 2 +- drivers/pwm/pwm-img.c | 2 +- drivers/pwm/pwm-lp3943.c | 10 +- drivers/pwm/pwm-lpc18xx-sct.c | 2 +- drivers/pwm/pwm-omap-dmtimer.c | 4 +- drivers/pwm/pwm-rcar.c | 2 +- drivers/pwm/pwm-rockchip.c | 2 +- drivers/pwm/pwm-sifive.c | 2 +- drivers/pwm/pwm-stm32.c | 2 +- drivers/pwm/pwm-sun4i.c | 2 +- drivers/pwm/pwm-tegra.c | 2 +- drivers/pwm/pwm-tiecap.c | 2 +- drivers/pwm/pwm-tiehrpwm.c | 2 +- include/linux/mfd/adp5585.h | 126 ++++++++++++ include/linux/pwm.h | 10 - include/trace/events/pwm.h | 10 +- 37 files changed, 939 insertions(+), 56 deletions(-) create mode 100644 Documentation/devicetree/bindings/mfd/adi,adp5585.yaml create mode 100644 drivers/gpio/gpio-adp5585.c create mode 100644 drivers/mfd/adp5585.c create mode 100644 drivers/pwm/pwm-adp5585.c create mode 100644 include/linux/mfd/adp5585.h --adbwfppeizvdptnh Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEP4GsaTp6HlmJrf7Tj4D7WH0S/k4FAmboOJ0ACgkQj4D7WH0S /k65/AgAoyg7UCCQCzgF67GIarTypBoLD8MqPL5gyZ5+BB55wChr/gMSfVcfDGDJ VOo0H0U0ZNQk5FXfwvcYd4YKjEAs3fGxR+laNTs/QNCPZgyVQ+oqV+I/AEmYml/+ x/FJOVmbXNBmgFw4NlYirZK7uhayhRdVOtxu9Y67sp/z3FgqrMR0IScf/fBvkBLk sqPeAB2HqyfxUtBkUSC0hOweYzTBmiVxD8Sc6q5g1Gm9+cNz7pgVuxB7dMmvDPqe SE5R6uCi9ZarMH77a+IUce53UMCPgNBcL90iI+LSFRvtEqVNtocDn/WaHIaIHg57 ovIG3PqKLe1f/BpC9OyitzdKQ3BZbQ== =24vQ -----END PGP SIGNATURE----- --adbwfppeizvdptnh-- . Date: Mon, 16 Sep 2024 16:32:07 +0200 From: Geert Uytterhoeven To: Linus Torvalds Cc: Andrew Morton , Greg Ungerer , linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [GIT PULL] m68k updates for v6.12 Hi Linus, The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git tags/m68k-for-v6.12-tag1 for you to fetch changes up to b90fae5df91744e45e683c17bb1a38e466770df3: m68k: defconfig: Update defconfigs for v6.11-rc1 (2024-08-26 10:25:02 +0200) ---------------------------------------------------------------- m68k updates for v6.12 - Use swap() helper for __arch_xchg(), - Fix kernel_clone_args.flags in m68k_clone(), - Defconfig updates. Thanks for pulling! ---------------------------------------------------------------- Finn Thain (1): m68k: Fix kernel_clone_args.flags in m68k_clone() Geert Uytterhoeven (1): m68k: defconfig: Update defconfigs for v6.11-rc1 Thorsten Blum (1): m68k: cmpxchg: Use swap() to improve code arch/m68k/configs/amiga_defconfig | 2 -- arch/m68k/configs/apollo_defconfig | 2 -- arch/m68k/configs/atari_defconfig | 2 -- arch/m68k/configs/bvme6000_defconfig | 2 -- arch/m68k/configs/hp300_defconfig | 2 -- arch/m68k/configs/mac_defconfig | 2 -- arch/m68k/configs/multi_defconfig | 2 -- arch/m68k/configs/mvme147_defconfig | 2 -- arch/m68k/configs/mvme16x_defconfig | 2 -- arch/m68k/configs/q40_defconfig | 2 -- arch/m68k/configs/sun3_defconfig | 2 -- arch/m68k/configs/sun3x_defconfig | 2 -- arch/m68k/include/asm/cmpxchg.h | 15 +++++---------- arch/m68k/kernel/process.c | 2 +- 14 files changed, 6 insertions(+), 35 deletions(-) Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds . Date: Mon, 16 Sep 2024 16:43:55 +0200 From: Petr Mladek To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, live-patching@vger.kernel.org Subject: [GIT PULL] livepatching for 6.12 Hi Linus, please pull the latest changes for the kernel livepatching from git://git.kernel.org/pub/scm/linux/kernel/git/livepatching/livepatching.git tags/livepatching-for-6.12 ======================================= - Small documentation improvement. ---------------------------------------------------------------- Bagas Sanjaya (1): Documentation: livepatch: Correct release locks antonym Documentation/livepatch/livepatch.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) . Date: Mon, 16 Sep 2024 16:53:52 +0200 From: Ulf Hansson To: Linus , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Ulf Hansson Subject: [GIT PULL] MMC updates for v6.12 Hi Linus, Here's the pull-request for MMC v6.12. Please note, this pull-request also introduces a new subsystem for so called Replay Protected Memory Block (RPMB) in drivers/misc/. The first provider that implements RPMB support is the MMC subsystem for eMMC cards, while the consumer is the tee/optee subsystem. More details are available in the commit message that introduces the RPMB subsystem along with the usual highlights for MMC in the signed tag. Please pull this in! Kind regards Ulf Hansson The following changes since commit aea62c744a9ae2a8247c54ec42138405216414da: mmc: cqhci: Fix checking of CQHCI_HALT state (2024-09-03 14:20:51 +0200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git tags/mmc-v6.12 for you to fetch changes up to cd3689b6772fbc1a4513934a5204fd2fa5b4426b: mmc: core: Use dev_err_probe for deferred regulators (2024-09-13 14:09:29 +0200) ---------------------------------------------------------------- MMC core: - Add documentation for the mmc-test driver - Register the eMMC RPMB partition with the RPMB subsystem - Some various cleanups MMC host: - dw_mmc-rockchip: Add support for the RK3576 variant - renesas_sdhi: Add support for the RZ/V2H(P) variant - sdhci_am654: Add a retry mechanism for tuning - sdhci-atmel: Convert DT bindings to json schema - sdhci-of-dwcmshc: Add eMMC HW reset support for BlueField-3 SoC - sdhci-of-dwcmshc: Add support for the RK3576 variant - sdhci-of-dwcmshc: Add support for the Sophgo SG2042 variant - sdhci-of-ma35d1: Add new driver for the Nuvoton MA35D1 SDHCI Misc/Tee: - Add Replay Protected Memory Block (RPMB) subsystem - Let optee probe RPMB device using RPMB subsystem ---------------------------------------------------------------- Alexander Stein (1): mmc: core: Use dev_err_probe for deferred regulators Avri Altman (2): mmc: core Convert UNSTUFF_BITS macro to inline function Documentation: mmc: Add mmc-test doc Chanwoo Lee (1): mmc: core: Replace the argument of mmc_sd_switch() with defines Chen Wang (7): mmc: sdhci-of-dwcmshc: add common bulk optional clocks support mmc: sdhci-of-dwcmshc: move two rk35xx functions mmc: sdhci-of-dwcmshc: factor out code for th1520_init() mmc: sdhci-of-dwcmshc: factor out code into dwcmshc_rk35xx_init mmc: sdhci-of-dwcmshc: add dwcmshc_pltfm_data dt-bindings: mmc: sdhci-of-dwcmhsc: Add Sophgo SG2042 support mmc: sdhci-of-dwcmshc: Add support for Sophgo SG2042 Christophe JAILLET (1): mmc: core: Remove struct mmc_context_info Dan Carpenter (1): optee: Fix a NULL vs IS_ERR() check Detlev Casanova (3): dt-bindings: mmc: Add support for rk3576 dw-mshc mmc: dw_mmc-rockchip: Add support for rk3576 SoCs dt-bindings: mmc: Add support for rk3576 eMMC Dharma Balasubiramani (1): dt-bindings: mmc: sdhci-atmel: Convert to json schema Doug Brown (1): mmc: sdhci-pxav2: Remove unnecessary null pointer check Jens Wiklander (7): rpmb: add Replay Protected Memory Block (RPMB) subsystem mmc: block: register RPMB partition with the RPMB subsystem tee: add tee_device_set_dev_groups() optee: probe RPMB device using RPMB subsystem mmc: block: add RPMB dependency optee: add RPMB dependency rpmb: fix error path in rpmb_dev_register() Judith Mendez (2): mmc: sdhci_am654: Add retry tuning mmc: sdhci_am654: Add prints to tuning algorithm Krzysztof Kozlowski (1): dt-bindings: mmc: renesas,sdhi: add top-level constraints Lad Prabhakar (4): dt-bindings: mmc: renesas,sdhi: Document RZ/V2H(P) support mmc: tmio: Use MMC core APIs to control the vqmmc regulator mmc: renesas_sdhi: Add RZ/V2H(P) compatible string dt-bindings: mmc: renesas,sdhi: Remove duplicate compatible and add clock checks Liming Sun (1): mmc: sdhci-of-dwcmshc: Add hw_reset() support for BlueField-3 SoC Riyan Dhiman (2): mmc: core: Calculate size from pointer mmc: core: Convert simple_stroul to kstroul Seunghwan Baek (1): mmc: cqhci: Make use of cqhci_halted() routine Shan-Chun Hung (2): dt-bindings: mmc: nuvoton,ma35d1-sdhci: Document MA35D1 SDHCI controller mmc: sdhci-of-ma35d1: Add Nuvoton MA35D1 SDHCI driver Shawn Lin (1): mmc: dw_mmc-rockchip: Add internal phase support Thorsten Blum (1): mmc: mtk-sd: Improve data type in msdc_timeout_cal() Ulf Hansson (3): mmc: Merge branch fixes into next mmc: Merge branch fixes into next mmc: Merge branch fixes into next Vladimir Zapolskiy (1): mmc: core: remove left-over data structure declarations Documentation/ABI/testing/sysfs-class-tee | 15 + .../bindings/mmc/atmel,sama5d2-sdhci.yaml | 92 ++++ .../bindings/mmc/nuvoton,ma35d1-sdhci.yaml | 87 ++++ .../devicetree/bindings/mmc/renesas,sdhi.yaml | 13 +- .../devicetree/bindings/mmc/rockchip-dw-mshc.yaml | 2 + .../devicetree/bindings/mmc/sdhci-atmel.txt | 35 -- .../bindings/mmc/snps,dwcmshc-sdhci.yaml | 95 ++-- Documentation/driver-api/mmc/index.rst | 1 + Documentation/driver-api/mmc/mmc-test.rst | 299 +++++++++++++ MAINTAINERS | 8 + drivers/misc/Kconfig | 10 + drivers/misc/Makefile | 1 + drivers/misc/rpmb-core.c | 231 ++++++++++ drivers/mmc/core/Kconfig | 1 + drivers/mmc/core/block.c | 250 ++++++++++- drivers/mmc/core/mmc.c | 106 ++--- drivers/mmc/core/mmc_ops.h | 14 + drivers/mmc/core/regulator.c | 8 +- drivers/mmc/core/sd.c | 133 +++--- drivers/mmc/core/sd_ops.c | 3 +- drivers/mmc/host/Kconfig | 12 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/cqhci-core.c | 14 +- drivers/mmc/host/dw_mmc-rockchip.c | 217 +++++++++- drivers/mmc/host/mtk-sd.c | 11 +- drivers/mmc/host/renesas_sdhi_internal_dmac.c | 1 + drivers/mmc/host/sdhci-of-dwcmshc.c | 478 ++++++++++++++------- drivers/mmc/host/sdhci-of-ma35d1.c | 314 ++++++++++++++ drivers/mmc/host/sdhci-pxav2.c | 2 +- drivers/mmc/host/sdhci_am654.c | 54 ++- drivers/mmc/host/tmio_mmc_core.c | 7 +- drivers/tee/optee/Kconfig | 1 + drivers/tee/optee/core.c | 96 ++++- drivers/tee/optee/device.c | 7 + drivers/tee/optee/ffa_abi.c | 14 + drivers/tee/optee/optee_ffa.h | 2 + drivers/tee/optee/optee_private.h | 26 +- drivers/tee/optee/optee_rpc_cmd.h | 35 ++ drivers/tee/optee/optee_smc.h | 2 + drivers/tee/optee/rpc.c | 177 ++++++++ drivers/tee/optee/smc_abi.c | 14 + drivers/tee/tee_core.c | 19 +- include/linux/mmc/core.h | 12 - include/linux/mmc/host.h | 27 +- include/linux/rpmb.h | 123 ++++++ include/linux/tee_core.h | 12 + 46 files changed, 2633 insertions(+), 449 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-class-tee create mode 100644 Documentation/devicetree/bindings/mmc/atmel,sama5d2-sdhci.yaml create mode 100644 Documentation/devicetree/bindings/mmc/nuvoton,ma35d1-sdhci.yaml delete mode 100644 Documentation/devicetree/bindings/mmc/sdhci-atmel.txt create mode 100644 Documentation/driver-api/mmc/mmc-test.rst create mode 100644 drivers/misc/rpmb-core.c create mode 100644 drivers/mmc/host/sdhci-of-ma35d1.c create mode 100644 include/linux/rpmb.h . Date: Mon, 16 Sep 2024 16:29:47 +0000 From: "Arnd Bergmann" To: "Linus Torvalds" Cc: soc@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [GIT PULL 0/4] Hi Linus, These are the usual four branches from the SoC tree, with around 900 non-merge changesets from 220 individual authors. I hope to send one more pull request later for the conversion of ep93xx to devicetree, but I still applied regression fixes to that one today so I'm giving it some more time to make sure it won't cause other stuff to fail. There are four platforms that make up most of the changes by size and number of patches: - NXP gets a lot of minor DT improvements as well as a good chunk of the driver updates, but only three new machines. - Rockchips and Aspeed have the largest size overall, mainly from new board additions, so there are fewer patches. - Qualcomm as usual has a lot of everything including several new Snapdragon X1E laptops. Another small but notable addition is initial support for the Raspberry Pi 5, which has taken a while to get into shape. The driver changes are somewhat larger than normal, but are still dwarfed by the devicetree updates. The most active contributers by number of patches are: 62 Krzysztof Kozlowski 43 Frank Li 37 Herve Codina 35 Nikita Shubin 22 Heiko Stuebner 18 Yang Chen 16 Marek Beh=C3=BAn 16 Geert Uytterhoeven 15 Peng Fan 14 Markus Niebel 14 Lad Prabhakar 14 Beleswar Padhi 12 Xianwei Zhao 12 Rayyan Ansari 11 Svyatoslav Ryhel 11 Peter Yin 11 Konrad Dybcio 11 Fabio Estevam 11 Dang Huynh 11 Cristian Marussi 11 Alexander Stein 10 Sudeep Holla 10 Marek Vasut 10 Diogo Ivo Dirstat: 0.4% Documentation/devicetree/bindings/arm/ 0.7% Documentation/devicetree/bindings/clock/ 0.6% Documentation/devicetree/bindings/pinctrl/ 0.7% Documentation/devicetree/bindings/soc/fsl/cpm_qe/ 0.3% Documentation/devicetree/bindings/soc/ 0.6% Documentation/devicetree/bindings/ 11.3% arch/arm/boot/dts/aspeed/ 1.6% arch/arm/boot/dts/broadcom/ 0.3% arch/arm/boot/dts/microchip/ 2.6% arch/arm/boot/dts/nvidia/ 2.1% arch/arm/boot/dts/nxp/imx/ 1.3% arch/arm/boot/dts/qcom/ 0.6% arch/arm/boot/dts/rockchip/ 1.9% arch/arm/boot/dts/st/ 0.3% arch/arm/boot/dts/ 0.4% arch/arm/ 2.1% arch/arm64/boot/dts/amlogic/ 0.5% arch/arm64/boot/dts/broadcom/ 9.8% arch/arm64/boot/dts/freescale/ 1.7% arch/arm64/boot/dts/mediatek/ 0.3% arch/arm64/boot/dts/nuvoton/ 1.6% arch/arm64/boot/dts/nvidia/ 9.5% arch/arm64/boot/dts/qcom/ 4.1% arch/arm64/boot/dts/renesas/ 20.2% arch/arm64/boot/dts/rockchip/ 2.8% arch/arm64/boot/dts/ti/ 0.6% arch/arm64/boot/dts/ 0.3% arch/riscv/boot/dts/sophgo/ 0.4% drivers/firmware/arm_ffa/ 1.0% drivers/firmware/arm_scmi/transports/ 4.5% drivers/firmware/arm_scmi/vendors/imx/ 1.6% drivers/firmware/arm_scmi/ 0.2% drivers/firmware/imx/ 0.8% drivers/firmware/ 0.3% drivers/input/keyboard/ 0.2% drivers/memory/samsung/ 0.8% drivers/memory/tegra/ 0.5% drivers/memory/ 1.1% drivers/reset/ 0.2% drivers/rtc/ 2.9% drivers/soc/fsl/qe/ 0.3% drivers/soc/mediatek/ 0.6% drivers/soc/qcom/ 0.5% drivers/soc/ti/ 0.3% drivers/soc/ 1.5% include/dt-bindings/clock/ 0.2% include/linux/ . Date: Mon, 16 Sep 2024 09:45:26 -0700 From: Guenter Roeck To: Linus Torvalds Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] hwmon updates for v6.12 Hi Linus, Please pull hwmon updates for Linux v6.12 from signed tag: git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-for-v6.12 Thanks, Guenter ------ The following changes since commit 8400291e289ee6b2bf9779ff1c83a291501f017b: Linux 6.11-rc1 (2024-07-28 14:19:55 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git tags/hwmon-for-v6.12 for you to fetch changes up to 2cb4acf2140be8a4f299c0b887cc314845ef6ec8: hwmon: Remove devm_hwmon_device_unregister() API function (2024-09-13 07:27:36 -0700) ---------------------------------------------------------------- hwmon updates for v6.12 * New drivers - Driver for Sophgo SG2042 external hardware monitor - Thermal sensor driver for Surface Aggregator Module * Added support to existing drivers - oxp-sensors: Support for multiple new devices. - nct6775: Added G15CF to ASUS WMI monitoring list * Modernizations - ina2xx: Driver cleanup and update to use with_info API - lm92: Driver cleanup and update to use regmap and with_info API - lm95234: Driver cleanup and update to use regmap and with_info API - max1619: Driver cleanup and update to use regmap and with_info API - max1668: Driver cleanup and update to use regmap and with_info API - max6697: Driver cleanup and update to use regmap and with_info API * API updates - Removed unused devm_hwmon_device_unregister() API function * Other notable changes - Implement and use generic bus access delay for pmbus drivers - Use with scoped for each OF child loop in several drivers - Module unloading fixes for gsc-hwmon and ntc_thermistor drivers - Converted various drivers to use multi-byte regmap operations - adt7475: Improved devicetree based configuration - ltc2947: Move to firmware agnostic API - ltc2978: Converted devicetree description to yaml - max16065: Addressed overflows when writing limit attributes * Various other minor cleanups, fixes and improvements ---------------------------------------------------------------- Andy Shevchenko (2): hwmon: (sht21) Use %*ph to print small buffer hwmon: (sch5636) Print unknown ID in error string via %*pE Armin Wolf (1): hwmon: (dell-smm) Add Dell Latitude 7320 to fan control whitelist Chanh Nguyen (1): dt-bindings: hwmon: Add maxim max31790 Chris Packham (3): dt-bindings: hwmon: Add adt7475 fan/pwm properties dt-bindings: hwmon: adt7475: Deprecate adi,pwm-active-state hwmon: (adt7475) Add support for configuring initial PWM state Christophe JAILLET (1): hwmon: (pmbus/mpq7932) Constify struct regulator_desc Cryolitia PukNgae (1): hwmon: (oxp-sensors) Fix typo in driver documentation Denis Pauk (1): hwmon: (nct6775) add G15CF to ASUS WMI monitoring list Derek J. Clark (1): hwmon: (oxp-sensors) Add support for multiple new devices. Frank Li (1): dt-bindings: hwmon: Convert ltc2978.txt to yaml Guenter Roeck (56): hwmon: (adt7470) Use multi-byte regmap operations hwmon: (tmp401) Use multi-byte regmap operations hwmon: (lm95245) Use multi-byte regmap operations hwmon: (nct7802) Use multi-byte regmap operations hwmon: (adt7x10) Use multi-byte regmap operations hwmon: (tmp464) Use multi-byte regmap operations hwmon: (max6639) Use multi-byte regmap operations hwmon: (amc6821) Use multi-byte regmap operations hwmon: (lm95234) Reorder include files to be in alphabetic order hwmon: (lm95234) Use find_closest to find matching update interval hwmon: (lm95234) Convert to use regmap hwmon: (lm95234) Convert to with_info hwmon API hwmon: (lm95234) Add support for tempX_enable attribute hwmon: (lm95234) Use multi-byte regmap operations hwmon: (max16065) Fix overflows seen when writing limits hwmon: (max16065) Fix alarm attributes hwmon: (max6697) Reorder include files hwmon: (max6697) Drop platform data support hwmon: (max6697) Use bit operations where possible hwmon: (max6697) Convert to use regmap hwmon: (max6697) Convert to with_info hwmon API hwmon: (max6697) Add support for tempX_min and tempX_min_alarm hwmon: (max1668) Reorder include files to alphabetic order hwmon: (max1668) Use BIT macro hwmon: (max1668) Convert to use regmap hwmon: (max1668) Replace chip type with number of channels hwmon: (max1668) Convert to use with_info hwmon API hwmon: (max6697) Document discrepancy in overtemperature status bit values hwmon: (max1619) Clamp temperature range when writing limits hwmon: (max1619) Reorder include files to alphabetic order hwmon: (max1619) Mask valid alarm bits hwmon: (max1619) Convert to use regmap hwmon: (max1619) Convert to with_info API hwmon: (max1619) Add support for update_interval attribute hwmon: (max1619) Improve chip detection code hwmon: (lm92) Improve auto-detection accuracy hwmon: (lm92) Reorder include files to alphabetic order hwmon: (lm92) Replace chip IDs with limit register resolution hwmon: (lm92) Convert to use regmap hwmon: (lm92) Convert to with_info hwmon API hwmon: (lm92) Update documentation hwmon: (ina2xx) Reorder include files to alphabetic order hwmon: (ina2xx) Replace platform data with device properties hwmon: (ina2xx) Use bit operations hwmon: (ina2xx) Mark regmap_config as const hwmon: (ina2xx) Use local regmap pointer if used more than once hwmon: (ina2xx) Re-initialize chip using regmap functions hwmon: (ina2xx) Fix various overflow issues hwmon: (ina2xx) Consolidate chip initialization code hwmon: (ina2xx) Set alert latch hwmon: (ina2xx) Move ina2xx_get_value() hwmon: (ina2xx) Convert to use with_info hwmon API hwmon: (ina2xx) Pass register to alert limit write functions hwmon: (ina2xx) Add support for current limits hwmon: (ina2xx) Use shunt voltage to calculate current hwmon: Remove devm_hwmon_device_unregister() API function Inochi Amaoto (2): dt-bindings: hwmon: Add Sophgo SG2042 external hardware monitor support hwmon: Add sophgo SG2042 external hardware monitor support Javier Carrasco (2): hwmon: (ltc2992) use device_for_each_child_node_scoped() to access child nodes hwmon: (chipcap2) Drop cc2_disable() in the probe and return dev_err_probe() Jinjie Ruan (8): hwmon: (aspeed-g6-pwm-tacho): Simplify with scoped for each OF child loop hwmon: (aspeed-pwm-tacho): Simplify with scoped for each OF child loop hwmon: (ina3221): Simplify with scoped for each OF child loop hwmon: (lm90): Simplify with scoped for each OF child loop hwmon: (nct7802): Simplify with scoped for each OF child loop hwmon: (npcm750-pwm-fan): Simplify with scoped for each OF child loop hwmon: (tmp421): Simplify with scoped for each OF child loop hwmon: (tmp464): Simplify with scoped for each OF child loop Johannes Kirchmair (1): hwmon: (pwmfan) Do not force disable pwm controller Liao Chen (1): hwmon: (gsc-hwmon) fix module autoloading Mario Limonciello (1): hwmon: (k10temp): Use cpu_feature_enabled() for detecting zen Maximilian Luz (1): hwmon: Add thermal sensor driver for Surface Aggregator Module Nathan Chancellor (1): hwmon: (oxp-sensors) Add missing breaks to fix -Wimplicit-fallthrough with clang Nuno Sa (1): hwmon: (ltc2947) Move to firmware agnostic API Patrick Rudolph (5): hwmon: pmbus: Implement generic bus access delay hwmon: pmbus: max15301: Use generic code hwmon: pmbus: ucd9000: Use generic code hwmon: pmbus: zl6100: Use generic code hwmon: pmbus: pli12096bc: Add write delay Rob Herring (Arm) (2): hwmon: (vexpress) Use of_property_present() hwmon: (stts751) Add "st" vendor prefix to "stts751" compatible string Shen Lichuan (1): hwmon: (pc87360) Use min() macro Yue Haibing (1): hwmon: (sch5627) Remove unused declaration sch56xx_watchdog_unregister() Yuntao Liu (1): hwmon: (ntc_thermistor) fix module autoloading .../devicetree/bindings/hwmon/adt7475.yaml | 37 +- .../devicetree/bindings/hwmon/lltc,ltc2978.yaml | 94 +++ .../devicetree/bindings/hwmon/ltc2978.txt | 62 -- .../devicetree/bindings/hwmon/maxim,max31790.yaml | 70 ++ .../bindings/hwmon/sophgo,sg2042-hwmon-mcu.yaml | 43 + Documentation/hwmon/hwmon-kernel-api.rst | 7 - Documentation/hwmon/ina2xx.rst | 4 + Documentation/hwmon/index.rst | 1 + Documentation/hwmon/lm92.rst | 26 +- Documentation/hwmon/max1619.rst | 4 - Documentation/hwmon/oxp-sensors.rst | 56 +- Documentation/hwmon/sg2042-mcu.rst | 78 ++ MAINTAINERS | 6 + drivers/hwmon/Kconfig | 26 +- drivers/hwmon/Makefile | 2 + drivers/hwmon/adt7470.c | 22 +- drivers/hwmon/adt7475.c | 130 +++ drivers/hwmon/adt7x10.c | 18 +- drivers/hwmon/amc6821.c | 30 +- drivers/hwmon/aspeed-g6-pwm-tach.c | 4 +- drivers/hwmon/aspeed-pwm-tacho.c | 8 +- drivers/hwmon/chipcap2.c | 33 +- drivers/hwmon/dell-smm-hwmon.c | 8 + drivers/hwmon/gsc-hwmon.c | 1 + drivers/hwmon/hwmon.c | 18 - drivers/hwmon/ina2xx.c | 895 +++++++++++--------- drivers/hwmon/ina3221.c | 7 +- drivers/hwmon/k10temp.c | 26 +- drivers/hwmon/lm90.c | 7 +- drivers/hwmon/lm92.c | 457 +++++++---- drivers/hwmon/lm95234.c | 869 ++++++++------------ drivers/hwmon/lm95245.c | 110 +-- drivers/hwmon/ltc2947-core.c | 20 +- drivers/hwmon/ltc2992.c | 19 +- drivers/hwmon/max16065.c | 17 +- drivers/hwmon/max1619.c | 495 ++++++----- drivers/hwmon/max1668.c | 487 ++++------- drivers/hwmon/max6639.c | 40 +- drivers/hwmon/max6697.c | 907 +++++++++------------ drivers/hwmon/nct6775-platform.c | 1 + drivers/hwmon/nct7802.c | 69 +- drivers/hwmon/npcm750-pwm-fan.c | 5 +- drivers/hwmon/ntc_thermistor.c | 1 + drivers/hwmon/oxp-sensors.c | 301 ++++++- drivers/hwmon/pc87360.c | 2 +- drivers/hwmon/pmbus/max15301.c | 92 +-- drivers/hwmon/pmbus/mpq7932.c | 2 +- drivers/hwmon/pmbus/pli1209bc.c | 26 +- drivers/hwmon/pmbus/pmbus.h | 10 + drivers/hwmon/pmbus/pmbus_core.c | 92 ++- drivers/hwmon/pmbus/ucd9000.c | 64 +- drivers/hwmon/pmbus/zl6100.c | 66 +- drivers/hwmon/pwm-fan.c | 11 +- drivers/hwmon/sch5636.c | 3 +- drivers/hwmon/sch56xx-common.h | 1 - drivers/hwmon/sg2042-mcu.c | 388 +++++++++ drivers/hwmon/sht21.c | 5 +- drivers/hwmon/stts751.c | 2 +- drivers/hwmon/surface_temp.c | 235 ++++++ drivers/hwmon/tmp401.c | 17 +- drivers/hwmon/tmp421.c | 7 +- drivers/hwmon/tmp464.c | 40 +- drivers/hwmon/vexpress-hwmon.c | 2 +- include/linux/hwmon.h | 1 - include/linux/platform_data/max6697.h | 33 - 65 files changed, 3740 insertions(+), 2880 deletions(-) create mode 100644 Documentation/devicetree/bindings/hwmon/lltc,ltc2978.yaml delete mode 100644 Documentation/devicetree/bindings/hwmon/ltc2978.txt create mode 100644 Documentation/devicetree/bindings/hwmon/maxim,max31790.yaml create mode 100644 Documentation/devicetree/bindings/hwmon/sophgo,sg2042-hwmon-mcu.yaml create mode 100644 Documentation/hwmon/sg2042-mcu.rst create mode 100644 drivers/hwmon/sg2042-mcu.c create mode 100644 drivers/hwmon/surface_temp.c delete mode 100644 include/linux/platform_data/max6697.h . Date: Mon, 16 Sep 2024 20:26:08 +0200 From: Amir Goldstein To: Linus Torvalds Cc: Miklos Szeredi , Christian Brauner , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-unionfs@vger.kernel.org Subject: [GIT PULL] overlayfs updates for 6.12 Hi Linus, Please pull overlayfs updates for 6.12. This branch has been sitting in linux-next for over a week and it has gone through the usual overlayfs test routines. The branch merges cleanly with master branch of the moment. Thanks, Amir. ---------------------------------------------------------------- The following changes since commit 3e9bff3bbe1355805de919f688bef4baefbfd436: Merge tag 'vfs-6.11-rc6.fixes' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs (2024-08-27 16:57:35 +1200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/overlayfs/vfs.git ovl-update-6.12 for you to fetch changes up to 6c4a5f96450415735c31ed70ff354f0ee5cbf67b: ovl: fail if trusted xattrs are needed but caller lacks permission (2024-09-08 15:36:59 +0200) ---------------------------------------------------------------- overlayfs updates for 6.12 - Increase robustness of overlayfs to crashes in the case of underlying filesystems that to not guarantee metadata ordering to persistent storage (problem was reported with ubifs). - Deny mount inside container with features that require root privileges to work properly, instead of failing operations later. - Some clarifications to overlayfs documentation. ---------------------------------------------------------------- Amir Goldstein (1): ovl: fsync after metadata copy-up Haifeng Xu (1): ovl: don't set the superblock's errseq_t manually Mike Baynton (1): ovl: fail if trusted xattrs are needed but caller lacks permission Yuriy Belikov (1): overlayfs.rst: update metacopy section in overlayfs documentation Documentation/filesystems/overlayfs.rst | 7 ++++-- fs/overlayfs/copy_up.c | 43 ++++++++++++++++++++++++++++++--- fs/overlayfs/params.c | 38 +++++++++++++++++++++++++---- fs/overlayfs/super.c | 10 ++------ 4 files changed, 79 insertions(+), 19 deletions(-) . Date: Mon, 16 Sep 2024 14:45:35 -0500 From: Dave Kleikamp To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, "jfs-discussion@lists.sourceforge.net" Subject: [GIT PULL] jfs updates for v6.12 The following changes since commit 3d5f968a177d468cd13568ef901c5be84d83d32b: Merge tag 'pwrseq-fixes-for-v6.11-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux (2024-08-23 17:48:27 +0800) are available in the Git repository at: git@github.com:kleikamp/linux-shaggy.git tags/jfs-6.12 for you to fetch changes up to 2b59ffad47db1c46af25ccad157bb3b25147c35c: jfs: Fix uninit-value access of new_ea in ea_buffer (2024-09-04 10:28:08 -0500) ---------------------------------------------------------------- A few fixes for jfs ---------------------------------------------------------------- Edward Adam Davis (2): jfs: Fix uaf in dbFreeBits jfs: check if leafidx greater than num leaves per dmap tree Jeongjun Park (1): jfs: fix out-of-bounds in dbNextAG() and diAlloc() Remington Brasga (1): jfs: UBSAN: shift-out-of-bounds in dbFindBits Zhao Mengmeng (1): jfs: Fix uninit-value access of new_ea in ea_buffer fs/jfs/jfs_discard.c | 11 +++++++++-- fs/jfs/jfs_dmap.c | 11 +++++++---- fs/jfs/jfs_imap.c | 2 +- fs/jfs/xattr.c | 2 ++ 4 files changed, 19 insertions(+), 7 deletions(-) .