Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
31510de
nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec
Jan 28, 2026
d8300bc
x86/kfence: fix booting on 32bit non-PAE systems
andyhhp Jan 26, 2026
578531c
platform/x86: intel_telemetry: Fix swapped arrays in PSS output
kaushlen Dec 24, 2025
9aa1c9b
pmdomain: qcom: rpmpd: fix off-by-one error in clamping to the highes…
juhosg Jan 22, 2026
d60605a
pmdomain: imx8mp-blk-ctrl: Keep gpc power domain on for system wakeup
Feb 4, 2026
dfd665b
pmdomain: imx: gpcv2: Fix the imx8mm gpu hang due to wrong adb400 reset
JackyBai Jan 23, 2026
6c0bada
pmdomain: imx8mp-blk-ctrl: Keep usb phy power domain on for system wa…
Feb 4, 2026
3d237ab
pmdomain: imx8m-blk-ctrl: fix out-of-range access of bc->domains
Jan 30, 2026
9bb054d
rbd: check for EOD after exclusive lock is ensured to be held
idryomov Jan 7, 2026
a31b291
ARM: 9468/1: fix memset64() on big-endian
t-8ch Jan 7, 2026
9fe48c5
Revert "drm/amd: Check if ASPM is enabled from PCIe subsystem"
spasswolf Feb 1, 2026
6aa9bc6
KVM: Don't clobber irqfd routing type when deassigning irqfd
sean-jc Jan 13, 2026
77f8889
netfilter: nft_set_pipapo: clamp maximum map bucket size to INT_MAX
ummakynes Apr 22, 2025
231bd0f
hfsplus: fix slab-out-of-bounds read in hfsplus_uni2asc()
void0red Sep 9, 2025
079f4d4
ublk: fix deadlock when reading partition table
Dec 12, 2025
2c19394
sched/rt: Fix race in push_rt_task
Feb 25, 2025
3f18fb0
binder: fix BR_FROZEN_REPLY error log
Jan 23, 2026
8493114
binderfs: fix ida_alloc_max() upper bound
Jan 27, 2026
70eeae8
KVM: selftests: Add -U_FORTIFY_SOURCE to avoid some unpredictable tes…
freelancer-leon Feb 7, 2026
1d492e0
gve: Fix stats report corruption on queue count change
Feb 7, 2026
bb216f4
tracing: Fix ftrace event field alignments
rostedt Feb 7, 2026
0acb1dd
wifi: mac80211: ocb: skip rx_no_sta when interface is not joined
moonheelee Dec 16, 2025
7594948
wifi: wlcore: ensure skb headroom before skb_push
astrand Dec 3, 2025
115a2ac
net: usb: sr9700: support devices with virtual driver CD
EthanNelson-Moore Dec 11, 2025
d6e4083
block,bfq: fix aux stat accumulation destination
shechenglong-fusion Dec 28, 2025
2d62059
smb/server: call ksmbd_session_rpc_close() on error path in create_sm…
Dec 28, 2025
5490f86
LoongArch: Set correct protection_map[] for VM_NONE/VM_SHARED
chenhuacai Dec 31, 2025
700c41b
smb/server: fix refcount leak in smb2_open()
Dec 29, 2025
4957392
LoongArch: Enable exception fixup for specific ADE subcode
Dec 31, 2025
ec75a56
smb/server: fix refcount leak in parse_durable_handle_context()
Dec 29, 2025
2726f59
HID: intel-ish-hid: Update ishtp bus match to support device ID table
lixuzha Dec 10, 2025
23c65d8
HID: multitouch: add MT_QUIRK_STICKY_FINGERS to MT_CLS_VTL
DaytonCL Dec 14, 2025
2acc120
btrfs: fix reservation leak in some error paths when inserting inline…
fdmanana Dec 12, 2025
16cdcec
HID: intel-ish-hid: Reset enum_devices_done before enumeration
lixuzha Dec 12, 2025
0b3a461
HID: playstation: Center initial joystick axes to prevent spurious ev…
vishniakou Nov 11, 2025
2add57f
ALSA: hda/realtek: add HP Laptop 15s-eq1xxx mute LED quirk
3xxx0rc1st Jan 1, 2026
6013a20
netfilter: replace -EEXIST with -EBUSY
dagomez137 Dec 19, 2025
eda029f
HID: quirks: Add another Chicony HP 5MP Cameras to hid_ignore_list
mschiu77 Jan 2, 2026
ddf0d4e
HID: i2c-hid: fix potential buffer overflow in i2c_hid_get_report()
kenkinming2002 Dec 31, 2025
0714090
HID: Apply quirk HID_QUIRK_ALWAYS_POLL to Edifier QR30 (2d99:a101)
Nov 27, 2025
445e33b
ring-buffer: Avoid softlockup in ring_buffer_resize() during memory free
Dec 28, 2025
dbc87ae
wifi: mac80211: collect station statistics earlier when disconnect
Dec 22, 2025
1e25883
ASoC: davinci-evm: Fix reference leak in davinci_evm_probe
Keryer Jan 7, 2026
9762a6b
nvme-fc: release admin tagset if init fails
ChaitanayaKulkarni Dec 20, 2025
4efc245
nvmet-tcp: fixup hang in nvmet_tcp_listen_data_ready()
Aug 18, 2025
382d4b0
ASoC: amd: yc: Fix microphone on ASUS M6500RE
Jan 12, 2026
9133613
ASoC: tlv320adcx140: Propagate error codes during probe
DmtKats Jan 13, 2026
9031316
spi: hisi-kunpeng: Fixed the wrong debugfs node name in hisi_spi debu…
Jan 8, 2026
6465fdb
regmap: maple: free entry on mas_store_gfp() failure
kaushlen Jan 5, 2026
7dd355b
wifi: cfg80211: Fix bitrate calculation overflow for HE rates
Jan 9, 2026
c053e60
scsi: target: iscsi: Fix use-after-free in iscsit_dec_session_usage_c…
maurizio-lombardi Jan 12, 2026
7df59bf
ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU
Jan 19, 2026
d911e31
scsi: target: iscsi: Fix use-after-free in iscsit_dec_conn_usage_count()
maurizio-lombardi Jan 12, 2026
64a87ef
wifi: mac80211: correctly check if CSA is active
Miriam-Rachel Jan 11, 2026
b06941b
wifi: mac80211: don't increment crypto_tx_tailroom_needed_cnt twice
Miriam-Rachel Jan 18, 2026
58d4aa3
platform/x86: toshiba_haps: Fix memory leaks in add/remove routines
rafaeljw Jan 26, 2026
bb480b3
platform/x86: intel_telemetry: Fix PSS event register mask
kaushlen Dec 24, 2025
f3a2308
platform/x86: hp-bioscfg: Skip empty attribute names
superm1 Jan 28, 2026
2d57b72
smb/client: fix memory leak in smb2_open_file()
Feb 2, 2026
92802ee
net: add skb_header_pointer_careful() helper
edumazet Jan 28, 2026
398a248
net/sched: cls_u32: use skb_header_pointer_careful()
edumazet Jan 28, 2026
96f7d70
dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero
avasummer Jan 28, 2026
b025583
net: liquidio: Initialize netdev pointer before queue setup
GoodLuck612 Jan 28, 2026
f1e810c
net: liquidio: Fix off-by-one error in PF setup_nic_devices() cleanup
GoodLuck612 Jan 28, 2026
f2769ba
net: liquidio: Fix off-by-one error in VF setup_nic_devices() cleanup
GoodLuck612 Jan 28, 2026
dd01b58
dpaa2-switch: add bounds check for if_id in IRQ handler
avasummer Jan 28, 2026
1e1fe38
macvlan: fix error recovery in macvlan_common_newlink()
edumazet Jan 29, 2026
41ade65
net: don't touch dev->stats in BPF redirect paths
kuba-moo Jan 30, 2026
b2c1509
tipc: use kfree_sensitive() for session key material
hodgesds Jan 31, 2026
6a3b4b7
net: ethernet: adi: adin1110: Check return value of devm_gpiod_get_op…
Feb 2, 2026
9df94d6
net: gro: fix outer network offset
Feb 2, 2026
a84860f
drm/mgag200: fix mgag200_bmc_stop_scanout()
jacob-keller Feb 3, 2026
f8d2ad2
hwmon: (occ) Mark occ_init_attribute() as __printf
arndb Feb 3, 2026
5e000c4
netfilter: nf_tables: fix inverted genmask check in nft_map_catchall_…
andrew-aisi Feb 4, 2026
78a846e
ipv6: Fix ECMP sibling count mismatch when clearing RTF_ADDRCONF
Feb 4, 2026
822c194
ASoC: amd: fix memory leak in acp3x pdm dma ops
chrisbainbridge Feb 2, 2026
072853d
btrfs: fix racy bitfield write in btrfs_clear_space_info_full()
boryas Oct 2, 2025
49cc0c9
gve: Correct ethtool rx_dropped calculation
ffyuanda Feb 2, 2026
dc54c13
spi: tegra210-quad: Return IRQ_HANDLED when timeout already processed…
leitao Jan 26, 2026
be958ae
spi: tegra210-quad: Move curr_xfer read inside spinlock
leitao Jan 26, 2026
450cf51
spi: tegra210-quad: Protect curr_xfer assignment in tegra_qspi_setup_…
leitao Jan 26, 2026
d32c4e7
spi: tegra210-quad: Protect curr_xfer in tegra_qspi_combined_seq_xfer
leitao Jan 26, 2026
6bd9e0c
spi: tegra210-quad: Protect curr_xfer clearing in tegra_qspi_non_comb…
leitao Jan 26, 2026
1facde4
spi: tegra: Fix a memory leak in tegra_slink_probe()
outman119 Feb 2, 2026
d873640
spi: tegra114: Preserve SPI mode bits in def_command1_reg
Feb 4, 2026
8651159
ALSA: hda/realtek: Really fix headset mic for TongFang X6AR55xU.
tuxedo-wse Jan 23, 2026
519a4fb
Linux 6.6.124
gregkh Feb 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 6
PATCHLEVEL = 6
SUBLEVEL = 123
SUBLEVEL = 124
EXTRAVERSION =
NAME = Pinguïn Aangedreven

