Linux 4.4.229
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE4n5dijQDou9mhzu83qZv95d3LNwFAl77n/QACgkQ3qZv95d3 LNz32RAAv97sAOnMaLii5ZgJtLGAHaAm6yCXbFzlfZLS75CBWG4Fy+4hTuDhVOBj 9rkRtpCDqzfvjmPZld9uSTyXSSxuPmKP0UpZTEC7Ctoz0wX1Q8SUNQQ+sPNj41Y0 k5L9Aqm7TTalu0LYl9i1BZtriO2SY27fhMbt0rJdw1GGJHQBsfCNQxX+LGF3RQaO itCY4pwl1AXHc/lRfybxEmdzSOGBqFrKS0Hda0cneDXNRevhS24qWDVjWgjgC6Ha kMygBTbsHqF7H+GR6gDc2SUYoFR/cA2A7T6Q9YQsTJpaTtZsIqsys1WMemh4zwed ctomUTjGPVMTsn5llPF+E7oJQh91sQ/hu666zHtn9O0jOrnBYwiwHc5kKeP/zh6f TuaBzZhz7dCxTGA8psBbOnUVjG2xhgDW5ZSlyWaADVPeXWO6aFFl71pjrlZJ1ezP eq5+BcTxFyMLfxzEUie3mwkBtSGFFnhwkmNsX0m4EgdNPmcx6s8VDrTgFcgwu+4l FK1ImqIpkiNp+OGwcp3V7mYYqvhHGBS0sQHnBFXX6Kv1Za76+oEMOl4VIWOU+SvF zyX+GuFk0lMZVabHEPvcUnzaQ8KG9YRGPjBTZoXflDZ6hpCja5nsiUKAAX1nO/7Z CRCti3fCyhDaW4bv5eKPLvlQSpI+FCW3BBusKuBJq9HbxedPPlg= =8zJW -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEJDfLduVEy2qz2d/TmXOSYMtstxYFAl78vu4ACgkQmXOSYMts txYQZhAAmtKHaupyiLyYJUJB8eeHysmk5KQBjahBBRC8n51E1EF49eK19MibStOU /g6ETKcFRUXDGt8gMu1y2KhOrB8jq5hkjbyYpgKNXx8LNgOW3ZN1cysXCYKPefEI 6JRZp8OmX7MP8H6jmzsvrxbLmaqSR2iweUQDmpEi4aC6WBVCBufhib3+Ydjo8UT8 YKOf5Y2fNncBFe3p7gg4n/eqr2V83+/Dtgp0XmLt+ehE5Tp8WMpKNjP6ddPhIHnd uAcsz/jXU24+JykgV2KfixLwkQxSf+pkppijArNYS5XLG07MjRbB9W70qH1ZqcwY ignCZNbyjI+5EDwl3wMGosbQPyxhTYO2ozmlNx+ANs7t0yjMnY9A5vT9zIPDEfKI oSPgqgVDvdhsxG/eKGAk9qo97NX1W/dzmSOSAr5ubM7QeegwpxpKZNSTazP3MIar DU9jSFIODphe+GVVwdRxAXm0X4VjfFfXIV+74uT5RQsCb0YJwTz5PHeTDkjpYTXD EqK7iOCYKrEjDZ5QKZzos/5OxG13VeuwrZ8a2BZ+5L0mVO1bM3rBG5Cgwp6fQmpU fW2/uFygWMSWZ1iQkFBSoQfyadcraQTDPg/tlL1axkvEme6DOpqQcJckHogUX+S7 bN8ayqgJIR9d1j7WhtQmPi36UzOb2kM4FnN4Ry3WrwnTlZUFFIY= =4FLF -----END PGP SIGNATURE----- Merge 4.4.229 into kernel.lnx.4.4.r39-rel Changes in 4.4.229: (135 commits) s390: fix syscall_get_error for compat processes clk: sunxi: Fix incorrect usage of round_down() i2c: piix4: Detect secondary SMBus controller on AMD AM4 chipsets clk: qcom: msm8916: Fix the address location of pll->config_reg ALSA: isa/wavefront: prevent out of bounds write in ioctl scsi: qla2xxx: Fix issue with adapter's stopping state i2c: pxa: clear all master action bits in i2c_pxa_stop_message() usblp: poison URBs upon disconnect ps3disk: use the default segment boundary vfio/pci: fix memory leaks in alloc_perm_bits() mfd: wm8994: Fix driver operation if loaded as modules scsi: lpfc: Fix lpfc_nodelist leak when processing unsolicited event nfsd: Fix svc_xprt refcnt leak when setup callback client failed powerpc/crashkernel: Take "mem=" option into account yam: fix possible memory leak in yam_init_driver mksysmap: Fix the mismatch of '.L' symbols in System.map scsi: sr: Fix sr_probe() missing deallocate of device minor scsi: ibmvscsi: Don't send host info in adapter info MAD after LPM ALSA: usb-audio: Improve frames size computation s390/qdio: put thinint indicator after early error tty: hvc: Fix data abort due to race in hvc_open staging: sm750fb: add missing case while setting FB_VISUAL i2c: pxa: fix i2c_pxa_scream_blue_murder() debug output serial: amba-pl011: Make sure we initialize the port.lock spinlock drivers: base: Fix NULL pointer exception in __platform_driver_probe() if a driver developer is foolish PCI/ASPM: Allow ASPM on links to PCIe-to-PCI/PCI-X Bridges power: supply: smb347-charger: IRQSTAT_D is volatile scsi: mpt3sas: Fix double free warnings dlm: remove BUG() before panic() clk: ti: composite: fix memory leak tty: n_gsm: Fix SOF skipping tty: n_gsm: Fix waking up upper tty layer when room available powerpc/pseries/ras: Fix FWNMI_VALID off by one powerpc/ps3: Fix kexec shutdown hang vfio-pci: Mask cap zero usb/ohci-platform: Fix a warning when hibernating USB: host: ehci-mxc: Add error handling in ehci_mxc_drv_probe() tty: n_gsm: Fix bogus i++ in gsm_data_kick clk: samsung: exynos5433: Add IGNORE_UNUSED flag to sclk_i2s1 watchdog: da9062: No need to ping manually before setting timeout usb: dwc2: gadget: move gadget resume after the core is in L0 state USB: gadget: udc: s3c2410_udc: Remove pointless NULL check in s3c2410_udc_nuke usb: gadget: lpc32xx_udc: don't dereference ep pointer before null check usb: gadget: fix potential double-free in m66592_probe. net: sunrpc: Fix off-by-one issues in 'rpc_ntop6' ASoC: fsl_asrc_dma: Fix dma_chan leak when config DMA channel failed openrisc: Fix issue with argument clobbering for clone/fork gfs2: Allow lock_nolock mount to specify jid=X scsi: iscsi: Fix reference count leak in iscsi_boot_create_kobj lib/zlib: remove outdated and incorrect pre-increment optimization include/linux/bitops.h: avoid clang shift-count-overflow warnings elfnote: mark all .note sections SHF_ALLOC selftests/net: in timestamping, strncpy needs to preserve null byte scsi: acornscsi: Fix an error handling path in acornscsi_probe() usb/xhci-plat: Set PM runtime as active on resume usb/ehci-platform: Set PM runtime as active on resume perf report: Fix NULL pointer dereference in hists__fprintf_nr_sample_events() bcache: fix potential deadlock problem in btree_gc_coalesce block: Fix use-after-free in blkdev_get() libata: Use per port sync for detach drm: encoder_slave: fix refcouting error for modules drm/dp_mst: Reformat drm_dp_check_act_status() a bit drm/qxl: Use correct notify port address when creating cursor ring selinux: fix double free ext4: fix partial cluster initialization when splitting extent drm/dp_mst: Increase ACT retry timeout to 3s sparc64: fix misuses of access_process_vm() in genregs32_[sg]et() block: nr_sects_write(): Disable preemption on seqcount write crypto: algboss - don't wait during notifier callback kprobes: Fix to protect kick_kprobe_optimizer() by kprobe_mutex powerpc/kprobes: Fixes for kprobe_lookup_name() on BE x86/kprobes: Avoid kretprobe recursion bug kretprobe: Prevent triggering kretprobe from within kprobe_flush_task e1000e: Do not wake up the system via WOL if device wakeup is disabled sched/rt, net: Use CONFIG_PREEMPTION.patch net: core: device_rename: Use rwsem instead of a seqcount net: Revert "pkt_sched: fq: use proper locking in fq_dump_stats()" scsi: scsi_devinfo: handle non-terminated strings l2tp: Allow duplicate session creation with UDP net: sched: export __netdev_watchdog_up() fix a braino in "sparc32: fix register window handling in genregs32_[gs]et()" net: fix memleak in register_netdevice() net: usb: ax88179_178a: fix packet alignment padding 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() tcp: grow window for OOO packets only for SACK flows sctp: Don't advertise IPv4 addresses if ipv6only is set on the socket 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 mld: fix memory leak in ipv6_mc_destroy_dev() 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 PCI: Disable MSI for HiSilicon Hip06/Hip07 Root Ports USB: ehci: reopen solution for Synopsys HC bug 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 ALSA: usb-audio: uac1: Invalidate ctl on interrupt ALSA: usb-audio: allow clock source validity interrupts 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. RDMA/mad: Fix possible memory leak in ib_mad_post_receive_mads() 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 sched/core: Fix PI boosting between RT and DEADLINE tasks net: alx: fix race condition in alx_remove kbuild: improve cc-option to clean up all temporary files blktrace: break out of blktrace setup on concurrent calls ACPI: sysfs: Fix pm_profile_attr type KVM: X86: Fix MSR range of APIC registers in X2APIC mode 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() 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 PCI: Disable MSI for HiSilicon Hip06/Hip07 only in Root Port mode ALSA: usb-audio: Fix invalid NULL check in snd_emuusb_set_samplerate() Linux 4.4.229 Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> Conflicts: drivers/usb/host/xhci-plat.c
This commit is contained in:
commit
f2b8d41add
134 changed files with 687 additions and 367 deletions
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
|||
VERSION = 4
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 228
|
||||
SUBLEVEL = 229
|
||||
EXTRAVERSION =
|
||||
NAME = Blurry Fish Butt
|
||||
|
||||
|
|
|
@ -301,14 +301,14 @@ static int __init imx_suspend_alloc_ocram(
|
|||
if (!ocram_pool) {
|
||||
pr_warn("%s: ocram pool unavailable!\n", __func__);
|
||||
ret = -ENODEV;
|
||||
goto put_node;
|
||||
goto put_device;
|
||||
}
|
||||
|
||||
ocram_base = gen_pool_alloc(ocram_pool, size);
|
||||
if (!ocram_base) {
|
||||
pr_warn("%s: unable to alloc ocram!\n", __func__);
|
||||
ret = -ENOMEM;
|
||||
goto put_node;
|
||||
goto put_device;
|
||||
}
|
||||
|
||||
phys = gen_pool_virt_to_phys(ocram_pool, ocram_base);
|
||||
|
@ -318,6 +318,8 @@ static int __init imx_suspend_alloc_ocram(
|
|||
if (virt_out)
|
||||
*virt_out = virt;
|
||||
|
||||
put_device:
|
||||
put_device(&pdev->dev);
|
||||
put_node:
|
||||
of_node_put(node);
|
||||
|
||||
|
|
|
@ -13,15 +13,34 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
|
|||
return 0;
|
||||
|
||||
/*
|
||||
* Compat (i.e. 32 bit) mode:
|
||||
* - PC has been set in the pt_regs struct in kernel_entry,
|
||||
* - Handle SP and LR here.
|
||||
* Our handling of compat tasks (PERF_SAMPLE_REGS_ABI_32) is weird, but
|
||||
* we're stuck with it for ABI compatability reasons.
|
||||
*
|
||||
* For a 32-bit consumer inspecting a 32-bit task, then it will look at
|
||||
* the first 16 registers (see arch/arm/include/uapi/asm/perf_regs.h).
|
||||
* These correspond directly to a prefix of the registers saved in our
|
||||
* 'struct pt_regs', with the exception of the PC, so we copy that down
|
||||
* (x15 corresponds to SP_hyp in the architecture).
|
||||
*
|
||||
* So far, so good.
|
||||
*
|
||||
* The oddity arises when a 64-bit consumer looks at a 32-bit task and
|
||||
* asks for registers beyond PERF_REG_ARM_MAX. In this case, we return
|
||||
* SP_usr, LR_usr and PC in the positions where the AArch64 SP, LR and
|
||||
* PC registers would normally live. The initial idea was to allow a
|
||||
* 64-bit unwinder to unwind a 32-bit task and, although it's not clear
|
||||
* how well that works in practice, somebody might be relying on it.
|
||||
*
|
||||
* At the time we make a sample, we don't know whether the consumer is
|
||||
* 32-bit or 64-bit, so we have to cater for both possibilities.
|
||||
*/
|
||||
if (compat_user_mode(regs)) {
|
||||
if ((u32)idx == PERF_REG_ARM64_SP)
|
||||
return regs->compat_sp;
|
||||
if ((u32)idx == PERF_REG_ARM64_LR)
|
||||
return regs->compat_lr;
|
||||
if (idx == 15)
|
||||
return regs->pc;
|
||||
}
|
||||
|
||||
if ((u32)idx == PERF_REG_ARM64_SP)
|
||||
|
|
|
@ -1092,13 +1092,13 @@ ENTRY(__sys_clone)
|
|||
l.movhi r29,hi(sys_clone)
|
||||
l.ori r29,r29,lo(sys_clone)
|
||||
l.j _fork_save_extra_regs_and_call
|
||||
l.addi r7,r1,0
|
||||
l.nop
|
||||
|
||||
ENTRY(__sys_fork)
|
||||
l.movhi r29,hi(sys_fork)
|
||||
l.ori r29,r29,lo(sys_fork)
|
||||
l.j _fork_save_extra_regs_and_call
|
||||
l.addi r3,r1,0
|
||||
l.nop
|
||||
|
||||
ENTRY(sys_rt_sigreturn)
|
||||
l.j _sys_rt_sigreturn
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/probes.h>
|
||||
#include <asm/code-patching.h>
|
||||
|
||||
|
@ -61,7 +62,7 @@ typedef ppc_opcode_t kprobe_opcode_t;
|
|||
#define kprobe_lookup_name(name, addr) \
|
||||
{ \
|
||||
char dot_name[MODULE_NAME_LEN + 1 + KSYM_NAME_LEN]; \
|
||||
char *modsym; \
|
||||
const char *modsym; \
|
||||
bool dot_appended = false; \
|
||||
if ((modsym = strchr(name, ':')) != NULL) { \
|
||||
modsym++; \
|
||||
|
|
|
@ -113,11 +113,12 @@ void machine_kexec(struct kimage *image)
|
|||
|
||||
void __init reserve_crashkernel(void)
|
||||
{
|
||||
unsigned long long crash_size, crash_base;
|
||||
unsigned long long crash_size, crash_base, total_mem_sz;
|
||||
int ret;
|
||||
|
||||
total_mem_sz = memory_limit ? memory_limit : memblock_phys_mem_size();
|
||||
/* use common parsing */
|
||||
ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),
|
||||
ret = parse_crashkernel(boot_command_line, total_mem_sz,
|
||||
&crash_size, &crash_base);
|
||||
if (ret == 0 && crash_size > 0) {
|
||||
crashk_res.start = crash_base;
|
||||
|
@ -176,6 +177,7 @@ void __init reserve_crashkernel(void)
|
|||
/* Crash kernel trumps memory limit */
|
||||
if (memory_limit && memory_limit <= crashk_res.end) {
|
||||
memory_limit = crashk_res.end + 1;
|
||||
total_mem_sz = memory_limit;
|
||||
printk("Adjusted memory limit for crashkernel, now 0x%llx\n",
|
||||
memory_limit);
|
||||
}
|
||||
|
@ -184,7 +186,7 @@ void __init reserve_crashkernel(void)
|
|||
"for crashkernel (System RAM: %ldMB)\n",
|
||||
(unsigned long)(crash_size >> 20),
|
||||
(unsigned long)(crashk_res.start >> 20),
|
||||
(unsigned long)(memblock_phys_mem_size() >> 20));
|
||||
(unsigned long)(total_mem_sz >> 20));
|
||||
|
||||
if (!memblock_is_region_memory(crashk_res.start, crash_size) ||
|
||||
memblock_reserve(crashk_res.start, crash_size)) {
|
||||
|
|
|
@ -212,13 +212,14 @@ void ps3_mm_vas_destroy(void)
|
|||
{
|
||||
int result;
|
||||
|
||||
DBG("%s:%d: map.vas_id = %llu\n", __func__, __LINE__, map.vas_id);
|
||||
|
||||
if (map.vas_id) {
|
||||
result = lv1_select_virtual_address_space(0);
|
||||
BUG_ON(result);
|
||||
result = lv1_destruct_virtual_address_space(map.vas_id);
|
||||
BUG_ON(result);
|
||||
result += lv1_destruct_virtual_address_space(map.vas_id);
|
||||
|
||||
if (result) {
|
||||
lv1_panic(0);
|
||||
}
|
||||
|
||||
map.vas_id = 0;
|
||||
}
|
||||
}
|
||||
|
@ -316,19 +317,20 @@ static void ps3_mm_region_destroy(struct mem_region *r)
|
|||
int result;
|
||||
|
||||
if (!r->destroy) {
|
||||
pr_info("%s:%d: Not destroying high region: %llxh %llxh\n",
|
||||
__func__, __LINE__, r->base, r->size);
|
||||
return;
|
||||
}
|
||||
|
||||
DBG("%s:%d: r->base = %llxh\n", __func__, __LINE__, r->base);
|
||||
|
||||
if (r->base) {
|
||||
result = lv1_release_memory(r->base);
|
||||
BUG_ON(result);
|
||||
|
||||
if (result) {
|
||||
lv1_panic(0);
|
||||
}
|
||||
|
||||
r->size = r->base = r->offset = 0;
|
||||
map.total = map.rm.size;
|
||||
}
|
||||
|
||||
ps3_mm_set_repository_highmem(NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -265,10 +265,11 @@ static irqreturn_t ras_error_interrupt(int irq, void *dev_id)
|
|||
/*
|
||||
* Some versions of FWNMI place the buffer inside the 4kB page starting at
|
||||
* 0x7000. Other versions place it inside the rtas buffer. We check both.
|
||||
* Minimum size of the buffer is 16 bytes.
|
||||
*/
|
||||
#define VALID_FWNMI_BUFFER(A) \
|
||||
((((A) >= 0x7000) && ((A) < 0x7ff0)) || \
|
||||
(((A) >= rtas.base) && ((A) < (rtas.base + rtas.size - 16))))
|
||||
((((A) >= 0x7000) && ((A) <= 0x8000 - 16)) || \
|
||||
(((A) >= rtas.base) && ((A) <= (rtas.base + rtas.size - 16))))
|
||||
|
||||
/*
|
||||
* Get the error information for errors coming through the
|
||||
|
|
|
@ -41,7 +41,17 @@ static inline void syscall_rollback(struct task_struct *task,
|
|||
static inline long syscall_get_error(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
return IS_ERR_VALUE(regs->gprs[2]) ? regs->gprs[2] : 0;
|
||||
unsigned long error = regs->gprs[2];
|
||||
#ifdef CONFIG_COMPAT
|
||||
if (test_tsk_thread_flag(task, TIF_31BIT)) {
|
||||
/*
|
||||
* Sign-extend the value so (int)-EFOO becomes (long)-EFOO
|
||||
* and will match correctly in comparisons.
|
||||
*/
|
||||
error = (long)(int)error;
|
||||
}
|
||||
#endif
|
||||
return IS_ERR_VALUE(error) ? error : 0;
|
||||
}
|
||||
|
||||
static inline long syscall_get_return_value(struct task_struct *task,
|
||||
|
|
|
@ -167,12 +167,17 @@ static int genregs32_set(struct task_struct *target,
|
|||
if (ret || !count)
|
||||
return ret;
|
||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
|
||||
®s->y,
|
||||
®s->npc,
|
||||
34 * sizeof(u32), 35 * sizeof(u32));
|
||||
if (ret || !count)
|
||||
return ret;
|
||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
|
||||
®s->y,
|
||||
35 * sizeof(u32), 36 * sizeof(u32));
|
||||
if (ret || !count)
|
||||
return ret;
|
||||
return user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
|
||||
35 * sizeof(u32), 38 * sizeof(u32));
|
||||
36 * sizeof(u32), 38 * sizeof(u32));
|
||||
}
|
||||
|
||||
static int fpregs32_get(struct task_struct *target,
|
||||
|
|
|
@ -534,13 +534,8 @@ static int genregs32_get(struct task_struct *target,
|
|||
®, sizeof(reg), 0)
|
||||
!= sizeof(reg))
|
||||
return -EFAULT;
|
||||
if (access_process_vm(target,
|
||||
(unsigned long) u,
|
||||
®, sizeof(reg), 1)
|
||||
!= sizeof(reg))
|
||||
if (put_user(reg, u++))
|
||||
return -EFAULT;
|
||||
pos++;
|
||||
u++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -639,11 +634,7 @@ static int genregs32_set(struct task_struct *target,
|
|||
}
|
||||
} else {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (access_process_vm(target,
|
||||
(unsigned long)
|
||||
u,
|
||||
®, sizeof(reg), 0)
|
||||
!= sizeof(reg))
|
||||
if (get_user(reg, u++))
|
||||
return -EFAULT;
|
||||
if (access_process_vm(target,
|
||||
(unsigned long)
|
||||
|
|
|
@ -751,6 +751,13 @@ __visible __used void *trampoline_handler(struct pt_regs *regs)
|
|||
void *frame_pointer;
|
||||
bool skipped = false;
|
||||
|
||||
/*
|
||||
* Set a dummy kprobe for avoiding kretprobe recursion.
|
||||
* Since kretprobe never run in kprobe handler, kprobe must not
|
||||
* be running at this point.
|
||||
*/
|
||||
kprobe_busy_begin();
|
||||
|
||||
INIT_HLIST_HEAD(&empty_rp);
|
||||
kretprobe_hash_lock(current, &head, &flags);
|
||||
/* fixup registers */
|
||||
|
@ -826,10 +833,9 @@ __visible __used void *trampoline_handler(struct pt_regs *regs)
|
|||
orig_ret_address = (unsigned long)ri->ret_addr;
|
||||
if (ri->rp && ri->rp->handler) {
|
||||
__this_cpu_write(current_kprobe, &ri->rp->kp);
|
||||
get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE;
|
||||
ri->ret_addr = correct_ret_addr;
|
||||
ri->rp->handler(ri, regs);
|
||||
__this_cpu_write(current_kprobe, NULL);
|
||||
__this_cpu_write(current_kprobe, &kprobe_busy);
|
||||
}
|
||||
|
||||
recycle_rp_inst(ri, &empty_rp);
|
||||
|
@ -845,6 +851,8 @@ __visible __used void *trampoline_handler(struct pt_regs *regs)
|
|||
|
||||
kretprobe_hash_unlock(current, &flags);
|
||||
|
||||
kprobe_busy_end();
|
||||
|
||||
hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
|
||||
hlist_del(&ri->hlist);
|
||||
kfree(ri);
|
||||
|
|
|
@ -2162,7 +2162,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|||
return kvm_mtrr_set_msr(vcpu, msr, data);
|
||||
case MSR_IA32_APICBASE:
|
||||
return kvm_set_apic_base(vcpu, msr_info);
|
||||
case APIC_BASE_MSR ... APIC_BASE_MSR + 0x3ff:
|
||||
case APIC_BASE_MSR ... APIC_BASE_MSR + 0xff:
|
||||
return kvm_x2apic_msr_write(vcpu, msr, data);
|
||||
case MSR_IA32_TSCDEADLINE:
|
||||
kvm_set_lapic_tscdeadline_msr(vcpu, data);
|
||||
|
@ -2432,7 +2432,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|||
case MSR_IA32_APICBASE:
|
||||
msr_info->data = kvm_get_apic_base(vcpu);
|
||||
break;
|
||||
case APIC_BASE_MSR ... APIC_BASE_MSR + 0x3ff:
|
||||
case APIC_BASE_MSR ... APIC_BASE_MSR + 0xff:
|
||||
return kvm_x2apic_msr_read(vcpu, msr_info->index, &msr_info->data);
|
||||
break;
|
||||
case MSR_IA32_TSCDEADLINE:
|
||||
|
|
|
@ -194,8 +194,6 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
|
|||
if (IS_ERR(thread))
|
||||
goto err_put_larval;
|
||||
|
||||
wait_for_completion_interruptible(&larval->completion);
|
||||
|
||||
return NOTIFY_STOP;
|
||||
|
||||
err_put_larval:
|
||||
|
|
|
@ -776,13 +776,13 @@ static void __exit interrupt_stats_exit(void)
|
|||
}
|
||||
|
||||
static ssize_t
|
||||
acpi_show_profile(struct device *dev, struct device_attribute *attr,
|
||||
acpi_show_profile(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sprintf(buf, "%d\n", acpi_gbl_FADT.preferred_profile);
|
||||
}
|
||||
|
||||
static const struct device_attribute pm_profile_attr =
|
||||
static const struct kobj_attribute pm_profile_attr =
|
||||
__ATTR(pm_profile, S_IRUGO, acpi_show_profile, NULL);
|
||||
|
||||
static ssize_t hotplug_enabled_show(struct kobject *kobj,
|
||||
|
|
|
@ -56,7 +56,6 @@
|
|||
#include <linux/workqueue.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/async.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/glob.h>
|
||||
|
@ -6222,7 +6221,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
|
|||
/* perform each probe asynchronously */
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
struct ata_port *ap = host->ports[i];
|
||||
async_schedule(async_port_probe, ap);
|
||||
ap->cookie = async_schedule(async_port_probe, ap);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -6355,11 +6354,11 @@ void ata_host_detach(struct ata_host *host)
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
/* Ensure ata_port probe has completed */
|
||||
async_synchronize_full();
|
||||
|
||||
for (i = 0; i < host->n_ports; i++)
|
||||
async_synchronize_cookie(host->ports[i]->cookie + 1);
|
||||
ata_port_detach(host->ports[i]);
|
||||
}
|
||||
|
||||
/* the host is dead now, dissociate ACPI */
|
||||
ata_acpi_dissociate(host);
|
||||
|
|
|
@ -658,6 +658,8 @@ int __init_or_module __platform_driver_probe(struct platform_driver *drv,
|
|||
/* temporary section violation during probe() */
|
||||
drv->probe = probe;
|
||||
retval = code = __platform_driver_register(drv, module);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
/*
|
||||
* Fixup that section violation, being paranoid about code scanning
|
||||
|
|
|
@ -464,7 +464,6 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev)
|
|||
blk_queue_bounce_limit(queue, BLK_BOUNCE_HIGH);
|
||||
|
||||
blk_queue_max_hw_sectors(queue, dev->bounce_size >> 9);
|
||||
blk_queue_segment_boundary(queue, -1UL);
|
||||
blk_queue_dma_alignment(queue, dev->blk_size-1);
|
||||
blk_queue_logical_block_size(queue, dev->blk_size);
|
||||
|
||||
|
|
|
@ -270,7 +270,7 @@ static struct clk_pll gpll0 = {
|
|||
.l_reg = 0x21004,
|
||||
.m_reg = 0x21008,
|
||||
.n_reg = 0x2100c,
|
||||
.config_reg = 0x21014,
|
||||
.config_reg = 0x21010,
|
||||
.mode_reg = 0x21000,
|
||||
.status_reg = 0x2101c,
|
||||
.status_bit = 17,
|
||||
|
@ -297,7 +297,7 @@ static struct clk_pll gpll1 = {
|
|||
.l_reg = 0x20004,
|
||||
.m_reg = 0x20008,
|
||||
.n_reg = 0x2000c,
|
||||
.config_reg = 0x20014,
|
||||
.config_reg = 0x20010,
|
||||
.mode_reg = 0x20000,
|
||||
.status_reg = 0x2001c,
|
||||
.status_bit = 17,
|
||||
|
@ -324,7 +324,7 @@ static struct clk_pll gpll2 = {
|
|||
.l_reg = 0x4a004,
|
||||
.m_reg = 0x4a008,
|
||||
.n_reg = 0x4a00c,
|
||||
.config_reg = 0x4a014,
|
||||
.config_reg = 0x4a010,
|
||||
.mode_reg = 0x4a000,
|
||||
.status_reg = 0x4a01c,
|
||||
.status_bit = 17,
|
||||
|
@ -351,7 +351,7 @@ static struct clk_pll bimc_pll = {
|
|||
.l_reg = 0x23004,
|
||||
.m_reg = 0x23008,
|
||||
.n_reg = 0x2300c,
|
||||
.config_reg = 0x23014,
|
||||
.config_reg = 0x23010,
|
||||
.mode_reg = 0x23000,
|
||||
.status_reg = 0x2301c,
|
||||
.status_bit = 17,
|
||||
|
|
|
@ -1708,7 +1708,8 @@ static struct samsung_gate_clock peric_gate_clks[] __initdata = {
|
|||
GATE(CLK_SCLK_PCM1, "sclk_pcm1", "sclk_pcm1_peric",
|
||||
ENABLE_SCLK_PERIC, 7, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(CLK_SCLK_I2S1, "sclk_i2s1", "sclk_i2s1_peric",
|
||||
ENABLE_SCLK_PERIC, 6, CLK_SET_RATE_PARENT, 0),
|
||||
ENABLE_SCLK_PERIC, 6,
|
||||
CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
|
||||
GATE(CLK_SCLK_SPI2, "sclk_spi2", "sclk_spi2_peric", ENABLE_SCLK_PERIC,
|
||||
5, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(CLK_SCLK_SPI1, "sclk_spi1", "sclk_spi1_peric", ENABLE_SCLK_PERIC,
|
||||
|
|
|
@ -311,7 +311,7 @@ static void sun6i_a31_get_pll1_factors(u32 *freq, u32 parent_rate,
|
|||
* Round down the frequency to the closest multiple of either
|
||||
* 6 or 16
|
||||
*/
|
||||
u32 round_freq_6 = round_down(freq_mhz, 6);
|
||||
u32 round_freq_6 = rounddown(freq_mhz, 6);
|
||||
u32 round_freq_16 = round_down(freq_mhz, 16);
|
||||
|
||||
if (round_freq_6 > round_freq_16)
|
||||
|
|
|
@ -228,6 +228,7 @@ cleanup:
|
|||
if (!cclk->comp_clks[i])
|
||||
continue;
|
||||
list_del(&cclk->comp_clks[i]->link);
|
||||
kfree(cclk->comp_clks[i]->parent_names);
|
||||
kfree(cclk->comp_clks[i]);
|
||||
}
|
||||
|
||||
|
|
|
@ -182,7 +182,7 @@ static int esre_create_sysfs_entry(void *esre, int entry_num)
|
|||
rc = kobject_init_and_add(&entry->kobj, &esre1_ktype, NULL,
|
||||
"%s", name);
|
||||
if (rc) {
|
||||
kfree(entry);
|
||||
kobject_put(&entry->kobj);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <linux/i2c.h>
|
||||
#include <drm/drm_dp_mst_helper.h>
|
||||
#include <drm/drmP.h>
|
||||
#include <linux/iopoll.h>
|
||||
|
||||
#include <drm/drm_fixed.h>
|
||||
|
||||
|
@ -2647,6 +2648,17 @@ fail:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int do_get_act_status(struct drm_dp_aux *aux)
|
||||
{
|
||||
int ret;
|
||||
u8 status;
|
||||
|
||||
ret = drm_dp_dpcd_readb(aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, &status);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_dp_check_act_status() - Check ACT handled status.
|
||||
|
@ -2656,33 +2668,29 @@ fail:
|
|||
*/
|
||||
int drm_dp_check_act_status(struct drm_dp_mst_topology_mgr *mgr)
|
||||
{
|
||||
u8 status;
|
||||
int ret;
|
||||
int count = 0;
|
||||
/*
|
||||
* There doesn't seem to be any recommended retry count or timeout in
|
||||
* the MST specification. Since some hubs have been observed to take
|
||||
* over 1 second to update their payload allocations under certain
|
||||
* conditions, we use a rather large timeout value.
|
||||
*/
|
||||
const int timeout_ms = 3000;
|
||||
int ret, status;
|
||||
|
||||
do {
|
||||
ret = drm_dp_dpcd_readb(mgr->aux, DP_PAYLOAD_TABLE_UPDATE_STATUS, &status);
|
||||
|
||||
if (ret < 0) {
|
||||
DRM_DEBUG_KMS("failed to read payload table status %d\n", ret);
|
||||
goto fail;
|
||||
ret = readx_poll_timeout(do_get_act_status, mgr->aux, status,
|
||||
status & DP_PAYLOAD_ACT_HANDLED || status < 0,
|
||||
200, timeout_ms * USEC_PER_MSEC);
|
||||
if (ret < 0 && status >= 0) {
|
||||
DRM_DEBUG_KMS("Failed to get ACT after %dms, last status: %02x\n",
|
||||
timeout_ms, status);
|
||||
return -EINVAL;
|
||||
} else if (status < 0) {
|
||||
DRM_DEBUG_KMS("Failed to read payload table status: %d\n",
|
||||
status);
|
||||
return status;
|
||||
}
|
||||
|
||||
if (status & DP_PAYLOAD_ACT_HANDLED)
|
||||
break;
|
||||
count++;
|
||||
udelay(100);
|
||||
|
||||
} while (count < 30);
|
||||
|
||||
if (!(status & DP_PAYLOAD_ACT_HANDLED)) {
|
||||
DRM_DEBUG_KMS("failed to get ACT bit %d after %d retries\n", status, count);
|
||||
ret = -EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
return 0;
|
||||
fail:
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_dp_check_act_status);
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ int drm_i2c_encoder_init(struct drm_device *dev,
|
|||
|
||||
err = encoder_drv->encoder_init(client, dev, encoder);
|
||||
if (err)
|
||||
goto fail_unregister;
|
||||
goto fail_module_put;
|
||||
|
||||
if (info->platform_data)
|
||||
encoder->slave_funcs->set_config(&encoder->base,
|
||||
|
@ -92,9 +92,10 @@ int drm_i2c_encoder_init(struct drm_device *dev,
|
|||
|
||||
return 0;
|
||||
|
||||
fail_module_put:
|
||||
module_put(module);
|
||||
fail_unregister:
|
||||
i2c_unregister_device(client);
|
||||
module_put(module);
|
||||
fail:
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -199,7 +199,7 @@ static int qxl_device_init(struct qxl_device *qdev,
|
|||
&(qdev->ram_header->cursor_ring_hdr),
|
||||
sizeof(struct qxl_command),
|
||||
QXL_CURSOR_RING_SIZE,
|
||||
qdev->io_base + QXL_IO_NOTIFY_CMD,
|
||||
qdev->io_base + QXL_IO_NOTIFY_CURSOR,
|
||||
false,
|
||||
&qdev->cursor_event);
|
||||
|
||||
|
|
|
@ -2128,7 +2128,7 @@ static int ni_init_smc_spll_table(struct radeon_device *rdev)
|
|||
if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
|
||||
ret = -EINVAL;
|
||||
|
||||
if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
|
||||
if (fb_div & ~(SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_SHIFT))
|
||||
ret = -EINVAL;
|
||||
|
||||
if (clk_v & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_SHIFT))
|
||||
|
|
|
@ -647,7 +647,8 @@ static int piix4_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|||
}
|
||||
|
||||
if (dev->vendor == PCI_VENDOR_ID_AMD &&
|
||||
dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS) {
|
||||
(dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS ||
|
||||
dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS)) {
|
||||
retval = piix4_setup_sb800(dev, id, 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -297,11 +297,10 @@ static void i2c_pxa_scream_blue_murder(struct pxa_i2c *i2c, const char *why)
|
|||
dev_err(dev, "IBMR: %08x IDBR: %08x ICR: %08x ISR: %08x\n",
|
||||
readl(_IBMR(i2c)), readl(_IDBR(i2c)), readl(_ICR(i2c)),
|
||||
readl(_ISR(i2c)));
|
||||
dev_dbg(dev, "log: ");
|
||||
dev_err(dev, "log:");
|
||||
for (i = 0; i < i2c->irqlogidx; i++)
|
||||
pr_debug("[%08x:%08x] ", i2c->isrlog[i], i2c->icrlog[i]);
|
||||
|
||||
pr_debug("\n");
|
||||
pr_cont(" [%03x:%05x]", i2c->isrlog[i], i2c->icrlog[i]);
|
||||
pr_cont("\n");
|
||||
}
|
||||
|
||||
#else /* ifdef DEBUG */
|
||||
|
@ -691,11 +690,9 @@ static inline void i2c_pxa_stop_message(struct pxa_i2c *i2c)
|
|||
{
|
||||
u32 icr;
|
||||
|
||||
/*
|
||||
* Clear the STOP and ACK flags
|
||||
*/
|
||||
/* Clear the START, STOP, ACK, TB and MA flags */
|
||||
icr = readl(_ICR(i2c));
|
||||
icr &= ~(ICR_STOP | ICR_ACKNAK);
|
||||
icr &= ~(ICR_START | ICR_STOP | ICR_ACKNAK | ICR_TB | ICR_MA);
|
||||
writel(icr, _ICR(i2c));
|
||||
}
|
||||
|
||||
|
|
|
@ -2912,6 +2912,7 @@ static int ib_mad_post_receive_mads(struct ib_mad_qp_info *qp_info,
|
|||
DMA_FROM_DEVICE);
|
||||
if (unlikely(ib_dma_mapping_error(qp_info->port_priv->device,
|
||||
sg_list.addr))) {
|
||||
kfree(mad_priv);
|
||||
ret = -ENOMEM;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1375,7 +1375,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
|
|||
if (__set_blocks(n1, n1->keys + n2->keys,
|
||||
block_bytes(b->c)) >
|
||||
btree_blocks(new_nodes[i]))
|
||||
goto out_nocoalesce;
|
||||
goto out_unlock_nocoalesce;
|
||||
|
||||
keys = n2->keys;
|
||||
/* Take the key of the node we're getting rid of */
|
||||
|
@ -1404,7 +1404,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
|
|||
|
||||
if (__bch_keylist_realloc(&keylist,
|
||||
bkey_u64s(&new_nodes[i]->key)))
|
||||
goto out_nocoalesce;
|
||||
goto out_unlock_nocoalesce;
|
||||
|
||||
bch_btree_node_write(new_nodes[i], &cl);
|
||||
bch_keylist_add(&keylist, &new_nodes[i]->key);
|
||||
|
@ -1450,6 +1450,10 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
|
|||
/* Invalidated our iterator */
|
||||
return -EINTR;
|
||||
|
||||
out_unlock_nocoalesce:
|
||||
for (i = 0; i < nodes; i++)
|
||||
mutex_unlock(&new_nodes[i]->write_lock);
|
||||
|
||||
out_nocoalesce:
|
||||
closure_sync(&cl);
|
||||
bch_keylist_free(&keylist);
|
||||
|
|
|
@ -690,3 +690,4 @@ module_i2c_driver(wm8994_i2c_driver);
|
|||
MODULE_DESCRIPTION("Core support for the WM8994 audio CODEC");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
|
||||
MODULE_SOFTDEP("pre: wm8994_regulator");
|
||||
|
|
|
@ -872,8 +872,12 @@ out_free_rings:
|
|||
|
||||
static void __alx_stop(struct alx_priv *alx)
|
||||
{
|
||||
alx_halt(alx);
|
||||
alx_free_irq(alx);
|
||||
|
||||
cancel_work_sync(&alx->link_check_wk);
|
||||
cancel_work_sync(&alx->reset_wk);
|
||||
|
||||
alx_halt(alx);
|
||||
alx_free_rings(alx);
|
||||
}
|
||||
|
||||
|
@ -1406,9 +1410,6 @@ static void alx_remove(struct pci_dev *pdev)
|
|||
struct alx_priv *alx = pci_get_drvdata(pdev);
|
||||
struct alx_hw *hw = &alx->hw;
|
||||
|
||||
cancel_work_sync(&alx->link_check_wk);
|
||||
cancel_work_sync(&alx->reset_wk);
|
||||
|
||||
/* restore permanent mac address */
|
||||
alx_set_macaddr(hw, hw->perm_addr);
|
||||
|
||||
|
|
|
@ -18182,8 +18182,8 @@ static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
|
|||
|
||||
rtnl_lock();
|
||||
|
||||
/* We probably don't have netdev yet */
|
||||
if (!netdev || !netif_running(netdev))
|
||||
/* Could be second call or maybe we don't have netdev yet */
|
||||
if (!netdev || tp->pcierr_recovery || !netif_running(netdev))
|
||||
goto done;
|
||||
|
||||
/* We needn't recover from permanent error */
|
||||
|
|
|
@ -6270,11 +6270,17 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
|
|||
struct net_device *netdev = pci_get_drvdata(pdev);
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 ctrl, ctrl_ext, rctl, status;
|
||||
/* Runtime suspend should only enable wakeup for link changes */
|
||||
u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;
|
||||
u32 ctrl, ctrl_ext, rctl, status, wufc;
|
||||
int retval = 0;
|
||||
|
||||
/* Runtime suspend should only enable wakeup for link changes */
|
||||
if (runtime)
|
||||
wufc = E1000_WUFC_LNKC;
|
||||
else if (device_may_wakeup(&pdev->dev))
|
||||
wufc = adapter->wol;
|
||||
else
|
||||
wufc = 0;
|
||||
|
||||
status = er32(STATUS);
|
||||
if (status & E1000_STATUS_LU)
|
||||
wufc &= ~E1000_WUFC_LNKC;
|
||||
|
@ -6332,7 +6338,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
|
|||
e1000e_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw);
|
||||
} else if ((hw->mac.type == e1000_pch_lpt) ||
|
||||
(hw->mac.type == e1000_pch_spt)) {
|
||||
if (!(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC)))
|
||||
if (wufc && !(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC)))
|
||||
/* ULP does not support wake from unicast, multicast
|
||||
* or broadcast.
|
||||
*/
|
||||
|
|
|
@ -1160,6 +1160,7 @@ static int __init yam_init_driver(void)
|
|||
err = register_netdev(dev);
|
||||
if (err) {
|
||||
printk(KERN_WARNING "yam: cannot register net device %s\n", dev->name);
|
||||
free_netdev(dev);
|
||||
goto error;
|
||||
}
|
||||
yam_devs[i] = dev;
|
||||
|
|
|
@ -1396,10 +1396,10 @@ static int ax88179_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
|||
}
|
||||
|
||||
if (pkt_cnt == 0) {
|
||||
/* Skip IP alignment psudo header */
|
||||
skb_pull(skb, 2);
|
||||
skb->len = pkt_len;
|
||||
skb_set_tail_pointer(skb, pkt_len);
|
||||
/* Skip IP alignment pseudo header */
|
||||
skb_pull(skb, 2);
|
||||
skb_set_tail_pointer(skb, skb->len);
|
||||
skb->truesize = pkt_len + sizeof(struct sk_buff);
|
||||
ax88179_rx_checksum(skb, pkt_hdr);
|
||||
return 1;
|
||||
|
@ -1408,8 +1408,9 @@ static int ax88179_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
|||
ax_skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (ax_skb) {
|
||||
ax_skb->len = pkt_len;
|
||||
ax_skb->data = skb->data + 2;
|
||||
skb_set_tail_pointer(ax_skb, pkt_len);
|
||||
/* Skip IP alignment pseudo header */
|
||||
skb_pull(ax_skb, 2);
|
||||
skb_set_tail_pointer(ax_skb, ax_skb->len);
|
||||
ax_skb->truesize = pkt_len + sizeof(struct sk_buff);
|
||||
ax88179_rx_checksum(ax_skb, pkt_hdr);
|
||||
usbnet_skb_return(dev, ax_skb);
|
||||
|
|
|
@ -388,16 +388,6 @@ static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist)
|
|||
|
||||
/* Setup initial capable state. Will be updated later */
|
||||
link->aspm_capable = link->aspm_support;
|
||||
/*
|
||||
* If the downstream component has pci bridge function, don't
|
||||
* do ASPM for now.
|
||||
*/
|
||||
list_for_each_entry(child, &linkbus->devices, bus_list) {
|
||||
if (pci_pcie_type(child) == PCI_EXP_TYPE_PCI_BRIDGE) {
|
||||
link->aspm_disable = ASPM_STATE_ALL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Get and check endpoint acceptable latencies */
|
||||
list_for_each_entry(child, &linkbus->devices, bus_list) {
|
||||
|
|
|
@ -1624,6 +1624,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quir
|
|||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch);
|
||||
|
||||
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_HUAWEI, 0x1610, PCI_CLASS_BRIDGE_PCI, 8, quirk_pcie_mch);
|
||||
|
||||
/*
|
||||
* It's possible for the MSI to get corrupted if shpc and acpi
|
||||
|
|
|
@ -1141,6 +1141,7 @@ static bool smb347_volatile_reg(struct device *dev, unsigned int reg)
|
|||
switch (reg) {
|
||||
case IRQSTAT_A:
|
||||
case IRQSTAT_C:
|
||||
case IRQSTAT_D:
|
||||
case IRQSTAT_E:
|
||||
case IRQSTAT_F:
|
||||
case STAT_A:
|
||||
|
|
|
@ -376,7 +376,6 @@ static inline int multicast_outbound(struct qdio_q *q)
|
|||
extern u64 last_ai_time;
|
||||
|
||||
/* prototypes for thin interrupt */
|
||||
void qdio_setup_thinint(struct qdio_irq *irq_ptr);
|
||||
int qdio_establish_thinint(struct qdio_irq *irq_ptr);
|
||||
void qdio_shutdown_thinint(struct qdio_irq *irq_ptr);
|
||||
void tiqdio_add_input_queues(struct qdio_irq *irq_ptr);
|
||||
|
|
|
@ -479,7 +479,6 @@ int qdio_setup_irq(struct qdio_initialize *init_data)
|
|||
setup_queues(irq_ptr, init_data);
|
||||
|
||||
setup_qib(irq_ptr, init_data);
|
||||
qdio_setup_thinint(irq_ptr);
|
||||
set_impl_params(irq_ptr, init_data->qib_param_field_format,
|
||||
init_data->qib_param_field,
|
||||
init_data->input_slib_elements,
|
||||
|
|
|
@ -268,17 +268,19 @@ int __init tiqdio_register_thinints(void)
|
|||
|
||||
int qdio_establish_thinint(struct qdio_irq *irq_ptr)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (!is_thinint_irq(irq_ptr))
|
||||
return 0;
|
||||
return set_subchannel_ind(irq_ptr, 0);
|
||||
}
|
||||
|
||||
void qdio_setup_thinint(struct qdio_irq *irq_ptr)
|
||||
{
|
||||
if (!is_thinint_irq(irq_ptr))
|
||||
return;
|
||||
irq_ptr->dsci = get_indicator();
|
||||
DBF_HEX(&irq_ptr->dsci, sizeof(void *));
|
||||
|
||||
rc = set_subchannel_ind(irq_ptr, 0);
|
||||
if (rc)
|
||||
put_indicator(irq_ptr->dsci);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void qdio_shutdown_thinint(struct qdio_irq *irq_ptr)
|
||||
|
|
|
@ -2912,8 +2912,10 @@ static int acornscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
|||
|
||||
ashost->base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
|
||||
ashost->fast = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
|
||||
if (!ashost->base || !ashost->fast)
|
||||
if (!ashost->base || !ashost->fast) {
|
||||
ret = -ENOMEM;
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
host->irq = ec->irq;
|
||||
ashost->host = host;
|
||||
|
|
|
@ -427,6 +427,8 @@ static int ibmvscsi_reenable_crq_queue(struct crq_queue *queue,
|
|||
int rc = 0;
|
||||
struct vio_dev *vdev = to_vio_dev(hostdata->dev);
|
||||
|
||||
set_adapter_info(hostdata);
|
||||
|
||||
/* Re-enable the CRQ */
|
||||
do {
|
||||
if (rc)
|
||||
|
|
|
@ -319,7 +319,7 @@ iscsi_boot_create_kobj(struct iscsi_boot_kset *boot_kset,
|
|||
boot_kobj->kobj.kset = boot_kset->kset;
|
||||
if (kobject_init_and_add(&boot_kobj->kobj, &iscsi_boot_ktype,
|
||||
NULL, name, index)) {
|
||||
kfree(boot_kobj);
|
||||
kobject_put(&boot_kobj->kobj);
|
||||
return NULL;
|
||||
}
|
||||
boot_kobj->data = data;
|
||||
|
|
|
@ -7315,6 +7315,8 @@ lpfc_els_unsol_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
|
|||
spin_lock_irq(shost->host_lock);
|
||||
if (ndlp->nlp_flag & NLP_IN_DEV_LOSS) {
|
||||
spin_unlock_irq(shost->host_lock);
|
||||
if (newnode)
|
||||
lpfc_nlp_put(ndlp);
|
||||
goto dropit;
|
||||
}
|
||||
spin_unlock_irq(shost->host_lock);
|
||||
|
|
|
@ -3136,7 +3136,9 @@ _base_release_memory_pools(struct MPT3SAS_ADAPTER *ioc)
|
|||
ioc->scsi_lookup = NULL;
|
||||
}
|
||||
kfree(ioc->hpr_lookup);
|
||||
ioc->hpr_lookup = NULL;
|
||||
kfree(ioc->internal_lookup);
|
||||
ioc->internal_lookup = NULL;
|
||||
if (ioc->chain_lookup) {
|
||||
for (i = 0; i < ioc->chain_depth; i++) {
|
||||
if (ioc->chain_lookup[i].chain_buffer)
|
||||
|
|
|
@ -827,6 +827,7 @@ static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item,
|
|||
|
||||
atomic_set(&tpg->lport_tpg_enabled, 0);
|
||||
qlt_stop_phase1(vha->vha_tgt.qla_tgt);
|
||||
qlt_stop_phase2(vha->vha_tgt.qla_tgt);
|
||||
}
|
||||
|
||||
return count;
|
||||
|
@ -990,6 +991,7 @@ static ssize_t tcm_qla2xxx_npiv_tpg_enable_store(struct config_item *item,
|
|||
|
||||
atomic_set(&tpg->lport_tpg_enabled, 0);
|
||||
qlt_stop_phase1(vha->vha_tgt.qla_tgt);
|
||||
qlt_stop_phase2(vha->vha_tgt.qla_tgt);
|
||||
}
|
||||
|
||||
return count;
|
||||
|
|
|
@ -443,7 +443,8 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
|
|||
/*
|
||||
* vendor strings must be an exact match
|
||||
*/
|
||||
if (vmax != strlen(devinfo->vendor) ||
|
||||
if (vmax != strnlen(devinfo->vendor,
|
||||
sizeof(devinfo->vendor)) ||
|
||||
memcmp(devinfo->vendor, vskip, vmax))
|
||||
continue;
|
||||
|
||||
|
@ -451,7 +452,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
|
|||
* @model specifies the full string, and
|
||||
* must be larger or equal to devinfo->model
|
||||
*/
|
||||
mlen = strlen(devinfo->model);
|
||||
mlen = strnlen(devinfo->model, sizeof(devinfo->model));
|
||||
if (mmax < mlen || memcmp(devinfo->model, mskip, mlen))
|
||||
continue;
|
||||
return devinfo;
|
||||
|
|
|
@ -746,7 +746,7 @@ static int sr_probe(struct device *dev)
|
|||
cd->cdi.disk = disk;
|
||||
|
||||
if (register_cdrom(&cd->cdi))
|
||||
goto fail_put;
|
||||
goto fail_minor;
|
||||
|
||||
/*
|
||||
* Initialize block layer runtime PM stuffs before the
|
||||
|
@ -764,6 +764,10 @@ static int sr_probe(struct device *dev)
|
|||
|
||||
return 0;
|
||||
|
||||
fail_minor:
|
||||
spin_lock(&sr_index_lock);
|
||||
clear_bit(minor, sr_index_bits);
|
||||
spin_unlock(&sr_index_lock);
|
||||
fail_put:
|
||||
put_disk(disk);
|
||||
fail_free:
|
||||
|
|
|
@ -894,6 +894,7 @@ static int lynxfb_set_fbinfo(struct fb_info *info, int index)
|
|||
fix->visual = FB_VISUAL_PSEUDOCOLOR;
|
||||
break;
|
||||
case 16:
|
||||
case 24:
|
||||
case 32:
|
||||
fix->visual = FB_VISUAL_TRUECOLOR;
|
||||
break;
|
||||
|
|
|
@ -89,6 +89,8 @@ static LIST_HEAD(hvc_structs);
|
|||
*/
|
||||
static DEFINE_SPINLOCK(hvc_structs_lock);
|
||||
|
||||
/* Mutex to serialize hvc_open */
|
||||
static DEFINE_MUTEX(hvc_open_mutex);
|
||||
/*
|
||||
* This value is used to assign a tty->index value to a hvc_struct based
|
||||
* upon order of exposure via hvc_probe(), when we can not match it to
|
||||
|
@ -333,16 +335,24 @@ static int hvc_install(struct tty_driver *driver, struct tty_struct *tty)
|
|||
*/
|
||||
static int hvc_open(struct tty_struct *tty, struct file * filp)
|
||||
{
|
||||
struct hvc_struct *hp = tty->driver_data;
|
||||
struct hvc_struct *hp;
|
||||
unsigned long flags;
|
||||
int rc = 0;
|
||||
|
||||
mutex_lock(&hvc_open_mutex);
|
||||
|
||||
hp = tty->driver_data;
|
||||
if (!hp) {
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&hp->port.lock, flags);
|
||||
/* Check and then increment for fast path open. */
|
||||
if (hp->port.count++ > 0) {
|
||||
spin_unlock_irqrestore(&hp->port.lock, flags);
|
||||
hvc_kick();
|
||||
return 0;
|
||||
goto out;
|
||||
} /* else count == 0 */
|
||||
spin_unlock_irqrestore(&hp->port.lock, flags);
|
||||
|
||||
|
@ -371,6 +381,8 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
|
|||
/* Force wakeup of the polling thread */
|
||||
hvc_kick();
|
||||
|
||||
out:
|
||||
mutex_unlock(&hvc_open_mutex);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -681,11 +681,10 @@ static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len,
|
|||
* FIXME: lock against link layer control transmissions
|
||||
*/
|
||||
|
||||
static void gsm_data_kick(struct gsm_mux *gsm)
|
||||
static void gsm_data_kick(struct gsm_mux *gsm, struct gsm_dlci *dlci)
|
||||
{
|
||||
struct gsm_msg *msg, *nmsg;
|
||||
int len;
|
||||
int skip_sof = 0;
|
||||
|
||||
list_for_each_entry_safe(msg, nmsg, &gsm->tx_list, list) {
|
||||
if (gsm->constipated && msg->addr)
|
||||
|
@ -707,18 +706,23 @@ static void gsm_data_kick(struct gsm_mux *gsm)
|
|||
print_hex_dump_bytes("gsm_data_kick: ",
|
||||
DUMP_PREFIX_OFFSET,
|
||||
gsm->txframe, len);
|
||||
|
||||
if (gsm->output(gsm, gsm->txframe + skip_sof,
|
||||
len - skip_sof) < 0)
|
||||
if (gsm->output(gsm, gsm->txframe, len) < 0)
|
||||
break;
|
||||
/* FIXME: Can eliminate one SOF in many more cases */
|
||||
gsm->tx_bytes -= msg->len;
|
||||
/* For a burst of frames skip the extra SOF within the
|
||||
burst */
|
||||
skip_sof = 1;
|
||||
|
||||
list_del(&msg->list);
|
||||
kfree(msg);
|
||||
|
||||
if (dlci) {
|
||||
tty_port_tty_wakeup(&dlci->port);
|
||||
} else {
|
||||
int i = 0;
|
||||
|
||||
for (i = 0; i < NUM_DLCI; i++)
|
||||
if (gsm->dlci[i])
|
||||
tty_port_tty_wakeup(&gsm->dlci[i]->port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -770,7 +774,7 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)
|
|||
/* Add to the actual output queue */
|
||||
list_add_tail(&msg->list, &gsm->tx_list);
|
||||
gsm->tx_bytes += msg->len;
|
||||
gsm_data_kick(gsm);
|
||||
gsm_data_kick(gsm, dlci);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1231,7 +1235,7 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command,
|
|||
gsm_control_reply(gsm, CMD_FCON, NULL, 0);
|
||||
/* Kick the link in case it is idling */
|
||||
spin_lock_irqsave(&gsm->tx_lock, flags);
|
||||
gsm_data_kick(gsm);
|
||||
gsm_data_kick(gsm, NULL);
|
||||
spin_unlock_irqrestore(&gsm->tx_lock, flags);
|
||||
break;
|
||||
case CMD_FCOFF:
|
||||
|
@ -2429,7 +2433,7 @@ static void gsmld_write_wakeup(struct tty_struct *tty)
|
|||
/* Queue poll */
|
||||
clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
|
||||
spin_lock_irqsave(&gsm->tx_lock, flags);
|
||||
gsm_data_kick(gsm);
|
||||
gsm_data_kick(gsm, NULL);
|
||||
if (gsm->tx_bytes < TX_THRESH_LO) {
|
||||
gsm_dlci_data_sweep(gsm);
|
||||
}
|
||||
|
|
|
@ -2322,6 +2322,7 @@ static int pl011_setup_port(struct device *dev, struct uart_amba_port *uap,
|
|||
uap->port.fifosize = uap->fifosize;
|
||||
uap->port.flags = UPF_BOOT_AUTOCONF;
|
||||
uap->port.line = index;
|
||||
spin_lock_init(&uap->port.lock);
|
||||
|
||||
amba_ports[index] = uap;
|
||||
|
||||
|
|
|
@ -1684,6 +1684,8 @@ static int acm_reset_resume(struct usb_interface *intf)
|
|||
|
||||
static const struct usb_device_id acm_ids[] = {
|
||||
/* quirky and broken devices */
|
||||
{ USB_DEVICE(0x0424, 0x274e), /* Microchip Technology, Inc. (formerly SMSC) */
|
||||
.driver_info = DISABLE_ECHO, }, /* DISABLE ECHO in termios flag */
|
||||
{ USB_DEVICE(0x076d, 0x0006), /* Denso Cradle CU-321 */
|
||||
.driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
|
||||
{ USB_DEVICE(0x17ef, 0x7000), /* Lenovo USB modem */
|
||||
|
|
|
@ -481,7 +481,8 @@ static int usblp_release(struct inode *inode, struct file *file)
|
|||
usb_autopm_put_interface(usblp->intf);
|
||||
|
||||
if (!usblp->present) /* finish cleanup from disconnect */
|
||||
usblp_cleanup(usblp);
|
||||
usblp_cleanup(usblp); /* any URBs must be dead */
|
||||
|
||||
mutex_unlock(&usblp_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1397,9 +1398,11 @@ static void usblp_disconnect(struct usb_interface *intf)
|
|||
|
||||
usblp_unlink_urbs(usblp);
|
||||
mutex_unlock(&usblp->mut);
|
||||
usb_poison_anchored_urbs(&usblp->urbs);
|
||||
|
||||
if (!usblp->used)
|
||||
usblp_cleanup(usblp);
|
||||
|
||||
mutex_unlock(&usblp_mutex);
|
||||
}
|
||||
|
||||
|
|
|
@ -73,11 +73,12 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|||
/* Logitech HD Webcam C270 */
|
||||
{ USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
/* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
|
||||
/* Logitech HD Pro Webcams C920, C920-C, C922, C925e and C930e */
|
||||
{ USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
{ USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
{ USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
{ USB_DEVICE(0x046d, 0x085b), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
{ USB_DEVICE(0x046d, 0x085c), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
|
||||
/* Logitech ConferenceCam CC3000e */
|
||||
{ USB_DEVICE(0x046d, 0x0847), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
|
|
|
@ -363,10 +363,13 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
|
|||
if (ret && (ret != -ENOTSUPP))
|
||||
dev_err(hsotg->dev, "exit hibernation failed\n");
|
||||
|
||||
call_gadget(hsotg, resume);
|
||||
}
|
||||
/* Change to L0 state */
|
||||
hsotg->lx_state = DWC2_L0;
|
||||
call_gadget(hsotg, resume);
|
||||
} else {
|
||||
/* Change to L0 state */
|
||||
hsotg->lx_state = DWC2_L0;
|
||||
}
|
||||
} else {
|
||||
if (hsotg->core_params->hibernation) {
|
||||
dwc2_writel(GINTSTS_WKUPINT, hsotg->regs + GINTSTS);
|
||||
|
|
|
@ -3656,12 +3656,6 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq)
|
|||
epnum, 0);
|
||||
}
|
||||
|
||||
ret = usb_add_gadget_udc(dev, &hsotg->gadget);
|
||||
if (ret) {
|
||||
dwc2_hsotg_ep_free_request(&hsotg->eps_out[0]->ep,
|
||||
hsotg->ctrl_req);
|
||||
return ret;
|
||||
}
|
||||
dwc2_hsotg_dump(hsotg);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -452,6 +452,17 @@ static int dwc2_driver_probe(struct platform_device *dev)
|
|||
if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)
|
||||
dwc2_lowlevel_hw_disable(hsotg);
|
||||
|
||||
#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || \
|
||||
IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
|
||||
/* Postponed adding a new gadget to the udc class driver list */
|
||||
if (hsotg->gadget_enabled) {
|
||||
retval = usb_add_gadget_udc(hsotg->dev, &hsotg->gadget);
|
||||
if (retval) {
|
||||
dwc2_hsotg_remove(hsotg);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */
|
||||
return 0;
|
||||
|
||||
error:
|
||||
|
|
|
@ -1662,17 +1662,17 @@ static int lpc32xx_ep_enable(struct usb_ep *_ep,
|
|||
const struct usb_endpoint_descriptor *desc)
|
||||
{
|
||||
struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
|
||||
struct lpc32xx_udc *udc = ep->udc;
|
||||
struct lpc32xx_udc *udc;
|
||||
u16 maxpacket;
|
||||
u32 tmp;
|
||||
unsigned long flags;
|
||||
|
||||
/* Verify EP data */
|
||||
if ((!_ep) || (!ep) || (!desc) ||
|
||||
(desc->bDescriptorType != USB_DT_ENDPOINT)) {
|
||||
dev_dbg(udc->dev, "bad ep or descriptor\n");
|
||||
(desc->bDescriptorType != USB_DT_ENDPOINT))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
udc = ep->udc;
|
||||
maxpacket = usb_endpoint_maxp(desc);
|
||||
if ((maxpacket == 0) || (maxpacket > ep->maxpacket)) {
|
||||
dev_dbg(udc->dev, "bad ep descriptor's packet size\n");
|
||||
|
@ -1920,7 +1920,7 @@ static int lpc32xx_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
|
|||
static int lpc32xx_ep_set_halt(struct usb_ep *_ep, int value)
|
||||
{
|
||||
struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
|
||||
struct lpc32xx_udc *udc = ep->udc;
|
||||
struct lpc32xx_udc *udc;
|
||||
unsigned long flags;
|
||||
|
||||
if ((!ep) || (ep->hwep_num <= 1))
|
||||
|
@ -1930,6 +1930,7 @@ static int lpc32xx_ep_set_halt(struct usb_ep *_ep, int value)
|
|||
if (ep->is_in)
|
||||
return -EAGAIN;
|
||||
|
||||
udc = ep->udc;
|
||||
spin_lock_irqsave(&udc->lock, flags);
|
||||
|
||||
if (value == 1) {
|
||||
|
|
|
@ -1684,7 +1684,7 @@ static int m66592_probe(struct platform_device *pdev)
|
|||
|
||||
err_add_udc:
|
||||
m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req);
|
||||
|
||||
m66592->ep0_req = NULL;
|
||||
clean_up3:
|
||||
if (m66592->pdata->on_chip) {
|
||||
clk_disable(m66592->clk);
|
||||
|
|
|
@ -2322,6 +2322,7 @@ static int mv_udc_probe(struct platform_device *pdev)
|
|||
return 0;
|
||||
|
||||
err_create_workqueue:
|
||||
if (udc->qwork)
|
||||
destroy_workqueue(udc->qwork);
|
||||
err_destroy_dma:
|
||||
dma_pool_destroy(udc->dtd_pool);
|
||||
|
|
|
@ -269,10 +269,6 @@ static void s3c2410_udc_done(struct s3c2410_ep *ep,
|
|||
static void s3c2410_udc_nuke(struct s3c2410_udc *udc,
|
||||
struct s3c2410_ep *ep, int status)
|
||||
{
|
||||
/* Sanity check */
|
||||
if (&ep->queue == NULL)
|
||||
return;
|
||||
|
||||
while (!list_empty(&ep->queue)) {
|
||||
struct s3c2410_request *req;
|
||||
req = list_entry(ep->queue.next, struct s3c2410_request,
|
||||
|
|
|
@ -199,9 +199,8 @@ skip_phy:
|
|||
hcd->rsrc_len = resource_size(res);
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (!irq) {
|
||||
dev_err(&pdev->dev, "Failed to get IRQ\n");
|
||||
err = -ENODEV;
|
||||
if (irq < 0) {
|
||||
err = irq;
|
||||
goto fail_io;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,6 +63,8 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0)
|
||||
return irq;
|
||||
|
||||
hcd = usb_create_hcd(&ehci_mxc_hc_driver, dev, dev_name(dev));
|
||||
if (!hcd)
|
||||
|
|
|
@ -229,6 +229,13 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
|
|||
ehci_info(ehci, "applying MosChip frame-index workaround\n");
|
||||
ehci->frame_index_bug = 1;
|
||||
break;
|
||||
case PCI_VENDOR_ID_HUAWEI:
|
||||
/* Synopsys HC bug */
|
||||
if (pdev->device == 0xa239) {
|
||||
ehci_info(ehci, "applying Synopsys HC workaround\n");
|
||||
ehci->has_synopsys_hc_bug = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* optional debug port, normally in the first BAR */
|
||||
|
|
|
@ -375,6 +375,11 @@ static int ehci_platform_resume(struct device *dev)
|
|||
}
|
||||
|
||||
ehci_resume(hcd, priv->reset_on_resume);
|
||||
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_set_active(dev);
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
|
|
@ -339,6 +339,11 @@ static int ohci_platform_resume(struct device *dev)
|
|||
}
|
||||
|
||||
ohci_resume(hcd, false);
|
||||
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_set_active(dev);
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
|
|
@ -196,6 +196,7 @@ static int ohci_hcd_sm501_drv_remove(struct platform_device *pdev)
|
|||
struct resource *mem;
|
||||
|
||||
usb_remove_hcd(hcd);
|
||||
iounmap(hcd->regs);
|
||||
release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
|
||||
usb_put_hcd(hcd);
|
||||
dma_release_declared_memory(&pdev->dev);
|
||||
|
|
|
@ -1385,6 +1385,7 @@ static int xhci_check_maxpacket(struct xhci_hcd *xhci, unsigned int slot_id,
|
|||
xhci->devs[slot_id]->out_ctx, ep_index);
|
||||
|
||||
ep_ctx = xhci_get_ep_ctx(xhci, command->in_ctx, ep_index);
|
||||
ep_ctx->ep_info &= cpu_to_le32(~EP_STATE_MASK);/* must clear */
|
||||
ep_ctx->ep_info2 &= cpu_to_le32(~MAX_PACKET_MASK);
|
||||
ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet_size));
|
||||
|
||||
|
@ -4309,6 +4310,9 @@ int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
|
|||
mutex_lock(hcd->bandwidth_mutex);
|
||||
xhci_change_max_exit_latency(xhci, udev, 0);
|
||||
mutex_unlock(hcd->bandwidth_mutex);
|
||||
readl_poll_timeout(port_array[port_num], pm_val,
|
||||
(pm_val & PORT_PLS_MASK) == XDEV_U0,
|
||||
100, 10000);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -706,7 +706,7 @@ struct xhci_ep_ctx {
|
|||
* 4 - TRB error
|
||||
* 5-7 - reserved
|
||||
*/
|
||||
#define EP_STATE_MASK (0xf)
|
||||
#define EP_STATE_MASK (0x7)
|
||||
#define EP_STATE_DISABLED 0
|
||||
#define EP_STATE_RUNNING 1
|
||||
#define EP_STATE_HALTED 2
|
||||
|
|
|
@ -1405,7 +1405,12 @@ static int vfio_cap_init(struct vfio_pci_device *vdev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (cap <= PCI_CAP_ID_MAX) {
|
||||
/*
|
||||
* ID 0 is a NULL capability, conflicting with our fake
|
||||
* PCI_CAP_ID_BASIC. As it has no content, consider it
|
||||
* hidden for now.
|
||||
*/
|
||||
if (cap && cap <= PCI_CAP_ID_MAX) {
|
||||
len = pci_cap_length[cap];
|
||||
if (len == 0xFF) { /* Variable length */
|
||||
len = vfio_cap_len(vdev, cap, pos);
|
||||
|
@ -1644,9 +1649,12 @@ void vfio_config_free(struct vfio_pci_device *vdev)
|
|||
vdev->vconfig = NULL;
|
||||
kfree(vdev->pci_config_map);
|
||||
vdev->pci_config_map = NULL;
|
||||
if (vdev->msi_perm) {
|
||||
free_perm_bits(vdev->msi_perm);
|
||||
kfree(vdev->msi_perm);
|
||||
vdev->msi_perm = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the remaining number of bytes in a dword that match the given
|
||||
|
|
|
@ -94,11 +94,6 @@ static int da9062_wdt_update_timeout_register(struct da9062_watchdog *wdt,
|
|||
unsigned int regval)
|
||||
{
|
||||
struct da9062 *chip = wdt->hw;
|
||||
int ret;
|
||||
|
||||
ret = da9062_reset_watchdog_timer(wdt);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return regmap_update_bits(chip->regmap,
|
||||
DA9062AA_CONTROL_D,
|
||||
|
|
|
@ -1203,11 +1203,9 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
|
|||
*/
|
||||
if (!for_part) {
|
||||
ret = devcgroup_inode_permission(bdev->bd_inode, perm);
|
||||
if (ret != 0) {
|
||||
bdput(bdev);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
restart:
|
||||
|
||||
|
@ -1276,8 +1274,10 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
|
|||
goto out_clear;
|
||||
BUG_ON(for_part);
|
||||
ret = __blkdev_get(whole, mode, 1);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
bdput(whole);
|
||||
goto out_clear;
|
||||
}
|
||||
bdev->bd_contains = whole;
|
||||
bdev->bd_part = disk_get_part(disk, partno);
|
||||
if (!(disk->flags & GENHD_FL_UP) ||
|
||||
|
@ -1337,7 +1337,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
|
|||
put_disk(disk);
|
||||
module_put(owner);
|
||||
out:
|
||||
bdput(bdev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1423,6 +1422,9 @@ int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
|
|||
bdput(whole);
|
||||
}
|
||||
|
||||
if (res)
|
||||
bdput(bdev);
|
||||
|
||||
return res;
|
||||
}
|
||||
EXPORT_SYMBOL(blkdev_get);
|
||||
|
|
|
@ -1145,6 +1145,12 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
|
|||
inode = d_inode(cfile->dentry);
|
||||
cifsi = CIFS_I(inode);
|
||||
|
||||
/*
|
||||
* We zero the range through ioctl, so we need remove the page caches
|
||||
* first, otherwise the data may be inconsistent with the server.
|
||||
*/
|
||||
truncate_pagecache_range(inode, offset, offset + len - 1);
|
||||
|
||||
/* if file not oplocked can't be sure whether asking to extend size */
|
||||
if (!CIFS_CACHE_READ(cifsi))
|
||||
if (keep_size == false)
|
||||
|
@ -1201,6 +1207,12 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon,
|
|||
if (!smb2_set_sparse(xid, tcon, cfile, inode, set_sparse))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/*
|
||||
* We implement the punch hole through ioctl, so we need remove the page
|
||||
* caches first, otherwise the data may be inconsistent with the server.
|
||||
*/
|
||||
truncate_pagecache_range(inode, offset, offset + len - 1);
|
||||
|
||||
cifs_dbg(FYI, "offset %lld len %lld", offset, len);
|
||||
|
||||
fsctl_buf.FileOffset = cpu_to_le64(offset);
|
||||
|
|
|
@ -92,7 +92,6 @@ do { \
|
|||
__LINE__, __FILE__, #x, jiffies); \
|
||||
{do} \
|
||||
printk("\n"); \
|
||||
BUG(); \
|
||||
panic("DLM: Record message above and reboot.\n"); \
|
||||
} \
|
||||
}
|
||||
|
|
|
@ -2902,7 +2902,7 @@ again:
|
|||
* in use to avoid freeing it when removing blocks.
|
||||
*/
|
||||
if (sbi->s_cluster_ratio > 1) {
|
||||
pblk = ext4_ext_pblock(ex) + end - ee_block + 2;
|
||||
pblk = ext4_ext_pblock(ex) + end - ee_block + 1;
|
||||
partial_cluster =
|
||||
-(long long) EXT4_B2C(sbi, pblk);
|
||||
}
|
||||
|
|
|
@ -916,7 +916,7 @@ fail:
|
|||
}
|
||||
|
||||
static const match_table_t nolock_tokens = {
|
||||
{ Opt_jid, "jid=%d\n", },
|
||||
{ Opt_jid, "jid=%d", },
|
||||
{ Opt_err, NULL },
|
||||
};
|
||||
|
||||
|
|
|
@ -385,8 +385,6 @@ static void nfs_direct_complete(struct nfs_direct_req *dreq, bool write)
|
|||
if (write)
|
||||
nfs_zap_mapping(inode, inode->i_mapping);
|
||||
|
||||
inode_dio_end(inode);
|
||||
|
||||
if (dreq->iocb) {
|
||||
long res = (long) dreq->error;
|
||||
if (!res)
|
||||
|
@ -396,7 +394,10 @@ static void nfs_direct_complete(struct nfs_direct_req *dreq, bool write)
|
|||
|
||||
complete_all(&dreq->completion);
|
||||
|
||||
igrab(inode);
|
||||
nfs_direct_req_release(dreq);
|
||||
inode_dio_end(inode);
|
||||
iput(inode);
|
||||
}
|
||||
|
||||
static void nfs_direct_readpage_release(struct nfs_page *req)
|
||||
|
@ -537,8 +538,10 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
|
|||
* generic layer handle the completion.
|
||||
*/
|
||||
if (requested_bytes == 0) {
|
||||
inode_dio_end(inode);
|
||||
igrab(inode);
|
||||
nfs_direct_req_release(dreq);
|
||||
inode_dio_end(inode);
|
||||
iput(inode);
|
||||
return result < 0 ? result : -EIO;
|
||||
}
|
||||
|
||||
|
@ -939,8 +942,10 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
|
|||
* generic layer handle the completion.
|
||||
*/
|
||||
if (requested_bytes == 0) {
|
||||
inode_dio_end(inode);
|
||||
igrab(inode);
|
||||
nfs_direct_req_release(dreq);
|
||||
inode_dio_end(inode);
|
||||
iput(inode);
|
||||
return result < 0 ? result : -EIO;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,6 +82,7 @@ nfs_file_release(struct inode *inode, struct file *filp)
|
|||
dprintk("NFS: release(%pD2)\n", filp);
|
||||
|
||||
nfs_inc_stats(inode, NFSIOS_VFSRELEASE);
|
||||
inode_dio_wait(inode);
|
||||
nfs_file_clear_open_context(filp);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -855,9 +855,8 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio,
|
|||
goto out_mds;
|
||||
|
||||
/* Use a direct mapping of ds_idx to pgio mirror_idx */
|
||||
if (WARN_ON_ONCE(pgio->pg_mirror_count !=
|
||||
FF_LAYOUT_MIRROR_COUNT(pgio->pg_lseg)))
|
||||
goto out_mds;
|
||||
if (pgio->pg_mirror_count != FF_LAYOUT_MIRROR_COUNT(pgio->pg_lseg))
|
||||
goto out_eagain;
|
||||
|
||||
for (i = 0; i < pgio->pg_mirror_count; i++) {
|
||||
ds = nfs4_ff_layout_prepare_ds(pgio->pg_lseg, i, true);
|
||||
|
@ -869,11 +868,15 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio,
|
|||
}
|
||||
|
||||
return;
|
||||
|
||||
out_eagain:
|
||||
pnfs_generic_pg_cleanup(pgio);
|
||||
pgio->pg_error = -EAGAIN;
|
||||
return;
|
||||
out_mds:
|
||||
pnfs_put_lseg(pgio->pg_lseg);
|
||||
pgio->pg_lseg = NULL;
|
||||
nfs_pageio_reset_write_mds(pgio);
|
||||
pgio->pg_error = -EAGAIN;
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
|
|
|
@ -1096,6 +1096,8 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb)
|
|||
err = setup_callback_client(clp, &conn, ses);
|
||||
if (err) {
|
||||
nfsd4_mark_cb_down(clp, err);
|
||||
if (c)
|
||||
svc_xprt_put(c->cn_xprt);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -304,7 +304,7 @@
|
|||
#define OCFS2_MAX_SLOTS 255
|
||||
|
||||
/* Slot map indicator for an empty slot */
|
||||
#define OCFS2_INVALID_SLOT -1
|
||||
#define OCFS2_INVALID_SLOT ((u16)-1)
|
||||
|
||||
#define OCFS2_VOL_UUID_LEN 16
|
||||
#define OCFS2_MAX_VOL_LABEL_LEN 64
|
||||
|
@ -340,8 +340,8 @@ struct ocfs2_system_inode_info {
|
|||
enum {
|
||||
BAD_BLOCK_SYSTEM_INODE = 0,
|
||||
GLOBAL_INODE_ALLOC_SYSTEM_INODE,
|
||||
#define OCFS2_FIRST_ONLINE_SYSTEM_INODE GLOBAL_INODE_ALLOC_SYSTEM_INODE
|
||||
SLOT_MAP_SYSTEM_INODE,
|
||||
#define OCFS2_FIRST_ONLINE_SYSTEM_INODE SLOT_MAP_SYSTEM_INODE
|
||||
HEARTBEAT_SYSTEM_INODE,
|
||||
GLOBAL_BITMAP_SYSTEM_INODE,
|
||||
USER_QUOTA_SYSTEM_INODE,
|
||||
|
|
|
@ -2863,9 +2863,12 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
|
|||
goto bail;
|
||||
}
|
||||
|
||||
inode_alloc_inode =
|
||||
ocfs2_get_system_file_inode(osb, INODE_ALLOC_SYSTEM_INODE,
|
||||
suballoc_slot);
|
||||
if (suballoc_slot == (u16)OCFS2_INVALID_SLOT)
|
||||
inode_alloc_inode = ocfs2_get_system_file_inode(osb,
|
||||
GLOBAL_INODE_ALLOC_SYSTEM_INODE, suballoc_slot);
|
||||
else
|
||||
inode_alloc_inode = ocfs2_get_system_file_inode(osb,
|
||||
INODE_ALLOC_SYSTEM_INODE, suballoc_slot);
|
||||
if (!inode_alloc_inode) {
|
||||
/* the error code could be inaccurate, but we are not able to
|
||||
* get the correct one. */
|
||||
|
|
|
@ -59,7 +59,7 @@ static inline int get_count_order(unsigned int count)
|
|||
|
||||
static __always_inline unsigned long hweight_long(unsigned long w)
|
||||
{
|
||||
return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
|
||||
return sizeof(w) == 4 ? hweight32(w) : hweight64((__u64)w);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
.popsection ;
|
||||
|
||||
#define ELFNOTE(name, type, desc) \
|
||||
ELFNOTE_START(name, type, "") \
|
||||
ELFNOTE_START(name, type, "a") \
|
||||
desc ; \
|
||||
ELFNOTE_END
|
||||
|
||||
|
|
|
@ -727,9 +727,11 @@ static inline sector_t part_nr_sects_read(struct hd_struct *part)
|
|||
static inline void part_nr_sects_write(struct hd_struct *part, sector_t size)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_SMP)
|
||||
preempt_disable();
|
||||
write_seqcount_begin(&part->nr_sects_seq);
|
||||
part->nr_sects = size;
|
||||
write_seqcount_end(&part->nr_sects_seq);
|
||||
preempt_enable();
|
||||
#elif BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_PREEMPT)
|
||||
preempt_disable();
|
||||
part->nr_sects = size;
|
||||
|
|
|
@ -366,6 +366,10 @@ static inline struct kprobe_ctlblk *get_kprobe_ctlblk(void)
|
|||
return this_cpu_ptr(&kprobe_ctlblk);
|
||||
}
|
||||
|
||||
extern struct kprobe kprobe_busy;
|
||||
void kprobe_busy_begin(void);
|
||||
void kprobe_busy_end(void);
|
||||
|
||||
int register_kprobe(struct kprobe *p);
|
||||
void unregister_kprobe(struct kprobe *p);
|
||||
int register_kprobes(struct kprobe **kps, int num);
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include <linux/acpi.h>
|
||||
#include <linux/cdrom.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/async.h>
|
||||
|
||||
/*
|
||||
* Define if arch has non-standard setup. This is a _PCI_ standard
|
||||
|
@ -872,6 +873,8 @@ struct ata_port {
|
|||
struct timer_list fastdrain_timer;
|
||||
unsigned long fastdrain_cnt;
|
||||
|
||||
async_cookie_t cookie;
|
||||
|
||||
int em_message_type;
|
||||
void *private_data;
|
||||
|
||||
|
|
|
@ -2496,6 +2496,8 @@
|
|||
#define PCI_DEVICE_ID_KORENIX_JETCARDF2 0x1700
|
||||
#define PCI_DEVICE_ID_KORENIX_JETCARDF3 0x17ff
|
||||
|
||||
#define PCI_VENDOR_ID_HUAWEI 0x19e5
|
||||
|
||||
#define PCI_VENDOR_ID_NETRONOME 0x19ee
|
||||
#define PCI_DEVICE_ID_NETRONOME_NFP3200 0x3200
|
||||
#define PCI_DEVICE_ID_NETRONOME_NFP3240 0x3240
|
||||
|
|
|
@ -357,11 +357,13 @@ typedef enum {
|
|||
ipv4_is_anycast_6to4(a))
|
||||
|
||||
/* Flags used for the bind address copy functions. */
|
||||
#define SCTP_ADDR6_ALLOWED 0x00000001 /* IPv6 address is allowed by
|
||||
#define SCTP_ADDR4_ALLOWED 0x00000001 /* IPv4 address is allowed by
|
||||
local sock family */
|
||||
#define SCTP_ADDR4_PEERSUPP 0x00000002 /* IPv4 address is supported by
|
||||
#define SCTP_ADDR6_ALLOWED 0x00000002 /* IPv6 address is allowed by
|
||||
local sock family */
|
||||
#define SCTP_ADDR4_PEERSUPP 0x00000004 /* IPv4 address is supported by
|
||||
peer */
|
||||
#define SCTP_ADDR6_PEERSUPP 0x00000004 /* IPv6 address is supported by
|
||||
#define SCTP_ADDR6_PEERSUPP 0x00000008 /* IPv6 address is supported by
|
||||
peer */
|
||||
|
||||
/* Reasons to retransmit. */
|
||||
|
|
|
@ -1682,7 +1682,6 @@ static inline int sk_tx_queue_get(const struct sock *sk)
|
|||
|
||||
static inline void sk_set_socket(struct sock *sk, struct socket *sock)
|
||||
{
|
||||
sk_tx_queue_clear(sk);
|
||||
sk->sk_socket = sock;
|
||||
}
|
||||
|
||||
|
|
|
@ -561,11 +561,12 @@ static void kprobe_optimizer(struct work_struct *work)
|
|||
do_free_cleaned_kprobes();
|
||||
|
||||
mutex_unlock(&module_mutex);
|
||||
mutex_unlock(&kprobe_mutex);
|
||||
|
||||
/* Step 5: Kick optimizer again if needed */
|
||||
if (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list))
|
||||
kick_kprobe_optimizer();
|
||||
|
||||
mutex_unlock(&kprobe_mutex);
|
||||
}
|
||||
|
||||
/* Wait for completing optimization and unoptimization */
|
||||
|
@ -1149,6 +1150,26 @@ __releases(hlist_lock)
|
|||
}
|
||||
NOKPROBE_SYMBOL(kretprobe_table_unlock);
|
||||
|
||||
struct kprobe kprobe_busy = {
|
||||
.addr = (void *) get_kprobe,
|
||||
};
|
||||
|
||||
void kprobe_busy_begin(void)
|
||||
{
|
||||
struct kprobe_ctlblk *kcb;
|
||||
|
||||
preempt_disable();
|
||||
__this_cpu_write(current_kprobe, &kprobe_busy);
|
||||
kcb = get_kprobe_ctlblk();
|
||||
kcb->kprobe_status = KPROBE_HIT_ACTIVE;
|
||||
}
|
||||
|
||||
void kprobe_busy_end(void)
|
||||
{
|
||||
__this_cpu_write(current_kprobe, NULL);
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is called from finish_task_switch when task tk becomes dead,
|
||||
* so that we can recycle any function-return probe instances associated
|
||||
|
@ -1166,6 +1187,8 @@ void kprobe_flush_task(struct task_struct *tk)
|
|||
/* Early boot. kretprobe_table_locks not yet initialized. */
|
||||
return;
|
||||
|
||||
kprobe_busy_begin();
|
||||
|
||||
INIT_HLIST_HEAD(&empty_rp);
|
||||
hash = hash_ptr(tk, KPROBE_HASH_BITS);
|
||||
head = &kretprobe_inst_table[hash];
|
||||
|
@ -1179,6 +1202,8 @@ void kprobe_flush_task(struct task_struct *tk)
|
|||
hlist_del(&ri->hlist);
|
||||
kfree(ri);
|
||||
}
|
||||
|
||||
kprobe_busy_end();
|
||||
}
|
||||
NOKPROBE_SYMBOL(kprobe_flush_task);
|
||||
|
||||
|
|
|
@ -3819,7 +3819,8 @@ void rt_mutex_setprio(struct task_struct *p, int prio)
|
|||
if (dl_prio(prio)) {
|
||||
struct task_struct *pi_task = rt_mutex_get_top_task(p);
|
||||
if (!dl_prio(p->normal_prio) ||
|
||||
(pi_task && dl_entity_preempt(&pi_task->dl, &p->dl))) {
|
||||
(pi_task && dl_prio(pi_task->prio) &&
|
||||
dl_entity_preempt(&pi_task->dl, &p->dl))) {
|
||||
p->dl.dl_boosted = 1;
|
||||
queue_flag |= ENQUEUE_REPLENISH;
|
||||
} else
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/blktrace_api.h>
|
||||
|
@ -481,6 +484,16 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
|
|||
*/
|
||||
strreplace(buts->name, '/', '_');
|
||||
|
||||
/*
|
||||
* bdev can be NULL, as with scsi-generic, this is a helpful as
|
||||
* we can be.
|
||||
*/
|
||||
if (q->blk_trace) {
|
||||
pr_warn("Concurrent blktraces are not allowed on %s\n",
|
||||
buts->name);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
bt = kzalloc(sizeof(*bt), GFP_KERNEL);
|
||||
if (!bt)
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -204,11 +204,17 @@ static int event_trigger_regex_open(struct inode *inode, struct file *file)
|
|||
|
||||
static int trigger_process_regex(struct trace_event_file *file, char *buff)
|
||||
{
|
||||
char *command, *next = buff;
|
||||
char *command, *next;
|
||||
struct event_command *p;
|
||||
int ret = -EINVAL;
|
||||
|
||||
next = buff = skip_spaces(buff);
|
||||
command = strsep(&next, ": \t");
|
||||
if (next) {
|
||||
next = skip_spaces(next);
|
||||
if (!*next)
|
||||
next = NULL;
|
||||
}
|
||||
command = (command[0] != '!') ? command : command + 1;
|
||||
|
||||
mutex_lock(&trigger_cmd_mutex);
|
||||
|
@ -615,8 +621,14 @@ event_trigger_callback(struct event_command *cmd_ops,
|
|||
int ret;
|
||||
|
||||
/* separate the trigger from the filter (t:n [if filter]) */
|
||||
if (param && isdigit(param[0]))
|
||||
if (param && isdigit(param[0])) {
|
||||
trigger = strsep(¶m, " \t");
|
||||
if (param) {
|
||||
param = skip_spaces(param);
|
||||
if (!*param)
|
||||
param = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
trigger_ops = cmd_ops->get_trigger_ops(cmd, trigger);
|
||||
|
||||
|
@ -1185,6 +1197,11 @@ event_enable_trigger_func(struct event_command *cmd_ops,
|
|||
trigger = strsep(¶m, " \t");
|
||||
if (!trigger)
|
||||
return -EINVAL;
|
||||
if (param) {
|
||||
param = skip_spaces(param);
|
||||
if (!*param)
|
||||
param = NULL;
|
||||
}
|
||||
|
||||
system = strsep(&trigger, ":");
|
||||
if (!trigger)
|
||||
|
|
|
@ -10,17 +10,6 @@
|
|||
|
||||
#ifndef ASMINF
|
||||
|
||||
/* Allow machine dependent optimization for post-increment or pre-increment.
|
||||
Based on testing to date,
|
||||
Pre-increment preferred for:
|
||||
- PowerPC G3 (Adler)
|
||||
- MIPS R5000 (Randers-Pehrson)
|
||||
Post-increment preferred for:
|
||||
- none
|
||||
No measurable difference:
|
||||
- Pentium III (Anderson)
|
||||
- M68060 (Nikl)
|
||||
*/
|
||||
union uu {
|
||||
unsigned short us;
|
||||
unsigned char b[2];
|
||||
|
@ -38,16 +27,6 @@ get_unaligned16(const unsigned short *p)
|
|||
return mm.us;
|
||||
}
|
||||
|
||||
#ifdef POSTINC
|
||||
# define OFF 0
|
||||
# define PUP(a) *(a)++
|
||||
# define UP_UNALIGNED(a) get_unaligned16((a)++)
|
||||
#else
|
||||
# define OFF 1
|
||||
# define PUP(a) *++(a)
|
||||
# define UP_UNALIGNED(a) get_unaligned16(++(a))
|
||||
#endif
|
||||
|
||||
/*
|
||||
Decode literal, length, and distance codes and write out the resulting
|
||||
literal and match bytes until either not enough input or output is
|
||||
|
@ -115,9 +94,9 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
|
||||
/* copy state to local variables */
|
||||
state = (struct inflate_state *)strm->state;
|
||||
in = strm->next_in - OFF;
|
||||
in = strm->next_in;
|
||||
last = in + (strm->avail_in - 5);
|
||||
out = strm->next_out - OFF;
|
||||
out = strm->next_out;
|
||||
beg = out - (start - strm->avail_out);
|
||||
end = out + (strm->avail_out - 257);
|
||||
#ifdef INFLATE_STRICT
|
||||
|
@ -138,9 +117,9 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
input data or output space */
|
||||
do {
|
||||
if (bits < 15) {
|
||||
hold += (unsigned long)(PUP(in)) << bits;
|
||||
hold += (unsigned long)(*in++) << bits;
|
||||
bits += 8;
|
||||
hold += (unsigned long)(PUP(in)) << bits;
|
||||
hold += (unsigned long)(*in++) << bits;
|
||||
bits += 8;
|
||||
}
|
||||
this = lcode[hold & lmask];
|
||||
|
@ -150,14 +129,14 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
bits -= op;
|
||||
op = (unsigned)(this.op);
|
||||
if (op == 0) { /* literal */
|
||||
PUP(out) = (unsigned char)(this.val);
|
||||
*out++ = (unsigned char)(this.val);
|
||||
}
|
||||
else if (op & 16) { /* length base */
|
||||
len = (unsigned)(this.val);
|
||||
op &= 15; /* number of extra bits */
|
||||
if (op) {
|
||||
if (bits < op) {
|
||||
hold += (unsigned long)(PUP(in)) << bits;
|
||||
hold += (unsigned long)(*in++) << bits;
|
||||
bits += 8;
|
||||
}
|
||||
len += (unsigned)hold & ((1U << op) - 1);
|
||||
|
@ -165,9 +144,9 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
bits -= op;
|
||||
}
|
||||
if (bits < 15) {
|
||||
hold += (unsigned long)(PUP(in)) << bits;
|
||||
hold += (unsigned long)(*in++) << bits;
|
||||
bits += 8;
|
||||
hold += (unsigned long)(PUP(in)) << bits;
|
||||
hold += (unsigned long)(*in++) << bits;
|
||||
bits += 8;
|
||||
}
|
||||
this = dcode[hold & dmask];
|
||||
|
@ -180,10 +159,10 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
dist = (unsigned)(this.val);
|
||||
op &= 15; /* number of extra bits */
|
||||
if (bits < op) {
|
||||
hold += (unsigned long)(PUP(in)) << bits;
|
||||
hold += (unsigned long)(*in++) << bits;
|
||||
bits += 8;
|
||||
if (bits < op) {
|
||||
hold += (unsigned long)(PUP(in)) << bits;
|
||||
hold += (unsigned long)(*in++) << bits;
|
||||
bits += 8;
|
||||
}
|
||||
}
|
||||
|
@ -205,13 +184,13 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
state->mode = BAD;
|
||||
break;
|
||||
}
|
||||
from = window - OFF;
|
||||
from = window;
|
||||
if (write == 0) { /* very common case */
|
||||
from += wsize - op;
|
||||
if (op < len) { /* some from window */
|
||||
len -= op;
|
||||
do {
|
||||
PUP(out) = PUP(from);
|
||||
*out++ = *from++;
|
||||
} while (--op);
|
||||
from = out - dist; /* rest from output */
|
||||
}
|
||||
|
@ -222,14 +201,14 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
if (op < len) { /* some from end of window */
|
||||
len -= op;
|
||||
do {
|
||||
PUP(out) = PUP(from);
|
||||
*out++ = *from++;
|
||||
} while (--op);
|
||||
from = window - OFF;
|
||||
from = window;
|
||||
if (write < len) { /* some from start of window */
|
||||
op = write;
|
||||
len -= op;
|
||||
do {
|
||||
PUP(out) = PUP(from);
|
||||
*out++ = *from++;
|
||||
} while (--op);
|
||||
from = out - dist; /* rest from output */
|
||||
}
|
||||
|
@ -240,21 +219,21 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
if (op < len) { /* some from window */
|
||||
len -= op;
|
||||
do {
|
||||
PUP(out) = PUP(from);
|
||||
*out++ = *from++;
|
||||
} while (--op);
|
||||
from = out - dist; /* rest from output */
|
||||
}
|
||||
}
|
||||
while (len > 2) {
|
||||
PUP(out) = PUP(from);
|
||||
PUP(out) = PUP(from);
|
||||
PUP(out) = PUP(from);
|
||||
*out++ = *from++;
|
||||
*out++ = *from++;
|
||||
*out++ = *from++;
|
||||
len -= 3;
|
||||
}
|
||||
if (len) {
|
||||
PUP(out) = PUP(from);
|
||||
*out++ = *from++;
|
||||
if (len > 1)
|
||||
PUP(out) = PUP(from);
|
||||
*out++ = *from++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -264,29 +243,29 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
from = out - dist; /* copy direct from output */
|
||||
/* minimum length is three */
|
||||
/* Align out addr */
|
||||
if (!((long)(out - 1 + OFF) & 1)) {
|
||||
PUP(out) = PUP(from);
|
||||
if (!((long)(out - 1) & 1)) {
|
||||
*out++ = *from++;
|
||||
len--;
|
||||
}
|
||||
sout = (unsigned short *)(out - OFF);
|
||||
sout = (unsigned short *)(out);
|
||||
if (dist > 2) {
|
||||
unsigned short *sfrom;
|
||||
|
||||
sfrom = (unsigned short *)(from - OFF);
|
||||
sfrom = (unsigned short *)(from);
|
||||
loops = len >> 1;
|
||||
do
|
||||
#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
|
||||
PUP(sout) = PUP(sfrom);
|
||||
*sout++ = *sfrom++;
|
||||
#else
|
||||
PUP(sout) = UP_UNALIGNED(sfrom);
|
||||
*sout++ = get_unaligned16(sfrom++);
|
||||
#endif
|
||||
while (--loops);
|
||||
out = (unsigned char *)sout + OFF;
|
||||
from = (unsigned char *)sfrom + OFF;
|
||||
out = (unsigned char *)sout;
|
||||
from = (unsigned char *)sfrom;
|
||||
} else { /* dist == 1 or dist == 2 */
|
||||
unsigned short pat16;
|
||||
|
||||
pat16 = *(sout-1+OFF);
|
||||
pat16 = *(sout-1);
|
||||
if (dist == 1) {
|
||||
union uu mm;
|
||||
/* copy one char pattern to both bytes */
|
||||
|
@ -296,12 +275,12 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
}
|
||||
loops = len >> 1;
|
||||
do
|
||||
PUP(sout) = pat16;
|
||||
*sout++ = pat16;
|
||||
while (--loops);
|
||||
out = (unsigned char *)sout + OFF;
|
||||
out = (unsigned char *)sout;
|
||||
}
|
||||
if (len & 1)
|
||||
PUP(out) = PUP(from);
|
||||
*out++ = *from++;
|
||||
}
|
||||
}
|
||||
else if ((op & 64) == 0) { /* 2nd level distance code */
|
||||
|
@ -336,8 +315,8 @@ void inflate_fast(z_streamp strm, unsigned start)
|
|||
hold &= (1U << bits) - 1;
|
||||
|
||||
/* update state and return */
|
||||
strm->next_in = in + OFF;
|
||||
strm->next_out = out + OFF;
|
||||
strm->next_in = in;
|
||||
strm->next_out = out;
|
||||
strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
|
||||
strm->avail_out = (unsigned)(out < end ?
|
||||
257 + (end - out) : 257 - (out - end));
|
||||
|
|
|
@ -1271,7 +1271,7 @@ void kzfree(const void *p)
|
|||
if (unlikely(ZERO_OR_NULL_PTR(mem)))
|
||||
return;
|
||||
ks = ksize(mem);
|
||||
memset(mem, 0, ks);
|
||||
memzero_explicit(mem, ks);
|
||||
kfree(mem);
|
||||
}
|
||||
EXPORT_SYMBOL(kzfree);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue