Skip to content

Commit 22a32b0

Browse files
committed
Merge 4.14.187 into kernel.lnx.4.14.r4-rel
Changes in 4.14.187: (78 commits) scsi: scsi_devinfo: handle non-terminated strings net: be more gentle about silly gso requests coming from user block/bio-integrity: don't free 'buf' if bio_integrity_add_page() failed net: sched: export __netdev_watchdog_up() fix a braino in "sparc32: fix register window handling in genregs32_[gs]et()" apparmor: don't try to replace stale label in ptraceme check ibmveth: Fix max MTU limit mld: fix memory leak in ipv6_mc_destroy_dev() net: bridge: enfore alignment for ethernet address net: fix memleak in register_netdevice() net: usb: ax88179_178a: fix packet alignment padding rocker: fix incorrect error handling in dma_rings_init rxrpc: Fix notification call on completion of discarded calls sctp: Don't advertise IPv4 addresses if ipv6only is set on the socket tcp: grow window for OOO packets only for SACK flows tg3: driver sleeps indefinitely when EEH errors exceed eeh_max_freezes ip_tunnel: fix use-after-free in ip_tunnel_lookup() tcp_cubic: fix spurious HYSTART_DELAY exit upon drop in min RTT ip6_gre: fix use-after-free in ip6gre_tunnel_lookup() net: Fix the arp error in some cases net: Do not clear the sock TX queue in sk_set_socket() net: core: reduce recursion limit value USB: ohci-sm501: Add missed iounmap() in remove usb: dwc2: Postponed gadget registration to the udc class driver usb: add USB_QUIRK_DELAY_INIT for Logitech C922 USB: ehci: reopen solution for Synopsys HC bug usb: host: xhci-mtk: avoid runtime suspend when removing hcd usb: host: ehci-exynos: Fix error check in exynos_ehci_probe() ALSA: usb-audio: add quirk for Denon DCD-1500RE xhci: Fix incorrect EP_STATE_MASK xhci: Fix enumeration issue when setting max packet size for FS devices. cdc-acm: Add DISABLE_ECHO quirk for Microchip/SMSC chip loop: replace kill_bdev with invalidate_bdev ALSA: usb-audio: uac1: Invalidate ctl on interrupt ALSA: usb-audio: Clean up mixer element list traverse ALSA: usb-audio: Fix OOB access of mixer element list xhci: Poll for U0 after disabling USB2 LPM cifs/smb3: Fix data inconsistent when punch hole cifs/smb3: Fix data inconsistent when zero file range efi/esrt: Fix reference count leak in esre_create_sysfs_entry. ARM: dts: NSP: Correct FA2 mailbox node rxrpc: Fix handling of rwind from an ACK packet RDMA/cma: Protect bind_list and listen_list while finding matching cm id ASoC: rockchip: Fix a reference count leak. RDMA/mad: Fix possible memory leak in ib_mad_post_receive_mads() net: qed: fix left elements count calculation net: qed: fix NVMe login fails over VFs net: qed: fix excessive QM ILT lines consumption ARM: imx5: add missing put_device() call in imx_suspend_alloc_ocram() usb: gadget: udc: Potential Oops in error handling code netfilter: ipset: fix unaligned atomic access net: bcmgenet: use hardware padding of runt frames sched/core: Fix PI boosting between RT and DEADLINE tasks ata/libata: Fix usage of page address by page_address in ata_scsi_mode_select_xlat function net: alx: fix race condition in alx_remove s390/ptrace: fix setting syscall number kbuild: improve cc-option to clean up all temporary files blktrace: break out of blktrace setup on concurrent calls ALSA: hda: Add NVIDIA codec IDs 9a & 9d through a0 to patch table ACPI: sysfs: Fix pm_profile_attr type KVM: X86: Fix MSR range of APIC registers in X2APIC mode KVM: nVMX: Plumb L2 GPA through to PML emulation btrfs: fix failure of RWF_NOWAIT write into prealloc extent beyond eof mm/slab: use memzero_explicit() in kzfree() ocfs2: load global_inode_alloc ocfs2: fix value of OCFS2_INVALID_SLOT ocfs2: fix panic on nfs server over ocfs2 arm64: perf: Report the PC value in REGS_ABI_32 mode tracing: Fix event trigger to accept redundant spaces drm/radeon: fix fb_div check in ni_init_smc_spll_table() Staging: rtl8723bs: prevent buffer overflow in update_sta_support_rate() sunrpc: fixed rollback in rpc_gssd_dummy_populate() SUNRPC: Properly set the @Subbuf parameter of xdr_buf_subsegment() pNFS/flexfiles: Fix list corruption if the mirror count changes NFSv4 fix CLOSE not waiting for direct IO compeletion xfs: add agf freeblocks verify in xfs_agf_verify Revert "tty: hvc: Fix data abort due to race in hvc_open" Linux 4.14.187 Signed-off-by: Nathan Chancellor <[email protected]>
2 parents fdb36a1 + 4139fb0 commit 22a32b0