Expand Down
5 changes: 4 additions & 1 deletion arch/arm/include/asm/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@ static inline void *memset32(uint32_t *p, uint32_t v, __kernel_size_t n)
extern void *__memset64(uint64_t *, uint32_t low, __kernel_size_t, uint32_t hi);
static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n)
{
return __memset64(p, v, n * 8, v >> 32);
if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
return __memset64(p, v, n * 8, v >> 32);
else
return __memset64(p, v >> 32, n * 8, v);
}

/*
Expand Down
5 changes: 5 additions & 0 deletions arch/loongarch/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -534,10 +534,15 @@ asmlinkage void noinstr do_fpe(struct pt_regs *regs, unsigned long fcsr)
asmlinkage void noinstr do_ade(struct pt_regs *regs)
{
irqentry_state_t state = irqentry_enter(regs);
unsigned int esubcode = FIELD_GET(CSR_ESTAT_ESUBCODE, regs->csr_estat);

if ((esubcode == EXSUBCODE_ADEM) && fixup_exception(regs))
goto out;

die_if_kernel("Kernel ade access", regs);
force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)regs->csr_badvaddr);

out:
irqentry_exit(regs, state);
}

Expand Down
8 changes: 4 additions & 4 deletions arch/loongarch/mm/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ void cpu_cache_init(void)

static const pgprot_t protection_map[16] = {
[VM_NONE] = __pgprot(_CACHE_CC | _PAGE_USER |
_PAGE_PROTNONE | _PAGE_NO_EXEC |
_PAGE_NO_READ),
_PAGE_NO_EXEC | _PAGE_NO_READ |
(_PAGE_PROTNONE ? : _PAGE_PRESENT)),
[VM_READ] = __pgprot(_CACHE_CC | _PAGE_VALID |
_PAGE_USER | _PAGE_PRESENT |
_PAGE_NO_EXEC),
Expand All @@ -201,8 +201,8 @@ static const pgprot_t protection_map[16] = {
[VM_EXEC | VM_WRITE | VM_READ] = __pgprot(_CACHE_CC | _PAGE_VALID |
_PAGE_USER | _PAGE_PRESENT),
[VM_SHARED] = __pgprot(_CACHE_CC | _PAGE_USER |
_PAGE_PROTNONE | _PAGE_NO_EXEC |
_PAGE_NO_READ),
_PAGE_NO_EXEC | _PAGE_NO_READ |
(_PAGE_PROTNONE ? : _PAGE_PRESENT)),
[VM_SHARED | VM_READ] = __pgprot(_CACHE_CC | _PAGE_VALID |
_PAGE_USER | _PAGE_PRESENT |
_PAGE_NO_EXEC),
Expand Down
7 changes: 4 additions & 3 deletions arch/x86/include/asm/kfence.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)
{
unsigned int level;
pte_t *pte = lookup_address(addr, &level);
pteval_t val;
pteval_t val, new;

if (WARN_ON(!pte || level != PG_LEVEL_4K))
return false;
Expand All @@ -57,11 +57,12 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)
return true;

/*
* Otherwise, invert the entire PTE. This avoids writing out an
* Otherwise, flip the Present bit, taking care to avoid writing an
* L1TF-vulnerable PTE (not present, without the high address bits
* set).
*/
set_pte(pte, __pte(~val));
new = val ^ _PAGE_PRESENT;
set_pte(pte, __pte(flip_protnone_guard(val, new, PTE_PFN_MASK)));

