Skip to content

Commit 650082a

Browse files
committed
Merge remote-tracking branch 'stable/linux-5.10.y' into rpi-5.10.y
2 parents e13d4e9 + c982c1a commit 650082a

File tree

63 files changed

+502
-271
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+502
-271
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 5
33
PATCHLEVEL = 10
4-
SUBLEVEL = 90
4+
SUBLEVEL = 92
55
EXTRAVERSION =
66
NAME = Dare mighty things
77

arch/arm/boot/dts/exynos4210-i9100.dts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@
765765
compatible = "brcm,bcm4330-bt";
766766

767767
shutdown-gpios = <&gpl0 4 GPIO_ACTIVE_HIGH>;
768-
reset-gpios = <&gpl1 0 GPIO_ACTIVE_HIGH>;
768+
reset-gpios = <&gpl1 0 GPIO_ACTIVE_LOW>;
769769
device-wakeup-gpios = <&gpx3 1 GPIO_ACTIVE_HIGH>;
770770
host-wakeup-gpios = <&gpx2 6 GPIO_ACTIVE_HIGH>;
771771
};

drivers/bluetooth/bfusb.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,9 @@ static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *i
628628
data->bulk_out_ep = bulk_out_ep->desc.bEndpointAddress;
629629
data->bulk_pkt_size = le16_to_cpu(bulk_out_ep->desc.wMaxPacketSize);
630630

631+
if (!data->bulk_pkt_size)
632+
goto done;
633+
631634
rwlock_init(&data->lock);
632635

633636
data->reassembly = NULL;