Some content is hidden

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

86 files changed

+431
-181
lines changed

Diff for: Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 4
33
PATCHLEVEL = 14
4-
SUBLEVEL = 186
4+
SUBLEVEL = 187
55
EXTRAVERSION =
66
NAME = Petit Gorille
77

Diff for: arch/arm/boot/dts/bcm-nsp.dtsi

+3-3
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,10 @@
249249
status = "disabled";
250250
};
251251

252-
mailbox: mailbox@25000 {
252+
mailbox: mailbox@25c00 {
253253
compatible = "brcm,iproc-fa2-mbox";
254-
reg = <0x25000 0x445>;
255-
interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
254+
reg = <0x25c00 0x400>;
255+
interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>;
256256
#mbox-cells = <1>;
257257
brcm,rx-status-len = <32>;
258258
brcm,use-bcm-hdr;

Diff for: arch/arm/mach-imx/pm-imx5.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -301,14 +301,14 @@ static int __init imx_suspend_alloc_ocram(
301301
if (!ocram_pool) {
302302
pr_warn("%s: ocram pool unavailable!\n", __func__);
303303
ret = -ENODEV;
304-
goto put_node;
304+
goto put_device;
305305
}
306306

307307
ocram_base = gen_pool_alloc(ocram_pool, size);
308308
if (!ocram_base) {
309309
pr_warn("%s: unable to alloc ocram!\n", __func__);
310310
ret = -ENOMEM;
311-
goto put_node;
311+
goto put_device;
312312
}
313313

314314
phys = gen_pool_virt_to_phys(ocram_pool, ocram_base);
@@ -318,6 +318,8 @@ static int __init imx_suspend_alloc_ocram(
318318
if (virt_out)
319319
*virt_out = virt;
320320

321+
put_device:
322+
put_device(&pdev->dev);
321323
put_node:
322324
of_node_put(node);
323325

Diff for: arch/arm64/kernel/perf_regs.c

+22-3
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,34 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
1515
return 0;
1616

1717
/*
18-
* Compat (i.e. 32 bit) mode:
19-
* - PC has been set in the pt_regs struct in kernel_entry,
20-
* - Handle SP and LR here.
18+
* Our handling of compat tasks (PERF_SAMPLE_REGS_ABI_32) is weird, but
19+
* we're stuck with it for ABI compatability reasons.
20+
*
21+
* For a 32-bit consumer inspecting a 32-bit task, then it will look at
22+
* the first 16 registers (see arch/arm/include/uapi/asm/perf_regs.h).
23+
* These correspond directly to a prefix of the registers saved in our
24+
* 'struct pt_regs', with the exception of the PC, so we copy that down
25+
* (x15 corresponds to SP_hyp in the architecture).
26+
*
27+
* So far, so good.
28+
*
29+
* The oddity arises when a 64-bit consumer looks at a 32-bit task and
30+
* asks for registers beyond PERF_REG_ARM_MAX. In this case, we return
31+
* SP_usr, LR_usr and PC in the positions where the AArch64 SP, LR and
32+
* PC registers would normally live. The initial idea was to allow a
33+
* 64-bit unwinder to unwind a 32-bit task and, although it's not clear
34+
* how well that works in practice, somebody might be relying on it.
35+
*
36+
* At the time we make a sample, we don't know whether the consumer is
37+
* 32-bit or 64-bit, so we have to cater for both possibilities.
2138
*/
2239
if (compat_user_mode(regs)) {
2340
if ((u32)idx == PERF_REG_ARM64_SP)
2441
return regs->compat_sp;
2542
if ((u32)idx == PERF_REG_ARM64_LR)
2643
return regs->compat_lr;
44+
if (idx == 15)
45+
return regs->pc;
2746
}
2847

2948
if ((u32)idx == PERF_REG_ARM64_SP)

Diff for: arch/s390/kernel/ptrace.c

+30-1
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,25 @@ static inline void __poke_user_per(struct task_struct *child,
322322
child->thread.per_user.end = data;
323323
}
324324

325+
static void fixup_int_code(struct task_struct *child, addr_t data)
326+
{
327+
struct pt_regs *regs = task_pt_regs(child);
328+
int ilc = regs->int_code >> 16;
329+
u16 insn;
330+
331+
if (ilc > 6)
332+
return;
333+
334+
if (ptrace_access_vm(child, regs->psw.addr - (regs->int_code >> 16),
335+
&insn, sizeof(insn), FOLL_FORCE) != sizeof(insn))
336+
return;
337+
338+
/* double check that tracee stopped on svc instruction */
339+
if ((insn >> 8) != 0xa)
340+
return;
341+
342+
regs->int_code = 0x20000 | (data & 0xffff);
343+
}
325344
/*
326345
* Write a word to the user area of a process at location addr. This
327346
* operation does have an additional problem compared to peek_user.
@@ -333,7 +352,9 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
333352
struct user *dummy = NULL;
334353
addr_t offset;
335354

355+
336356
if (addr < (addr_t) &dummy->regs.acrs) {
357+
struct pt_regs *regs = task_pt_regs(child);
337358
/*
338359
* psw and gprs are stored on the stack
339360
*/
@@ -351,7 +372,11 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
351372
/* Invalid addressing mode bits */
352373
return -EINVAL;
353374
}
354-
*(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data;
375+
376+
if (test_pt_regs_flag(regs, PIF_SYSCALL) &&
377+
addr == offsetof(struct user, regs.gprs[2]))
378+
fixup_int_code(child, data);
379+
*(addr_t *)((addr_t) &regs->psw + addr) = data;
355380

356381
} else if (addr < (addr_t) (&dummy->regs.orig_gpr2)) {
357382
/*
@@ -717,6 +742,10 @@ static int __poke_user_compat(struct task_struct *child,
717742
regs->psw.mask = (regs->psw.mask & ~PSW_MASK_BA) |
718743
(__u64)(tmp & PSW32_ADDR_AMODE);
719744
} else {
745+
746+
if (test_pt_regs_flag(regs, PIF_SYSCALL) &&
747+
addr == offsetof(struct compat_user, regs.gprs[2]))
748+
fixup_int_code(child, data);
720749
/* gpr 0-15 */
721750
*(__u32*)((addr_t) &regs->psw + addr*2 + 4) = tmp;
722751
}

Diff for: arch/sparc/kernel/ptrace_32.c

+7-2
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,17 @@ static int genregs32_set(struct task_struct *target,
168168
if (ret || !count)
169169
return ret;
170170
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
171-
&regs->y,
171+
&regs->npc,
172172
34 * sizeof(u32), 35 * sizeof(u32));
173173
if (ret || !count)
174174
return ret;
175+
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
176+
&regs->y,
177+
35 * sizeof(u32), 36 * sizeof(u32));
178+
if (ret || !count)
179+
return ret;
175180
return user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
176-
35 * sizeof(u32), 38 * sizeof(u32));
181+
36 * sizeof(u32), 38 * sizeof(u32));
177182
}
178183