/*
* If the page was protected (non-present) and we're making it
Expand Down
2 changes: 1 addition & 1 deletion block/bfq-cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ static void bfqg_stats_add_aux(struct bfqg_stats *to, struct bfqg_stats *from)
blkg_rwstat_add_aux(&to->merged, &from->merged);
blkg_rwstat_add_aux(&to->service_time, &from->service_time);
blkg_rwstat_add_aux(&to->wait_time, &from->wait_time);
bfq_stat_add_aux(&from->time, &from->time);
bfq_stat_add_aux(&to->time, &from->time);
bfq_stat_add_aux(&to->avg_queue_size_sum, &from->avg_queue_size_sum);
bfq_stat_add_aux(&to->avg_queue_size_samples,
&from->avg_queue_size_samples);
Expand Down
5 changes: 3 additions & 2 deletions drivers/android/binder.c
Original file line number Diff line number Diff line change
Expand Up @@ -3663,8 +3663,9 @@ static void binder_transaction(struct binder_proc *proc,
return;

err_dead_proc_or_thread:
binder_txn_error("%d:%d dead process or thread\n",
thread->pid, proc->pid);
binder_txn_error("%d:%d %s process or thread\n",
proc->pid, thread->pid,
return_error == BR_FROZEN_REPLY ? "frozen" : "dead");
return_error_line = __LINE__;
binder_dequeue_work(proc, tcomplete);
err_translate_failed:
Expand Down
8 changes: 4 additions & 4 deletions drivers/android/binderfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,8 @@ static int binderfs_binder_device_create(struct inode *ref_inode,
mutex_lock(&binderfs_minors_mutex);
if (++info->device_count <= info->mount_opts.max)
minor = ida_alloc_max(&binderfs_minors,
use_reserve ? BINDERFS_MAX_MINOR :
BINDERFS_MAX_MINOR_CAPPED,
use_reserve ? BINDERFS_MAX_MINOR - 1 :
BINDERFS_MAX_MINOR_CAPPED - 1,
GFP_KERNEL);
else
minor = -ENOSPC;
Expand Down Expand Up @@ -421,8 +421,8 @@ static int binderfs_binder_ctl_create(struct super_block *sb)
/* Reserve a new minor number for the new device. */
mutex_lock(&binderfs_minors_mutex);
minor = ida_alloc_max(&binderfs_minors,
use_reserve ? BINDERFS_MAX_MINOR :
BINDERFS_MAX_MINOR_CAPPED,
use_reserve ? BINDERFS_MAX_MINOR - 1 :
BINDERFS_MAX_MINOR_CAPPED - 1,
GFP_KERNEL);
mutex_unlock(&binderfs_minors_mutex);
if (minor < 0) {
Expand Down
11 changes: 6 additions & 5 deletions drivers/base/regmap/regcache-maple.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,13 @@ static int regcache_maple_write(struct regmap *map, unsigned int reg,

mas_unlock(&mas);

if (ret == 0) {
kfree(lower);
kfree(upper);
if (ret) {
kfree(entry);
return ret;
}

return ret;
kfree(lower);
kfree(upper);
return 0;
}
Comment on lines -99 to 105
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): On error, regcache_maple_write() now frees only entry but still leaks lower and upper allocations.

The original code leaked entry on error; the new version fixes that but now exits early on ret != 0 after freeing only entry, so lower and upper are leaked. Please also free lower and upper before the early return, or refactor so all three allocations are always freed on both success and failure paths.


static int regcache_maple_drop(struct regmap *map, unsigned int min,
Expand Down
33 changes: 21 additions & 12 deletions drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -3495,11 +3495,29 @@ static void rbd_img_object_requests(struct rbd_img_request *img_req)
rbd_assert(!need_exclusive_lock(img_req) ||
__rbd_is_lock_owner(rbd_dev));

if (rbd_img_is_write(img_req)) {
rbd_assert(!img_req->snapc);
if (test_bit(IMG_REQ_CHILD, &img_req->flags)) {
rbd_assert(!rbd_img_is_write(img_req));
} else {
struct request *rq = blk_mq_rq_from_pdu(img_req);
u64 off = (u64)blk_rq_pos(rq) << SECTOR_SHIFT;
u64 len = blk_rq_bytes(rq);
u64 mapping_size;

down_read(&rbd_dev->header_rwsem);
img_req->snapc = ceph_get_snap_context(rbd_dev->header.snapc);
mapping_size = rbd_dev->mapping.size;
if (rbd_img_is_write(img_req)) {
rbd_assert(!img_req->snapc);
img_req->snapc =
ceph_get_snap_context(rbd_dev->header.snapc);
}
up_read(&rbd_dev->header_rwsem);

if (unlikely(off + len > mapping_size)) {
rbd_warn(rbd_dev, "beyond EOD (%llu~%llu > %llu)",
off, len, mapping_size);
img_req->pending.result = -EIO;
return;
}
}

for_each_obj_request(img_req, obj_req) {
Expand Down Expand Up @@ -4725,7 +4743,6 @@ static void rbd_queue_workfn(struct work_struct *work)
struct request *rq = blk_mq_rq_from_pdu(img_request);
u64 offset = (u64)blk_rq_pos(rq) << SECTOR_SHIFT;
u64 length = blk_rq_bytes(rq);
u64 mapping_size;
int result;

/* Ignore/skip any zero-length requests */
Expand All @@ -4738,17 +4755,9 @@ static void rbd_queue_workfn(struct work_struct *work)
blk_mq_start_request(rq);

down_read(&rbd_dev->header_rwsem);
mapping_size = rbd_dev->mapping.size;
rbd_img_capture_header(img_request);
up_read(&rbd_dev->header_rwsem);

if (offset + length > mapping_size) {
rbd_warn(rbd_dev, "beyond EOD (%llu~%llu > %llu)", offset,
length, mapping_size);
result = -EIO;
goto err_img_request;
}

dout("%s rbd_dev %p img_req %p %s %llu~%llu\n", __func__, rbd_dev,
img_request, obj_op_name(op_type), offset, length);

Expand Down
30 changes: 27 additions & 3 deletions drivers/block/ublk_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1050,13 +1050,21 @@ static inline bool ubq_daemon_is_dying(struct ublk_queue *ubq)
return ubq->ubq_daemon->flags & PF_EXITING;
}

static void ublk_end_request(struct request *req, blk_status_t error)
{
local_bh_disable();
blk_mq_end_request(req, error);
local_bh_enable();
}

/* todo: handle partial completion */
static inline void __ublk_complete_rq(struct request *req)
{
struct ublk_queue *ubq = req->mq_hctx->driver_data;
struct ublk_io *io = &ubq->ios[req->tag];
unsigned int unmapped_bytes;
blk_status_t res = BLK_STS_OK;
bool requeue;

/* called from ublk_abort_queue() code path */
if (io->flags & UBLK_IO_FLAG_ABORTED) {
Expand Down Expand Up @@ -1094,14 +1102,30 @@ static inline void __ublk_complete_rq(struct request *req)
if (unlikely(unmapped_bytes < io->res))
io->res = unmapped_bytes;

if (blk_update_request(req, BLK_STS_OK, io->res))
/*
* Run bio->bi_end_io() with softirqs disabled. If the final fput
* happens off this path, then that will prevent ublk's blkdev_release()
* from being called on current's task work, see fput() implementation.
*
* Otherwise, ublk server may not provide forward progress in case of
* reading the partition table from bdev_open() with disk->open_mutex
* held, and causes dead lock as we could already be holding
* disk->open_mutex here.
*
* Preferably we would not be doing IO with a mutex held that is also
* used for release, but this work-around will suffice for now.
*/
local_bh_disable();
requeue = blk_update_request(req, BLK_STS_OK, io->res);
local_bh_enable();
if (requeue)
blk_mq_requeue_request(req, true);
else
__blk_mq_end_request(req, BLK_STS_OK);

return;
exit:
blk_mq_end_request(req, res);
ublk_end_request(req, res);
}

static void ublk_complete_rq(struct kref *ref)
Expand Down Expand Up @@ -1160,7 +1184,7 @@ static inline void __ublk_abort_rq(struct ublk_queue *ubq,
if (ublk_queue_can_use_recovery(ubq))
blk_mq_requeue_request(rq, false);
else
blk_mq_end_request(rq, BLK_STS_IOERR);
ublk_end_request(rq, BLK_STS_IOERR);

mod_delayed_work(system_wq, &ubq->dev->monitor_work, 0);
}
Expand Down
3 changes: 0 additions & 3 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -2058,9 +2058,6 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
return -ENODEV;
}

if (amdgpu_aspm == -1 && !pcie_aspm_enabled(pdev))
amdgpu_aspm = 0;

if (amdgpu_virtual_display ||
amdgpu_device_asic_has_dc_support(flags & AMD_ASIC_MASK))
supports_atomic = true;
Expand Down
31 changes: 12 additions & 19 deletions drivers/gpu/drm/mgag200/mgag200_bmc.c
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
// SPDX-License-Identifier: GPL-2.0-only

#include <linux/delay.h>
#include <linux/iopoll.h>

#include "mgag200_drv.h"

void mgag200_bmc_disable_vidrst(struct mga_device *mdev)
{
u8 tmp;
int iter_max;
int ret;

/*
* 1 - The first step is to inform the BMC of an upcoming mode
Expand Down Expand Up @@ -37,30 +38,22 @@ void mgag200_bmc_disable_vidrst(struct mga_device *mdev)

/*
* 3a- The third step is to verify if there is an active scan.
* We are waiting for a 0 on remhsyncsts <XSPAREREG<0>).
* We are waiting for a 0 on remhsyncsts (<XSPAREREG<0>).
*/
iter_max = 300;
while (!(tmp & 0x1) && iter_max) {
WREG8(DAC_INDEX, MGA1064_SPAREREG);
tmp = RREG8(DAC_DATA);
udelay(1000);
iter_max--;
}
ret = read_poll_timeout(RREG_DAC, tmp, !(tmp & 0x1),
1000, 300000, false,
MGA1064_SPAREREG);
if (ret == -ETIMEDOUT)
return;

/*
* 3b- This step occurs only if the remove is actually
* 3b- This step occurs only if the remote BMC is actually
* scanning. We are waiting for the end of the frame which is
* a 1 on remvsyncsts (XSPAREREG<1>)
*/
if (iter_max) {
iter_max = 300;
while ((tmp & 0x2) && iter_max) {
WREG8(DAC_INDEX, MGA1064_SPAREREG);
tmp = RREG8(DAC_DATA);
udelay(1000);
iter_max--;
}
}
(void)read_poll_timeout(RREG_DAC, tmp, (tmp & 0x2),
1000, 300000, false,
MGA1064_SPAREREG);
}

void mgag200_bmc_enable_vidrst(struct mga_device *mdev)
Expand Down
6 changes: 6 additions & 0 deletions drivers/gpu/drm/mgag200/mgag200_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,12 @@
#define DAC_INDEX 0x3c00
#define DAC_DATA 0x3c0a

#define RREG_DAC(reg) \
({ \
WREG8(DAC_INDEX, reg); \
RREG8(DAC_DATA); \
}) \

#define WREG_DAC(reg, v) \
do { \
WREG8(DAC_INDEX, reg); \
Expand Down
4 changes: 4 additions & 0 deletions drivers/hid/hid-ids.h
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,7 @@
#define USB_DEVICE_ID_CHICONY_ACER_SWITCH12 0x1421
#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA 0xb824
#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA2 0xb82c
#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA3 0xb882

#define USB_VENDOR_ID_CHUNGHWAT 0x2247
#define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH 0x0001
Expand Down Expand Up @@ -428,6 +429,9 @@
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002 0xc002

#define USB_VENDOR_ID_EDIFIER 0x2d99
#define USB_DEVICE_ID_EDIFIER_QR30 0xa101 /* EDIFIER Hal0 2.0 SE */

#define USB_VENDOR_ID_ELAN 0x04f3
#define USB_DEVICE_ID_TOSHIBA_CLICK_L9W 0x0401
#define USB_DEVICE_ID_HP_X2 0x074d
Expand Down
1 change: 1 addition & 0 deletions drivers/hid/hid-multitouch.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ static const struct mt_class mt_classes[] = {
{ .name = MT_CLS_VTL,
.quirks = MT_QUIRK_ALWAYS_VALID |
MT_QUIRK_CONTACT_CNT_ACCURATE |
MT_QUIRK_STICKY_FINGERS |
MT_QUIRK_FORCE_GET_FEATURE,
},
{ .name = MT_CLS_GOOGLE,
Expand Down
5 changes: 5 additions & 0 deletions drivers/hid/hid-playstation.c
Original file line number Diff line number Diff line change
Expand Up @@ -711,11 +711,16 @@ static struct input_dev *ps_gamepad_create(struct hid_device *hdev,
if (IS_ERR(gamepad))
return ERR_CAST(gamepad);

/* Set initial resting state for joysticks to 128 (center) */
input_set_abs_params(gamepad, ABS_X, 0, 255, 0, 0);
gamepad->absinfo[ABS_X].value = 128;
input_set_abs_params(gamepad, ABS_Y, 0, 255, 0, 0);
gamepad->absinfo[ABS_Y].value = 128;
input_set_abs_params(gamepad, ABS_Z, 0, 255, 0, 0);
input_set_abs_params(gamepad, ABS_RX, 0, 255, 0, 0);
gamepad->absinfo[ABS_RX].value = 128;
input_set_abs_params(gamepad, ABS_RY, 0, 255, 0, 0);
gamepad->absinfo[ABS_RY].value = 128;
input_set_abs_params(gamepad, ABS_RZ, 0, 255, 0, 0);

input_set_abs_params(gamepad, ABS_HAT0X, -1, 1, 0, 0);
Expand Down
Loading
Loading