drivers/bluetooth/btusb.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,15 @@ static const struct usb_device_id blacklist_table[] = {
379379
{ USB_DEVICE(0x8087, 0x0aaa), .driver_info = BTUSB_INTEL_NEW |
380380
BTUSB_WIDEBAND_SPEECH |
381381
BTUSB_VALID_LE_STATES },
382+
{ USB_DEVICE(0x10ab, 0x9309), .driver_info = BTUSB_QCA_WCN6855 |
383+
BTUSB_WIDEBAND_SPEECH |
384+
BTUSB_VALID_LE_STATES },
385+
{ USB_DEVICE(0x10ab, 0x9409), .driver_info = BTUSB_QCA_WCN6855 |
386+
BTUSB_WIDEBAND_SPEECH |
387+
BTUSB_VALID_LE_STATES },
388+
{ USB_DEVICE(0x0489, 0xe0d0), .driver_info = BTUSB_QCA_WCN6855 |
389+
BTUSB_WIDEBAND_SPEECH |
390+
BTUSB_VALID_LE_STATES },
382391

383392
/* Other Intel Bluetooth devices */
384393
{ USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01),
@@ -400,6 +409,14 @@ static const struct usb_device_id blacklist_table[] = {
400409
BTUSB_WIDEBAND_SPEECH |
401410
BTUSB_VALID_LE_STATES },
402411

412+
/* MediaTek MT7922A Bluetooth devices */
413+
{ USB_DEVICE(0x0489, 0xe0d8), .driver_info = BTUSB_MEDIATEK |
414+
BTUSB_WIDEBAND_SPEECH |
415+
BTUSB_VALID_LE_STATES },
416+
{ USB_DEVICE(0x0489, 0xe0d9), .driver_info = BTUSB_MEDIATEK |
417+
BTUSB_WIDEBAND_SPEECH |
418+
BTUSB_VALID_LE_STATES },
419+
403420
/* Additional Realtek 8723AE Bluetooth devices */
404421
{ USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
405422
{ USB_DEVICE(0x13d3, 0x3394), .driver_info = BTUSB_REALTEK },
@@ -2845,6 +2862,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
28452862
skb = bt_skb_alloc(HCI_WMT_MAX_EVENT_SIZE, GFP_ATOMIC);
28462863
if (!skb) {
28472864
hdev->stat.err_rx++;
2865+
kfree(urb->setup_packet);
28482866
return;
28492867
}
28502868

@@ -2865,6 +2883,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
28652883
data->evt_skb = skb_clone(skb, GFP_ATOMIC);
28662884
if (!data->evt_skb) {
28672885
kfree_skb(skb);
2886+
kfree(urb->setup_packet);
28682887
return;
28692888
}
28702889
}
@@ -2873,6 +2892,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
28732892
if (err < 0) {
28742893
kfree_skb(data->evt_skb);
28752894
data->evt_skb = NULL;
2895+
kfree(urb->setup_packet);
28762896
return;
28772897
}
28782898

@@ -2883,6 +2903,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
28832903
wake_up_bit(&data->flags,
28842904
BTUSB_TX_WAIT_VND_EVT);
28852905
}
2906+
kfree(urb->setup_packet);
28862907
return;
28872908
} else if (urb->status == -ENOENT) {
28882909
/* Avoid suspend failed when usb_kill_urb */
@@ -2903,6 +2924,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
29032924
usb_anchor_urb(urb, &data->ctrl_anchor);
29042925
err = usb_submit_urb(urb, GFP_ATOMIC);
29052926
if (err < 0) {
2927+
kfree(urb->setup_packet);
29062928
/* -EPERM: urb is being killed;
29072929
* -ENODEV: device got disconnected
29082930
*/

drivers/char/random.c

Lines changed: 69 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,7 @@ static struct crng_state primary_crng = {
461461
* its value (from 0->1->2).
462462
*/
463463
static int crng_init = 0;
464+
static bool crng_need_final_init = false;
464465
#define crng_ready() (likely(crng_init > 1))
465466
static int crng_init_cnt = 0;
466467
static unsigned long crng_global_init_time = 0;
@@ -838,6 +839,36 @@ static void __init crng_initialize_primary(struct crng_state *crng)
838839
crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
839840
}
840841

842+
static void crng_finalize_init(struct crng_state *crng)
843+
{
844+
if (crng != &primary_crng || crng_init >= 2)
845+
return;
846+
if (!system_wq) {
847+
/* We can't call numa_crng_init until we have workqueues,
848+
* so mark this for processing later. */
849+
crng_need_final_init = true;
850+
return;
851+
}
852+
853+
invalidate_batched_entropy();
854+
numa_crng_init();
855+
crng_init = 2;
856+
process_random_ready_list();
857+
wake_up_interruptible(&crng_init_wait);
858+
kill_fasync(&fasync, SIGIO, POLL_IN);
859+
pr_notice("crng init done\n");
860+
if (unseeded_warning.missed) {
861+
pr_notice("%d get_random_xx warning(s) missed due to ratelimiting\n",
862+
unseeded_warning.missed);
863+
unseeded_warning.missed = 0;
864+
}
865+
if (urandom_warning.missed) {
866+
pr_notice("%d urandom warning(s) missed due to ratelimiting\n",
867+
urandom_warning.missed);
868+
urandom_warning.missed = 0;
869+
}
870+
}
871+
841872
#ifdef CONFIG_NUMA
842873
static void do_numa_crng_init(struct work_struct *work)
843874
{
@@ -853,8 +884,8 @@ static void do_numa_crng_init(struct work_struct *work)
853884
crng_initialize_secondary(crng);
854885
pool[i] = crng;
855886
}
856-
mb();
857-
if (cmpxchg(&crng_node_pool, NULL, pool)) {
887+
/* pairs with READ_ONCE() in select_crng() */
888+
if (cmpxchg_release(&crng_node_pool, NULL, pool) != NULL) {
858889
for_each_node(i)
859890
kfree(pool[i]);
860891
kfree(pool);
@@ -867,8 +898,26 @@ static void numa_crng_init(void)
867898
{
868899
schedule_work(&numa_crng_init_work);
869900
}
901+
902+
static struct crng_state *select_crng(void)
903+
{
904+
struct crng_state **pool;
905+
int nid = numa_node_id();
906+
907+
/* pairs with cmpxchg_release() in do_numa_crng_init() */
908+
pool = READ_ONCE(crng_node_pool);
909+
if (pool && pool[nid])
910+
return pool[nid];
911+
912+
return &primary_crng;
913+
}
870914
#else
871915
static void numa_crng_init(void) {}
916+
917+
static struct crng_state *select_crng(void)
918+
{
919+
return &primary_crng;
920+
}
872921
#endif
873922

874923
/*
@@ -972,38 +1021,23 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
9721021
crng->state[i+4] ^= buf.key[i] ^ rv;
9731022
}
9741023
memzero_explicit(&buf, sizeof(buf));
975-
crng->init_time = jiffies;
1024+
WRITE_ONCE(crng->init_time, jiffies);
9761025
spin_unlock_irqrestore(&crng->lock, flags);
977-
if (crng == &primary_crng && crng_init < 2) {
978-
invalidate_batched_entropy();
979-
numa_crng_init();
980-
crng_init = 2;
981-
process_random_ready_list();
982-
wake_up_interruptible(&crng_init_wait);
983-
kill_fasync(&fasync, SIGIO, POLL_IN);
984-
pr_notice("crng init done\n");
985-
if (unseeded_warning.missed) {
986-
pr_notice("%d get_random_xx warning(s) missed due to ratelimiting\n",
987-
unseeded_warning.missed);
988-
unseeded_warning.missed = 0;
989-
}
990-
if (urandom_warning.missed) {
991-
pr_notice("%d urandom warning(s) missed due to ratelimiting\n",
992-
urandom_warning.missed);
993-
urandom_warning.missed = 0;
994-
}
995-
}
1026+
crng_finalize_init(crng);
9961027
}
9971028

9981029
static void _extract_crng(struct crng_state *crng,
9991030
__u8 out[CHACHA_BLOCK_SIZE])
10001031
{
1001-
unsigned long v, flags;
1002-
1003-
if (crng_ready() &&
1004-
(time_after(crng_global_init_time, crng->init_time) ||
1005-
time_after(jiffies, crng->init_time + CRNG_RESEED_INTERVAL)))
1006-
crng_reseed(crng, crng == &primary_crng ? &input_pool : NULL);
1032+
unsigned long v, flags, init_time;
1033+
1034+
if (crng_ready()) {
1035+
init_time = READ_ONCE(crng->init_time);
1036+
if (time_after(READ_ONCE(crng_global_init_time), init_time) ||
1037+
time_after(jiffies, init_time + CRNG_RESEED_INTERVAL))
1038+
crng_reseed(crng, crng == &primary_crng ?
1039+
&input_pool : NULL);
1040+
}
10071041
spin_lock_irqsave(&crng->lock, flags);
10081042
if (arch_get_random_long(&v))
10091043
crng->state[14] ^= v;
@@ -1015,15 +1049,7 @@ static void _extract_crng(struct crng_state *crng,
10151049

10161050
static void extract_crng(__u8 out[CHACHA_BLOCK_SIZE])
10171051
{
1018-
struct crng_state *crng = NULL;
1019-
1020-
#ifdef CONFIG_NUMA
1021-
if (crng_node_pool)
1022-
crng = crng_node_pool[numa_node_id()];
1023-
if (crng == NULL)
1024-
#endif
1025-
crng = &primary_crng;
1026-
_extract_crng(crng, out);
1052+
_extract_crng(select_crng(), out);
10271053
}
10281054

10291055
/*
@@ -1052,15 +1078,7 @@ static void _crng_backtrack_protect(struct crng_state *crng,
10521078

10531079
static void crng_backtrack_protect(__u8 tmp[CHACHA_BLOCK_SIZE], int used)
10541080
{
1055-
struct crng_state *crng = NULL;
1056-
1057-
#ifdef CONFIG_NUMA
1058-
if (crng_node_pool)
1059-
crng = crng_node_pool[numa_node_id()];
1060-
if (crng == NULL)
1061-
#endif
1062-
crng = &primary_crng;
1063-
_crng_backtrack_protect(crng, tmp, used);
1081+
_crng_backtrack_protect(select_crng(), tmp, used);
10641082
}
10651083

10661084
static ssize_t extract_crng_user(void __user *buf, size_t nbytes)
@@ -1799,6 +1817,8 @@ static void __init init_std_data(struct entropy_store *r)
17991817
int __init rand_initialize(void)
18001818
{
18011819
init_std_data(&input_pool);
1820+
if (crng_need_final_init)
1821+
crng_finalize_init(&primary_crng);
18021822
crng_initialize_primary(&primary_crng);
18031823
crng_global_init_time = jiffies;
18041824
if (ratelimit_disable) {
@@ -1973,7 +1993,7 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
19731993
if (crng_init < 2)
19741994
return -ENODATA;
19751995
crng_reseed(&primary_crng, &input_pool);
1976-
crng_global_init_time = jiffies - 1;
1996+
WRITE_ONCE(crng_global_init_time, jiffies - 1);
19771997
return 0;
19781998
default:
19791999
return -EINVAL;
@@ -2307,7 +2327,8 @@ void add_hwgenerator_randomness(const char *buffer, size_t count,
23072327
* We'll be woken up again once below random_write_wakeup_thresh,
23082328
* or when the calling thread is about to terminate.
23092329
*/
2310-
wait_event_interruptible(random_write_wait, kthread_should_stop() ||
2330+
wait_event_interruptible(random_write_wait,
2331+
!system_wq || kthread_should_stop() ||
23112332
ENTROPY_BITS(&input_pool) <= random_write_wakeup_bits);
23122333
mix_pool_bytes(poolp, buffer, count);
23132334
credit_entropy_bits(poolp, entropy);

drivers/gpu/drm/amd/display/dc/dcn10/dcn10_init.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ static const struct hw_sequencer_funcs dcn10_funcs = {
7777
.get_clock = dcn10_get_clock,
7878
.get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync,
7979
.calc_vupdate_position = dcn10_calc_vupdate_position,
80+
.power_down = dce110_power_down,
8081
.set_backlight_level = dce110_set_backlight_level,
8182
.set_abm_immediate_disable = dce110_set_abm_immediate_disable,
8283
.set_pipe = dce110_set_pipe,

drivers/gpu/drm/i915/intel_pm.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3044,9 +3044,9 @@ static void snb_wm_latency_quirk(struct drm_i915_private *dev_priv)
30443044
* The BIOS provided WM memory latency values are often
30453045
* inadequate for high resolution displays. Adjust them.
30463046
*/
3047-
changed = ilk_increase_wm_latency(dev_priv, dev_priv->wm.pri_latency, 12) |
3048-
ilk_increase_wm_latency(dev_priv, dev_priv->wm.spr_latency, 12) |
3049-
ilk_increase_wm_latency(dev_priv, dev_priv->wm.cur_latency, 12);
3047+
changed = ilk_increase_wm_latency(dev_priv, dev_priv->wm.pri_latency, 12);
3048+
changed |= ilk_increase_wm_latency(dev_priv, dev_priv->wm.spr_latency, 12);
3049+
changed |= ilk_increase_wm_latency(dev_priv, dev_priv->wm.cur_latency, 12);
30503050

30513051
if (!changed)
30523052
return;

drivers/infiniband/core/uverbs_marshall.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void ib_copy_ah_attr_to_user(struct ib_device *device,
6666
struct rdma_ah_attr *src = ah_attr;
6767
struct rdma_ah_attr conv_ah;
6868

69-
memset(&dst->grh.reserved, 0, sizeof(dst->grh.reserved));
69+
memset(&dst->grh, 0, sizeof(dst->grh));
7070

7171
if ((ah_attr->type == RDMA_AH_ATTR_TYPE_OPA) &&
7272
(rdma_ah_get_dlid(ah_attr) > be16_to_cpu(IB_LID_PERMISSIVE)) &&

drivers/infiniband/core/uverbs_uapi.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,9 @@ static int uapi_finalize(struct uverbs_api *uapi)
450450
uapi->num_write_ex = max_write_ex + 1;
451451
data = kmalloc_array(uapi->num_write + uapi->num_write_ex,
452452
sizeof(*uapi->write_methods), GFP_KERNEL);
453+
if (!data)
454+
return -ENOMEM;
455+
453456
for (i = 0; i != uapi->num_write + uapi->num_write_ex; i++)
454457
data[i] = &uapi->notsupp_method;
455458
uapi->write_methods = data;

drivers/input/touchscreen/zinitix.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,15 @@ static int zinitix_ts_probe(struct i2c_client *client)
488488
return error;
489489
}
490490

491+
error = devm_request_threaded_irq(&client->dev, client->irq,
492+
NULL, zinitix_ts_irq_handler,
493+
IRQF_ONESHOT,
494+
client->name, bt541);
495+
if (error) {
496+
dev_err(&client->dev, "Failed to request IRQ: %d\n", error);
497+
return error;
498+
}
499+
491500
error = zinitix_init_input_dev(bt541);
492501
if (error) {
493502
dev_err(&client->dev,
@@ -514,13 +523,6 @@ static int zinitix_ts_probe(struct i2c_client *client)
514523
}
515524

516525
irq_set_status_flags(client->irq, IRQ_NOAUTOEN);
517-
error = devm_request_threaded_irq(&client->dev, client->irq,
518-
NULL, zinitix_ts_irq_handler,
519-
IRQF_ONESHOT, client->name, bt541);
520-
if (error) {
521-
dev_err(&client->dev, "Failed to request IRQ: %d\n", error);
522-
return error;
523-
}
524526

525527
return 0;
526528
}

drivers/isdn/mISDN/core.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ mISDNInit(void)
381381
err = mISDN_inittimer(&debug);
382382
if (err)
383383
goto error2;
384-
err = l1_init(&debug);
384+
err = Isdnl1_Init(&debug);
385385
if (err)
386386
goto error3;
387387
err = Isdnl2_Init(&debug);
@@ -395,7 +395,7 @@ mISDNInit(void)
395395
error5:
396396
Isdnl2_cleanup();
397397
error4:
398-
l1_cleanup();
398+
Isdnl1_cleanup();
399399
error3:
400400
mISDN_timer_cleanup();
401401
error2:
@@ -408,7 +408,7 @@ static void mISDN_cleanup(void)
408408
{
409409
misdn_sock_cleanup();
410410
Isdnl2_cleanup();
411-
l1_cleanup();
411+
Isdnl1_cleanup();
412412
mISDN_timer_cleanup();
413413
class_unregister(&mISDN_class);
414414

0 commit comments

Comments
 (0)