179184
static int fpregs32_get(struct task_struct *target,

Diff for: arch/x86/include/asm/kvm_host.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -1060,7 +1060,7 @@ struct kvm_x86_ops {
10601060
void (*enable_log_dirty_pt_masked)(struct kvm *kvm,
10611061
struct kvm_memory_slot *slot,
10621062
gfn_t offset, unsigned long mask);
1063-
int (*write_log_dirty)(struct kvm_vcpu *vcpu);
1063+
int (*write_log_dirty)(struct kvm_vcpu *vcpu, gpa_t l2_gpa);
10641064

10651065
/* pmu operations of sub-arch */
10661066
const struct kvm_pmu_ops *pmu_ops;

Diff for: arch/x86/kvm/mmu.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1713,10 +1713,10 @@ void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm,
17131713
* Emulate arch specific page modification logging for the
17141714
* nested hypervisor
17151715
*/
1716-
int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu)
1716+
int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu, gpa_t l2_gpa)
17171717
{
17181718
if (kvm_x86_ops->write_log_dirty)
1719-
return kvm_x86_ops->write_log_dirty(vcpu);
1719+
return kvm_x86_ops->write_log_dirty(vcpu, l2_gpa);
17201720

17211721
return 0;
17221722
}

Diff for: arch/x86/kvm/mmu.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ void kvm_mmu_gfn_disallow_lpage(struct kvm_memory_slot *slot, gfn_t gfn);
194194
void kvm_mmu_gfn_allow_lpage(struct kvm_memory_slot *slot, gfn_t gfn);
195195
bool kvm_mmu_slot_gfn_write_protect(struct kvm *kvm,
196196
struct kvm_memory_slot *slot, u64 gfn);
197-
int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu);
197+
int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu, gpa_t l2_gpa);
198198

