mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
This is the 4.14.355 OpenELA-Extended LTS stable release
-----BEGIN PGP SIGNATURE----- iQJNBAABCAA3FiEERFwmR4yFob14UDOYC8702P6YulgFAmciUfMZHHZlZ2FyZC5u b3NzdW1Ab3JhY2xlLmNvbQAKCRALzvTY/pi6WLuWD/9Ygfcw1geLS8AUG78WElHy l9L6JBbhAMCd7UTIn6ulSxNalJSMUg9P5xbtBVwz64qLCeJYEpJZ23UOj1fNK9Sm +zBI3R3LURhRr/qwRVN8xJvKfGNODx8LsI61H8bcowKOjC1zdtd11vtZfu+KmumM G26MeAabNszHOaFzoAoD/0VR6xxbHbvWv9oiyaCvyyB1iPU2wpGfO26dQ6YOO87K 914tsdY+I70tpAgCks3DyZaN+h0kXGww9k9YCG8awxHHgAvxsVQ5+cZtC0QO04bN uEwOHapieFtoFGG/c6cUq9ARiVkWdgXV0+xeGzefDbygcfZjfC4b6a+iSf9j42oq X1hM7mGxJMvzoiweXOF9XhfrmBKpnXcLgZqpFTk3Iy/EALstd9AnvY7SJCJLa+u8 Dp2NOZ/9tKfvrfiI/AA+uwjlFLeA1dbfvf5HcUtfKuJ7Y1Qq4q9QxRr9svk+7+ZG nbrYxNfpxmrgffrm5W9gt/02M8v+ymC9fIFK82V6EEPbnikPE8SGJ2JAuirjiG1i u1bvIzTCBtu6074tuqCjHKAyTUFNZMKS8xxT+prEolXguBiuEmlJodK7kkJKFurc uAiLlYpMZNvFJox5E0vCLD8HInTHNR3yd8D/kNg733ukg6o2mKvLkR83lHpvhe67 0bxx5K76GV7p4I/wvIJ6zw== =JpII -----END PGP SIGNATURE----- Merge tag 'v4.14.355-openela' of https://github.com/openela/kernel-lts This is the 4.14.355 OpenELA-Extended LTS stable release * tag 'v4.14.355-openela' of https://github.com/openela/kernel-lts: (79 commits) LTS: Update to 4.14.355 Revert "parisc: Use irq_enter_rcu() to fix warning at kernel/context_tracking.c:367" netns: restore ops before calling ops_exit_list cx82310_eth: fix error return code in cx82310_bind() rtmutex: Drop rt_mutex::wait_lock before scheduling locking/rtmutex: Handle non enqueued waiters gracefully in remove_waiter() drm/i915/fence: Mark debug_fence_free() with __maybe_unused ACPI: processor: Fix memory leaks in error paths of processor_add() ACPI: processor: Return an error if acpi_processor_get_info() fails in processor_add() netns: add pre_exit method to struct pernet_operations net: Add comment about pernet_operations methods and synchronization nilfs2: protect references to superblock parameters exposed in sysfs nilfs2: replace snprintf in show functions with sysfs_emit nilfs2: use time64_t internally tracing: Avoid possible softlockup in tracing_iter_reset() ring-buffer: Rename ring_buffer_read() to read_buffer_iter_advance() uprobes: Use kzalloc to allocate xol area clocksource/drivers/imx-tpm: Fix next event not taking effect sometime clocksource/drivers/imx-tpm: Fix return -ETIME when delta exceeds INT_MAX VMCI: Fix use-after-free when removing resource in vmci_resource_remove() ... Change-Id: I237799395c31c147d9e602b34bff999c65fe9ef0 Signed-off-by: Richard Raya <rdxzv.dev@gmail.com>
This commit is contained in:
commit
00fa45c0a6
@ -1,5 +1,5 @@
|
||||
upstream_repo: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
|
||||
upstream_base: 4.19.304
|
||||
base: 4.14.336
|
||||
upstream_version: 4.19.321
|
||||
version: 4.14.354
|
||||
upstream_version: 4.19.322
|
||||
version: 4.14.355
|
||||
|
304
.elts/meta/4.14.355.yaml
Normal file
304
.elts/meta/4.14.355.yaml
Normal file
@ -0,0 +1,304 @@
|
||||
a1474ea9b7ab89dba81a2449bf4a4173115b06a7:
|
||||
title: 'net: usb: qmi_wwan: add MeiG Smart SRM825L'
|
||||
mainline: 1ca645a2f74a4290527ae27130c8611391b07dbf
|
||||
upstream: 226a6773a78d4fd27c03cfdf1f811dbf278fb3d0
|
||||
107fdbcb323ac570bf914e6f547a8d923b82c087:
|
||||
title: 'usb: dwc3: st: Add of_node_put() before return in probe function'
|
||||
mainline: e36721b90144bb46e1b6477be3ab63439c7fb79b
|
||||
upstream: 82dde26c330f14cee56ea30bb1044f4b514c67b5
|
||||
1dfc1828c8cfae2b2e8023a4a4eab6734214d2f9:
|
||||
title: 'usb: dwc3: st: add missing depopulate in probe error path'
|
||||
mainline: cd4897bfd14f6a5388b21ba45a066541a0425199
|
||||
upstream: a3718c676adb9dbc24dc7b9b293020c9a20f3fdb
|
||||
a1a53372278da6b1ddd71cdbfdae497c4dba7140:
|
||||
title: 'drm/amdgpu: Fix uninitialized variable warning in amdgpu_afmt_acr'
|
||||
mainline: c0d6bd3cd209419cc46ac49562bef1db65d90e70
|
||||
upstream: f00ce6b3344b744af491d1edda9905b188f590a7
|
||||
f8501ae9f302ddb01fd9011ac99b01c2c0f3a8b9:
|
||||
title: 'drm/amdgpu: fix overflowed array index read warning'
|
||||
mainline: ebbc2ada5c636a6a63d8316a3408753768f5aa9f
|
||||
upstream: d1ab22df511cbe4a358421876153f4e1212132e2
|
||||
4012cee5397a8c2a5f2caf45957ab78b2309f300:
|
||||
title: 'drm/amdgpu: fix ucode out-of-bounds read warning'
|
||||
mainline: 8944acd0f9db33e17f387fdc75d33bb473d7936f
|
||||
upstream: 82ac8f1d02886b5d8aeb9e058989d3bd6fc581e2
|
||||
ff8f82a22c6faf27e9feb0c9b241d2fdd8c02584:
|
||||
title: 'drm/amdgpu: fix mc_data out-of-bounds read warning'
|
||||
mainline: 51dfc0a4d609fe700750a62f41447f01b8c9ea50
|
||||
upstream: 5fa4df25ecfc7b6c9006f5b871c46cfe25ea8826
|
||||
2b98e85d650c2c302dd61cf66485f99db7cfd9d9:
|
||||
title: 'apparmor: fix possible NULL pointer dereference'
|
||||
mainline: 3dd384108d53834002be5630132ad5c3f32166ad
|
||||
upstream: 8d9da10a392a32368392f7a16775e1f36e2a5346
|
||||
570892930fbd745b1d6cf987586c4eddbe200732:
|
||||
title: 'usbip: Don''t submit special requests twice'
|
||||
mainline: 8b6b386f9aa936ed0c190446c71cf59d4a507690
|
||||
upstream: ebc88484fc780068bce82e9a593513f7f9ed947c
|
||||
4a9d23f110f9514fc28a67c5614565252b52965d:
|
||||
title: 'smack: tcp: ipv4, fix incorrect labeling'
|
||||
mainline: 2fe209d0ad2e2729f7e22b9b31a86cc3ff0db550
|
||||
upstream: d3f56c653c65f170b172d3c23120bc64ada645d8
|
||||
b0fb4622839090361ca56ed8b7d38780aca24f55:
|
||||
title: 'media: uvcvideo: Enforce alignment of frame and interval'
|
||||
mainline: c8931ef55bd325052ec496f242aea7f6de47dc9c
|
||||
upstream: d1a4c613dd3ef57978fc366b4e3d72cd5083a1f9
|
||||
18c1fde63128e9b0344b428cb18d2fb4b96b1399:
|
||||
title: 'block: initialize integrity buffer to zero before writing it to media'
|
||||
mainline: 899ee2c3829c5ac14bfc7d3c4a5846c0b709b78f
|
||||
upstream: 9f4af4cf08f9a0329ade3d938f55d2220c40d0a6
|
||||
a47099495b459b9993552d22ae3f76829108947b:
|
||||
title: 'udf: Limit file size to 4TB'
|
||||
mainline: c2efd13a2ed4f29bf9ef14ac2fbb7474084655f8
|
||||
upstream: a6211d4d3df3a5f90d8bcd11acd91baf7a3c2b5d
|
||||
a4a8eb20e62affb4b4ca51bcf8ea0861546acf22:
|
||||
title: 'ALSA: usb-audio: add boot quirk for Axe-Fx III'
|
||||
52e9edf6bcb1f0423742ad0ddf4baa5c2ffdf4db:
|
||||
title: 'ALSA: usb-audio: Sanity checks for each pipe and EP types'
|
||||
mainline: 801ebf1043ae7b182588554cc9b9ad3c14bc2ab5
|
||||
upstream: 218f0478064e246c557d0319623eeb56f0827a8e
|
||||
787a4aa45f59ee42152a1775f54050dbc6b13a06:
|
||||
title: 'ALSA: usb-audio: Fix gpf in snd_usb_pipe_sanity_check'
|
||||
mainline: 5d78e1c2b7f4be00bbe62141603a631dc7812f35
|
||||
upstream: 5c4b0a778419d9deab8557265f4b3fd6f0e97e11
|
||||
458dd5f94d634c30594a935563c1e2c8accd0656:
|
||||
title: 'sch/netem: fix use after free in netem_dequeue'
|
||||
mainline: 3b3a2a9c6349e25a025d2330f479bc33a6ccb54a
|
||||
upstream: f0bddb4de043399f16d1969dad5ee5b984a64e7b
|
||||
140cbd4f60beb751e66e7414f08df77f7f0d645b:
|
||||
title: 'ALSA: hda/conexant: Add pincfg quirk to enable top speakers on Sirius devices'
|
||||
mainline: 4178d78cd7a86510ba68d203f26fc01113c7f126
|
||||
upstream: 94e0cace44fe2b888cffc1c6905d1a9bfcf57c7a
|
||||
196ea167c8411ea8dbd90668b9fe48bf953bd474:
|
||||
title: 'mmc: dw_mmc: Fix IDMAC operation with pages bigger than 4K'
|
||||
mainline: 8396c793ffdf28bb8aee7cfe0891080f8cab7890
|
||||
upstream: 32bd402f6760d57127d58a9888553b2db574bba6
|
||||
a5a11287ead5951b4549f86b5d2abcc44a5efd6b:
|
||||
title: 'fuse: use unsigned type for getxattr/listxattr size truncation'
|
||||
mainline: b18915248a15eae7d901262f108d6ff0ffb4ffc1
|
||||
upstream: 13d787bb4f21b6dbc8d8291bf179d36568893c25
|
||||
812eaaab959885afdf5739337e7180e633b26734:
|
||||
title: 'nilfs2: fix missing cleanup on rollforward recovery error'
|
||||
mainline: 5787fcaab9eb5930f5378d6a1dd03d916d146622
|
||||
upstream: 35a9a7a7d94662146396199b0cfd95f9517cdd14
|
||||
faf0987376cc48fb3896f0f3298ebfeda8f1a515:
|
||||
title: 'nilfs2: fix state management in error path of log writing function'
|
||||
mainline: 6576dd6695f2afca3f4954029ac4a64f82ba60ab
|
||||
upstream: 40a2757de2c376ef8a08d9ee9c81e77f3c750adf
|
||||
19ece5b382d38b440e13d24e951cf79ec593ae68:
|
||||
title: 'ALSA: hda: Add input value sanity checks to HDMI channel map controls'
|
||||
mainline: 6278056e42d953e207e2afd416be39d09ed2d496
|
||||
upstream: c6d593c2c931762848389d621e8e657367f62190
|
||||
d92a8bb1955ce159fbbe0c309a1d17ffea5c043a:
|
||||
title: 'smack: unix sockets: fix accept()ed socket label'
|
||||
mainline: e86cac0acdb1a74f608bacefe702f2034133a047
|
||||
upstream: 81e45ff912bbc43526d6f21c7a79cc5a7159a5f5
|
||||
90e83f2f8444a176d359ff9bc4a40590427a3bc4:
|
||||
title: 'irqchip/armada-370-xp: Do not allow mapping IRQ 0 and 1'
|
||||
mainline: 3cef738208e5c3cb7084e208caf9bbf684f24feb
|
||||
upstream: 1d755d4fb238315c3b3e50e6f3117a0d79f72c29
|
||||
3652428ca171b8aed1217a4162dedccd3dde1b5a:
|
||||
title: 'af_unix: Remove put_pid()/put_cred() in copy_peercred().'
|
||||
mainline: e4bd881d987121dbf1a288641491955a53d9f8f7
|
||||
upstream: 406fb2bc6548bbd61489637d1443606feaa7037a
|
||||
26e28ffe556d6cd2f2fd43a8707e6b3d8dca24f3:
|
||||
title: 'wifi: brcmsmac: advertise MFP_CAPABLE to enable WPA3'
|
||||
mainline: dbb5265a5d7cca1cdba7736dba313ab7d07bc19d
|
||||
upstream: c7167cbb59f0525f6726a621b37f2596ee1bbf83
|
||||
e0cb5088960d975715d2731a706914498e7cb018:
|
||||
title: 'media: qcom: camss: Add check for v4l2_fwnode_endpoint_parse'
|
||||
mainline: 4caf6d93d9f2c11d6441c64e1c549c445fa322ed
|
||||
upstream: 75f8136cd4e74fca5d115c35954ed598fc771a8f
|
||||
b9fb4137c73f884e41edb16dfbec9ec490efb4d6:
|
||||
title: 'pcmcia: Use resource_size function on resource object'
|
||||
mainline: 24a025497e7e883bd2adef5d0ece1e9b9268009f
|
||||
upstream: d51b471ec7bd3dd9649dea1d77635512e61eaad5
|
||||
f9ab8f03569d4406fc0adf3c667bc0c450280181:
|
||||
title: 'can: bcm: Remove proc entry when dev is unregistered.'
|
||||
mainline: 76fe372ccb81b0c89b6cd2fec26e2f38c958be85
|
||||
upstream: 5c680022c4e28ba18ea500f3e29f0428271afa92
|
||||
7e95e0c1c4750d584a8dacaefa62f506af3e510d:
|
||||
title: 'igb: Fix not clearing TimeSync interrupts for 82580'
|
||||
mainline: ba8cf80724dbc09825b52498e4efacb563935408
|
||||
upstream: 79c460784fc55ccf272fbe89290ff84d3e17341c
|
||||
3f63ef4d3a6164cf90d31f26cb37976cbc32b5a9:
|
||||
title: 'cx82310_eth: re-enable ethernet mode after router reboot'
|
||||
mainline: ca139d76b0d9e59d18f2d2ec8f0d81b82acd6808
|
||||
upstream: 5adf7fbdfa3e9e425b04771e1d64c4e184ad8fdb
|
||||
ef1cdbe7efb9d4f237238f3a58b115ccae662a8f:
|
||||
title: 'drivers/net/usb: Remove all strcpy() uses'
|
||||
mainline: 493c3ca6bd754d8587604496eb814f72e933075d
|
||||
upstream: 3f255eda1818c6f2b4fb446c488339c66173dc6d
|
||||
70135ce17759946d0f4ccdbed51c21caccf22445:
|
||||
title: 'net: usb: don''t write directly to netdev->dev_addr'
|
||||
mainline: 2674e7ea22ba0e22a2d1603bd51e0b8f6442a267
|
||||
upstream: 40373e2bdf967ba982309ff06e3b8c7c79c4de0e
|
||||
5fb805c245cf8daf1568247ba755e3164c361d96:
|
||||
title: 'usbnet: modern method to get random MAC'
|
||||
mainline: bab8eb0dd4cb995caa4a0529d5655531c2ec5e8e
|
||||
upstream: c9c76962b49ff37ed8dcf880eabeb74df3e0686e
|
||||
1c1073bf747c47629304662bd4e4acc3c347d499:
|
||||
title: 'rfkill: fix spelling mistake contidion to condition'
|
||||
mainline: f404c3ecc401b3617c454c06a3d36a43a01f1aaf
|
||||
upstream: 2579dc71bfa05f908c13decb27989c18be775e2d
|
||||
b3774dcec0995f6d31fa86bbfaeb74a5c6cda069:
|
||||
title: 'iommu/vt-d: Handle volatile descriptor status read'
|
||||
mainline: b5e86a95541cea737394a1da967df4cd4d8f7182
|
||||
upstream: 75a34515eb1be431819ec00cd09fe3a3eb369cdb
|
||||
9d86ad71865dd3a67f27923da2d87891801d26f2:
|
||||
title: 'cgroup: Protect css->cgroup write under css_set_lock'
|
||||
mainline: 57b56d16800e8961278ecff0dc755d46c4575092
|
||||
upstream: 6760357063f593a17613e015aed2051cfd4197c6
|
||||
def0afb4a7e7e30bc08b1b4699dfe6802b2cbde1:
|
||||
title: 'um: line: always fill *error_out in setup_one_line()'
|
||||
mainline: 824ac4a5edd3f7494ab1996826c4f47f8ef0f63d
|
||||
upstream: 3bedb7ce080690d0d6172db790790c1219bcbdd5
|
||||
463af1bdfe4037d2d5c274ae3df6a1bda26cd3aa:
|
||||
title: 'devres: Initialize an uninitialized struct member'
|
||||
mainline: 56a20ad349b5c51909cf8810f7c79b288864ad33
|
||||
upstream: c57834f37dc73410ed2eb11e1cc3fecad169b065
|
||||
33259e025b9efd8c18acbeaf5db24ff06db58459:
|
||||
title: 'pci/hotplug/pnv_php: Fix hotplug driver crash on Powernv'
|
||||
mainline: 335e35b748527f0c06ded9eebb65387f60647fda
|
||||
upstream: 4eb4085c1346d19d4a05c55246eb93e74e671048
|
||||
c0cc4bee13a524d7aceb27690ac6be7ed8e61b70:
|
||||
title: 'hwmon: (adc128d818) Fix underflows seen when writing limit attributes'
|
||||
mainline: 8cad724c8537fe3e0da8004646abc00290adae40
|
||||
upstream: 05419d0056dcf7088687e561bb583cc06deba777
|
||||
d93e9ac35391aef72db4a0aa274d27944dd0d673:
|
||||
title: 'hwmon: (lm95234) Fix underflows seen when writing limit attributes'
|
||||
mainline: af64e3e1537896337405f880c1e9ac1f8c0c6198
|
||||
upstream: 93f0f5721d0cca45dac50af1ae6f9a9826c699fd
|
||||
676ca195a7e32432c84de0516609c98560dcf66f:
|
||||
title: 'hwmon: (nct6775-core) Fix underflows seen when writing limit attributes'
|
||||
mainline: 0403e10bf0824bf0ec2bb135d4cf1c0cc3bf4bf0
|
||||
upstream: 298a55f11edd811f2189b74eb8f53dee34d4f14c
|
||||
9c01d650e13a9098fd147c080994be18cb0689c9:
|
||||
title: 'hwmon: (w83627ehf) Fix underflows seen when writing limit attributes'
|
||||
mainline: 5c1de37969b7bc0abcb20b86e91e70caebbd4f89
|
||||
upstream: 93cf73a7bfdce683bde3a7bb65f270d3bd24497b
|
||||
6d47528d1743bbefff3fc7928d1e45e3faf03cd8:
|
||||
title: 'wifi: mwifiex: Do not return unused priv in mwifiex_get_priv_by_id()'
|
||||
mainline: c145eea2f75ff7949392aebecf7ef0a81c1f6c14
|
||||
upstream: a12cf97cbefa139ef8d95081f2ea047cbbd74b7a
|
||||
86ed63497a70309bcc68c61bf706e65e305318e9:
|
||||
title: 'smp: Add missing destroy_work_on_stack() call in smp_call_on_cpu()'
|
||||
mainline: 77aeb1b685f9db73d276bad4bb30d48505a6fd23
|
||||
upstream: 2d6a7a1ee3862d129c0e0fbd3cc147e185a379dc
|
||||
8f9488fe41599c4aed2820b66097ab09f2bcfec8:
|
||||
title: 'btrfs: replace BUG_ON with ASSERT in walk_down_proc()'
|
||||
mainline: 1f9d44c0a12730a24f8bb75c5e1102207413cc9b
|
||||
upstream: 2df0e48615f438cdf93f1469ed9f289f71440d2d
|
||||
b6a6c52de6de81961175e7d2814f6d0193697a4c:
|
||||
title: 'btrfs: clean up our handling of refs == 0 in snapshot delete'
|
||||
mainline: b8ccef048354074a548f108e51d0557d6adfd3a3
|
||||
upstream: c847b28a799733b04574060ab9d00f215970627d
|
||||
dc087747546322a6d53d450c92456fcd0055a257:
|
||||
title: 'PCI: Add missing bridge lock to pci_bus_lock()'
|
||||
mainline: a4e772898f8bf2e7e1cf661a12c60a5612c4afab
|
||||
upstream: 0790b89c7e911003b8c50ae50e3ac7645de1fae9
|
||||
8f68d6f65ec245d7f7641b540ef6ffed262df9cf:
|
||||
title: 'btrfs: initialize location to fix -Wmaybe-uninitialized in btrfs_lookup_dentry()'
|
||||
mainline: b8e947e9f64cac9df85a07672b658df5b2bcff07
|
||||
upstream: d09f1bf3d7f029558704f077097dbcd4dc5db8da
|
||||
f406ab8753404479a45b87c930fed326b4db0f04:
|
||||
title: 'Input: uinput - reject requests with unreasonable number of slots'
|
||||
mainline: 206f533a0a7c683982af473079c4111f4a0f9f5e
|
||||
upstream: 9c6d189f0c1c59ba9a32326ec82a0b367a3cd47b
|
||||
b1981479ebd7e8d67c23753437a4282ef363b0a0:
|
||||
title: 'usbnet: ipheth: race between ipheth_close and error handling'
|
||||
mainline: e5876b088ba03a62124266fa20d00e65533c7269
|
||||
upstream: 487f140d366f9b12edb11b97819c135676090bd2
|
||||
a909f13b25b358d7f4683648b5166214c609668f:
|
||||
title: 'Squashfs: sanity check symbolic link size'
|
||||
mainline: 810ee43d9cd245d138a2733d87a24858a23f577d
|
||||
upstream: f82cb7f24032ed023fc67d26ea9bf322d8431a90
|
||||
8b67befd1d8e89bce21196d288327ef375731328:
|
||||
title: 'of/irq: Prevent device address out-of-bounds read in interrupt map walk'
|
||||
mainline: b739dffa5d570b411d4bdf4bb9b8dfd6b7d72305
|
||||
upstream: d2a79494d8a5262949736fb2c3ac44d20a51b0d8
|
||||
265da992cd6d9a6ae82917b3f0bd343f5754b4b9:
|
||||
title: 'ata: pata_macio: Use WARN instead of BUG'
|
||||
mainline: d4bc0a264fb482b019c84fbc7202dd3cab059087
|
||||
upstream: cff08d637389f4bf4a49a08ff0474bd6c2b27b97
|
||||
1753cb7f5cd1bf2bdecd6126d4670ae4c5ea31d5:
|
||||
title: 'iio: buffer-dmaengine: fix releasing dma channel on error'
|
||||
mainline: 84c65d8008764a8fb4e627ff02de01ec4245f2c4
|
||||
upstream: 0edd1eac01afe0c2104bddd7d1cae985b0a4552c
|
||||
0c91f6e9cee80725ead1a4db722a1b7a0b575162:
|
||||
title: 'iio: fix scale application in iio_convert_raw_to_processed_unlocked'
|
||||
mainline: 8a3dcc970dc57b358c8db2702447bf0af4e0d83a
|
||||
upstream: a1cad4f0340c50037bd3211bd43deff662d5287e
|
||||
1c8fea7bc7b888039874f237abf53f28264f3d42:
|
||||
title: 'nvmem: Fix return type of devm_nvmem_device_get() in kerneldoc'
|
||||
mainline: c69f37f6559a8948d70badd2b179db7714dedd62
|
||||
upstream: 5e0a746e798cd962e478b54f50f6f39384f735bc
|
||||
12663f3dcfaa591275c2b086a840edc9e86dc736:
|
||||
title: 'VMCI: Fix use-after-free when removing resource in vmci_resource_remove()'
|
||||
mainline: 48b9a8dabcc3cf5f961b2ebcd8933bf9204babb7
|
||||
upstream: f6365931bf7c07b2b397dbb06a4f6573cc9fae73
|
||||
3ed0ce0836c07ea1c3e635370ce04f5ab065ee90:
|
||||
title: 'clocksource/drivers/imx-tpm: Fix return -ETIME when delta exceeds INT_MAX'
|
||||
mainline: 5b8843fcd49827813da80c0f590a17ae4ce93c5d
|
||||
upstream: eeec87f317abb8b1ebb04b5d6823e941649d8293
|
||||
79b3fd21dd528f14d3d7f4f380db5a742f5903d4:
|
||||
title: 'clocksource/drivers/imx-tpm: Fix next event not taking effect sometime'
|
||||
mainline: 3d5c2f8e75a55cfb11a85086c71996af0354a1fb
|
||||
upstream: 143674856ebffeb785759892b1a11a7f5ecbd1f5
|
||||
967a7ce0d7d61c1256391a197e81ba2a400ecf07:
|
||||
title: 'uprobes: Use kzalloc to allocate xol area'
|
||||
mainline: e240b0fde52f33670d1336697c22d90a4fe33c84
|
||||
upstream: 32bb3588ccf08406931c7f061f0ef7a37cd38414
|
||||
ae2112e6a08779c541bc4b9b88ff58914f4ecf32:
|
||||
title: 'ring-buffer: Rename ring_buffer_read() to read_buffer_iter_advance()'
|
||||
mainline: bc1a72afdc4a91844928831cac85731566e03bc6
|
||||
upstream: ac8ffa21dde0c1edcd9dd98b5555a0aa4eea3b1f
|
||||
fdfd1ef491f5e5445d130169394ae68a45d1adcf:
|
||||
title: 'tracing: Avoid possible softlockup in tracing_iter_reset()'
|
||||
mainline: 49aa8a1f4d6800721c7971ed383078257f12e8f9
|
||||
upstream: 84bd537aaefb210218b5e1d982411fa6ae8429a1
|
||||
3b10ade515f59695e110647a1c4046df1f2ae228:
|
||||
title: 'nilfs2: use time64_t internally'
|
||||
c77787e1b99270f880dae53e1c8e9f7d8ec8f5a1:
|
||||
title: 'nilfs2: replace snprintf in show functions with sysfs_emit'
|
||||
mainline: 3bcd6c5bd483287f4a09d3d59a012d47677b6edc
|
||||
upstream: 51af9b589ab68a94485ee55811d1243c6bf665b4
|
||||
2d65330b265ca1170d35cd861a82b35536f57c4e:
|
||||
title: 'nilfs2: protect references to superblock parameters exposed in sysfs'
|
||||
mainline: 683408258917541bdb294cd717c210a04381931e
|
||||
upstream: b90beafac05931cbfcb6b1bd4f67c1923f47040e
|
||||
9e0063de11fca0d749169844cd3cd8cbe9061466:
|
||||
title: 'net: Add comment about pernet_operations methods and synchronization'
|
||||
9541fb132b07ee39fa0c6d07655684f7d961c171:
|
||||
title: 'netns: add pre_exit method to struct pernet_operations'
|
||||
mainline: d7d99872c144a2c2f5d9c9d83627fa833836cba5
|
||||
upstream: bc596c2026c7f52dc12a784403ccfc3b152844e6
|
||||
9e65e5135c7d8451ee68b36d44f674429df4271a:
|
||||
title: 'ACPI: processor: Return an error if acpi_processor_get_info() fails in processor_add()'
|
||||
mainline: fadf231f0a06a6748a7fc4a2c29ac9ef7bca6bfd
|
||||
upstream: a30476afbaac69face9537cd8d0694d46d5d1ef5
|
||||
89bbd019927a862339cb11beeb98a95c0269b25c:
|
||||
title: 'ACPI: processor: Fix memory leaks in error paths of processor_add()'
|
||||
mainline: 47ec9b417ed9b6b8ec2a941cd84d9de62adc358a
|
||||
upstream: 00259ae5206a713234e3ac12a8a0f731e86b754b
|
||||
c292e581abf5c0dfaf783e3ad2bda3502b5ab4be:
|
||||
title: 'drm/i915/fence: Mark debug_fence_free() with __maybe_unused'
|
||||
mainline: f99999536128b14b5d765a9982763b5134efdd79
|
||||
upstream: 76b1dda1598fc151610d3f372e24be1fcc8b396e
|
||||
5635c800bb018568edf984a2bc3df894c7f1d8b4:
|
||||
title: 'locking/rtmutex: Handle non enqueued waiters gracefully in remove_waiter()'
|
||||
11ae525157eb075f44f3c6460fdd9a5642ada728:
|
||||
title: 'rtmutex: Drop rt_mutex::wait_lock before scheduling'
|
||||
mainline: d33d26036a0274b472299d7dcdaa5fb34329f91b
|
||||
upstream: 432efdbe7da5ecfcbc0c2180cfdbab1441752a38
|
||||
8b8a84237a675ff0a73827b2ba05745765a97f13:
|
||||
title: 'cx82310_eth: fix error return code in cx82310_bind()'
|
||||
mainline: cfbaa8b33e022aca62a3f2815ffbc02874d4cb8b
|
||||
upstream: e70c0b7e280415e1511fb258f4b72733d765b80e
|
||||
61da5c1d99b77bb28d2579a64a05bfbf9447e43d:
|
||||
title: 'netns: restore ops before calling ops_exit_list'
|
||||
mainline: b272a0ad730103e84fb735fd0a8cc050cdf7f77c
|
||||
upstream: 15605b333ddaa3e5e21dfebb65546c70bb167925
|
||||
a66198e30ea76c75761c3f0323b31ba6be641824:
|
||||
title: 'Revert "parisc: Use irq_enter_rcu() to fix warning at kernel/context_tracking.c:367"'
|
||||
mainline: 73cb4a2d8d7e0259f94046116727084f21e4599f
|
||||
upstream: 324954a057b3ab21a7be5c91e148c15c401332f0
|
384
.elts/upstream/4.19.322.yaml
Normal file
384
.elts/upstream/4.19.322.yaml
Normal file
@ -0,0 +1,384 @@
|
||||
226a6773a78d4fd27c03cfdf1f811dbf278fb3d0:
|
||||
title: 'net: usb: qmi_wwan: add MeiG Smart SRM825L'
|
||||
mainline: 1ca645a2f74a4290527ae27130c8611391b07dbf
|
||||
backport: a1474ea9b7ab89dba81a2449bf4a4173115b06a7
|
||||
82dde26c330f14cee56ea30bb1044f4b514c67b5:
|
||||
title: 'usb: dwc3: st: Add of_node_put() before return in probe function'
|
||||
mainline: e36721b90144bb46e1b6477be3ab63439c7fb79b
|
||||
backport: 107fdbcb323ac570bf914e6f547a8d923b82c087
|
||||
a3718c676adb9dbc24dc7b9b293020c9a20f3fdb:
|
||||
title: 'usb: dwc3: st: add missing depopulate in probe error path'
|
||||
mainline: cd4897bfd14f6a5388b21ba45a066541a0425199
|
||||
backport: 1dfc1828c8cfae2b2e8023a4a4eab6734214d2f9
|
||||
f00ce6b3344b744af491d1edda9905b188f590a7:
|
||||
title: 'drm/amdgpu: Fix uninitialized variable warning in amdgpu_afmt_acr'
|
||||
mainline: c0d6bd3cd209419cc46ac49562bef1db65d90e70
|
||||
backport: a1a53372278da6b1ddd71cdbfdae497c4dba7140
|
||||
d1ab22df511cbe4a358421876153f4e1212132e2:
|
||||
title: 'drm/amdgpu: fix overflowed array index read warning'
|
||||
mainline: ebbc2ada5c636a6a63d8316a3408753768f5aa9f
|
||||
backport: f8501ae9f302ddb01fd9011ac99b01c2c0f3a8b9
|
||||
82ac8f1d02886b5d8aeb9e058989d3bd6fc581e2:
|
||||
title: 'drm/amdgpu: fix ucode out-of-bounds read warning'
|
||||
mainline: 8944acd0f9db33e17f387fdc75d33bb473d7936f
|
||||
backport: 4012cee5397a8c2a5f2caf45957ab78b2309f300
|
||||
5fa4df25ecfc7b6c9006f5b871c46cfe25ea8826:
|
||||
title: 'drm/amdgpu: fix mc_data out-of-bounds read warning'
|
||||
mainline: 51dfc0a4d609fe700750a62f41447f01b8c9ea50
|
||||
backport: ff8f82a22c6faf27e9feb0c9b241d2fdd8c02584
|
||||
456eb7de5747bcb505ce326dcaf9938f94735d16:
|
||||
title: 'drm/amdkfd: Reconcile the definition and use of oem_id in struct kfd_topology_device'
|
||||
mainline: 10f624ef239bd136cdcc5bbc626157a57b938a31
|
||||
skipped: missing commit 520b8fb755ccfb07d8d743da5753cff1fcb74b9f
|
||||
8d9da10a392a32368392f7a16775e1f36e2a5346:
|
||||
title: 'apparmor: fix possible NULL pointer dereference'
|
||||
mainline: 3dd384108d53834002be5630132ad5c3f32166ad
|
||||
backport: 2b98e85d650c2c302dd61cf66485f99db7cfd9d9
|
||||
ebc88484fc780068bce82e9a593513f7f9ed947c:
|
||||
title: 'usbip: Don''t submit special requests twice'
|
||||
mainline: 8b6b386f9aa936ed0c190446c71cf59d4a507690
|
||||
backport: 570892930fbd745b1d6cf987586c4eddbe200732
|
||||
d3f56c653c65f170b172d3c23120bc64ada645d8:
|
||||
title: 'smack: tcp: ipv4, fix incorrect labeling'
|
||||
mainline: 2fe209d0ad2e2729f7e22b9b31a86cc3ff0db550
|
||||
backport: 4a9d23f110f9514fc28a67c5614565252b52965d
|
||||
d1a4c613dd3ef57978fc366b4e3d72cd5083a1f9:
|
||||
title: 'media: uvcvideo: Enforce alignment of frame and interval'
|
||||
mainline: c8931ef55bd325052ec496f242aea7f6de47dc9c
|
||||
backport: b0fb4622839090361ca56ed8b7d38780aca24f55
|
||||
9f4af4cf08f9a0329ade3d938f55d2220c40d0a6:
|
||||
title: 'block: initialize integrity buffer to zero before writing it to media'
|
||||
mainline: 899ee2c3829c5ac14bfc7d3c4a5846c0b709b78f
|
||||
backport: 18c1fde63128e9b0344b428cb18d2fb4b96b1399
|
||||
19ac6f29bf64304ef04630c8ab56ecd2059d7aa1:
|
||||
title: 'virtio_net: Fix napi_skb_cache_put warning'
|
||||
mainline: f8321fa75102246d7415a6af441872f6637c93ab
|
||||
skipped: fixes patch not in branch
|
||||
a6211d4d3df3a5f90d8bcd11acd91baf7a3c2b5d:
|
||||
title: 'udf: Limit file size to 4TB'
|
||||
mainline: c2efd13a2ed4f29bf9ef14ac2fbb7474084655f8
|
||||
backport: a47099495b459b9993552d22ae3f76829108947b
|
||||
218f0478064e246c557d0319623eeb56f0827a8e:
|
||||
title: 'ALSA: usb-audio: Sanity checks for each pipe and EP types'
|
||||
mainline: 801ebf1043ae7b182588554cc9b9ad3c14bc2ab5
|
||||
backport: 52e9edf6bcb1f0423742ad0ddf4baa5c2ffdf4db
|
||||
5c4b0a778419d9deab8557265f4b3fd6f0e97e11:
|
||||
title: 'ALSA: usb-audio: Fix gpf in snd_usb_pipe_sanity_check'
|
||||
mainline: 5d78e1c2b7f4be00bbe62141603a631dc7812f35
|
||||
backport: 787a4aa45f59ee42152a1775f54050dbc6b13a06
|
||||
f0bddb4de043399f16d1969dad5ee5b984a64e7b:
|
||||
title: 'sch/netem: fix use after free in netem_dequeue'
|
||||
mainline: 3b3a2a9c6349e25a025d2330f479bc33a6ccb54a
|
||||
backport: 458dd5f94d634c30594a935563c1e2c8accd0656
|
||||
94e0cace44fe2b888cffc1c6905d1a9bfcf57c7a:
|
||||
title: 'ALSA: hda/conexant: Add pincfg quirk to enable top speakers on Sirius devices'
|
||||
mainline: 4178d78cd7a86510ba68d203f26fc01113c7f126
|
||||
backport: 140cbd4f60beb751e66e7414f08df77f7f0d645b
|
||||
f7827b47e9b2c72de0fa7cde388fdd407797be1b:
|
||||
title: 'ata: libata: Fix memory leak for error path in ata_host_alloc()'
|
||||
mainline: 284b75a3d83c7631586d98f6dede1d90f128f0db
|
||||
skipped: fixes patch not in branch
|
||||
32bd402f6760d57127d58a9888553b2db574bba6:
|
||||
title: 'mmc: dw_mmc: Fix IDMAC operation with pages bigger than 4K'
|
||||
mainline: 8396c793ffdf28bb8aee7cfe0891080f8cab7890
|
||||
backport: 196ea167c8411ea8dbd90668b9fe48bf953bd474
|
||||
13d787bb4f21b6dbc8d8291bf179d36568893c25:
|
||||
title: 'fuse: use unsigned type for getxattr/listxattr size truncation'
|
||||
mainline: b18915248a15eae7d901262f108d6ff0ffb4ffc1
|
||||
backport: a5a11287ead5951b4549f86b5d2abcc44a5efd6b
|
||||
30f9f759d7ed96735d5fe70330aab3a65456ba5f:
|
||||
title: 'clk: qcom: clk-alpha-pll: Fix the pll post div mask'
|
||||
mainline: 2c4553e6c485a96b5d86989eb9654bf20e51e6dd
|
||||
skipped: fixes patch not in branch
|
||||
35a9a7a7d94662146396199b0cfd95f9517cdd14:
|
||||
title: 'nilfs2: fix missing cleanup on rollforward recovery error'
|
||||
mainline: 5787fcaab9eb5930f5378d6a1dd03d916d146622
|
||||
backport: 812eaaab959885afdf5739337e7180e633b26734
|
||||
40a2757de2c376ef8a08d9ee9c81e77f3c750adf:
|
||||
title: 'nilfs2: fix state management in error path of log writing function'
|
||||
mainline: 6576dd6695f2afca3f4954029ac4a64f82ba60ab
|
||||
backport: faf0987376cc48fb3896f0f3298ebfeda8f1a515
|
||||
c6d593c2c931762848389d621e8e657367f62190:
|
||||
title: 'ALSA: hda: Add input value sanity checks to HDMI channel map controls'
|
||||
mainline: 6278056e42d953e207e2afd416be39d09ed2d496
|
||||
backport: 19ece5b382d38b440e13d24e951cf79ec593ae68
|
||||
81e45ff912bbc43526d6f21c7a79cc5a7159a5f5:
|
||||
title: 'smack: unix sockets: fix accept()ed socket label'
|
||||
mainline: e86cac0acdb1a74f608bacefe702f2034133a047
|
||||
backport: d92a8bb1955ce159fbbe0c309a1d17ffea5c043a
|
||||
1d755d4fb238315c3b3e50e6f3117a0d79f72c29:
|
||||
title: 'irqchip/armada-370-xp: Do not allow mapping IRQ 0 and 1'
|
||||
mainline: 3cef738208e5c3cb7084e208caf9bbf684f24feb
|
||||
backport: 90e83f2f8444a176d359ff9bc4a40590427a3bc4
|
||||
406fb2bc6548bbd61489637d1443606feaa7037a:
|
||||
title: 'af_unix: Remove put_pid()/put_cred() in copy_peercred().'
|
||||
mainline: e4bd881d987121dbf1a288641491955a53d9f8f7
|
||||
backport: 3652428ca171b8aed1217a4162dedccd3dde1b5a
|
||||
471b1417b35eb52913a48ca97492f06ab918569d:
|
||||
title: 'netfilter: nf_conncount: fix wrong variable type'
|
||||
mainline: 0b88d1654d556264bcd24a9cb6383f0888e30131
|
||||
skipped: missing commit 625c556118f3c2fd28bb8ef6da18c53bd4037be4
|
||||
c0c23130d38e8bc28e9ef581443de9b1fc749966:
|
||||
title: 'udf: Avoid excessive partition lengths'
|
||||
mainline: ebbe26fd54a9621994bc16b14f2ba8f84c089693
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
c7167cbb59f0525f6726a621b37f2596ee1bbf83:
|
||||
title: 'wifi: brcmsmac: advertise MFP_CAPABLE to enable WPA3'
|
||||
mainline: dbb5265a5d7cca1cdba7736dba313ab7d07bc19d
|
||||
backport: 26e28ffe556d6cd2f2fd43a8707e6b3d8dca24f3
|
||||
75f8136cd4e74fca5d115c35954ed598fc771a8f:
|
||||
title: 'media: qcom: camss: Add check for v4l2_fwnode_endpoint_parse'
|
||||
mainline: 4caf6d93d9f2c11d6441c64e1c549c445fa322ed
|
||||
backport: e0cb5088960d975715d2731a706914498e7cb018
|
||||
d51b471ec7bd3dd9649dea1d77635512e61eaad5:
|
||||
title: 'pcmcia: Use resource_size function on resource object'
|
||||
mainline: 24a025497e7e883bd2adef5d0ece1e9b9268009f
|
||||
backport: b9fb4137c73f884e41edb16dfbec9ec490efb4d6
|
||||
5c680022c4e28ba18ea500f3e29f0428271afa92:
|
||||
title: 'can: bcm: Remove proc entry when dev is unregistered.'
|
||||
mainline: 76fe372ccb81b0c89b6cd2fec26e2f38c958be85
|
||||
backport: f9ab8f03569d4406fc0adf3c667bc0c450280181
|
||||
79c460784fc55ccf272fbe89290ff84d3e17341c:
|
||||
title: 'igb: Fix not clearing TimeSync interrupts for 82580'
|
||||
mainline: ba8cf80724dbc09825b52498e4efacb563935408
|
||||
backport: 7e95e0c1c4750d584a8dacaefa62f506af3e510d
|
||||
5f3806adb62e1360a561cbac0c15f9310740608b:
|
||||
title: 'platform/x86: dell-smbios: Fix error path in dell_smbios_init()'
|
||||
mainline: ffc17e1479e8e9459b7afa80e5d9d40d0dd78abb
|
||||
skipped: fixes patch not in branch
|
||||
5adf7fbdfa3e9e425b04771e1d64c4e184ad8fdb:
|
||||
title: 'cx82310_eth: re-enable ethernet mode after router reboot'
|
||||
mainline: ca139d76b0d9e59d18f2d2ec8f0d81b82acd6808
|
||||
backport: 3f63ef4d3a6164cf90d31f26cb37976cbc32b5a9
|
||||
3f255eda1818c6f2b4fb446c488339c66173dc6d:
|
||||
title: 'drivers/net/usb: Remove all strcpy() uses'
|
||||
mainline: 493c3ca6bd754d8587604496eb814f72e933075d
|
||||
backport: ef1cdbe7efb9d4f237238f3a58b115ccae662a8f
|
||||
40373e2bdf967ba982309ff06e3b8c7c79c4de0e:
|
||||
title: 'net: usb: don''t write directly to netdev->dev_addr'
|
||||
mainline: 2674e7ea22ba0e22a2d1603bd51e0b8f6442a267
|
||||
backport: 70135ce17759946d0f4ccdbed51c21caccf22445
|
||||
c9c76962b49ff37ed8dcf880eabeb74df3e0686e:
|
||||
title: 'usbnet: modern method to get random MAC'
|
||||
mainline: bab8eb0dd4cb995caa4a0529d5655531c2ec5e8e
|
||||
backport: 5fb805c245cf8daf1568247ba755e3164c361d96
|
||||
2579dc71bfa05f908c13decb27989c18be775e2d:
|
||||
title: 'rfkill: fix spelling mistake contidion to condition'
|
||||
mainline: f404c3ecc401b3617c454c06a3d36a43a01f1aaf
|
||||
backport: 1c1073bf747c47629304662bd4e4acc3c347d499
|
||||
c5a0142c4d33b5948879cd5ec0af50eb92109465:
|
||||
title: 'net: bridge: add support for sticky fdb entries'
|
||||
mainline: 435f2e7cc0b783615d7fbcf08f5f00d289f9caeb
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
76c1d0d1cbedf122ed90cb64a05c440eedd39664:
|
||||
title: 'bridge: switchdev: Allow clearing FDB entry offload indication'
|
||||
mainline: e9ba0fbc7dd23a74e77960c98c988f59a1ff75aa
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
9969873b374eac5b5ddd2948fbac886b50d850a8:
|
||||
title: 'net: bridge: fdb: convert is_local to bitops'
|
||||
mainline: 6869c3b02b596eba931a754f56875d2e2ac612db
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
806d9b874077deb1b8a8c1cc1a600576603f03bb:
|
||||
title: 'net: bridge: fdb: convert is_static to bitops'
|
||||
mainline: 29e63fffd666f1945756882d4b02bc7bec132101
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
f210d06825042341c7de635898115cb5e840023e:
|
||||
title: 'net: bridge: fdb: convert is_sticky to bitops'
|
||||
mainline: e0458d9a733ba71a2821d0c3fc0745baac697db0
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
4b1bf0ea37f0a21fa948e364c623676730657795:
|
||||
title: 'net: bridge: fdb: convert added_by_user to bitops'
|
||||
mainline: ac3ca6af443aa495c7907e5010ac77fbd2450eaa
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
d3bc290bdd518e056f5cfe82accb93d5ad8643c2:
|
||||
title: 'net: bridge: fdb: convert added_by_external_learn to use bitops'
|
||||
mainline: b5cd9f7c42480ede119a390607a9dbe6263f6795
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
7d9933cb9990b8300075a853f5b2a5d3e4349629:
|
||||
title: 'net: bridge: br_fdb_external_learn_add(): always set EXT_LEARN'
|
||||
mainline: bee2ef946d3184e99077be526567d791c473036f
|
||||
skipped: fixes patch not in branch
|
||||
4c709ad8feaff418ded4561c6a87bcf4078f4a03:
|
||||
title: 'net: dsa: vsc73xx: fix possible subblocks range of CAPT block'
|
||||
mainline: 8e69c96df771ab469cec278edb47009351de4da6
|
||||
skipped: fixes patch not in branch
|
||||
75a34515eb1be431819ec00cd09fe3a3eb369cdb:
|
||||
title: 'iommu/vt-d: Handle volatile descriptor status read'
|
||||
mainline: b5e86a95541cea737394a1da967df4cd4d8f7182
|
||||
backport: b3774dcec0995f6d31fa86bbfaeb74a5c6cda069
|
||||
6760357063f593a17613e015aed2051cfd4197c6:
|
||||
title: 'cgroup: Protect css->cgroup write under css_set_lock'
|
||||
mainline: 57b56d16800e8961278ecff0dc755d46c4575092
|
||||
backport: 9d86ad71865dd3a67f27923da2d87891801d26f2
|
||||
3bedb7ce080690d0d6172db790790c1219bcbdd5:
|
||||
title: 'um: line: always fill *error_out in setup_one_line()'
|
||||
mainline: 824ac4a5edd3f7494ab1996826c4f47f8ef0f63d
|
||||
backport: def0afb4a7e7e30bc08b1b4699dfe6802b2cbde1
|
||||
c57834f37dc73410ed2eb11e1cc3fecad169b065:
|
||||
title: 'devres: Initialize an uninitialized struct member'
|
||||
mainline: 56a20ad349b5c51909cf8810f7c79b288864ad33
|
||||
backport: 463af1bdfe4037d2d5c274ae3df6a1bda26cd3aa
|
||||
4eb4085c1346d19d4a05c55246eb93e74e671048:
|
||||
title: 'pci/hotplug/pnv_php: Fix hotplug driver crash on Powernv'
|
||||
mainline: 335e35b748527f0c06ded9eebb65387f60647fda
|
||||
backport: 33259e025b9efd8c18acbeaf5db24ff06db58459
|
||||
05419d0056dcf7088687e561bb583cc06deba777:
|
||||
title: 'hwmon: (adc128d818) Fix underflows seen when writing limit attributes'
|
||||
mainline: 8cad724c8537fe3e0da8004646abc00290adae40
|
||||
backport: c0cc4bee13a524d7aceb27690ac6be7ed8e61b70
|
||||
93f0f5721d0cca45dac50af1ae6f9a9826c699fd:
|
||||
title: 'hwmon: (lm95234) Fix underflows seen when writing limit attributes'
|
||||
mainline: af64e3e1537896337405f880c1e9ac1f8c0c6198
|
||||
backport: d93e9ac35391aef72db4a0aa274d27944dd0d673
|
||||
298a55f11edd811f2189b74eb8f53dee34d4f14c:
|
||||
title: 'hwmon: (nct6775-core) Fix underflows seen when writing limit attributes'
|
||||
mainline: 0403e10bf0824bf0ec2bb135d4cf1c0cc3bf4bf0
|
||||
backport: 676ca195a7e32432c84de0516609c98560dcf66f
|
||||
93cf73a7bfdce683bde3a7bb65f270d3bd24497b:
|
||||
title: 'hwmon: (w83627ehf) Fix underflows seen when writing limit attributes'
|
||||
mainline: 5c1de37969b7bc0abcb20b86e91e70caebbd4f89
|
||||
backport: 9c01d650e13a9098fd147c080994be18cb0689c9
|
||||
a12cf97cbefa139ef8d95081f2ea047cbbd74b7a:
|
||||
title: 'wifi: mwifiex: Do not return unused priv in mwifiex_get_priv_by_id()'
|
||||
mainline: c145eea2f75ff7949392aebecf7ef0a81c1f6c14
|
||||
backport: 6d47528d1743bbefff3fc7928d1e45e3faf03cd8
|
||||
2d6a7a1ee3862d129c0e0fbd3cc147e185a379dc:
|
||||
title: 'smp: Add missing destroy_work_on_stack() call in smp_call_on_cpu()'
|
||||
mainline: 77aeb1b685f9db73d276bad4bb30d48505a6fd23
|
||||
backport: 86ed63497a70309bcc68c61bf706e65e305318e9
|
||||
2df0e48615f438cdf93f1469ed9f289f71440d2d:
|
||||
title: 'btrfs: replace BUG_ON with ASSERT in walk_down_proc()'
|
||||
mainline: 1f9d44c0a12730a24f8bb75c5e1102207413cc9b
|
||||
backport: 8f9488fe41599c4aed2820b66097ab09f2bcfec8
|
||||
c847b28a799733b04574060ab9d00f215970627d:
|
||||
title: 'btrfs: clean up our handling of refs == 0 in snapshot delete'
|
||||
mainline: b8ccef048354074a548f108e51d0557d6adfd3a3
|
||||
backport: b6a6c52de6de81961175e7d2814f6d0193697a4c
|
||||
0790b89c7e911003b8c50ae50e3ac7645de1fae9:
|
||||
title: 'PCI: Add missing bridge lock to pci_bus_lock()'
|
||||
mainline: a4e772898f8bf2e7e1cf661a12c60a5612c4afab
|
||||
backport: dc087747546322a6d53d450c92456fcd0055a257
|
||||
d09f1bf3d7f029558704f077097dbcd4dc5db8da:
|
||||
title: 'btrfs: initialize location to fix -Wmaybe-uninitialized in btrfs_lookup_dentry()'
|
||||
mainline: b8e947e9f64cac9df85a07672b658df5b2bcff07
|
||||
backport: 8f68d6f65ec245d7f7641b540ef6ffed262df9cf
|
||||
e239e44dcd419b13cf840e2a3a833204e4329714:
|
||||
title: 'HID: cougar: fix slab-out-of-bounds Read in cougar_report_fixup'
|
||||
mainline: a6e9c391d45b5865b61e569146304cff72821a5d
|
||||
skipped: missing commit b8e759b8f6dab1c473c30ac12709095d0b81078e
|
||||
9c6d189f0c1c59ba9a32326ec82a0b367a3cd47b:
|
||||
title: 'Input: uinput - reject requests with unreasonable number of slots'
|
||||
mainline: 206f533a0a7c683982af473079c4111f4a0f9f5e
|
||||
backport: f406ab8753404479a45b87c930fed326b4db0f04
|
||||
487f140d366f9b12edb11b97819c135676090bd2:
|
||||
title: 'usbnet: ipheth: race between ipheth_close and error handling'
|
||||
mainline: e5876b088ba03a62124266fa20d00e65533c7269
|
||||
backport: b1981479ebd7e8d67c23753437a4282ef363b0a0
|
||||
f82cb7f24032ed023fc67d26ea9bf322d8431a90:
|
||||
title: 'Squashfs: sanity check symbolic link size'
|
||||
mainline: 810ee43d9cd245d138a2733d87a24858a23f577d
|
||||
backport: a909f13b25b358d7f4683648b5166214c609668f
|
||||
d2a79494d8a5262949736fb2c3ac44d20a51b0d8:
|
||||
title: 'of/irq: Prevent device address out-of-bounds read in interrupt map walk'
|
||||
mainline: b739dffa5d570b411d4bdf4bb9b8dfd6b7d72305
|
||||
backport: 8b67befd1d8e89bce21196d288327ef375731328
|
||||
cff08d637389f4bf4a49a08ff0474bd6c2b27b97:
|
||||
title: 'ata: pata_macio: Use WARN instead of BUG'
|
||||
mainline: d4bc0a264fb482b019c84fbc7202dd3cab059087
|
||||
backport: 265da992cd6d9a6ae82917b3f0bd343f5754b4b9
|
||||
0edd1eac01afe0c2104bddd7d1cae985b0a4552c:
|
||||
title: 'iio: buffer-dmaengine: fix releasing dma channel on error'
|
||||
mainline: 84c65d8008764a8fb4e627ff02de01ec4245f2c4
|
||||
backport: 1753cb7f5cd1bf2bdecd6126d4670ae4c5ea31d5
|
||||
a1cad4f0340c50037bd3211bd43deff662d5287e:
|
||||
title: 'iio: fix scale application in iio_convert_raw_to_processed_unlocked'
|
||||
mainline: 8a3dcc970dc57b358c8db2702447bf0af4e0d83a
|
||||
backport: 0c91f6e9cee80725ead1a4db722a1b7a0b575162
|
||||
5e0a746e798cd962e478b54f50f6f39384f735bc:
|
||||
title: 'nvmem: Fix return type of devm_nvmem_device_get() in kerneldoc'
|
||||
mainline: c69f37f6559a8948d70badd2b179db7714dedd62
|
||||
backport: 1c8fea7bc7b888039874f237abf53f28264f3d42
|
||||
3d414b64ecf6fd717d7510ffb893c6f23acbf50e:
|
||||
title: 'uio_hv_generic: Fix kernel NULL pointer dereference in hv_uio_rescind'
|
||||
mainline: fb1adbd7e50f3d2de56d0a2bb0700e2e819a329e
|
||||
skipped: fixes patch not in branch
|
||||
45ab92b650f4ec42528b8c199b0a3ae04a71ea8b:
|
||||
title: 'Drivers: hv: vmbus: Fix rescind handling in uio_hv_generic'
|
||||
mainline: 6fd28941447bf2c8ca0f26fda612a1cabc41663f
|
||||
skipped: fixes patch not in branch
|
||||
f6365931bf7c07b2b397dbb06a4f6573cc9fae73:
|
||||
title: 'VMCI: Fix use-after-free when removing resource in vmci_resource_remove()'
|
||||
mainline: 48b9a8dabcc3cf5f961b2ebcd8933bf9204babb7
|
||||
backport: 12663f3dcfaa591275c2b086a840edc9e86dc736
|
||||
eeec87f317abb8b1ebb04b5d6823e941649d8293:
|
||||
title: 'clocksource/drivers/imx-tpm: Fix return -ETIME when delta exceeds INT_MAX'
|
||||
mainline: 5b8843fcd49827813da80c0f590a17ae4ce93c5d
|
||||
backport: 3ed0ce0836c07ea1c3e635370ce04f5ab065ee90
|
||||
143674856ebffeb785759892b1a11a7f5ecbd1f5:
|
||||
title: 'clocksource/drivers/imx-tpm: Fix next event not taking effect sometime'
|
||||
mainline: 3d5c2f8e75a55cfb11a85086c71996af0354a1fb
|
||||
backport: 79b3fd21dd528f14d3d7f4f380db5a742f5903d4
|
||||
32bb3588ccf08406931c7f061f0ef7a37cd38414:
|
||||
title: 'uprobes: Use kzalloc to allocate xol area'
|
||||
mainline: e240b0fde52f33670d1336697c22d90a4fe33c84
|
||||
backport: 967a7ce0d7d61c1256391a197e81ba2a400ecf07
|
||||
ac8ffa21dde0c1edcd9dd98b5555a0aa4eea3b1f:
|
||||
title: 'ring-buffer: Rename ring_buffer_read() to read_buffer_iter_advance()'
|
||||
mainline: bc1a72afdc4a91844928831cac85731566e03bc6
|
||||
backport: ae2112e6a08779c541bc4b9b88ff58914f4ecf32
|
||||
84bd537aaefb210218b5e1d982411fa6ae8429a1:
|
||||
title: 'tracing: Avoid possible softlockup in tracing_iter_reset()'
|
||||
mainline: 49aa8a1f4d6800721c7971ed383078257f12e8f9
|
||||
backport: fdfd1ef491f5e5445d130169394ae68a45d1adcf
|
||||
51af9b589ab68a94485ee55811d1243c6bf665b4:
|
||||
title: 'nilfs2: replace snprintf in show functions with sysfs_emit'
|
||||
mainline: 3bcd6c5bd483287f4a09d3d59a012d47677b6edc
|
||||
backport: c77787e1b99270f880dae53e1c8e9f7d8ec8f5a1
|
||||
b90beafac05931cbfcb6b1bd4f67c1923f47040e:
|
||||
title: 'nilfs2: protect references to superblock parameters exposed in sysfs'
|
||||
mainline: 683408258917541bdb294cd717c210a04381931e
|
||||
backport: 2d65330b265ca1170d35cd861a82b35536f57c4e
|
||||
bc596c2026c7f52dc12a784403ccfc3b152844e6:
|
||||
title: 'netns: add pre_exit method to struct pernet_operations'
|
||||
mainline: d7d99872c144a2c2f5d9c9d83627fa833836cba5
|
||||
backport: 9541fb132b07ee39fa0c6d07655684f7d961c171
|
||||
43d34110882b97ba1ec66cc8234b18983efb9abf:
|
||||
title: 'ila: call nf_unregister_net_hooks() sooner'
|
||||
mainline: 031ae72825cef43e4650140b800ad58bf7a6a466
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
a30476afbaac69face9537cd8d0694d46d5d1ef5:
|
||||
title: 'ACPI: processor: Return an error if acpi_processor_get_info() fails in processor_add()'
|
||||
mainline: fadf231f0a06a6748a7fc4a2c29ac9ef7bca6bfd
|
||||
backport: 9e65e5135c7d8451ee68b36d44f674429df4271a
|
||||
00259ae5206a713234e3ac12a8a0f731e86b754b:
|
||||
title: 'ACPI: processor: Fix memory leaks in error paths of processor_add()'
|
||||
mainline: 47ec9b417ed9b6b8ec2a941cd84d9de62adc358a
|
||||
backport: 89bbd019927a862339cb11beeb98a95c0269b25c
|
||||
60e02cb604a8e2c755a9f0407d63539b586d3310:
|
||||
title: 'drm/i915/fence: Mark debug_fence_init_onstack() with __maybe_unused'
|
||||
mainline: fcd9e8afd546f6ced378d078345a89bf346d065e
|
||||
skipped: fixes patch not in branch
|
||||
76b1dda1598fc151610d3f372e24be1fcc8b396e:
|
||||
title: 'drm/i915/fence: Mark debug_fence_free() with __maybe_unused'
|
||||
mainline: f99999536128b14b5d765a9982763b5134efdd79
|
||||
backport: c292e581abf5c0dfaf783e3ad2bda3502b5ab4be
|
||||
432efdbe7da5ecfcbc0c2180cfdbab1441752a38:
|
||||
title: 'rtmutex: Drop rt_mutex::wait_lock before scheduling'
|
||||
mainline: d33d26036a0274b472299d7dcdaa5fb34329f91b
|
||||
backport: 11ae525157eb075f44f3c6460fdd9a5642ada728
|
||||
bc790261218952635f846aaf90bcc0974f6f62c6:
|
||||
title: 'net, sunrpc: Remap EPERM in case of connection failure in xs_tcp_setup_socket'
|
||||
mainline: 626dfed5fa3bfb41e0dffd796032b555b69f9cde
|
||||
skipped: fixes patch not in branch
|
||||
e70c0b7e280415e1511fb258f4b72733d765b80e:
|
||||
title: 'cx82310_eth: fix error return code in cx82310_bind()'
|
||||
mainline: cfbaa8b33e022aca62a3f2815ffbc02874d4cb8b
|
||||
backport: 8b8a84237a675ff0a73827b2ba05745765a97f13
|
||||
15605b333ddaa3e5e21dfebb65546c70bb167925:
|
||||
title: 'netns: restore ops before calling ops_exit_list'
|
||||
mainline: b272a0ad730103e84fb735fd0a8cc050cdf7f77c
|
||||
backport: 61da5c1d99b77bb28d2579a64a05bfbf9447e43d
|
||||
324954a057b3ab21a7be5c91e148c15c401332f0:
|
||||
title: 'Revert "parisc: Use irq_enter_rcu() to fix warning at kernel/context_tracking.c:367"'
|
||||
mainline: 73cb4a2d8d7e0259f94046116727084f21e4599f
|
||||
backport: a66198e30ea76c75761c3f0323b31ba6be641824
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 354
|
||||
SUBLEVEL = 355
|
||||
EXTRAVERSION = -openela
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
@ -524,7 +524,7 @@ void do_cpu_irq_mask(struct pt_regs *regs)
|
||||
|
||||
old_regs = set_irq_regs(regs);
|
||||
local_irq_disable();
|
||||
irq_enter_rcu();
|
||||
irq_enter();
|
||||
|
||||
eirr_val = mfctl(23) & cpu_eiem & per_cpu(local_ack_eiem, cpu);
|
||||
if (!eirr_val)
|
||||
@ -559,7 +559,7 @@ void do_cpu_irq_mask(struct pt_regs *regs)
|
||||
#endif /* CONFIG_IRQSTACKS */
|
||||
|
||||
out:
|
||||
irq_exit_rcu();
|
||||
irq_exit();
|
||||
set_irq_regs(old_regs);
|
||||
return;
|
||||
|
||||
|
@ -391,6 +391,7 @@ int setup_one_line(struct line *lines, int n, char *init,
|
||||
parse_chan_pair(NULL, line, n, opts, error_out);
|
||||
err = 0;
|
||||
}
|
||||
*error_out = "configured as 'none'";
|
||||
} else {
|
||||
char *new = kstrdup(init, GFP_KERNEL);
|
||||
if (!new) {
|
||||
@ -414,6 +415,7 @@ int setup_one_line(struct line *lines, int n, char *init,
|
||||
}
|
||||
}
|
||||
if (err) {
|
||||
*error_out = "failed to parse channel pair";
|
||||
line->init_str = NULL;
|
||||
line->valid = 0;
|
||||
kfree(new);
|
||||
|
@ -244,6 +244,7 @@ bool bio_integrity_prep(struct bio *bio)
|
||||
unsigned int bytes, offset, i;
|
||||
unsigned int intervals;
|
||||
blk_status_t status;
|
||||
gfp_t gfp = GFP_NOIO;
|
||||
|
||||
if (!bi)
|
||||
return true;
|
||||
@ -266,12 +267,20 @@ bool bio_integrity_prep(struct bio *bio)
|
||||
if (!bi->profile->generate_fn ||
|
||||
!(bi->flags & BLK_INTEGRITY_GENERATE))
|
||||
return true;
|
||||
|
||||
/*
|
||||
* Zero the memory allocated to not leak uninitialized kernel
|
||||
* memory to disk. For PI this only affects the app tag, but
|
||||
* for non-integrity metadata it affects the entire metadata
|
||||
* buffer.
|
||||
*/
|
||||
gfp |= __GFP_ZERO;
|
||||
}
|
||||
intervals = bio_integrity_intervals(bi, bio_sectors(bio));
|
||||
|
||||
/* Allocate kernel buffer for protection data */
|
||||
len = intervals * bi->tuple_size;
|
||||
buf = kmalloc(len, GFP_NOIO | q->bounce_gfp);
|
||||
buf = kmalloc(len, gfp | q->bounce_gfp);
|
||||
status = BLK_STS_RESOURCE;
|
||||
if (unlikely(buf == NULL)) {
|
||||
printk(KERN_ERR "could not allocate integrity buffer\n");
|
||||
|
@ -390,7 +390,7 @@ static int acpi_processor_add(struct acpi_device *device,
|
||||
|
||||
result = acpi_processor_get_info(device);
|
||||
if (result) /* Processor is not physically present or unavailable */
|
||||
return 0;
|
||||
goto err_clear_driver_data;
|
||||
|
||||
BUG_ON(pr->id >= nr_cpu_ids);
|
||||
|
||||
@ -405,7 +405,7 @@ static int acpi_processor_add(struct acpi_device *device,
|
||||
"BIOS reported wrong ACPI id %d for the processor\n",
|
||||
pr->id);
|
||||
/* Give up, but do not abort the namespace scan. */
|
||||
goto err;
|
||||
goto err_clear_driver_data;
|
||||
}
|
||||
/*
|
||||
* processor_device_array is not cleared on errors to allow buggy BIOS
|
||||
@ -417,12 +417,12 @@ static int acpi_processor_add(struct acpi_device *device,
|
||||
dev = get_cpu_device(pr->id);
|
||||
if (!dev) {
|
||||
result = -ENODEV;
|
||||
goto err;
|
||||
goto err_clear_per_cpu;
|
||||
}
|
||||
|
||||
result = acpi_bind_one(dev, device);
|
||||
if (result)
|
||||
goto err;
|
||||
goto err_clear_per_cpu;
|
||||
|
||||
pr->dev = dev;
|
||||
|
||||
@ -433,10 +433,11 @@ static int acpi_processor_add(struct acpi_device *device,
|
||||
dev_err(dev, "Processor driver could not be attached\n");
|
||||
acpi_unbind_one(dev);
|
||||
|
||||
err:
|
||||
free_cpumask_var(pr->throttling.shared_cpu_map);
|
||||
device->driver_data = NULL;
|
||||
err_clear_per_cpu:
|
||||
per_cpu(processors, pr->id) = NULL;
|
||||
err_clear_driver_data:
|
||||
device->driver_data = NULL;
|
||||
free_cpumask_var(pr->throttling.shared_cpu_map);
|
||||
err_free_pr:
|
||||
kfree(pr);
|
||||
return result;
|
||||
|
@ -537,7 +537,8 @@ static enum ata_completion_errors pata_macio_qc_prep(struct ata_queued_cmd *qc)
|
||||
|
||||
while (sg_len) {
|
||||
/* table overflow should never happen */
|
||||
BUG_ON (pi++ >= MAX_DCMDS);
|
||||
if (WARN_ON_ONCE(pi >= MAX_DCMDS))
|
||||
return AC_ERR_SYSTEM;
|
||||
|
||||
len = (sg_len < MAX_DBDMA_SEG) ? sg_len : MAX_DBDMA_SEG;
|
||||
table->command = cpu_to_le16(write ? OUTPUT_MORE: INPUT_MORE);
|
||||
@ -549,11 +550,13 @@ static enum ata_completion_errors pata_macio_qc_prep(struct ata_queued_cmd *qc)
|
||||
addr += len;
|
||||
sg_len -= len;
|
||||
++table;
|
||||
++pi;
|
||||
}
|
||||
}
|
||||
|
||||
/* Should never happen according to Tejun */
|
||||
BUG_ON(!pi);
|
||||
if (WARN_ON_ONCE(!pi))
|
||||
return AC_ERR_SYSTEM;
|
||||
|
||||
/* Convert the last command to an input/output */
|
||||
table--;
|
||||
|
@ -555,6 +555,7 @@ void * devres_open_group(struct device *dev, void *id, gfp_t gfp)
|
||||
grp->id = grp;
|
||||
if (id)
|
||||
grp->id = id;
|
||||
grp->color = 0;
|
||||
|
||||
spin_lock_irqsave(&dev->devres_lock, flags);
|
||||
add_dr(dev, &grp->node[0]);
|
||||
|
@ -94,20 +94,28 @@ static int __init tpm_clocksource_init(unsigned long rate)
|
||||
static int tpm_set_next_event(unsigned long delta,
|
||||
struct clock_event_device *evt)
|
||||
{
|
||||
unsigned long next, now;
|
||||
unsigned long next, prev, now;
|
||||
|
||||
next = tpm_read_counter();
|
||||
next += delta;
|
||||
prev = tpm_read_counter();
|
||||
next = prev + delta;
|
||||
writel(next, timer_base + TPM_C0V);
|
||||
now = tpm_read_counter();
|
||||
|
||||
/*
|
||||
* Need to wait CNT increase at least 1 cycle to make sure
|
||||
* the C0V has been updated into HW.
|
||||
*/
|
||||
if ((next & 0xffffffff) != readl(timer_base + TPM_C0V))
|
||||
while (now == tpm_read_counter())
|
||||
;
|
||||
|
||||
/*
|
||||
* NOTE: We observed in a very small probability, the bus fabric
|
||||
* contention between GPU and A7 may results a few cycles delay
|
||||
* of writing CNT registers which may cause the min_delta event got
|
||||
* missed, so we need add a ETIME check here in case it happened.
|
||||
*/
|
||||
return (int)(next - now) <= 0 ? -ETIME : 0;
|
||||
return (now - prev) >= delta ? -ETIME : 0;
|
||||
}
|
||||
|
||||
static int tpm_set_state_oneshot(struct clock_event_device *evt)
|
||||
|
@ -100,6 +100,7 @@ struct amdgpu_afmt_acr amdgpu_afmt_acr(uint32_t clock)
|
||||
amdgpu_afmt_calc_cts(clock, &res.cts_32khz, &res.n_32khz, 32000);
|
||||
amdgpu_afmt_calc_cts(clock, &res.cts_44_1khz, &res.n_44_1khz, 44100);
|
||||
amdgpu_afmt_calc_cts(clock, &res.cts_48khz, &res.n_48khz, 48000);
|
||||
res.clock = clock;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -1624,6 +1624,8 @@ int amdgpu_atombios_init_mc_reg_table(struct amdgpu_device *adev,
|
||||
(u32)le32_to_cpu(*((u32 *)reg_data + j));
|
||||
j++;
|
||||
} else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) {
|
||||
if (i == 0)
|
||||
continue;
|
||||
reg_table->mc_reg_table_entry[num_ranges].mc_data[i] =
|
||||
reg_table->mc_reg_table_entry[num_ranges].mc_data[i - 1];
|
||||
}
|
||||
|
@ -639,6 +639,9 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,
|
||||
struct amdgpu_firmware_info *ucode;
|
||||
|
||||
id = fw_type_convert(cgs_device, type);
|
||||
if (id >= AMDGPU_UCODE_ID_MAXIMUM)
|
||||
return -EINVAL;
|
||||
|
||||
ucode = &adev->firmware.ucode[id];
|
||||
if (ucode->fw == NULL)
|
||||
return -EINVAL;
|
||||
|
@ -383,8 +383,9 @@ static ssize_t amdgpu_debugfs_ring_read(struct file *f, char __user *buf,
|
||||
size_t size, loff_t *pos)
|
||||
{
|
||||
struct amdgpu_ring *ring = file_inode(f)->i_private;
|
||||
int r, i;
|
||||
uint32_t value, result, early[3];
|
||||
loff_t i;
|
||||
int r;
|
||||
|
||||
if (*pos & 3 || size & 3)
|
||||
return -EINVAL;
|
||||
|
@ -61,7 +61,7 @@ static inline void debug_fence_destroy(struct i915_sw_fence *fence)
|
||||
debug_object_destroy(fence, &i915_sw_fence_debug_descr);
|
||||
}
|
||||
|
||||
static inline void debug_fence_free(struct i915_sw_fence *fence)
|
||||
static inline __maybe_unused void debug_fence_free(struct i915_sw_fence *fence)
|
||||
{
|
||||
debug_object_free(fence, &i915_sw_fence_debug_descr);
|
||||
smp_wmb(); /* flush the change in state before reallocation */
|
||||
@ -95,7 +95,7 @@ static inline void debug_fence_destroy(struct i915_sw_fence *fence)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void debug_fence_free(struct i915_sw_fence *fence)
|
||||
static inline __maybe_unused void debug_fence_free(struct i915_sw_fence *fence)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -184,7 +184,7 @@ static ssize_t adc128_set_in(struct device *dev, struct device_attribute *attr,
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
/* 10 mV LSB on limit registers */
|
||||
regval = clamp_val(DIV_ROUND_CLOSEST(val, 10), 0, 255);
|
||||
regval = DIV_ROUND_CLOSEST(clamp_val(val, 0, 2550), 10);
|
||||
data->in[index][nr] = regval << 4;
|
||||
reg = index == 1 ? ADC128_REG_IN_MIN(nr) : ADC128_REG_IN_MAX(nr);
|
||||
i2c_smbus_write_byte_data(data->client, reg, regval);
|
||||
@ -222,7 +222,7 @@ static ssize_t adc128_set_temp(struct device *dev,
|
||||
return err;
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
regval = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
|
||||
regval = DIV_ROUND_CLOSEST(clamp_val(val, -128000, 127000), 1000);
|
||||
data->temp[index] = regval << 1;
|
||||
i2c_smbus_write_byte_data(data->client,
|
||||
index == 1 ? ADC128_REG_TEMP_MAX
|
||||
|
@ -310,7 +310,8 @@ static ssize_t set_tcrit2(struct device *dev, struct device_attribute *attr,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, index ? 255 : 127);
|
||||
val = DIV_ROUND_CLOSEST(clamp_val(val, 0, (index ? 255 : 127) * 1000),
|
||||
1000);
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
data->tcrit2[index] = val;
|
||||
@ -359,7 +360,7 @@ static ssize_t set_tcrit1(struct device *dev, struct device_attribute *attr,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 255);
|
||||
val = DIV_ROUND_CLOSEST(clamp_val(val, 0, 255000), 1000);
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
data->tcrit1[index] = val;
|
||||
@ -400,7 +401,7 @@ static ssize_t set_tcrit1_hyst(struct device *dev,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
val = DIV_ROUND_CLOSEST(val, 1000);
|
||||
val = DIV_ROUND_CLOSEST(clamp_val(val, -255000, 255000), 1000);
|
||||
val = clamp_val((int)data->tcrit1[index] - val, 0, 31);
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
@ -440,7 +441,7 @@ static ssize_t set_offset(struct device *dev, struct device_attribute *attr,
|
||||
return ret;
|
||||
|
||||
/* Accuracy is 1/2 degrees C */
|
||||
val = clamp_val(DIV_ROUND_CLOSEST(val, 500), -128, 127);
|
||||
val = DIV_ROUND_CLOSEST(clamp_val(val, -64000, 63500), 500);
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
data->toffset[index] = val;
|
||||
|
@ -2200,7 +2200,7 @@ store_temp_offset(struct device *dev, struct device_attribute *attr,
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
|
||||
val = DIV_ROUND_CLOSEST(clamp_val(val, -128000, 127000), 1000);
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
data->temp_offset[nr] = val;
|
||||
|
@ -1519,7 +1519,7 @@ store_target_temp(struct device *dev, struct device_attribute *attr,
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 127);
|
||||
val = DIV_ROUND_CLOSEST(clamp_val(val, 0, 127000), 1000);
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
data->target_temp[nr] = val;
|
||||
@ -1545,7 +1545,7 @@ store_tolerance(struct device *dev, struct device_attribute *attr,
|
||||
return err;
|
||||
|
||||
/* Limit the temp to 0C - 15C */
|
||||
val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 0, 15);
|
||||
val = DIV_ROUND_CLOSEST(clamp_val(val, 0, 15000), 1000);
|
||||
|
||||
mutex_lock(&data->update_lock);
|
||||
if (sio_data->kind == nct6775 || sio_data->kind == nct6776) {
|
||||
|
@ -159,7 +159,7 @@ struct iio_buffer *iio_dmaengine_buffer_alloc(struct device *dev,
|
||||
|
||||
ret = dma_get_slave_caps(chan, &caps);
|
||||
if (ret < 0)
|
||||
goto err_free;
|
||||
goto err_release;
|
||||
|
||||
/* Needs to be aligned to the maximum of the minimums */
|
||||
if (caps.src_addr_widths)
|
||||
@ -184,6 +184,8 @@ struct iio_buffer *iio_dmaengine_buffer_alloc(struct device *dev,
|
||||
|
||||
return &dmaengine_buffer->queue.buffer;
|
||||
|
||||
err_release:
|
||||
dma_release_channel(chan);
|
||||
err_free:
|
||||
kfree(dmaengine_buffer);
|
||||
return ERR_PTR(ret);
|
||||
|
@ -640,17 +640,17 @@ static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan,
|
||||
break;
|
||||
case IIO_VAL_INT_PLUS_MICRO:
|
||||
if (scale_val2 < 0)
|
||||
*processed = -raw64 * scale_val;
|
||||
*processed = -raw64 * scale_val * scale;
|
||||
else
|
||||
*processed = raw64 * scale_val;
|
||||
*processed = raw64 * scale_val * scale;
|
||||
*processed += div_s64(raw64 * (s64)scale_val2 * scale,
|
||||
1000000LL);
|
||||
break;
|
||||
case IIO_VAL_INT_PLUS_NANO:
|
||||
if (scale_val2 < 0)
|
||||
*processed = -raw64 * scale_val;
|
||||
*processed = -raw64 * scale_val * scale;
|
||||
else
|
||||
*processed = raw64 * scale_val;
|
||||
*processed = raw64 * scale_val * scale;
|
||||
*processed += div_s64(raw64 * (s64)scale_val2 * scale,
|
||||
1000000000LL);
|
||||
break;
|
||||
|
@ -378,6 +378,20 @@ static int uinput_validate_absinfo(struct input_dev *dev, unsigned int code,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Limit number of contacts to a reasonable value (100). This
|
||||
* ensures that we need less than 2 pages for struct input_mt
|
||||
* (we are not using in-kernel slot assignment so not going to
|
||||
* allocate memory for the "red" table), and we should have no
|
||||
* trouble getting this much memory.
|
||||
*/
|
||||
if (code == ABS_MT_SLOT && max > 99) {
|
||||
printk(KERN_DEBUG
|
||||
"%s: unreasonably large number of slots requested: %d\n",
|
||||
UINPUT_NAME, max);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1289,7 +1289,7 @@ restart:
|
||||
*/
|
||||
writel(qi->free_head << DMAR_IQ_SHIFT, iommu->reg + DMAR_IQT_REG);
|
||||
|
||||
while (qi->desc_status[wait_index] != QI_DONE) {
|
||||
while (READ_ONCE(qi->desc_status[wait_index]) != QI_DONE) {
|
||||
/*
|
||||
* We will leave the interrupts disabled, to prevent interrupt
|
||||
* context to queue another cmd while a cmd is already submitted
|
||||
|
@ -346,6 +346,10 @@ static struct irq_chip armada_370_xp_irq_chip = {
|
||||
static int armada_370_xp_mpic_irq_map(struct irq_domain *h,
|
||||
unsigned int virq, irq_hw_number_t hw)
|
||||
{
|
||||
/* IRQs 0 and 1 cannot be mapped, they are handled internally */
|
||||
if (hw <= 1)
|
||||
return -EINVAL;
|
||||
|
||||
armada_370_xp_irq_mask(irq_get_irq_data(virq));
|
||||
if (!is_percpu_irq(hw))
|
||||
writel(hw, per_cpu_int_base +
|
||||
|
@ -261,8 +261,11 @@ static int camss_of_parse_endpoint_node(struct device *dev,
|
||||
struct v4l2_fwnode_bus_mipi_csi2 *mipi_csi2;
|
||||
struct v4l2_fwnode_endpoint vep = { { 0 } };
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
v4l2_fwnode_endpoint_parse(of_fwnode_handle(node), &vep);
|
||||
ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(node), &vep);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
csd->interface.csiphy_id = vep.base.port;
|
||||
|
||||
|
@ -821,16 +821,26 @@ static int uvc_parse_streaming(struct uvc_device *dev,
|
||||
goto error;
|
||||
}
|
||||
|
||||
size = nformats * sizeof *format + nframes * sizeof *frame
|
||||
+ nintervals * sizeof *interval;
|
||||
/*
|
||||
* Allocate memory for the formats, the frames and the intervals,
|
||||
* plus any required padding to guarantee that everything has the
|
||||
* correct alignment.
|
||||
*/
|
||||
size = nformats * sizeof(*format);
|
||||
size = ALIGN(size, __alignof__(*frame)) + nframes * sizeof(*frame);
|
||||
size = ALIGN(size, __alignof__(*interval))
|
||||
+ nintervals * sizeof(*interval);
|
||||
|
||||
format = kzalloc(size, GFP_KERNEL);
|
||||
if (format == NULL) {
|
||||
if (!format) {
|
||||
ret = -ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
|
||||
frame = (struct uvc_frame *)&format[nformats];
|
||||
interval = (__u32 *)&frame[nframes];
|
||||
frame = (void *)format + nformats * sizeof(*format);
|
||||
frame = PTR_ALIGN(frame, __alignof__(*frame));
|
||||
interval = (void *)frame + nframes * sizeof(*frame);
|
||||
interval = PTR_ALIGN(interval, __alignof__(*interval));
|
||||
|
||||
streaming->format = format;
|
||||
streaming->nformats = nformats;
|
||||
|
@ -152,7 +152,8 @@ void vmci_resource_remove(struct vmci_resource *resource)
|
||||
spin_lock(&vmci_resource_table.lock);
|
||||
|
||||
hlist_for_each_entry(r, &vmci_resource_table.entries[idx], node) {
|
||||
if (vmci_handle_is_equal(r->handle, resource->handle)) {
|
||||
if (vmci_handle_is_equal(r->handle, resource->handle) &&
|
||||
resource->type == r->type) {
|
||||
hlist_del_init_rcu(&r->node);
|
||||
break;
|
||||
}
|
||||
|
@ -2869,8 +2869,8 @@ static int dw_mci_init_slot(struct dw_mci *host)
|
||||
if (host->use_dma == TRANS_MODE_IDMAC) {
|
||||
mmc->max_segs = host->ring_size;
|
||||
mmc->max_blk_size = 65535;
|
||||
mmc->max_seg_size = 0x1000;
|
||||
mmc->max_req_size = mmc->max_seg_size * host->ring_size;
|
||||
mmc->max_req_size = DW_MCI_DESC_DATA_LENGTH * host->ring_size;
|
||||
mmc->max_seg_size = mmc->max_req_size;
|
||||
mmc->max_blk_count = mmc->max_req_size / 512;
|
||||
} else if (host->use_dma == TRANS_MODE_EDMAC) {
|
||||
mmc->max_segs = 64;
|
||||
|
@ -5814,10 +5814,20 @@ static void igb_extts(struct igb_adapter *adapter, int tsintr_tt)
|
||||
|
||||
static void igb_tsync_interrupt(struct igb_adapter *adapter)
|
||||
{
|
||||
const u32 mask = (TSINTR_SYS_WRAP | E1000_TSICR_TXTS |
|
||||
TSINTR_TT0 | TSINTR_TT1 |
|
||||
TSINTR_AUTT0 | TSINTR_AUTT1);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 tsicr = rd32(E1000_TSICR);
|
||||
struct ptp_clock_event event;
|
||||
|
||||
if (hw->mac.type == e1000_82580) {
|
||||
/* 82580 has a hardware bug that requires an explicit
|
||||
* write to clear the TimeSync interrupt cause.
|
||||
*/
|
||||
wr32(E1000_TSICR, tsicr & mask);
|
||||
}
|
||||
|
||||
if (tsicr & TSINTR_SYS_WRAP) {
|
||||
event.type = PTP_CLOCK_PPS;
|
||||
if (adapter->ptp_caps.pps)
|
||||
|
@ -338,6 +338,7 @@ static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
{
|
||||
int retval = 0;
|
||||
unsigned char data[2];
|
||||
u8 addr[ETH_ALEN];
|
||||
|
||||
retval = usbnet_get_endpoints(dev, intf);
|
||||
if (retval)
|
||||
@ -385,7 +386,8 @@ static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
retval = control_write(dev, REQUEST_WRITE, 0, MAC_REG_CTRL, data, 0x02,
|
||||
CONTROL_TIMEOUT_MS);
|
||||
|
||||
retval = get_mac_address(dev, dev->net->dev_addr);
|
||||
retval = get_mac_address(dev, addr);
|
||||
eth_hw_addr_set(dev->net, addr);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
@ -52,6 +52,11 @@ enum cx82310_status {
|
||||
#define CX82310_MTU 1514
|
||||
#define CMD_EP 0x01
|
||||
|
||||
struct cx82310_priv {
|
||||
struct work_struct reenable_work;
|
||||
struct usbnet *dev;
|
||||
};
|
||||
|
||||
/*
|
||||
* execute control command
|
||||
* - optionally send some data (command parameters)
|
||||
@ -127,6 +132,23 @@ end:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cx82310_enable_ethernet(struct usbnet *dev)
|
||||
{
|
||||
int ret = cx82310_cmd(dev, CMD_ETHERNET_MODE, true, "\x01", 1, NULL, 0);
|
||||
|
||||
if (ret)
|
||||
netdev_err(dev->net, "unable to enable ethernet mode: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void cx82310_reenable_work(struct work_struct *work)
|
||||
{
|
||||
struct cx82310_priv *priv = container_of(work, struct cx82310_priv,
|
||||
reenable_work);
|
||||
cx82310_enable_ethernet(priv->dev);
|
||||
}
|
||||
|
||||
#define partial_len data[0] /* length of partial packet data */
|
||||
#define partial_rem data[1] /* remaining (missing) data length */
|
||||
#define partial_data data[2] /* partial packet data */
|
||||
@ -138,6 +160,8 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
struct usb_device *udev = dev->udev;
|
||||
u8 link[3];
|
||||
int timeout = 50;
|
||||
struct cx82310_priv *priv;
|
||||
u8 addr[ETH_ALEN];
|
||||
|
||||
/* avoid ADSL modems - continue only if iProduct is "USB NET CARD" */
|
||||
if (usb_string(udev, udev->descriptor.iProduct, buf, sizeof(buf)) > 0
|
||||
@ -164,6 +188,15 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
if (!dev->partial_data)
|
||||
return -ENOMEM;
|
||||
|
||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv) {
|
||||
ret = -ENOMEM;
|
||||
goto err_partial;
|
||||
}
|
||||
dev->driver_priv = priv;
|
||||
INIT_WORK(&priv->reenable_work, cx82310_reenable_work);
|
||||
priv->dev = dev;
|
||||
|
||||
/* wait for firmware to become ready (indicated by the link being up) */
|
||||
while (--timeout) {
|
||||
ret = cx82310_cmd(dev, CMD_GET_LINK_STATUS, true, NULL, 0,
|
||||
@ -180,20 +213,17 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
}
|
||||
|
||||
/* enable ethernet mode (?) */
|
||||
ret = cx82310_cmd(dev, CMD_ETHERNET_MODE, true, "\x01", 1, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(&udev->dev, "unable to enable ethernet mode: %d\n",
|
||||
ret);
|
||||
ret = cx82310_enable_ethernet(dev);
|
||||
if (ret)
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* get the MAC address */
|
||||
ret = cx82310_cmd(dev, CMD_GET_MAC_ADDR, true, NULL, 0,
|
||||
dev->net->dev_addr, ETH_ALEN);
|
||||
ret = cx82310_cmd(dev, CMD_GET_MAC_ADDR, true, NULL, 0, addr, ETH_ALEN);
|
||||
if (ret) {
|
||||
dev_err(&udev->dev, "unable to read MAC address: %d\n", ret);
|
||||
goto err;
|
||||
}
|
||||
eth_hw_addr_set(dev->net, addr);
|
||||
|
||||
/* start (does not seem to have any effect?) */
|
||||
ret = cx82310_cmd(dev, CMD_START, false, NULL, 0, NULL, 0);
|
||||
@ -202,13 +232,19 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
|
||||
return 0;
|
||||
err:
|
||||
kfree(dev->driver_priv);
|
||||
err_partial:
|
||||
kfree((void *)dev->partial_data);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void cx82310_unbind(struct usbnet *dev, struct usb_interface *intf)
|
||||
{
|
||||
struct cx82310_priv *priv = dev->driver_priv;
|
||||
|
||||
kfree((void *)dev->partial_data);
|
||||
cancel_work_sync(&priv->reenable_work);
|
||||
kfree(dev->driver_priv);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -223,6 +259,7 @@ static int cx82310_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
||||
{
|
||||
int len;
|
||||
struct sk_buff *skb2;
|
||||
struct cx82310_priv *priv = dev->driver_priv;
|
||||
|
||||
/*
|
||||
* If the last skb ended with an incomplete packet, this skb contains
|
||||
@ -257,7 +294,10 @@ static int cx82310_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
||||
break;
|
||||
}
|
||||
|
||||
if (len > CX82310_MTU) {
|
||||
if (len == 0xffff) {
|
||||
netdev_info(dev->net, "router was rebooted, re-enabling ethernet mode");
|
||||
schedule_work(&priv->reenable_work);
|
||||
} else if (len > CX82310_MTU) {
|
||||
dev_err(&dev->udev->dev, "RX packet too long: %d B\n",
|
||||
len);
|
||||
return 0;
|
||||
|
@ -407,8 +407,8 @@ static int ipheth_close(struct net_device *net)
|
||||
{
|
||||
struct ipheth_device *dev = netdev_priv(net);
|
||||
|
||||
cancel_delayed_work_sync(&dev->carrier_work);
|
||||
netif_stop_queue(net);
|
||||
cancel_delayed_work_sync(&dev->carrier_work);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -497,7 +497,7 @@ static int ipheth_probe(struct usb_interface *intf,
|
||||
|
||||
netdev->netdev_ops = &ipheth_netdev_ops;
|
||||
netdev->watchdog_timeo = IPHETH_TX_TIMEOUT;
|
||||
strcpy(netdev->name, "eth%d");
|
||||
strscpy(netdev->name, "eth%d", sizeof(netdev->name));
|
||||
|
||||
dev = netdev_priv(netdev);
|
||||
dev->udev = udev;
|
||||
|
@ -1139,8 +1139,7 @@ err_fw:
|
||||
goto err_all_but_rxbuf;
|
||||
|
||||
memcpy(netdev->broadcast, &bcast_addr, sizeof(bcast_addr));
|
||||
memcpy(netdev->dev_addr, &kaweth->configuration.hw_addr,
|
||||
sizeof(kaweth->configuration.hw_addr));
|
||||
eth_hw_addr_set(netdev, (u8 *)&kaweth->configuration.hw_addr);
|
||||
|
||||
netdev->netdev_ops = &kaweth_netdev_ops;
|
||||
netdev->watchdog_timeo = KAWETH_TX_TIMEOUT;
|
||||
|
@ -493,17 +493,19 @@ static const struct net_device_ops mcs7830_netdev_ops = {
|
||||
static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
|
||||
{
|
||||
struct net_device *net = dev->net;
|
||||
u8 addr[ETH_ALEN];
|
||||
int ret;
|
||||
int retry;
|
||||
|
||||
/* Initial startup: Gather MAC address setting from EEPROM */
|
||||
ret = -EINVAL;
|
||||
for (retry = 0; retry < 5 && ret; retry++)
|
||||
ret = mcs7830_hif_get_mac_address(dev, net->dev_addr);
|
||||
ret = mcs7830_hif_get_mac_address(dev, addr);
|
||||
if (ret) {
|
||||
dev_warn(&dev->udev->dev, "Cannot read MAC address\n");
|
||||
goto out;
|
||||
}
|
||||
eth_hw_addr_set(net, addr);
|
||||
|
||||
mcs7830_data_set_multicast(net);
|
||||
|
||||
|
@ -1379,6 +1379,7 @@ static const struct usb_device_id products[] = {
|
||||
{QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */
|
||||
{QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */
|
||||
{QMI_QUIRK_SET_DTR(0x33f8, 0x0104, 4)}, /* Rolling RW101 RMNET */
|
||||
{QMI_FIXED_INTF(0x2dee, 0x4d22, 5)}, /* MeiG Smart SRM825L */
|
||||
|
||||
/* 4. Gobi 1000 devices */
|
||||
{QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
|
||||
|
@ -690,6 +690,7 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
0x00, 0x00, SIERRA_NET_HIP_MSYNC_ID, 0x00};
|
||||
static const u8 shdwn_tmplate[sizeof(priv->shdwn_msg)] = {
|
||||
0x00, 0x00, SIERRA_NET_HIP_SHUTD_ID, 0x00};
|
||||
u8 mod[2];
|
||||
|
||||
dev_dbg(&dev->udev->dev, "%s", __func__);
|
||||
|
||||
@ -719,8 +720,9 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
dev->net->netdev_ops = &sierra_net_device_ops;
|
||||
|
||||
/* change MAC addr to include, ifacenum, and to be unique */
|
||||
dev->net->dev_addr[ETH_ALEN-2] = atomic_inc_return(&iface_counter);
|
||||
dev->net->dev_addr[ETH_ALEN-1] = ifacenum;
|
||||
mod[0] = atomic_inc_return(&iface_counter);
|
||||
mod[1] = ifacenum;
|
||||
dev_addr_mod(dev->net, ETH_ALEN - 2, mod, 2);
|
||||
|
||||
/* prepare shutdown message template */
|
||||
memcpy(priv->shdwn_msg, shdwn_tmplate, sizeof(priv->shdwn_msg));
|
||||
|
@ -326,6 +326,7 @@ static int sr9700_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
{
|
||||
struct net_device *netdev;
|
||||
struct mii_if_info *mii;
|
||||
u8 addr[ETH_ALEN];
|
||||
int ret;
|
||||
|
||||
ret = usbnet_get_endpoints(dev, intf);
|
||||
@ -356,11 +357,12 @@ static int sr9700_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
* EEPROM automatically to PAR. In case there is no EEPROM externally,
|
||||
* a default MAC address is stored in PAR for making chip work properly.
|
||||
*/
|
||||
if (sr_read(dev, SR_PAR, ETH_ALEN, netdev->dev_addr) < 0) {
|
||||
if (sr_read(dev, SR_PAR, ETH_ALEN, addr) < 0) {
|
||||
netdev_err(netdev, "Error reading MAC address\n");
|
||||
ret = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
eth_hw_addr_set(netdev, addr);
|
||||
|
||||
/* power up and reset phy */
|
||||
sr_write_reg(dev, SR_PRR, PRR_PHY_RST);
|
||||
|
@ -732,6 +732,7 @@ static int sr9800_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
struct sr_data *data = (struct sr_data *)&dev->data;
|
||||
u16 led01_mux, led23_mux;
|
||||
int ret, embd_phy;
|
||||
u8 addr[ETH_ALEN];
|
||||
u32 phyid;
|
||||
u16 rx_ctl;
|
||||
|
||||
@ -757,12 +758,12 @@ static int sr9800_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
}
|
||||
|
||||
/* Get the MAC address */
|
||||
ret = sr_read_cmd(dev, SR_CMD_READ_NODE_ID, 0, 0, ETH_ALEN,
|
||||
dev->net->dev_addr);
|
||||
ret = sr_read_cmd(dev, SR_CMD_READ_NODE_ID, 0, 0, ETH_ALEN, addr);
|
||||
if (ret < 0) {
|
||||
netdev_dbg(dev->net, "Failed to read MAC address: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
eth_hw_addr_set(dev->net, addr);
|
||||
netdev_dbg(dev->net, "mac addr : %pM\n", dev->net->dev_addr);
|
||||
|
||||
/* Initialize MII structure */
|
||||
|
@ -79,9 +79,6 @@
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
// randomly generated ethernet address
|
||||
static u8 node_id [ETH_ALEN];
|
||||
|
||||
/* use ethtool to change the level for any given device */
|
||||
static int msg_level = -1;
|
||||
module_param (msg_level, int, 0);
|
||||
@ -205,12 +202,13 @@ EXPORT_SYMBOL_GPL(usbnet_get_endpoints);
|
||||
|
||||
int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress)
|
||||
{
|
||||
u8 addr[ETH_ALEN];
|
||||
int tmp = -1, ret;
|
||||
unsigned char buf [13];
|
||||
|
||||
ret = usb_string(dev->udev, iMACAddress, buf, sizeof buf);
|
||||
if (ret == 12)
|
||||
tmp = hex2bin(dev->net->dev_addr, buf, 6);
|
||||
tmp = hex2bin(addr, buf, 6);
|
||||
if (tmp < 0) {
|
||||
dev_dbg(&dev->udev->dev,
|
||||
"bad MAC string %d fetch, %d\n", iMACAddress, tmp);
|
||||
@ -218,6 +216,7 @@ int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress)
|
||||
ret = -EINVAL;
|
||||
return ret;
|
||||
}
|
||||
eth_hw_addr_set(dev->net, addr);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usbnet_get_ethernet_addr);
|
||||
@ -1812,8 +1811,7 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
|
||||
dev->interrupt_count = 0;
|
||||
|
||||
dev->net = net;
|
||||
strcpy (net->name, "usb%d");
|
||||
memcpy (net->dev_addr, node_id, sizeof node_id);
|
||||
strscpy(net->name, "usb%d", sizeof(net->name));
|
||||
|
||||
/* rx and tx sides can use different message sizes;
|
||||
* bind() should set rx_urb_size in that case.
|
||||
@ -1839,13 +1837,13 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
|
||||
if ((dev->driver_info->flags & FLAG_ETHER) != 0 &&
|
||||
((dev->driver_info->flags & FLAG_POINTTOPOINT) == 0 ||
|
||||
(net->dev_addr [0] & 0x02) == 0))
|
||||
strcpy (net->name, "eth%d");
|
||||
strscpy(net->name, "eth%d", sizeof(net->name));
|
||||
/* WLAN devices should always be named "wlan%d" */
|
||||
if ((dev->driver_info->flags & FLAG_WLAN) != 0)
|
||||
strcpy(net->name, "wlan%d");
|
||||
strscpy(net->name, "wlan%d", sizeof(net->name));
|
||||
/* WWAN devices should always be named "wwan%d" */
|
||||
if ((dev->driver_info->flags & FLAG_WWAN) != 0)
|
||||
strcpy(net->name, "wwan%d");
|
||||
strscpy(net->name, "wwan%d", sizeof(net->name));
|
||||
|
||||
/* devices that cannot do ARP */
|
||||
if ((dev->driver_info->flags & FLAG_NOARP) != 0)
|
||||
@ -1887,9 +1885,9 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
|
||||
goto out4;
|
||||
}
|
||||
|
||||
/* let userspace know we have a random address */
|
||||
if (ether_addr_equal(net->dev_addr, node_id))
|
||||
net->addr_assign_type = NET_ADDR_RANDOM;
|
||||
/* this flags the device for user space */
|
||||
if (!is_valid_ether_addr(net->dev_addr))
|
||||
eth_hw_addr_random(net);
|
||||
|
||||
if ((dev->driver_info->flags & FLAG_WLAN) != 0)
|
||||
SET_NETDEV_DEVTYPE(net, &wlan_type);
|
||||
@ -2305,7 +2303,6 @@ static int __init usbnet_init(void)
|
||||
BUILD_BUG_ON(
|
||||
FIELD_SIZEOF(struct sk_buff, cb) < sizeof(struct skb_data));
|
||||
|
||||
eth_random_addr(node_id);
|
||||
for (i = 0; i < NUM_USBNET_IDS; i++) {
|
||||
usbnet_ipc_log_ctxt[i] =
|
||||
ipc_log_context_create(IPC_LOG_NUM_PAGES,
|
||||
|
@ -1091,6 +1091,7 @@ static int ieee_hw_init(struct ieee80211_hw *hw)
|
||||
ieee80211_hw_set(hw, AMPDU_AGGREGATION);
|
||||
ieee80211_hw_set(hw, SIGNAL_DBM);
|
||||
ieee80211_hw_set(hw, REPORTS_TX_ACK_STATUS);
|
||||
ieee80211_hw_set(hw, MFP_CAPABLE);
|
||||
|
||||
hw->extra_tx_headroom = brcms_c_get_header_len();
|
||||
hw->queues = N_TX_QUEUES;
|
||||
|
@ -1288,6 +1288,9 @@ mwifiex_get_priv_by_id(struct mwifiex_adapter *adapter,
|
||||
|
||||
for (i = 0; i < adapter->priv_num; i++) {
|
||||
if (adapter->priv[i]) {
|
||||
if (adapter->priv[i]->bss_mode == NL80211_IFTYPE_UNSPECIFIED)
|
||||
continue;
|
||||
|
||||
if ((adapter->priv[i]->bss_num == bss_num) &&
|
||||
(adapter->priv[i]->bss_type == bss_type))
|
||||
break;
|
||||
|
@ -719,13 +719,13 @@ void nvmem_device_put(struct nvmem_device *nvmem)
|
||||
EXPORT_SYMBOL_GPL(nvmem_device_put);
|
||||
|
||||
/**
|
||||
* devm_nvmem_device_get() - Get nvmem cell of device form a given id
|
||||
* devm_nvmem_device_get() - Get nvmem device of device form a given id
|
||||
*
|
||||
* @dev: Device that requests the nvmem device.
|
||||
* @id: name id for the requested nvmem device.
|
||||
*
|
||||
* Return: ERR_PTR() on error or a valid pointer to a struct nvmem_cell
|
||||
* on success. The nvmem_cell will be freed by the automatically once the
|
||||
* Return: ERR_PTR() on error or a valid pointer to a struct nvmem_device
|
||||
* on success. The nvmem_device will be freed by the automatically once the
|
||||
* device is freed.
|
||||
*/
|
||||
struct nvmem_device *devm_nvmem_device_get(struct device *dev, const char *id)
|
||||
|
@ -294,7 +294,8 @@ int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_ar
|
||||
struct device_node *p;
|
||||
const __be32 *addr;
|
||||
u32 intsize;
|
||||
int i, res;
|
||||
int i, res, addr_len;
|
||||
__be32 addr_buf[3] = { 0 };
|
||||
|
||||
pr_debug("of_irq_parse_one: dev=%pOF, index=%d\n", device, index);
|
||||
|
||||
@ -303,13 +304,19 @@ int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_ar
|
||||
return of_irq_parse_oldworld(device, index, out_irq);
|
||||
|
||||
/* Get the reg property (if any) */
|
||||
addr = of_get_property(device, "reg", NULL);
|
||||
addr = of_get_property(device, "reg", &addr_len);
|
||||
|
||||
/* Prevent out-of-bounds read in case of longer interrupt parent address size */
|
||||
if (addr_len > (3 * sizeof(__be32)))
|
||||
addr_len = 3 * sizeof(__be32);
|
||||
if (addr)
|
||||
memcpy(addr_buf, addr, addr_len);
|
||||
|
||||
/* Try the new-style interrupts-extended first */
|
||||
res = of_parse_phandle_with_args(device, "interrupts-extended",
|
||||
"#interrupt-cells", index, out_irq);
|
||||
if (!res)
|
||||
return of_irq_parse_raw(addr, out_irq);
|
||||
return of_irq_parse_raw(addr_buf, out_irq);
|
||||
|
||||
/* Look for the interrupt parent. */
|
||||
p = of_irq_find_parent(device);
|
||||
@ -339,7 +346,7 @@ int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_ar
|
||||
|
||||
|
||||
/* Check if there are any interrupt-map translations to process */
|
||||
res = of_irq_parse_raw(addr, out_irq);
|
||||
res = of_irq_parse_raw(addr_buf, out_irq);
|
||||
out:
|
||||
of_node_put(p);
|
||||
return res;
|
||||
|
@ -39,7 +39,6 @@ static void pnv_php_disable_irq(struct pnv_php_slot *php_slot,
|
||||
bool disable_device)
|
||||
{
|
||||
struct pci_dev *pdev = php_slot->pdev;
|
||||
int irq = php_slot->irq;
|
||||
u16 ctrl;
|
||||
|
||||
if (php_slot->irq > 0) {
|
||||
@ -58,7 +57,7 @@ static void pnv_php_disable_irq(struct pnv_php_slot *php_slot,
|
||||
php_slot->wq = NULL;
|
||||
}
|
||||
|
||||
if (disable_device || irq > 0) {
|
||||
if (disable_device) {
|
||||
if (pdev->msix_enabled)
|
||||
pci_disable_msix(pdev);
|
||||
else if (pdev->msi_enabled)
|
||||
|
@ -4452,10 +4452,12 @@ static void pci_bus_lock(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_dev *dev;
|
||||
|
||||
pci_dev_lock(bus->self);
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
pci_dev_lock(dev);
|
||||
if (dev->subordinate)
|
||||
pci_bus_lock(dev->subordinate);
|
||||
else
|
||||
pci_dev_lock(dev);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4467,8 +4469,10 @@ static void pci_bus_unlock(struct pci_bus *bus)
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
if (dev->subordinate)
|
||||
pci_bus_unlock(dev->subordinate);
|
||||
else
|
||||
pci_dev_unlock(dev);
|
||||
}
|
||||
pci_dev_unlock(bus->self);
|
||||
}
|
||||
|
||||
/* Return 1 on successful lock, 0 on contention */
|
||||
@ -4476,15 +4480,15 @@ static int pci_bus_trylock(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_dev *dev;
|
||||
|
||||
if (!pci_dev_trylock(bus->self))
|
||||
return 0;
|
||||
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
if (!pci_dev_trylock(dev))
|
||||
goto unlock;
|
||||
if (dev->subordinate) {
|
||||
if (!pci_bus_trylock(dev->subordinate)) {
|
||||
pci_dev_unlock(dev);
|
||||
if (!pci_bus_trylock(dev->subordinate))
|
||||
goto unlock;
|
||||
} else if (!pci_dev_trylock(dev))
|
||||
goto unlock;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
|
||||
@ -4492,8 +4496,10 @@ unlock:
|
||||
list_for_each_entry_continue_reverse(dev, &bus->devices, bus_list) {
|
||||
if (dev->subordinate)
|
||||
pci_bus_unlock(dev->subordinate);
|
||||
else
|
||||
pci_dev_unlock(dev);
|
||||
}
|
||||
pci_dev_unlock(bus->self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -4521,9 +4527,10 @@ static void pci_slot_lock(struct pci_slot *slot)
|
||||
list_for_each_entry(dev, &slot->bus->devices, bus_list) {
|
||||
if (!dev->slot || dev->slot != slot)
|
||||
continue;
|
||||
pci_dev_lock(dev);
|
||||
if (dev->subordinate)
|
||||
pci_bus_lock(dev->subordinate);
|
||||
else
|
||||
pci_dev_lock(dev);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4549,14 +4556,13 @@ static int pci_slot_trylock(struct pci_slot *slot)
|
||||
list_for_each_entry(dev, &slot->bus->devices, bus_list) {
|
||||
if (!dev->slot || dev->slot != slot)
|
||||
continue;
|
||||
if (!pci_dev_trylock(dev))
|
||||
goto unlock;
|
||||
if (dev->subordinate) {
|
||||
if (!pci_bus_trylock(dev->subordinate)) {
|
||||
pci_dev_unlock(dev);
|
||||
goto unlock;
|
||||
}
|
||||
}
|
||||
} else if (!pci_dev_trylock(dev))
|
||||
goto unlock;
|
||||
}
|
||||
return 1;
|
||||
|
||||
@ -4567,6 +4573,7 @@ unlock:
|
||||
continue;
|
||||
if (dev->subordinate)
|
||||
pci_bus_unlock(dev->subordinate);
|
||||
else
|
||||
pci_dev_unlock(dev);
|
||||
}
|
||||
return 0;
|
||||
|
@ -636,11 +636,11 @@ static int yenta_search_one_res(struct resource *root, struct resource *res,
|
||||
start = PCIBIOS_MIN_CARDBUS_IO;
|
||||
end = ~0U;
|
||||
} else {
|
||||
unsigned long avail = root->end - root->start;
|
||||
unsigned long avail = resource_size(root);
|
||||
int i;
|
||||
size = BRIDGE_MEM_MAX;
|
||||
if (size > avail/8) {
|
||||
size = (avail+1)/8;
|
||||
if (size > (avail - 1) / 8) {
|
||||
size = avail / 8;
|
||||
/* round size down to next power of 2 */
|
||||
i = 0;
|
||||
while ((size /= 2) != 0)
|
||||
|
@ -256,24 +256,25 @@ static int st_dwc3_probe(struct platform_device *pdev)
|
||||
if (!child) {
|
||||
dev_err(&pdev->dev, "failed to find dwc3 core node\n");
|
||||
ret = -ENODEV;
|
||||
goto undo_softreset;
|
||||
goto err_node_put;
|
||||
}
|
||||
|
||||
/* Allocate and initialize the core */
|
||||
ret = of_platform_populate(node, NULL, NULL, dev);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to add dwc3 core\n");
|
||||
goto undo_softreset;
|
||||
goto err_node_put;
|
||||
}
|
||||
|
||||
child_pdev = of_find_device_by_node(child);
|
||||
if (!child_pdev) {
|
||||
dev_err(dev, "failed to find dwc3 core device\n");
|
||||
ret = -ENODEV;
|
||||
goto undo_softreset;
|
||||
goto depopulate;
|
||||
}
|
||||
|
||||
dwc3_data->dr_mode = usb_get_dr_mode(&child_pdev->dev);
|
||||
of_node_put(child);
|
||||
|
||||
/*
|
||||
* Configure the USB port as device or host according to the static
|
||||
@ -284,6 +285,7 @@ static int st_dwc3_probe(struct platform_device *pdev)
|
||||
ret = st_dwc3_drd_init(dwc3_data);
|
||||
if (ret) {
|
||||
dev_err(dev, "drd initialisation failed\n");
|
||||
of_platform_depopulate(dev);
|
||||
goto undo_softreset;
|
||||
}
|
||||
|
||||
@ -293,6 +295,10 @@ static int st_dwc3_probe(struct platform_device *pdev)
|
||||
platform_set_drvdata(pdev, dwc3_data);
|
||||
return 0;
|
||||
|
||||
depopulate:
|
||||
of_platform_depopulate(dev);
|
||||
err_node_put:
|
||||
of_node_put(child);
|
||||
undo_softreset:
|
||||
reset_control_assert(dwc3_data->rstc_rst);
|
||||
undo_powerdown:
|
||||
|
@ -158,53 +158,62 @@ static int tweak_set_configuration_cmd(struct urb *urb)
|
||||
if (err && err != -ENODEV)
|
||||
dev_err(&sdev->udev->dev, "can't set config #%d, error %d\n",
|
||||
config, err);
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
|
||||
static int tweak_reset_device_cmd(struct urb *urb)
|
||||
{
|
||||
struct stub_priv *priv = (struct stub_priv *) urb->context;
|
||||
struct stub_device *sdev = priv->sdev;
|
||||
int err;
|
||||
|
||||
dev_info(&urb->dev->dev, "usb_queue_reset_device\n");
|
||||
|
||||
if (usb_lock_device_for_reset(sdev->udev, NULL) < 0) {
|
||||
err = usb_lock_device_for_reset(sdev->udev, NULL);
|
||||
if (err < 0) {
|
||||
dev_err(&urb->dev->dev, "could not obtain lock to reset device\n");
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
usb_reset_device(sdev->udev);
|
||||
err = usb_reset_device(sdev->udev);
|
||||
usb_unlock_device(sdev->udev);
|
||||
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* clear_halt, set_interface, and set_configuration require special tricks.
|
||||
* Returns 1 if request was tweaked, 0 otherwise.
|
||||
*/
|
||||
static void tweak_special_requests(struct urb *urb)
|
||||
static int tweak_special_requests(struct urb *urb)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (!urb || !urb->setup_packet)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
if (usb_pipetype(urb->pipe) != PIPE_CONTROL)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
if (is_clear_halt_cmd(urb))
|
||||
/* tweak clear_halt */
|
||||
tweak_clear_halt_cmd(urb);
|
||||
err = tweak_clear_halt_cmd(urb);
|
||||
|
||||
else if (is_set_interface_cmd(urb))
|
||||
/* tweak set_interface */
|
||||
tweak_set_interface_cmd(urb);
|
||||
err = tweak_set_interface_cmd(urb);
|
||||
|
||||
else if (is_set_configuration_cmd(urb))
|
||||
/* tweak set_configuration */
|
||||
tweak_set_configuration_cmd(urb);
|
||||
err = tweak_set_configuration_cmd(urb);
|
||||
|
||||
else if (is_reset_device_cmd(urb))
|
||||
tweak_reset_device_cmd(urb);
|
||||
else
|
||||
err = tweak_reset_device_cmd(urb);
|
||||
else {
|
||||
usbip_dbg_stub_rx("no need to tweak\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return !err;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -485,6 +494,7 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
|
||||
int support_sg = 1;
|
||||
int np = 0;
|
||||
int ret, i;
|
||||
int is_tweaked;
|
||||
|
||||
if (pipe == -1)
|
||||
return;
|
||||
@ -597,8 +607,11 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
|
||||
priv->urbs[i]->pipe = pipe;
|
||||
priv->urbs[i]->complete = stub_complete;
|
||||
|
||||
/* no need to submit an intercepted request, but harmless? */
|
||||
tweak_special_requests(priv->urbs[i]);
|
||||
/*
|
||||
* all URBs belong to a single PDU, so a global is_tweaked flag is
|
||||
* enough
|
||||
*/
|
||||
is_tweaked = tweak_special_requests(priv->urbs[i]);
|
||||
|
||||
masking_bogus_flags(priv->urbs[i]);
|
||||
}
|
||||
@ -611,6 +624,7 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
|
||||
|
||||
/* urb is now ready to submit */
|
||||
for (i = 0; i < priv->num_urbs; i++) {
|
||||
if (!is_tweaked) {
|
||||
ret = usb_submit_urb(priv->urbs[i], GFP_KERNEL);
|
||||
|
||||
if (ret == 0)
|
||||
@ -628,6 +642,15 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
|
||||
usbip_event_add(ud, SDEV_EVENT_ERROR_SUBMIT);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* An identical URB was already submitted in
|
||||
* tweak_special_requests(). Skip submitting this URB to not
|
||||
* duplicate the request.
|
||||
*/
|
||||
priv->urbs[i]->status = 0;
|
||||
stub_complete(priv->urbs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
usbip_dbg_stub_rx("Leave\n");
|
||||
|
@ -8678,7 +8678,15 @@ static noinline void reada_walk_down(struct btrfs_trans_handle *trans,
|
||||
/* We don't care about errors in readahead. */
|
||||
if (ret < 0)
|
||||
continue;
|
||||
BUG_ON(refs == 0);
|
||||
|
||||
/*
|
||||
* This could be racey, it's conceivable that we raced and end
|
||||
* up with a bogus refs count, if that's the case just skip, if
|
||||
* we are actually corrupt we will notice when we look up
|
||||
* everything again with our locks.
|
||||
*/
|
||||
if (refs == 0)
|
||||
continue;
|
||||
|
||||
if (wc->stage == DROP_REFERENCE) {
|
||||
if (refs == 1)
|
||||
@ -8737,7 +8745,7 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
|
||||
if (lookup_info &&
|
||||
((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) ||
|
||||
(wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) {
|
||||
BUG_ON(!path->locks[level]);
|
||||
ASSERT(path->locks[level]);
|
||||
ret = btrfs_lookup_extent_info(trans, fs_info,
|
||||
eb->start, level, 1,
|
||||
&wc->refs[level],
|
||||
@ -8745,7 +8753,11 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
|
||||
BUG_ON(ret == -ENOMEM);
|
||||
if (ret)
|
||||
return ret;
|
||||
BUG_ON(wc->refs[level] == 0);
|
||||
if (unlikely(wc->refs[level] == 0)) {
|
||||
btrfs_err(fs_info, "bytenr %llu has 0 references, expect > 0",
|
||||
eb->start);
|
||||
return -EUCLEAN;
|
||||
}
|
||||
}
|
||||
|
||||
if (wc->stage == DROP_REFERENCE) {
|
||||
@ -8761,7 +8773,7 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
|
||||
|
||||
/* wc->stage == UPDATE_BACKREF */
|
||||
if (!(wc->flags[level] & flag)) {
|
||||
BUG_ON(!path->locks[level]);
|
||||
ASSERT(path->locks[level]);
|
||||
ret = btrfs_inc_ref(trans, root, eb, 1);
|
||||
BUG_ON(ret); /* -ENOMEM */
|
||||
ret = btrfs_dec_ref(trans, root, eb, 0);
|
||||
@ -8850,8 +8862,9 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
|
||||
goto out_unlock;
|
||||
|
||||
if (unlikely(wc->refs[level - 1] == 0)) {
|
||||
btrfs_err(fs_info, "Missing references.");
|
||||
ret = -EIO;
|
||||
btrfs_err(fs_info, "bytenr %llu has 0 references, expect > 0",
|
||||
bytenr);
|
||||
ret = -EUCLEAN;
|
||||
goto out_unlock;
|
||||
}
|
||||
*lookup_info = 0;
|
||||
@ -9018,7 +9031,12 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans,
|
||||
path->locks[level] = 0;
|
||||
return ret;
|
||||
}
|
||||
BUG_ON(wc->refs[level] == 0);
|
||||
if (unlikely(wc->refs[level] == 0)) {
|
||||
btrfs_tree_unlock_rw(eb, path->locks[level]);
|
||||
btrfs_err(fs_info, "bytenr %llu has 0 references, expect > 0",
|
||||
eb->start);
|
||||
return -EUCLEAN;
|
||||
}
|
||||
if (wc->refs[level] == 1) {
|
||||
btrfs_tree_unlock_rw(eb, path->locks[level]);
|
||||
path->locks[level] = 0;
|
||||
|
@ -5923,7 +5923,7 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
|
||||
struct inode *inode;
|
||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||
struct btrfs_root *sub_root = root;
|
||||
struct btrfs_key location;
|
||||
struct btrfs_key location = { 0 };
|
||||
u8 di_type = 0;
|
||||
int index;
|
||||
int ret = 0;
|
||||
|
@ -79,7 +79,7 @@ ssize_t fuse_getxattr(struct inode *inode, const char *name, void *value,
|
||||
}
|
||||
ret = fuse_simple_request(fc, &args);
|
||||
if (!ret && !size)
|
||||
ret = min_t(ssize_t, outarg.size, XATTR_SIZE_MAX);
|
||||
ret = min_t(size_t, outarg.size, XATTR_SIZE_MAX);
|
||||
if (ret == -ENOSYS) {
|
||||
fc->no_getxattr = 1;
|
||||
ret = -EOPNOTSUPP;
|
||||
@ -141,7 +141,7 @@ ssize_t fuse_listxattr(struct dentry *entry, char *list, size_t size)
|
||||
}
|
||||
ret = fuse_simple_request(fc, &args);
|
||||
if (!ret && !size)
|
||||
ret = min_t(ssize_t, outarg.size, XATTR_LIST_MAX);
|
||||
ret = min_t(size_t, outarg.size, XATTR_LIST_MAX);
|
||||
if (ret > 0 && size)
|
||||
ret = fuse_verify_xattr_list(list, ret);
|
||||
if (ret == -ENOSYS) {
|
||||
|
@ -717,6 +717,33 @@ static void nilfs_finish_roll_forward(struct the_nilfs *nilfs,
|
||||
brelse(bh);
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_abort_roll_forward - cleaning up after a failed rollforward recovery
|
||||
* @nilfs: nilfs object
|
||||
*/
|
||||
static void nilfs_abort_roll_forward(struct the_nilfs *nilfs)
|
||||
{
|
||||
struct nilfs_inode_info *ii, *n;
|
||||
LIST_HEAD(head);
|
||||
|
||||
/* Abandon inodes that have read recovery data */
|
||||
spin_lock(&nilfs->ns_inode_lock);
|
||||
list_splice_init(&nilfs->ns_dirty_files, &head);
|
||||
spin_unlock(&nilfs->ns_inode_lock);
|
||||
if (list_empty(&head))
|
||||
return;
|
||||
|
||||
set_nilfs_purging(nilfs);
|
||||
list_for_each_entry_safe(ii, n, &head, i_dirty) {
|
||||
spin_lock(&nilfs->ns_inode_lock);
|
||||
list_del_init(&ii->i_dirty);
|
||||
spin_unlock(&nilfs->ns_inode_lock);
|
||||
|
||||
iput(&ii->vfs_inode);
|
||||
}
|
||||
clear_nilfs_purging(nilfs);
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_salvage_orphan_logs - salvage logs written after the latest checkpoint
|
||||
* @nilfs: nilfs object
|
||||
@ -775,15 +802,19 @@ int nilfs_salvage_orphan_logs(struct the_nilfs *nilfs,
|
||||
if (unlikely(err)) {
|
||||
nilfs_err(sb, "error %d writing segment for recovery",
|
||||
err);
|
||||
goto failed;
|
||||
goto put_root;
|
||||
}
|
||||
|
||||
nilfs_finish_roll_forward(nilfs, ri);
|
||||
}
|
||||
|
||||
failed:
|
||||
put_root:
|
||||
nilfs_put_root(root);
|
||||
return err;
|
||||
|
||||
failed:
|
||||
nilfs_abort_roll_forward(nilfs);
|
||||
goto put_root;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -136,7 +136,7 @@ int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *segbuf,
|
||||
}
|
||||
|
||||
int nilfs_segbuf_reset(struct nilfs_segment_buffer *segbuf, unsigned int flags,
|
||||
time_t ctime, __u64 cno)
|
||||
time64_t ctime, __u64 cno)
|
||||
{
|
||||
int err;
|
||||
|
||||
|
@ -46,7 +46,7 @@ struct nilfs_segsum_info {
|
||||
unsigned long nfileblk;
|
||||
u64 seg_seq;
|
||||
__u64 cno;
|
||||
time_t ctime;
|
||||
time64_t ctime;
|
||||
sector_t next;
|
||||
};
|
||||
|
||||
@ -120,7 +120,7 @@ void nilfs_segbuf_map_cont(struct nilfs_segment_buffer *segbuf,
|
||||
struct nilfs_segment_buffer *prev);
|
||||
void nilfs_segbuf_set_next_segnum(struct nilfs_segment_buffer *, __u64,
|
||||
struct the_nilfs *);
|
||||
int nilfs_segbuf_reset(struct nilfs_segment_buffer *, unsigned int, time_t,
|
||||
int nilfs_segbuf_reset(struct nilfs_segment_buffer *, unsigned int, time64_t,
|
||||
__u64);
|
||||
int nilfs_segbuf_extend_segsum(struct nilfs_segment_buffer *);
|
||||
int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *,
|
||||
|
@ -1837,6 +1837,9 @@ static void nilfs_segctor_abort_construction(struct nilfs_sc_info *sci,
|
||||
nilfs_abort_logs(&logs, ret ? : err);
|
||||
|
||||
list_splice_tail_init(&sci->sc_segbufs, &logs);
|
||||
if (list_empty(&logs))
|
||||
return; /* if the first segment buffer preparation failed */
|
||||
|
||||
nilfs_cancel_segusage(&logs, nilfs->ns_sufile);
|
||||
nilfs_free_incomplete_logs(&logs, nilfs);
|
||||
|
||||
@ -2081,10 +2084,10 @@ static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode)
|
||||
|
||||
err = nilfs_segctor_begin_construction(sci, nilfs);
|
||||
if (unlikely(err))
|
||||
goto out;
|
||||
goto failed;
|
||||
|
||||
/* Update time stamp */
|
||||
sci->sc_seg_ctime = get_seconds();
|
||||
sci->sc_seg_ctime = ktime_get_real_seconds();
|
||||
|
||||
err = nilfs_segctor_collect(sci, nilfs, mode);
|
||||
if (unlikely(err))
|
||||
@ -2144,10 +2147,9 @@ static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode)
|
||||
return err;
|
||||
|
||||
failed_to_write:
|
||||
if (sci->sc_stage.flags & NILFS_CF_IFILE_STARTED)
|
||||
nilfs_redirty_inodes(&sci->sc_dirty_files);
|
||||
|
||||
failed:
|
||||
if (mode == SC_LSEG_SR && nilfs_sc_cstage_get(sci) >= NILFS_ST_IFILE)
|
||||
nilfs_redirty_inodes(&sci->sc_dirty_files);
|
||||
if (nilfs_doing_gc())
|
||||
nilfs_redirty_inodes(&sci->sc_gc_inodes);
|
||||
nilfs_segctor_abort_construction(sci, nilfs, err);
|
||||
|
@ -157,7 +157,7 @@ struct nilfs_sc_info {
|
||||
unsigned long sc_blk_cnt;
|
||||
unsigned long sc_datablk_cnt;
|
||||
unsigned long sc_nblk_this_inc;
|
||||
time_t sc_seg_ctime;
|
||||
time64_t sc_seg_ctime;
|
||||
__u64 sc_cno;
|
||||
unsigned long sc_flags;
|
||||
|
||||
|
@ -554,7 +554,7 @@ out_sem:
|
||||
* @modtime: modification time (option)
|
||||
*/
|
||||
int nilfs_sufile_set_segment_usage(struct inode *sufile, __u64 segnum,
|
||||
unsigned long nblocks, time_t modtime)
|
||||
unsigned long nblocks, time64_t modtime)
|
||||
{
|
||||
struct buffer_head *bh;
|
||||
struct nilfs_segment_usage *su;
|
||||
|
@ -35,7 +35,7 @@ int nilfs_sufile_set_alloc_range(struct inode *sufile, __u64 start, __u64 end);
|
||||
int nilfs_sufile_alloc(struct inode *, __u64 *);
|
||||
int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum);
|
||||
int nilfs_sufile_set_segment_usage(struct inode *sufile, __u64 segnum,
|
||||
unsigned long nblocks, time_t modtime);
|
||||
unsigned long nblocks, time64_t modtime);
|
||||
int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *);
|
||||
ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, void *, unsigned int,
|
||||
size_t);
|
||||
|
@ -284,10 +284,10 @@ int nilfs_commit_super(struct super_block *sb, int flag)
|
||||
{
|
||||
struct the_nilfs *nilfs = sb->s_fs_info;
|
||||
struct nilfs_super_block **sbp = nilfs->ns_sbp;
|
||||
time_t t;
|
||||
time64_t t;
|
||||
|
||||
/* nilfs->ns_sem must be locked by the caller. */
|
||||
t = get_seconds();
|
||||
t = ktime_get_real_seconds();
|
||||
nilfs->ns_sbwtime = t;
|
||||
sbp[0]->s_wtime = cpu_to_le64(t);
|
||||
sbp[0]->s_sum = 0;
|
||||
|
@ -31,7 +31,7 @@ static struct kset *nilfs_kset;
|
||||
#define NILFS_SHOW_TIME(time_t_val, buf) ({ \
|
||||
struct tm res; \
|
||||
int count = 0; \
|
||||
time_to_tm(time_t_val, 0, &res); \
|
||||
time64_to_tm(time_t_val, 0, &res); \
|
||||
res.tm_year += 1900; \
|
||||
res.tm_mon += 1; \
|
||||
count = scnprintf(buf, PAGE_SIZE, \
|
||||
@ -117,7 +117,7 @@ static ssize_t
|
||||
nilfs_snapshot_inodes_count_show(struct nilfs_snapshot_attr *attr,
|
||||
struct nilfs_root *root, char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n",
|
||||
return sysfs_emit(buf, "%llu\n",
|
||||
(unsigned long long)atomic64_read(&root->inodes_count));
|
||||
}
|
||||
|
||||
@ -125,7 +125,7 @@ static ssize_t
|
||||
nilfs_snapshot_blocks_count_show(struct nilfs_snapshot_attr *attr,
|
||||
struct nilfs_root *root, char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n",
|
||||
return sysfs_emit(buf, "%llu\n",
|
||||
(unsigned long long)atomic64_read(&root->blocks_count));
|
||||
}
|
||||
|
||||
@ -138,7 +138,7 @@ static ssize_t
|
||||
nilfs_snapshot_README_show(struct nilfs_snapshot_attr *attr,
|
||||
struct nilfs_root *root, char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, snapshot_readme_str);
|
||||
return sysfs_emit(buf, snapshot_readme_str);
|
||||
}
|
||||
|
||||
NILFS_SNAPSHOT_RO_ATTR(inodes_count);
|
||||
@ -239,7 +239,7 @@ static ssize_t
|
||||
nilfs_mounted_snapshots_README_show(struct nilfs_mounted_snapshots_attr *attr,
|
||||
struct the_nilfs *nilfs, char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, mounted_snapshots_readme_str);
|
||||
return sysfs_emit(buf, mounted_snapshots_readme_str);
|
||||
}
|
||||
|
||||
NILFS_MOUNTED_SNAPSHOTS_RO_ATTR(README);
|
||||
@ -277,7 +277,7 @@ nilfs_checkpoints_checkpoints_number_show(struct nilfs_checkpoints_attr *attr,
|
||||
|
||||
ncheckpoints = cpstat.cs_ncps;
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", ncheckpoints);
|
||||
return sysfs_emit(buf, "%llu\n", ncheckpoints);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -300,7 +300,7 @@ nilfs_checkpoints_snapshots_number_show(struct nilfs_checkpoints_attr *attr,
|
||||
|
||||
nsnapshots = cpstat.cs_nsss;
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", nsnapshots);
|
||||
return sysfs_emit(buf, "%llu\n", nsnapshots);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -314,7 +314,7 @@ nilfs_checkpoints_last_seg_checkpoint_show(struct nilfs_checkpoints_attr *attr,
|
||||
last_cno = nilfs->ns_last_cno;
|
||||
spin_unlock(&nilfs->ns_last_segment_lock);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", last_cno);
|
||||
return sysfs_emit(buf, "%llu\n", last_cno);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -328,7 +328,7 @@ nilfs_checkpoints_next_checkpoint_show(struct nilfs_checkpoints_attr *attr,
|
||||
cno = nilfs->ns_cno;
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", cno);
|
||||
return sysfs_emit(buf, "%llu\n", cno);
|
||||
}
|
||||
|
||||
static const char checkpoints_readme_str[] =
|
||||
@ -344,7 +344,7 @@ static ssize_t
|
||||
nilfs_checkpoints_README_show(struct nilfs_checkpoints_attr *attr,
|
||||
struct the_nilfs *nilfs, char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, checkpoints_readme_str);
|
||||
return sysfs_emit(buf, checkpoints_readme_str);
|
||||
}
|
||||
|
||||
NILFS_CHECKPOINTS_RO_ATTR(checkpoints_number);
|
||||
@ -375,7 +375,7 @@ nilfs_segments_segments_number_show(struct nilfs_segments_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%lu\n", nilfs->ns_nsegments);
|
||||
return sysfs_emit(buf, "%lu\n", nilfs->ns_nsegments);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -383,7 +383,7 @@ nilfs_segments_blocks_per_segment_show(struct nilfs_segments_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%lu\n", nilfs->ns_blocks_per_segment);
|
||||
return sysfs_emit(buf, "%lu\n", nilfs->ns_blocks_per_segment);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -397,7 +397,7 @@ nilfs_segments_clean_segments_show(struct nilfs_segments_attr *attr,
|
||||
ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile);
|
||||
up_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%lu\n", ncleansegs);
|
||||
return sysfs_emit(buf, "%lu\n", ncleansegs);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -417,7 +417,7 @@ nilfs_segments_dirty_segments_show(struct nilfs_segments_attr *attr,
|
||||
return err;
|
||||
}
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", sustat.ss_ndirtysegs);
|
||||
return sysfs_emit(buf, "%llu\n", sustat.ss_ndirtysegs);
|
||||
}
|
||||
|
||||
static const char segments_readme_str[] =
|
||||
@ -433,7 +433,7 @@ nilfs_segments_README_show(struct nilfs_segments_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, segments_readme_str);
|
||||
return sysfs_emit(buf, segments_readme_str);
|
||||
}
|
||||
|
||||
NILFS_SEGMENTS_RO_ATTR(segments_number);
|
||||
@ -470,7 +470,7 @@ nilfs_segctor_last_pseg_block_show(struct nilfs_segctor_attr *attr,
|
||||
last_pseg = nilfs->ns_last_pseg;
|
||||
spin_unlock(&nilfs->ns_last_segment_lock);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n",
|
||||
return sysfs_emit(buf, "%llu\n",
|
||||
(unsigned long long)last_pseg);
|
||||
}
|
||||
|
||||
@ -485,7 +485,7 @@ nilfs_segctor_last_seg_sequence_show(struct nilfs_segctor_attr *attr,
|
||||
last_seq = nilfs->ns_last_seq;
|
||||
spin_unlock(&nilfs->ns_last_segment_lock);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", last_seq);
|
||||
return sysfs_emit(buf, "%llu\n", last_seq);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -499,7 +499,7 @@ nilfs_segctor_last_seg_checkpoint_show(struct nilfs_segctor_attr *attr,
|
||||
last_cno = nilfs->ns_last_cno;
|
||||
spin_unlock(&nilfs->ns_last_segment_lock);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", last_cno);
|
||||
return sysfs_emit(buf, "%llu\n", last_cno);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -513,7 +513,7 @@ nilfs_segctor_current_seg_sequence_show(struct nilfs_segctor_attr *attr,
|
||||
seg_seq = nilfs->ns_seg_seq;
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", seg_seq);
|
||||
return sysfs_emit(buf, "%llu\n", seg_seq);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -527,7 +527,7 @@ nilfs_segctor_current_last_full_seg_show(struct nilfs_segctor_attr *attr,
|
||||
segnum = nilfs->ns_segnum;
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", segnum);
|
||||
return sysfs_emit(buf, "%llu\n", segnum);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -541,7 +541,7 @@ nilfs_segctor_next_full_seg_show(struct nilfs_segctor_attr *attr,
|
||||
nextnum = nilfs->ns_nextnum;
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", nextnum);
|
||||
return sysfs_emit(buf, "%llu\n", nextnum);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -555,7 +555,7 @@ nilfs_segctor_next_pseg_offset_show(struct nilfs_segctor_attr *attr,
|
||||
pseg_offset = nilfs->ns_pseg_offset;
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%lu\n", pseg_offset);
|
||||
return sysfs_emit(buf, "%lu\n", pseg_offset);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -569,7 +569,7 @@ nilfs_segctor_next_checkpoint_show(struct nilfs_segctor_attr *attr,
|
||||
cno = nilfs->ns_cno;
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", cno);
|
||||
return sysfs_emit(buf, "%llu\n", cno);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -577,7 +577,7 @@ nilfs_segctor_last_seg_write_time_show(struct nilfs_segctor_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
time_t ctime;
|
||||
time64_t ctime;
|
||||
|
||||
down_read(&nilfs->ns_segctor_sem);
|
||||
ctime = nilfs->ns_ctime;
|
||||
@ -591,13 +591,13 @@ nilfs_segctor_last_seg_write_time_secs_show(struct nilfs_segctor_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
time_t ctime;
|
||||
time64_t ctime;
|
||||
|
||||
down_read(&nilfs->ns_segctor_sem);
|
||||
ctime = nilfs->ns_ctime;
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", (unsigned long long)ctime);
|
||||
return sysfs_emit(buf, "%llu\n", ctime);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -605,7 +605,7 @@ nilfs_segctor_last_nongc_write_time_show(struct nilfs_segctor_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
time_t nongc_ctime;
|
||||
time64_t nongc_ctime;
|
||||
|
||||
down_read(&nilfs->ns_segctor_sem);
|
||||
nongc_ctime = nilfs->ns_nongc_ctime;
|
||||
@ -619,14 +619,13 @@ nilfs_segctor_last_nongc_write_time_secs_show(struct nilfs_segctor_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
time_t nongc_ctime;
|
||||
time64_t nongc_ctime;
|
||||
|
||||
down_read(&nilfs->ns_segctor_sem);
|
||||
nongc_ctime = nilfs->ns_nongc_ctime;
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n",
|
||||
(unsigned long long)nongc_ctime);
|
||||
return sysfs_emit(buf, "%llu\n", nongc_ctime);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -640,7 +639,7 @@ nilfs_segctor_dirty_data_blocks_count_show(struct nilfs_segctor_attr *attr,
|
||||
ndirtyblks = atomic_read(&nilfs->ns_ndirtyblks);
|
||||
up_read(&nilfs->ns_segctor_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n", ndirtyblks);
|
||||
return sysfs_emit(buf, "%u\n", ndirtyblks);
|
||||
}
|
||||
|
||||
static const char segctor_readme_str[] =
|
||||
@ -677,7 +676,7 @@ static ssize_t
|
||||
nilfs_segctor_README_show(struct nilfs_segctor_attr *attr,
|
||||
struct the_nilfs *nilfs, char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, segctor_readme_str);
|
||||
return sysfs_emit(buf, segctor_readme_str);
|
||||
}
|
||||
|
||||
NILFS_SEGCTOR_RO_ATTR(last_pseg_block);
|
||||
@ -726,7 +725,7 @@ nilfs_superblock_sb_write_time_show(struct nilfs_superblock_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
time_t sbwtime;
|
||||
time64_t sbwtime;
|
||||
|
||||
down_read(&nilfs->ns_sem);
|
||||
sbwtime = nilfs->ns_sbwtime;
|
||||
@ -740,13 +739,13 @@ nilfs_superblock_sb_write_time_secs_show(struct nilfs_superblock_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
time_t sbwtime;
|
||||
time64_t sbwtime;
|
||||
|
||||
down_read(&nilfs->ns_sem);
|
||||
sbwtime = nilfs->ns_sbwtime;
|
||||
up_read(&nilfs->ns_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", (unsigned long long)sbwtime);
|
||||
return sysfs_emit(buf, "%llu\n", sbwtime);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -760,7 +759,7 @@ nilfs_superblock_sb_write_count_show(struct nilfs_superblock_attr *attr,
|
||||
sbwcount = nilfs->ns_sbwcount;
|
||||
up_read(&nilfs->ns_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n", sbwcount);
|
||||
return sysfs_emit(buf, "%u\n", sbwcount);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -774,7 +773,7 @@ nilfs_superblock_sb_update_frequency_show(struct nilfs_superblock_attr *attr,
|
||||
sb_update_freq = nilfs->ns_sb_update_freq;
|
||||
up_read(&nilfs->ns_sem);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n", sb_update_freq);
|
||||
return sysfs_emit(buf, "%u\n", sb_update_freq);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
@ -822,7 +821,7 @@ static ssize_t
|
||||
nilfs_superblock_README_show(struct nilfs_superblock_attr *attr,
|
||||
struct the_nilfs *nilfs, char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, sb_readme_str);
|
||||
return sysfs_emit(buf, sb_readme_str);
|
||||
}
|
||||
|
||||
NILFS_SUPERBLOCK_RO_ATTR(sb_write_time);
|
||||
@ -853,11 +852,17 @@ ssize_t nilfs_dev_revision_show(struct nilfs_dev_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
struct nilfs_super_block **sbp = nilfs->ns_sbp;
|
||||
u32 major = le32_to_cpu(sbp[0]->s_rev_level);
|
||||
u16 minor = le16_to_cpu(sbp[0]->s_minor_rev_level);
|
||||
struct nilfs_super_block *raw_sb;
|
||||
u32 major;
|
||||
u16 minor;
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%d.%d\n", major, minor);
|
||||
down_read(&nilfs->ns_sem);
|
||||
raw_sb = nilfs->ns_sbp[0];
|
||||
major = le32_to_cpu(raw_sb->s_rev_level);
|
||||
minor = le16_to_cpu(raw_sb->s_minor_rev_level);
|
||||
up_read(&nilfs->ns_sem);
|
||||
|
||||
return sysfs_emit(buf, "%d.%d\n", major, minor);
|
||||
}
|
||||
|
||||
static
|
||||
@ -865,7 +870,7 @@ ssize_t nilfs_dev_blocksize_show(struct nilfs_dev_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n", nilfs->ns_blocksize);
|
||||
return sysfs_emit(buf, "%u\n", nilfs->ns_blocksize);
|
||||
}
|
||||
|
||||
static
|
||||
@ -873,10 +878,15 @@ ssize_t nilfs_dev_device_size_show(struct nilfs_dev_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
struct nilfs_super_block **sbp = nilfs->ns_sbp;
|
||||
u64 dev_size = le64_to_cpu(sbp[0]->s_dev_size);
|
||||
struct nilfs_super_block *raw_sb;
|
||||
u64 dev_size;
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n", dev_size);
|
||||
down_read(&nilfs->ns_sem);
|
||||
raw_sb = nilfs->ns_sbp[0];
|
||||
dev_size = le64_to_cpu(raw_sb->s_dev_size);
|
||||
up_read(&nilfs->ns_sem);
|
||||
|
||||
return sysfs_emit(buf, "%llu\n", dev_size);
|
||||
}
|
||||
|
||||
static
|
||||
@ -887,7 +897,7 @@ ssize_t nilfs_dev_free_blocks_show(struct nilfs_dev_attr *attr,
|
||||
sector_t free_blocks = 0;
|
||||
|
||||
nilfs_count_free_blocks(nilfs, &free_blocks);
|
||||
return snprintf(buf, PAGE_SIZE, "%llu\n",
|
||||
return sysfs_emit(buf, "%llu\n",
|
||||
(unsigned long long)free_blocks);
|
||||
}
|
||||
|
||||
@ -896,9 +906,15 @@ ssize_t nilfs_dev_uuid_show(struct nilfs_dev_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
struct nilfs_super_block **sbp = nilfs->ns_sbp;
|
||||
struct nilfs_super_block *raw_sb;
|
||||
ssize_t len;
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%pUb\n", sbp[0]->s_uuid);
|
||||
down_read(&nilfs->ns_sem);
|
||||
raw_sb = nilfs->ns_sbp[0];
|
||||
len = sysfs_emit(buf, "%pUb\n", raw_sb->s_uuid);
|
||||
up_read(&nilfs->ns_sem);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static
|
||||
@ -906,10 +922,16 @@ ssize_t nilfs_dev_volume_name_show(struct nilfs_dev_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
struct nilfs_super_block **sbp = nilfs->ns_sbp;
|
||||
struct nilfs_super_block *raw_sb;
|
||||
ssize_t len;
|
||||
|
||||
return scnprintf(buf, sizeof(sbp[0]->s_volume_name), "%s\n",
|
||||
sbp[0]->s_volume_name);
|
||||
down_read(&nilfs->ns_sem);
|
||||
raw_sb = nilfs->ns_sbp[0];
|
||||
len = scnprintf(buf, sizeof(raw_sb->s_volume_name), "%s\n",
|
||||
raw_sb->s_volume_name);
|
||||
up_read(&nilfs->ns_sem);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static const char dev_readme_str[] =
|
||||
@ -926,7 +948,7 @@ static ssize_t nilfs_dev_README_show(struct nilfs_dev_attr *attr,
|
||||
struct the_nilfs *nilfs,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, dev_readme_str);
|
||||
return sysfs_emit(buf, dev_readme_str);
|
||||
}
|
||||
|
||||
NILFS_DEV_RO_ATTR(revision);
|
||||
@ -1070,7 +1092,7 @@ void nilfs_sysfs_delete_device_group(struct the_nilfs *nilfs)
|
||||
static ssize_t nilfs_feature_revision_show(struct kobject *kobj,
|
||||
struct attribute *attr, char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%d.%d\n",
|
||||
return sysfs_emit(buf, "%d.%d\n",
|
||||
NILFS_CURRENT_REV, NILFS_MINOR_REV);
|
||||
}
|
||||
|
||||
@ -1083,7 +1105,7 @@ static ssize_t nilfs_feature_README_show(struct kobject *kobj,
|
||||
struct attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, features_readme_str);
|
||||
return sysfs_emit(buf, features_readme_str);
|
||||
}
|
||||
|
||||
NILFS_FEATURE_RO_ATTR(revision);
|
||||
|
@ -116,7 +116,7 @@ struct the_nilfs {
|
||||
*/
|
||||
struct buffer_head *ns_sbh[2];
|
||||
struct nilfs_super_block *ns_sbp[2];
|
||||
time_t ns_sbwtime;
|
||||
time64_t ns_sbwtime;
|
||||
unsigned int ns_sbwcount;
|
||||
unsigned int ns_sbsize;
|
||||
unsigned int ns_mount_state;
|
||||
@ -131,8 +131,8 @@ struct the_nilfs {
|
||||
__u64 ns_nextnum;
|
||||
unsigned long ns_pseg_offset;
|
||||
__u64 ns_cno;
|
||||
time_t ns_ctime;
|
||||
time_t ns_nongc_ctime;
|
||||
time64_t ns_ctime;
|
||||
time64_t ns_nongc_ctime;
|
||||
atomic_t ns_ndirtyblks;
|
||||
|
||||
/*
|
||||
@ -268,7 +268,7 @@ struct nilfs_root {
|
||||
|
||||
static inline int nilfs_sb_need_update(struct the_nilfs *nilfs)
|
||||
{
|
||||
u64 t = get_seconds();
|
||||
u64 t = ktime_get_real_seconds();
|
||||
|
||||
return t < nilfs->ns_sbwtime ||
|
||||
t > nilfs->ns_sbwtime + nilfs->ns_sb_update_freq;
|
||||
|
@ -289,8 +289,13 @@ int squashfs_read_inode(struct inode *inode, long long ino)
|
||||
if (err < 0)
|
||||
goto failed_read;
|
||||
|
||||
set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
|
||||
inode->i_size = le32_to_cpu(sqsh_ino->symlink_size);
|
||||
if (inode->i_size > PAGE_SIZE) {
|
||||
ERROR("Corrupted symlink\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
|
||||
inode->i_op = &squashfs_symlink_inode_ops;
|
||||
inode_nohighmem(inode);
|
||||
inode->i_data.a_ops = &squashfs_symlink_aops;
|
||||
|
@ -86,6 +86,13 @@
|
||||
#define UDF_MAX_LVID_NESTING 1000
|
||||
|
||||
enum { UDF_MAX_LINKS = 0xffff };
|
||||
/*
|
||||
* We limit filesize to 4TB. This is arbitrary as the on-disk format supports
|
||||
* more but because the file space is described by a linked list of extents,
|
||||
* each of which can have at most 1GB, the creation and handling of extents
|
||||
* gets unusably slow beyond certain point...
|
||||
*/
|
||||
#define UDF_MAX_FILESIZE (1ULL << 42)
|
||||
|
||||
/* These are the "meat" - everything else is stuffing */
|
||||
static int udf_fill_super(struct super_block *, void *, int);
|
||||
@ -2289,7 +2296,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
|
||||
ret = -ENOMEM;
|
||||
goto error_out;
|
||||
}
|
||||
sb->s_maxbytes = MAX_LFS_FILESIZE;
|
||||
sb->s_maxbytes = UDF_MAX_FILESIZE;
|
||||
sb->s_max_links = UDF_MAX_LINKS;
|
||||
return 0;
|
||||
|
||||
|
@ -135,8 +135,7 @@ void ring_buffer_read_finish(struct ring_buffer_iter *iter);
|
||||
|
||||
struct ring_buffer_event *
|
||||
ring_buffer_iter_peek(struct ring_buffer_iter *iter, u64 *ts);
|
||||
struct ring_buffer_event *
|
||||
ring_buffer_read(struct ring_buffer_iter *iter, u64 *ts);
|
||||
void ring_buffer_iter_advance(struct ring_buffer_iter *iter);
|
||||
void ring_buffer_iter_reset(struct ring_buffer_iter *iter);
|
||||
int ring_buffer_iter_empty(struct ring_buffer_iter *iter);
|
||||
|
||||
|
@ -310,7 +310,26 @@ struct net *get_net_ns_by_id(struct net *net, int id);
|
||||
|
||||
struct pernet_operations {
|
||||
struct list_head list;
|
||||
/*
|
||||
* Below methods are called without any exclusive locks.
|
||||
* More than one net may be constructed and destructed
|
||||
* in parallel on several cpus. Every pernet_operations
|
||||
* have to keep in mind all other pernet_operations and
|
||||
* to introduce a locking, if they share common resources.
|
||||
*
|
||||
* Exit methods using blocking RCU primitives, such as
|
||||
* synchronize_rcu(), should be implemented via exit_batch.
|
||||
* Then, destruction of a group of net requires single
|
||||
* synchronize_rcu() related to these pernet_operations,
|
||||
* instead of separate synchronize_rcu() for every net.
|
||||
* Please, avoid synchronize_rcu() at all, where it's possible.
|
||||
*
|
||||
* Note that a combination of pre_exit() and exit() can
|
||||
* be used, since a synchronize_rcu() is guaranteed between
|
||||
* the calls.
|
||||
*/
|
||||
int (*init)(struct net *net);
|
||||
void (*pre_exit)(struct net *net);
|
||||
void (*exit)(struct net *net);
|
||||
void (*exit_batch)(struct list_head *net_exit_list);
|
||||
unsigned int *id;
|
||||
|
@ -1721,9 +1721,9 @@ int rebind_subsystems(struct cgroup_root *dst_root, u16 ss_mask)
|
||||
RCU_INIT_POINTER(scgrp->subsys[ssid], NULL);
|
||||
rcu_assign_pointer(dcgrp->subsys[ssid], css);
|
||||
ss->root = dst_root;
|
||||
css->cgroup = dcgrp;
|
||||
|
||||
spin_lock_irq(&css_set_lock);
|
||||
css->cgroup = dcgrp;
|
||||
WARN_ON(!list_empty(&dcgrp->e_csets[ss->id]));
|
||||
list_for_each_entry_safe(cset, cset_pos, &scgrp->e_csets[ss->id],
|
||||
e_cset_node[ss->id]) {
|
||||
|
@ -1184,7 +1184,7 @@ static struct xol_area *__create_xol_area(unsigned long vaddr)
|
||||
uprobe_opcode_t insn = UPROBE_SWBP_INSN;
|
||||
struct xol_area *area;
|
||||
|
||||
area = kmalloc(sizeof(*area), GFP_KERNEL);
|
||||
area = kzalloc(sizeof(*area), GFP_KERNEL);
|
||||
if (unlikely(!area))
|
||||
goto out;
|
||||
|
||||
@ -1193,7 +1193,6 @@ static struct xol_area *__create_xol_area(unsigned long vaddr)
|
||||
goto free_area;
|
||||
|
||||
area->xol_mapping.name = "[uprobes]";
|
||||
area->xol_mapping.fault = NULL;
|
||||
area->xol_mapping.pages = area->pages;
|
||||
area->pages[0] = alloc_page(GFP_HIGHUSER);
|
||||
if (!area->pages[0])
|
||||
|
@ -1205,6 +1205,7 @@ __rt_mutex_slowlock(struct rt_mutex *lock, int state,
|
||||
}
|
||||
|
||||
static void rt_mutex_handle_deadlock(int res, int detect_deadlock,
|
||||
struct rt_mutex *lock,
|
||||
struct rt_mutex_waiter *w)
|
||||
{
|
||||
/*
|
||||
@ -1214,6 +1215,7 @@ static void rt_mutex_handle_deadlock(int res, int detect_deadlock,
|
||||
if (res != -EDEADLOCK || detect_deadlock)
|
||||
return;
|
||||
|
||||
raw_spin_unlock_irq(&lock->wait_lock);
|
||||
/*
|
||||
* Yell lowdly and stop the task right here.
|
||||
*/
|
||||
@ -1269,7 +1271,7 @@ rt_mutex_slowlock(struct rt_mutex *lock, int state,
|
||||
if (unlikely(ret)) {
|
||||
__set_current_state(TASK_RUNNING);
|
||||
remove_waiter(lock, &waiter);
|
||||
rt_mutex_handle_deadlock(ret, chwalk, &waiter);
|
||||
rt_mutex_handle_deadlock(ret, chwalk, lock, &waiter);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -866,6 +866,7 @@ int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par, bool phys)
|
||||
|
||||
queue_work_on(cpu, system_wq, &sscs.work);
|
||||
wait_for_completion(&sscs.done);
|
||||
destroy_work_on_stack(&sscs.work);
|
||||
|
||||
return sscs.ret;
|
||||
}
|
||||
|
@ -4355,35 +4355,24 @@ ring_buffer_read_finish(struct ring_buffer_iter *iter)
|
||||
EXPORT_SYMBOL_GPL(ring_buffer_read_finish);
|
||||
|
||||
/**
|
||||
* ring_buffer_read - read the next item in the ring buffer by the iterator
|
||||
* ring_buffer_iter_advance - advance the iterator to the next location
|
||||
* @iter: The ring buffer iterator
|
||||
* @ts: The time stamp of the event read.
|
||||
*
|
||||
* This reads the next event in the ring buffer and increments the iterator.
|
||||
* Move the location of the iterator such that the next read will
|
||||
* be the next location of the iterator.
|
||||
*/
|
||||
struct ring_buffer_event *
|
||||
ring_buffer_read(struct ring_buffer_iter *iter, u64 *ts)
|
||||
void ring_buffer_iter_advance(struct ring_buffer_iter *iter)
|
||||
{
|
||||
struct ring_buffer_event *event;
|
||||
struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
|
||||
unsigned long flags;
|
||||
|
||||
raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
|
||||
again:
|
||||
event = rb_iter_peek(iter, ts);
|
||||
if (!event)
|
||||
goto out;
|
||||
|
||||
if (event->type_len == RINGBUF_TYPE_PADDING)
|
||||
goto again;
|
||||
|
||||
rb_advance_iter(iter);
|
||||
out:
|
||||
raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
|
||||
|
||||
return event;
|
||||
raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ring_buffer_read);
|
||||
EXPORT_SYMBOL_GPL(ring_buffer_iter_advance);
|
||||
|
||||
/**
|
||||
* ring_buffer_size - return the size of the ring buffer (in bytes)
|
||||
|
@ -3091,7 +3091,7 @@ static void trace_iterator_increment(struct trace_iterator *iter)
|
||||
|
||||
iter->idx++;
|
||||
if (buf_iter)
|
||||
ring_buffer_read(buf_iter, NULL);
|
||||
ring_buffer_iter_advance(buf_iter);
|
||||
}
|
||||
|
||||
static struct trace_entry *
|
||||
@ -3251,7 +3251,9 @@ void tracing_iter_reset(struct trace_iterator *iter, int cpu)
|
||||
if (ts >= iter->trace_buffer->time_start)
|
||||
break;
|
||||
entries++;
|
||||
ring_buffer_read(buf_iter, NULL);
|
||||
ring_buffer_iter_advance(buf_iter);
|
||||
/* This could be a big loop */
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries;
|
||||
|
@ -704,7 +704,7 @@ get_return_for_leaf(struct trace_iterator *iter,
|
||||
|
||||
/* this is a leaf, now advance the iterator */
|
||||
if (ring_iter)
|
||||
ring_buffer_read(ring_iter, NULL);
|
||||
ring_buffer_iter_advance(ring_iter);
|
||||
|
||||
return next;
|
||||
}
|
||||
|
@ -1474,6 +1474,10 @@ static void bcm_notify(struct bcm_sock *bo, unsigned long msg,
|
||||
|
||||
/* remove device reference, if this is our bound device */
|
||||
if (bo->bound && bo->ifindex == dev->ifindex) {
|
||||
#if IS_ENABLED(CONFIG_PROC_FS)
|
||||
if (sock_net(sk)->can.bcmproc_dir && bo->bcm_proc_read)
|
||||
remove_proc_entry(bo->procname, sock_net(sk)->can.bcmproc_dir);
|
||||
#endif
|
||||
bo->bound = 0;
|
||||
bo->ifindex = 0;
|
||||
notify_enodev = 1;
|
||||
|
@ -136,6 +136,17 @@ static void ops_free(const struct pernet_operations *ops, struct net *net)
|
||||
}
|
||||
}
|
||||
|
||||
static void ops_pre_exit_list(const struct pernet_operations *ops,
|
||||
struct list_head *net_exit_list)
|
||||
{
|
||||
struct net *net;
|
||||
|
||||
if (ops->pre_exit) {
|
||||
list_for_each_entry(net, net_exit_list, exit_list)
|
||||
ops->pre_exit(net);
|
||||
}
|
||||
}
|
||||
|
||||
static void ops_exit_list(const struct pernet_operations *ops,
|
||||
struct list_head *net_exit_list)
|
||||
{
|
||||
@ -311,6 +322,12 @@ out_undo:
|
||||
*/
|
||||
list_add(&net->exit_list, &net_exit_list);
|
||||
saved_ops = ops;
|
||||
list_for_each_entry_continue_reverse(ops, &pernet_list, list)
|
||||
ops_pre_exit_list(ops, &net_exit_list);
|
||||
|
||||
synchronize_rcu();
|
||||
|
||||
ops = saved_ops;
|
||||
list_for_each_entry_continue_reverse(ops, &pernet_list, list)
|
||||
ops_exit_list(ops, &net_exit_list);
|
||||
|
||||
@ -478,10 +495,15 @@ static void cleanup_net(struct work_struct *work)
|
||||
}
|
||||
rtnl_unlock();
|
||||
|
||||
/* Run all of the network namespace pre_exit methods */
|
||||
list_for_each_entry_reverse(ops, &pernet_list, list)
|
||||
ops_pre_exit_list(ops, &net_exit_list);
|
||||
|
||||
/*
|
||||
* Another CPU might be rcu-iterating the list, wait for it.
|
||||
* This needs to be before calling the exit() notifiers, so
|
||||
* the rcu_barrier() below isn't sufficient alone.
|
||||
* Also the pre_exit() and exit() methods need this barrier.
|
||||
*/
|
||||
synchronize_rcu();
|
||||
|
||||
@ -896,6 +918,8 @@ static int __register_pernet_operations(struct list_head *list,
|
||||
out_undo:
|
||||
/* If I have an error cleanup all namespaces I initialized */
|
||||
list_del(&ops->list);
|
||||
ops_pre_exit_list(ops, &net_exit_list);
|
||||
synchronize_rcu();
|
||||
ops_exit_list(ops, &net_exit_list);
|
||||
ops_free_list(ops, &net_exit_list);
|
||||
return error;
|
||||
@ -909,6 +933,8 @@ static void __unregister_pernet_operations(struct pernet_operations *ops)
|
||||
list_del(&ops->list);
|
||||
for_each_net(net)
|
||||
list_add_tail(&net->exit_list, &net_exit_list);
|
||||
ops_pre_exit_list(ops, &net_exit_list);
|
||||
synchronize_rcu();
|
||||
ops_exit_list(ops, &net_exit_list);
|
||||
ops_free_list(ops, &net_exit_list);
|
||||
}
|
||||
@ -933,6 +959,8 @@ static void __unregister_pernet_operations(struct pernet_operations *ops)
|
||||
} else {
|
||||
LIST_HEAD(net_exit_list);
|
||||
list_add(&init_net.exit_list, &net_exit_list);
|
||||
ops_pre_exit_list(ops, &net_exit_list);
|
||||
synchronize_rcu();
|
||||
ops_exit_list(ops, &net_exit_list);
|
||||
ops_free_list(ops, &net_exit_list);
|
||||
}
|
||||
|
@ -494,8 +494,8 @@ void rfkill_remove_epo_lock(void)
|
||||
/**
|
||||
* rfkill_is_epo_lock_active - returns true EPO is active
|
||||
*
|
||||
* Returns 0 (false) if there is NOT an active EPO contidion,
|
||||
* and 1 (true) if there is an active EPO contition, which
|
||||
* Returns 0 (false) if there is NOT an active EPO condition,
|
||||
* and 1 (true) if there is an active EPO condition, which
|
||||
* locks all radios in one of the BLOCKED states.
|
||||
*
|
||||
* Can be called in atomic context.
|
||||
|
@ -660,11 +660,10 @@ deliver:
|
||||
|
||||
err = qdisc_enqueue(skb, q->qdisc, &to_free);
|
||||
kfree_skb_list(to_free);
|
||||
if (err != NET_XMIT_SUCCESS &&
|
||||
net_xmit_drop_count(err)) {
|
||||
if (err != NET_XMIT_SUCCESS) {
|
||||
if (net_xmit_drop_count(err))
|
||||
qdisc_qstats_drop(sch);
|
||||
qdisc_tree_reduce_backlog(sch, 1,
|
||||
pkt_len);
|
||||
qdisc_tree_reduce_backlog(sch, 1, pkt_len);
|
||||
}
|
||||
goto tfifo_dequeue;
|
||||
}
|
||||
|
@ -627,9 +627,6 @@ static void init_peercred(struct sock *sk)
|
||||
|
||||
static void copy_peercred(struct sock *sk, struct sock *peersk)
|
||||
{
|
||||
const struct cred *old_cred;
|
||||
struct pid *old_pid;
|
||||
|
||||
if (sk < peersk) {
|
||||
spin_lock(&sk->sk_peer_lock);
|
||||
spin_lock_nested(&peersk->sk_peer_lock, SINGLE_DEPTH_NESTING);
|
||||
@ -637,16 +634,12 @@ static void copy_peercred(struct sock *sk, struct sock *peersk)
|
||||
spin_lock(&peersk->sk_peer_lock);
|
||||
spin_lock_nested(&sk->sk_peer_lock, SINGLE_DEPTH_NESTING);
|
||||
}
|
||||
old_pid = sk->sk_peer_pid;
|
||||
old_cred = sk->sk_peer_cred;
|
||||
|
||||
sk->sk_peer_pid = get_pid(peersk->sk_peer_pid);
|
||||
sk->sk_peer_cred = get_cred(peersk->sk_peer_cred);
|
||||
|
||||
spin_unlock(&sk->sk_peer_lock);
|
||||
spin_unlock(&peersk->sk_peer_lock);
|
||||
|
||||
put_pid(old_pid);
|
||||
put_cred(old_cred);
|
||||
}
|
||||
|
||||
static int unix_listen(struct socket *sock, int backlog)
|
||||
|
@ -1527,6 +1527,10 @@ int __aafs_profile_mkdir(struct aa_profile *profile, struct dentry *parent)
|
||||
struct aa_profile *p;
|
||||
p = aa_deref_parent(profile);
|
||||
dent = prof_dir(p);
|
||||
if (!dent) {
|
||||
error = -ENOENT;
|
||||
goto fail2;
|
||||
}
|
||||
/* adding to parent that previously didn't have children */
|
||||
dent = aafs_create_dir("profiles", dent);
|
||||
if (IS_ERR(dent))
|
||||
|
@ -3761,12 +3761,18 @@ static int smack_unix_stream_connect(struct sock *sock,
|
||||
}
|
||||
}
|
||||
|
||||
if (rc == 0) {
|
||||
/*
|
||||
* Cross reference the peer labels for SO_PEERSEC.
|
||||
*/
|
||||
if (rc == 0) {
|
||||
nsp->smk_packet = ssp->smk_out;
|
||||
ssp->smk_packet = osp->smk_out;
|
||||
|
||||
/*
|
||||
* new/child/established socket must inherit listening socket labels
|
||||
*/
|
||||
nsp->smk_out = osp->smk_out;
|
||||
nsp->smk_in = osp->smk_in;
|
||||
}
|
||||
|
||||
return rc;
|
||||
@ -4302,7 +4308,7 @@ access_check:
|
||||
rcu_read_unlock();
|
||||
|
||||
if (hskp == NULL)
|
||||
rc = netlbl_req_setattr(req, &skp->smk_netlabel);
|
||||
rc = netlbl_req_setattr(req, &ssp->smk_out->smk_netlabel);
|
||||
else
|
||||
netlbl_req_delattr(req);
|
||||
|
||||
|
@ -752,6 +752,20 @@ static int hdmi_chmap_ctl_get(struct snd_kcontrol *kcontrol,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* a simple sanity check for input values to chmap kcontrol */
|
||||
static int chmap_value_check(struct hdac_chmap *hchmap,
|
||||
const struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < hchmap->channels_max; i++) {
|
||||
if (ucontrol->value.integer.value[i] < 0 ||
|
||||
ucontrol->value.integer.value[i] > SNDRV_CHMAP_LAST)
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hdmi_chmap_ctl_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
@ -763,6 +777,10 @@ static int hdmi_chmap_ctl_put(struct snd_kcontrol *kcontrol,
|
||||
unsigned char chmap[8], per_pin_chmap[8];
|
||||
int i, err, ca, prepared = 0;
|
||||
|
||||
err = chmap_value_check(hchmap, ucontrol);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
/* No monitor is connected in dyn_pcm_assign.
|
||||
* It's invalid to setup the chmap
|
||||
*/
|
||||
|
@ -264,6 +264,7 @@ enum {
|
||||
CXT_FIXUP_HEADSET_MIC,
|
||||
CXT_FIXUP_HP_MIC_NO_PRESENCE,
|
||||
CXT_PINCFG_SWS_JS201D,
|
||||
CXT_PINCFG_TOP_SPEAKER,
|
||||
};
|
||||
|
||||
/* for hda_fixup_thinkpad_acpi() */
|
||||
@ -921,6 +922,13 @@ static const struct hda_fixup cxt_fixups[] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = cxt_pincfg_sws_js201d,
|
||||
},
|
||||
[CXT_PINCFG_TOP_SPEAKER] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x1d, 0x82170111 },
|
||||
{ }
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk cxt5045_fixups[] = {
|
||||
@ -1012,6 +1020,8 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
|
||||
SND_PCI_QUIRK_VENDOR(0x17aa, "Thinkpad", CXT_FIXUP_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x1c06, 0x2011, "Lemote A1004", CXT_PINCFG_LEMOTE_A1004),
|
||||
SND_PCI_QUIRK(0x1c06, 0x2012, "Lemote A1205", CXT_PINCFG_LEMOTE_A1205),
|
||||
SND_PCI_QUIRK(0x2782, 0x12c3, "Sirius Gen1", CXT_PINCFG_TOP_SPEAKER),
|
||||
SND_PCI_QUIRK(0x2782, 0x12c5, "Sirius Gen2", CXT_PINCFG_TOP_SPEAKER),
|
||||
{}
|
||||
};
|
||||
|
||||
@ -1029,6 +1039,7 @@ static const struct hda_model_fixup cxt5066_fixup_models[] = {
|
||||
{ .id = CXT_FIXUP_MUTE_LED_GPIO, .name = "mute-led-gpio" },
|
||||
{ .id = CXT_PINCFG_LENOVO_NOTEBOOK, .name = "lenovo-20149" },
|
||||
{ .id = CXT_PINCFG_SWS_JS201D, .name = "sws-js201d" },
|
||||
{ .id = CXT_PINCFG_TOP_SPEAKER, .name = "sirius-top-speaker" },
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -76,6 +76,20 @@ void *snd_usb_find_csint_desc(void *buffer, int buflen, void *after, u8 dsubtype
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* check the validity of pipe and EP types */
|
||||
int snd_usb_pipe_sanity_check(struct usb_device *dev, unsigned int pipe)
|
||||
{
|
||||
static const int pipetypes[4] = {
|
||||
PIPE_CONTROL, PIPE_ISOCHRONOUS, PIPE_BULK, PIPE_INTERRUPT
|
||||
};
|
||||
struct usb_host_endpoint *ep;
|
||||
|
||||
ep = usb_pipe_endpoint(dev, pipe);
|
||||
if (!ep || usb_pipetype(pipe) != pipetypes[usb_endpoint_type(&ep->desc)])
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Wrapper for usb_control_msg().
|
||||
* Allocates a temp buffer to prevent dmaing from/to the stack.
|
||||
@ -88,6 +102,9 @@ int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
|
||||
void *buf = NULL;
|
||||
int timeout;
|
||||
|
||||
if (snd_usb_pipe_sanity_check(dev, pipe))
|
||||
return -EINVAL;
|
||||
|
||||
if (size > 0) {
|
||||
buf = kmemdup(data, size, GFP_KERNEL);
|
||||
if (!buf)
|
||||
|
@ -7,6 +7,7 @@ unsigned int snd_usb_combine_bytes(unsigned char *bytes, int size);
|
||||
void *snd_usb_find_desc(void *descstart, int desclen, void *after, u8 dtype);
|
||||
void *snd_usb_find_csint_desc(void *descstart, int desclen, void *after, u8 dsubtype);
|
||||
|
||||
int snd_usb_pipe_sanity_check(struct usb_device *dev, unsigned int pipe);
|
||||
int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe,
|
||||
__u8 request, __u8 requesttype, __u16 value, __u16 index,
|
||||
void *data, __u16 size);
|
||||
|
@ -729,11 +729,13 @@ static int snd_usb_novation_boot_quirk(struct usb_device *dev)
|
||||
static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
|
||||
{
|
||||
int err, actual_length;
|
||||
|
||||
/* "midi send" enable */
|
||||
static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
|
||||
void *buf;
|
||||
|
||||
void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
|
||||
if (snd_usb_pipe_sanity_check(dev, usb_sndintpipe(dev, 0x05)))
|
||||
return -EINVAL;
|
||||
buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
|
||||
@ -758,7 +760,11 @@ static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
|
||||
|
||||
static int snd_usb_nativeinstruments_boot_quirk(struct usb_device *dev)
|
||||
{
|
||||
int ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
int ret;
|
||||
|
||||
if (snd_usb_pipe_sanity_check(dev, usb_sndctrlpipe(dev, 0)))
|
||||
return -EINVAL;
|
||||
ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
0xaf, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||
1, 0, NULL, 0, 1000);
|
||||
|
||||
@ -859,6 +865,38 @@ static int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
|
||||
return 0; /* Successful boot */
|
||||
}
|
||||
|
||||
static int snd_usb_axefx3_boot_quirk(struct usb_device *dev)
|
||||
{
|
||||
int err;
|
||||
|
||||
dev_dbg(&dev->dev, "Waiting for Axe-Fx III to boot up...\n");
|
||||
|
||||
if (snd_usb_pipe_sanity_check(dev, usb_sndctrlpipe(dev, 0)))
|
||||
return -EINVAL;
|
||||
/* If the Axe-Fx III has not fully booted, it will timeout when trying
|
||||
* to enable the audio streaming interface. A more generous timeout is
|
||||
* used here to detect when the Axe-Fx III has finished booting as the
|
||||
* set interface message will be acked once it has
|
||||
*/
|
||||
err = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE,
|
||||
1, 1, NULL, 0, 120000);
|
||||
if (err < 0) {
|
||||
dev_err(&dev->dev,
|
||||
"failed waiting for Axe-Fx III to boot: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
dev_dbg(&dev->dev, "Axe-Fx III is now ready\n");
|
||||
|
||||
err = usb_set_interface(dev, 1, 0);
|
||||
if (err < 0)
|
||||
dev_dbg(&dev->dev,
|
||||
"error stopping Axe-Fx III interface: %d\n", err);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup quirks
|
||||
*/
|
||||
@ -1034,6 +1072,8 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev,
|
||||
return snd_usb_fasttrackpro_boot_quirk(dev);
|
||||
case USB_ID(0x047f, 0xc010): /* Plantronics Gamecom 780 */
|
||||
return snd_usb_gamecon780_boot_quirk(dev);
|
||||
case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx 3 */
|
||||
return snd_usb_axefx3_boot_quirk(dev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user