199199
int kvm_mmu_post_init_vm(struct kvm *kvm);
200200
void kvm_mmu_pre_destroy_vm(struct kvm *kvm);

Diff for: arch/x86/kvm/paging_tmpl.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ static inline unsigned FNAME(gpte_access)(struct kvm_vcpu *vcpu, u64 gpte)
202202
static int FNAME(update_accessed_dirty_bits)(struct kvm_vcpu *vcpu,
203203
struct kvm_mmu *mmu,
204204
struct guest_walker *walker,
205-
int write_fault)
205+
gpa_t addr, int write_fault)
206206
{
207207
unsigned level, index;
208208
pt_element_t pte, orig_pte;
@@ -227,7 +227,7 @@ static int FNAME(update_accessed_dirty_bits)(struct kvm_vcpu *vcpu,
227227
!(pte & PT_GUEST_DIRTY_MASK)) {
228228
trace_kvm_mmu_set_dirty_bit(table_gfn, index, sizeof(pte));
229229
#if PTTYPE == PTTYPE_EPT
230-
if (kvm_arch_write_log_dirty(vcpu))
230+
if (kvm_arch_write_log_dirty(vcpu, addr))
231231
return -EINVAL;
232232
#endif
233233
pte |= PT_GUEST_DIRTY_MASK;
@@ -424,7 +424,8 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker,
424424
(PT_GUEST_DIRTY_SHIFT - PT_GUEST_ACCESSED_SHIFT);
425425

426426
if (unlikely(!accessed_dirty)) {
427-
ret = FNAME(update_accessed_dirty_bits)(vcpu, mmu, walker, write_fault);
427+
ret = FNAME(update_accessed_dirty_bits)(vcpu, mmu, walker,
428+
addr, write_fault);
428429
if (unlikely(ret < 0))
429430
goto error;
430431
else if (ret)

Diff for: arch/x86/kvm/vmx.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -12462,11 +12462,10 @@ static void vmx_flush_log_dirty(struct kvm *kvm)
1246212462
kvm_flush_pml_buffers(kvm);
1246312463
}
1246412464

12465-
static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu)
12465+
static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu, gpa_t gpa)
1246612466
{
1246712467
struct vmcs12 *vmcs12;
1246812468
struct vcpu_vmx *vmx = to_vmx(vcpu);
12469-
gpa_t gpa;
1247012469
struct page *page = NULL;
1247112470
u64 *pml_address;
1247212471

@@ -12487,7 +12486,7 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu)
1248712486
return 1;
1248812487
}
1248912488

12490-
gpa = vmcs_read64(GUEST_PHYSICAL_ADDRESS) & ~0xFFFull;
12489+
gpa &= ~0xFFFull;
1249112490

1249212491
page = kvm_vcpu_gpa_to_page(vcpu, vmcs12->pml_address);
1249312492
if (is_error_page(page))

Diff for: arch/x86/kvm/x86.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -2344,7 +2344,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
23442344
return kvm_mtrr_set_msr(vcpu, msr, data);
23452345
case MSR_IA32_APICBASE:
23462346
return kvm_set_apic_base(vcpu, msr_info);
2347-
case APIC_BASE_MSR ... APIC_BASE_MSR + 0x3ff:
2347+
case APIC_BASE_MSR ... APIC_BASE_MSR + 0xff:
23482348
return kvm_x2apic_msr_write(vcpu, msr, data);
23492349
case MSR_IA32_TSCDEADLINE:
23502350
kvm_set_lapic_tscdeadline_msr(vcpu, data);
@@ -2629,7 +2629,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
26292629
case MSR_IA32_APICBASE:
26302630
msr_info->data = kvm_get_apic_base(vcpu);
26312631
break;
2632-
case APIC_BASE_MSR ... APIC_BASE_MSR + 0x3ff:
2632+
case APIC_BASE_MSR ... APIC_BASE_MSR + 0xff:
26332633
return kvm_x2apic_msr_read(vcpu, msr_info->index, &msr_info->data);
26342634
break;
26352635
case MSR_IA32_TSCDEADLINE:

Diff for: block/bio-integrity.c

-1
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,6 @@ bool bio_integrity_prep(struct bio *bio)
315315

316316
if (ret == 0) {
317317
printk(KERN_ERR "could not attach integrity payload\n");
318-
kfree(buf);
319318
status = BLK_STS_RESOURCE;
320319
goto err_end_io;
321320
}

Diff for: drivers/acpi/sysfs.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -944,13 +944,13 @@ static void __exit interrupt_stats_exit(void)
944944
}
945945

946946
static ssize_t
947-
acpi_show_profile(struct device *dev, struct device_attribute *attr,
947+
acpi_show_profile(struct kobject *kobj, struct kobj_attribute *attr,
948948
char *buf)
949949
{
950950
return sprintf(buf, "%d\n", acpi_gbl_FADT.preferred_profile);
951951
}
952952

953-
static const struct device_attribute pm_profile_attr =
953+
static const struct kobj_attribute pm_profile_attr =
954954
__ATTR(pm_profile, S_IRUGO, acpi_show_profile, NULL);
955955

956956
static ssize_t hotplug_enabled_show(struct kobject *kobj,

Diff for: drivers/ata/libata-scsi.c

+6-3
Original file line numberDiff line numberDiff line change
@@ -3996,12 +3996,13 @@ static unsigned int ata_scsi_mode_select_xlat(struct ata_queued_cmd *qc)
39963996
{
39973997
struct scsi_cmnd *scmd = qc->scsicmd;
39983998
const u8 *cdb = scmd->cmnd;
3999-
const u8 *p;
40003999
u8 pg, spg;
40014000
unsigned six_byte, pg_len, hdr_len, bd_len;
40024001
int len;
40034002
u16 fp = (u16)-1;
40044003
u8 bp = 0xff;
4004+
u8 buffer[64];
4005+
const u8 *p = buffer;
40054006

40064007
VPRINTK("ENTER\n");
40074008

@@ -4035,12 +4036,14 @@ static unsigned int ata_scsi_mode_select_xlat(struct ata_queued_cmd *qc)
40354036
if (!scsi_sg_count(scmd) || scsi_sglist(scmd)->length < len)
40364037
goto invalid_param_len;
40374038

4038-
p = page_address(sg_page(scsi_sglist(scmd)));
4039-
40404039
/* Move past header and block descriptors. */
40414040
if (len < hdr_len)
40424041
goto invalid_param_len;
40434042

4043+
if (!sg_copy_to_buffer(scsi_sglist(scmd), scsi_sg_count(scmd),
4044+
buffer, sizeof(buffer)))
4045+
goto invalid_param_len;
4046+
40444047
if (six_byte)
40454048
bd_len = p[3];
40464049
else

Diff for: drivers/block/loop.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
11101110
if (lo->lo_offset != info->lo_offset ||
11111111
lo->lo_sizelimit != info->lo_sizelimit) {
11121112
sync_blockdev(lo->lo_device);
1113-
kill_bdev(lo->lo_device);
1113+
invalidate_bdev(lo->lo_device);
11141114
}
11151115

11161116
/* I/O need to be drained during transfer transition */
@@ -1380,12 +1380,12 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
13801380

13811381
if (lo->lo_queue->limits.logical_block_size != arg) {
13821382
sync_blockdev(lo->lo_device);
1383-
kill_bdev(lo->lo_device);
1383+
invalidate_bdev(lo->lo_device);
13841384
}
13851385

13861386
blk_mq_freeze_queue(lo->lo_queue);
13871387

1388-
/* kill_bdev should have truncated all the pages */
1388+
/* invalidate_bdev should have truncated all the pages */
13891389
if (lo->lo_queue->limits.logical_block_size != arg &&
13901390
lo->lo_device->bd_inode->i_mapping->nrpages) {
13911391
err = -EAGAIN;

Diff for: drivers/firmware/efi/esrt.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ static int esre_create_sysfs_entry(void *esre, int entry_num)
180180
rc = kobject_init_and_add(&entry->kobj, &esre1_ktype, NULL,
181181
"entry%d", entry_num);
182182
if (rc) {
183-
kfree(entry);
183+
kobject_put(&entry->kobj);
184184
return rc;
185185
}
186186
}

Diff for: drivers/gpu/drm/radeon/ni_dpm.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2126,7 +2126,7 @@ static int ni_init_smc_spll_table(struct radeon_device *rdev)
21262126
if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
21272127
ret = -EINVAL;
21282128

2129-
if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
2129+
if (fb_div & ~(SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_SHIFT))
21302130
ret = -EINVAL;
21312131

21322132
if (clk_v & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_SHIFT))

0 commit comments

Comments
 (0)