Merge 4.9.215 into android-4.9-q
Changes in 4.9.215
x86/vdso: Use RDPID in preference to LSL when available
KVM: x86: emulate RDPID
ALSA: hda: Use scnprintf() for printing texts for sysfs/procfs
ecryptfs: fix a memory leak bug in parse_tag_1_packet()
ecryptfs: fix a memory leak bug in ecryptfs_init_messaging()
ALSA: usb-audio: Apply sample rate quirk for Audioengine D1
ext4: don't assume that mmp_nodename/bdevname have NUL
ext4: fix checksum errors with indexed dirs
ext4: improve explanation of a mount failure caused by a misconfigured kernel
Btrfs: fix race between using extent maps and merging them
btrfs: log message when rw remount is attempted with unclean tree-log
perf/x86/amd: Add missing L2 misses event spec to AMD Family 17h's event map
padata: Remove broken queue flushing
s390/time: Fix clk type in get_tod_clock
perf/x86/intel: Fix inaccurate period in context switch for auto-reload
hwmon: (pmbus/ltc2978) Fix PMBus polling of MFR_COMMON definitions.
jbd2: move the clearing of b_modified flag to the journal_unmap_buffer()
jbd2: do not clear the BH_Mapped flag when forgetting a metadata buffer
btrfs: print message when tree-log replay starts
scsi: qla2xxx: fix a potential NULL pointer dereference
Revert "KVM: VMX: Add non-canonical check on writes to RTIT address MSRs"
drm/gma500: Fixup fbdev stolen size usage evaluation
cpu/hotplug, stop_machine: Fix stop_machine vs hotplug order
brcmfmac: Fix use after free in brcmf_sdio_readframes()
gianfar: Fix TX timestamping with a stacked DSA driver
pinctrl: sh-pfc: sh7264: Fix CAN function GPIOs
pxa168fb: Fix the function used to release some memory in an error handling path
media: i2c: mt9v032: fix enum mbus codes and frame sizes
powerpc/powernv/iov: Ensure the pdn for VFs always contains a valid PE number
gpio: gpio-grgpio: fix possible sleep-in-atomic-context bugs in grgpio_irq_map/unmap()
media: sti: bdisp: fix a possible sleep-in-atomic-context bug in bdisp_device_run()
pinctrl: baytrail: Do not clear IRQ flags on direct-irq enabled pins
efi/x86: Map the entire EFI vendor string before copying it
MIPS: Loongson: Fix potential NULL dereference in loongson3_platform_init()
sparc: Add .exit.data section.
uio: fix a sleep-in-atomic-context bug in uio_dmem_genirq_irqcontrol()
usb: gadget: udc: fix possible sleep-in-atomic-context bugs in gr_probe()
jbd2: clear JBD2_ABORT flag before journal_reset to update log tail info when load journal
x86/sysfb: Fix check for bad VRAM size
tracing: Fix tracing_stat return values in error handling paths
tracing: Fix very unlikely race of registering two stat tracers
ext4, jbd2: ensure panic when aborting with zero errno
kconfig: fix broken dependency in randconfig-generated .config
clk: qcom: rcg2: Don't crash if our parent can't be found; return an error
drm/amdgpu: remove 4 set but not used variable in amdgpu_atombios_get_connector_info_from_object_table
regulator: rk808: Lower log level on optional GPIOs being not available
net/wan/fsl_ucc_hdlc: reject muram offsets above 64K
PCI/IOV: Fix memory leak in pci_iov_add_virtfn()
NFC: port100: Convert cpu_to_le16(le16_to_cpu(E1) + E2) to use le16_add_cpu().
media: v4l2-device.h: Explicitly compare grp{id,mask} to zero in v4l2_device macros
reiserfs: Fix spurious unlock in reiserfs_fill_super() error handling
ALSA: usx2y: Adjust indentation in snd_usX2Y_hwdep_dsp_status
b43legacy: Fix -Wcast-function-type
ipw2x00: Fix -Wcast-function-type
iwlegacy: Fix -Wcast-function-type
rtlwifi: rtl_pci: Fix -Wcast-function-type
orinoco: avoid assertion in case of NULL pointer
ACPICA: Disassembler: create buffer fields in ACPI_PARSE_LOAD_PASS1
scsi: aic7xxx: Adjust indentation in ahc_find_syncrate
drm/mediatek: handle events when enabling/disabling crtc
ARM: dts: r8a7779: Add device node for ARM global timer
x86/vdso: Provide missing include file
PM / devfreq: rk3399_dmc: Add COMPILE_TEST and HAVE_ARM_SMCCC dependency
pinctrl: sh-pfc: sh7269: Fix CAN function GPIOs
RDMA/rxe: Fix error type of mmap_offset
ALSA: sh: Fix compile warning wrt const
tools lib api fs: Fix gcc9 stringop-truncation compilation error
usbip: Fix unsafe unaligned pointer usage
udf: Fix free space reporting for metadata and virtual partitions
soc/tegra: fuse: Correct straps' address for older Tegra124 device trees
rcu: Use WRITE_ONCE() for assignments to ->pprev for hlist_nulls
Input: edt-ft5x06 - work around first register access error
wan: ixp4xx_hss: fix compile-testing on 64-bit
ASoC: atmel: fix build error with CONFIG_SND_ATMEL_SOC_DMA=m
tty: synclinkmp: Adjust indentation in several functions
tty: synclink_gt: Adjust indentation in several functions
driver core: platform: Prevent resouce overflow from causing infinite loops
driver core: Print device when resources present in really_probe()
vme: bridges: reduce stack usage
drm/nouveau/gr/gk20a,gm200-: add terminators to method lists read from fw
drm/nouveau: Fix copy-paste error in nouveau_fence_wait_uevent_handler
drm/vmwgfx: prevent memory leak in vmw_cmdbuf_res_add
usb: musb: omap2430: Get rid of musb .set_vbus for omap2430 glue
iommu/arm-smmu-v3: Use WRITE_ONCE() when changing validity of an STE
scsi: iscsi: Don't destroy session if there are outstanding connections
arm64: fix alternatives with LLVM's integrated assembler
pwm: omap-dmtimer: Remove PWM chip in .remove before making it unfunctional
cmd64x: potential buffer overflow in cmd64x_program_timings()
ide: serverworks: potential overflow in svwks_set_pio_mode()
remoteproc: Initialize rproc_class before use
x86/decoder: Add TEST opcode to Group3-2
s390/ftrace: generate traced function stack frame
driver core: platform: fix u32 greater or equal to zero comparison
ALSA: hda - Add docking station support for Lenovo Thinkpad T420s
powerpc/sriov: Remove VF eeh_dev state when disabling SR-IOV
jbd2: switch to use jbd2_journal_abort() when failed to submit the commit record
ARM: 8951/1: Fix Kexec compilation issue.
hostap: Adjust indentation in prism2_hostapd_add_sta
iwlegacy: ensure loop counter addr does not wrap and cause an infinite loop
cifs: fix NULL dereference in match_prepath
irqchip/gic-v3: Only provision redistributors that are enabled in ACPI
drm/nouveau/disp/nv50-: prevent oops when no channel method map provided
ftrace: fpid_next() should increase position index
trigger_next should increase position index
radeon: insert 10ms sleep in dce5_crtc_load_lut
ocfs2: fix a NULL pointer dereference when call ocfs2_update_inode_fsync_trans()
lib/scatterlist.c: adjust indentation in __sg_alloc_table
reiserfs: prevent NULL pointer dereference in reiserfs_insert_item()
bcache: explicity type cast in bset_bkey_last()
irqchip/gic-v3-its: Reference to its_invall_cmd descriptor when building INVALL
iwlwifi: mvm: Fix thermal zone registration
microblaze: Prevent the overflow of the start
brd: check and limit max_part par
help_next should increase position index
selinux: ensure we cleanup the internal AVC counters on error in avc_update()
enic: prevent waking up stopped tx queues over watchdog reset
net/sched: matchall: add missing validation of TCA_MATCHALL_FLAGS
net/sched: flower: add missing validation of TCA_FLOWER_FLAGS
floppy: check FDC index for errors before assigning it
vt: selection, handle pending signals in paste_selection
staging: android: ashmem: Disallow ashmem memory from being remapped
staging: vt6656: fix sign of rx_dbm to bb_pre_ed_rssi.
xhci: Force Maximum Packet size for Full-speed bulk devices to valid range.
usb: uas: fix a plug & unplug racing
USB: Fix novation SourceControl XL after suspend
USB: hub: Don't record a connect-change event during reset-resume
staging: rtl8188eu: Fix potential security hole
staging: rtl8188eu: Fix potential overuse of kernel memory
x86/mce/amd: Publish the bank pointer only after setup has succeeded
x86/mce/amd: Fix kobject lifetime
tty/serial: atmel: manage shutdown in case of RS485 or ISO7816 mode
tty: serial: imx: setup the correct sg entry for tx dma
Revert "ipc,sem: remove uneeded sem_undo_list lock usage in exit_sem()"
xhci: apply XHCI_PME_STUCK_QUIRK to Intel Comet Lake platforms
KVM: x86: don't notify userspace IOAPIC on edge-triggered interrupt EOI
VT_RESIZEX: get rid of field-by-field copyin
vt: vt_ioctl: fix race in VT_RESIZEX
lib/stackdepot.c: fix global out-of-bounds in stack_slabs
KVM: nVMX: Don't emulate instructions in guest mode
netfilter: xt_bpf: add overflow checks
ext4: fix a data race in EXT4_I(inode)->i_disksize
ext4: add cond_resched() to __ext4_find_entry()
ext4: fix mount failure with quota configured as module
ext4: rename s_journal_flag_rwsem to s_writepages_rwsem
ext4: fix race between writepages and enabling EXT4_EXTENTS_FL
KVM: nVMX: Refactor IO bitmap checks into helper function
KVM: nVMX: Check IO instruction VM-exit conditions
KVM: apic: avoid calculating pending eoi from an uninitialized val
Btrfs: fix btrfs_wait_ordered_range() so that it waits for all ordered extents
scsi: Revert "RDMA/isert: Fix a recently introduced regression related to logout"
scsi: Revert "target: iscsi: Wait for all commands to finish before freeing a session"
usb: gadget: composite: Fix bMaxPower for SuperSpeedPlus
staging: greybus: use after free in gb_audio_manager_remove_all()
ecryptfs: replace BUG_ON with error handling code
ALSA: rawmidi: Avoid bit fields for state flags
ALSA: seq: Avoid concurrent access to queue flags
ALSA: seq: Fix concurrent access to queue current tick/time
netfilter: xt_hashlimit: limit the max size of hashtable
ata: ahci: Add shutdown to freeze hardware resources of ahci
xen: Enable interrupts when calling _cond_resched()
s390/mm: Explicitly compare PAGE_DEFAULT_KEY against zero in storage_key_init_range
Linux 4.9.215
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I4c663321dde48cd2a324e59acb70c99f75f9344e
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,6 +1,6 @@
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 9
|
||||
SUBLEVEL = 214
|
||||
SUBLEVEL = 215
|
||||
EXTRAVERSION =
|
||||
NAME = Roaring Lionus
|
||||
|
||||
|
||||
@@ -2044,7 +2044,7 @@ config XIP_PHYS_ADDR
|
||||
config KEXEC
|
||||
bool "Kexec system call (EXPERIMENTAL)"
|
||||
depends on (!SMP || PM_SLEEP_SMP)
|
||||
depends on !CPU_V7M
|
||||
depends on MMU
|
||||
select KEXEC_CORE
|
||||
help
|
||||
kexec is a system call that implements the ability to shutdown your
|
||||
|
||||
@@ -67,6 +67,14 @@
|
||||
<0xf0000100 0x100>;
|
||||
};
|
||||
|
||||
timer@f0000200 {
|
||||
compatible = "arm,cortex-a9-global-timer";
|
||||
reg = <0xf0000200 0x100>;
|
||||
interrupts = <GIC_PPI 11
|
||||
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
|
||||
clocks = <&cpg_clocks R8A7779_CLK_ZS>;
|
||||
};
|
||||
|
||||
timer@f0000600 {
|
||||
compatible = "arm,cortex-a9-twd-timer";
|
||||
reg = <0xf0000600 0x20>;
|
||||
|
||||
@@ -29,13 +29,16 @@ typedef void (*alternative_cb_t)(struct alt_instr *alt,
|
||||
void __init apply_alternatives_all(void);
|
||||
void apply_alternatives(void *start, size_t length);
|
||||
|
||||
#define ALTINSTR_ENTRY(feature,cb) \
|
||||
#define ALTINSTR_ENTRY(feature) \
|
||||
" .word 661b - .\n" /* label */ \
|
||||
" .if " __stringify(cb) " == 0\n" \
|
||||
" .word 663f - .\n" /* new instruction */ \
|
||||
" .else\n" \
|
||||
" .hword " __stringify(feature) "\n" /* feature bit */ \
|
||||
" .byte 662b-661b\n" /* source len */ \
|
||||
" .byte 664f-663f\n" /* replacement len */
|
||||
|
||||
#define ALTINSTR_ENTRY_CB(feature, cb) \
|
||||
" .word 661b - .\n" /* label */ \
|
||||
" .word " __stringify(cb) "- .\n" /* callback */ \
|
||||
" .endif\n" \
|
||||
" .hword " __stringify(feature) "\n" /* feature bit */ \
|
||||
" .byte 662b-661b\n" /* source len */ \
|
||||
" .byte 664f-663f\n" /* replacement len */
|
||||
@@ -56,15 +59,14 @@ void apply_alternatives(void *start, size_t length);
|
||||
*
|
||||
* Alternatives with callbacks do not generate replacement instructions.
|
||||
*/
|
||||
#define __ALTERNATIVE_CFG(oldinstr, newinstr, feature, cfg_enabled, cb) \
|
||||
#define __ALTERNATIVE_CFG(oldinstr, newinstr, feature, cfg_enabled) \
|
||||
".if "__stringify(cfg_enabled)" == 1\n" \
|
||||
"661:\n\t" \
|
||||
oldinstr "\n" \
|
||||
"662:\n" \
|
||||
".pushsection .altinstructions,\"a\"\n" \
|
||||
ALTINSTR_ENTRY(feature,cb) \
|
||||
ALTINSTR_ENTRY(feature) \
|
||||
".popsection\n" \
|
||||
" .if " __stringify(cb) " == 0\n" \
|
||||
".pushsection .altinstr_replacement, \"a\"\n" \
|
||||
"663:\n\t" \
|
||||
newinstr "\n" \
|
||||
@@ -72,17 +74,25 @@ void apply_alternatives(void *start, size_t length);
|
||||
".popsection\n\t" \
|
||||
".org . - (664b-663b) + (662b-661b)\n\t" \
|
||||
".org . - (662b-661b) + (664b-663b)\n" \
|
||||
".else\n\t" \
|
||||
".endif\n"
|
||||
|
||||
#define __ALTERNATIVE_CFG_CB(oldinstr, feature, cfg_enabled, cb) \
|
||||
".if "__stringify(cfg_enabled)" == 1\n" \
|
||||
"661:\n\t" \
|
||||
oldinstr "\n" \
|
||||
"662:\n" \
|
||||
".pushsection .altinstructions,\"a\"\n" \
|
||||
ALTINSTR_ENTRY_CB(feature, cb) \
|
||||
".popsection\n" \
|
||||
"663:\n\t" \
|
||||
"664:\n\t" \
|
||||
".endif\n" \
|
||||
".endif\n"
|
||||
|
||||
#define _ALTERNATIVE_CFG(oldinstr, newinstr, feature, cfg, ...) \
|
||||
__ALTERNATIVE_CFG(oldinstr, newinstr, feature, IS_ENABLED(cfg), 0)
|
||||
__ALTERNATIVE_CFG(oldinstr, newinstr, feature, IS_ENABLED(cfg))
|
||||
|
||||
#define ALTERNATIVE_CB(oldinstr, cb) \
|
||||
__ALTERNATIVE_CFG(oldinstr, "NOT_AN_INSTRUCTION", ARM64_CB_PATCH, 1, cb)
|
||||
__ALTERNATIVE_CFG_CB(oldinstr, ARM64_CB_PATCH, 1, cb)
|
||||
#else
|
||||
|
||||
#include <asm/assembler.h>
|
||||
|
||||
@@ -92,7 +92,8 @@ static inline void __disable_dcache_nomsr(void)
|
||||
#define CACHE_LOOP_LIMITS(start, end, cache_line_length, cache_size) \
|
||||
do { \
|
||||
int align = ~(cache_line_length - 1); \
|
||||
end = min(start + cache_size, end); \
|
||||
if (start < UINT_MAX - cache_size) \
|
||||
end = min(start + cache_size, end); \
|
||||
start &= align; \
|
||||
} while (0)
|
||||
|
||||
|
||||
@@ -31,6 +31,9 @@ static int __init loongson3_platform_init(void)
|
||||
continue;
|
||||
|
||||
pdev = kzalloc(sizeof(struct platform_device), GFP_KERNEL);
|
||||
if (!pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
pdev->name = loongson_sysconf.sensors[i].name;
|
||||
pdev->id = loongson_sysconf.sensors[i].id;
|
||||
pdev->dev.platform_data = &loongson_sysconf.sensors[i];
|
||||
|
||||
@@ -520,12 +520,6 @@ static void *eeh_rmv_device(void *data, void *userdata)
|
||||
|
||||
pci_iov_remove_virtfn(edev->physfn, pdn->vf_index, 0);
|
||||
edev->pdev = NULL;
|
||||
|
||||
/*
|
||||
* We have to set the VF PE number to invalid one, which is
|
||||
* required to plug the VF successfully.
|
||||
*/
|
||||
pdn->pe_number = IODA_INVALID_PE;
|
||||
#endif
|
||||
if (rmv_data)
|
||||
list_add(&edev->rmv_list, &rmv_data->edev_list);
|
||||
|
||||
@@ -271,9 +271,22 @@ void remove_dev_pci_data(struct pci_dev *pdev)
|
||||
continue;
|
||||
|
||||
#ifdef CONFIG_EEH
|
||||
/* Release EEH device for the VF */
|
||||
/*
|
||||
* Release EEH state for this VF. The PCI core
|
||||
* has already torn down the pci_dev for this VF, but
|
||||
* we're responsible to removing the eeh_dev since it
|
||||
* has the same lifetime as the pci_dn that spawned it.
|
||||
*/
|
||||
edev = pdn_to_eeh_dev(pdn);
|
||||
if (edev) {
|
||||
/*
|
||||
* We allocate pci_dn's for the totalvfs count,
|
||||
* but only only the vfs that were activated
|
||||
* have a configured PE.
|
||||
*/
|
||||
if (edev->pe)
|
||||
eeh_rmv_from_parent_pe(edev);
|
||||
|
||||
pdn->edev = NULL;
|
||||
kfree(edev);
|
||||
}
|
||||
|
||||
@@ -1524,6 +1524,10 @@ static void pnv_ioda_setup_vf_PE(struct pci_dev *pdev, u16 num_vfs)
|
||||
|
||||
/* Reserve PE for each VF */
|
||||
for (vf_index = 0; vf_index < num_vfs; vf_index++) {
|
||||
int vf_devfn = pci_iov_virtfn_devfn(pdev, vf_index);
|
||||
int vf_bus = pci_iov_virtfn_bus(pdev, vf_index);
|
||||
struct pci_dn *vf_pdn;
|
||||
|
||||
if (pdn->m64_single_mode)
|
||||
pe_num = pdn->pe_num_map[vf_index];
|
||||
else
|
||||
@@ -1536,13 +1540,11 @@ static void pnv_ioda_setup_vf_PE(struct pci_dev *pdev, u16 num_vfs)
|
||||
pe->pbus = NULL;
|
||||
pe->parent_dev = pdev;
|
||||
pe->mve_number = -1;
|
||||
pe->rid = (pci_iov_virtfn_bus(pdev, vf_index) << 8) |
|
||||
pci_iov_virtfn_devfn(pdev, vf_index);
|
||||
pe->rid = (vf_bus << 8) | vf_devfn;
|
||||
|
||||
pe_info(pe, "VF %04d:%02d:%02d.%d associated with PE#%d\n",
|
||||
hose->global_number, pdev->bus->number,
|
||||
PCI_SLOT(pci_iov_virtfn_devfn(pdev, vf_index)),
|
||||
PCI_FUNC(pci_iov_virtfn_devfn(pdev, vf_index)), pe_num);
|
||||
PCI_SLOT(vf_devfn), PCI_FUNC(vf_devfn), pe_num);
|
||||
|
||||
if (pnv_ioda_configure_pe(phb, pe)) {
|
||||
/* XXX What do we do here ? */
|
||||
@@ -1556,6 +1558,15 @@ static void pnv_ioda_setup_vf_PE(struct pci_dev *pdev, u16 num_vfs)
|
||||
list_add_tail(&pe->list, &phb->ioda.pe_list);
|
||||
mutex_unlock(&phb->ioda.pe_list_mutex);
|
||||
|
||||
/* associate this pe to it's pdn */
|
||||
list_for_each_entry(vf_pdn, &pdn->parent->child_list, list) {
|
||||
if (vf_pdn->busno == vf_bus &&
|
||||
vf_pdn->devfn == vf_devfn) {
|
||||
vf_pdn->pe_number = pe_num;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pnv_pci_ioda2_setup_dma_pe(phb, pe);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -856,16 +856,12 @@ void pnv_pci_dma_dev_setup(struct pci_dev *pdev)
|
||||
struct pnv_phb *phb = hose->private_data;
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
struct pnv_ioda_pe *pe;
|
||||
struct pci_dn *pdn;
|
||||
|
||||
/* Fix the VF pdn PE number */
|
||||
if (pdev->is_virtfn) {
|
||||
pdn = pci_get_pdn(pdev);
|
||||
WARN_ON(pdn->pe_number != IODA_INVALID_PE);
|
||||
list_for_each_entry(pe, &phb->ioda.pe_list, list) {
|
||||
if (pe->rid == ((pdev->bus->number << 8) |
|
||||
(pdev->devfn & 0xff))) {
|
||||
pdn->pe_number = pe->pe_number;
|
||||
pe->pdev = pdev;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ void __storage_key_init_range(unsigned long start, unsigned long end);
|
||||
|
||||
static inline void storage_key_init_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
if (PAGE_DEFAULT_KEY)
|
||||
if (PAGE_DEFAULT_KEY != 0)
|
||||
__storage_key_init_range(start, end);
|
||||
}
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ static inline void get_tod_clock_ext(char *clk)
|
||||
|
||||
static inline unsigned long long get_tod_clock(void)
|
||||
{
|
||||
unsigned char clk[STORE_CLOCK_EXT_SIZE];
|
||||
char clk[STORE_CLOCK_EXT_SIZE];
|
||||
|
||||
get_tod_clock_ext(clk);
|
||||
return *((unsigned long long *)&clk[1]);
|
||||
|
||||
@@ -24,6 +24,12 @@ ENTRY(ftrace_stub)
|
||||
#define STACK_PTREGS (STACK_FRAME_OVERHEAD)
|
||||
#define STACK_PTREGS_GPRS (STACK_PTREGS + __PT_GPRS)
|
||||
#define STACK_PTREGS_PSW (STACK_PTREGS + __PT_PSW)
|
||||
#ifdef __PACK_STACK
|
||||
/* allocate just enough for r14, r15 and backchain */
|
||||
#define TRACED_FUNC_FRAME_SIZE 24
|
||||
#else
|
||||
#define TRACED_FUNC_FRAME_SIZE STACK_FRAME_OVERHEAD
|
||||
#endif
|
||||
|
||||
ENTRY(_mcount)
|
||||
BR_EX %r14
|
||||
@@ -37,9 +43,16 @@ ENTRY(ftrace_caller)
|
||||
#ifndef CC_USING_HOTPATCH
|
||||
aghi %r0,MCOUNT_RETURN_FIXUP
|
||||
#endif
|
||||
aghi %r15,-STACK_FRAME_SIZE
|
||||
# allocate stack frame for ftrace_caller to contain traced function
|
||||
aghi %r15,-TRACED_FUNC_FRAME_SIZE
|
||||
stg %r1,__SF_BACKCHAIN(%r15)
|
||||
stg %r0,(__SF_GPRS+8*8)(%r15)
|
||||
stg %r15,(__SF_GPRS+9*8)(%r15)
|
||||
# allocate pt_regs and stack frame for ftrace_trace_function
|
||||
aghi %r15,-STACK_FRAME_SIZE
|
||||
stg %r1,(STACK_PTREGS_GPRS+15*8)(%r15)
|
||||
aghi %r1,-TRACED_FUNC_FRAME_SIZE
|
||||
stg %r1,__SF_BACKCHAIN(%r15)
|
||||
stg %r0,(STACK_PTREGS_PSW+8)(%r15)
|
||||
stmg %r2,%r14,(STACK_PTREGS_GPRS+2*8)(%r15)
|
||||
#ifdef CONFIG_HAVE_MARCH_Z196_FEATURES
|
||||
|
||||
@@ -79,8 +79,15 @@ enum {
|
||||
GPIO_FN_WDTOVF,
|
||||
|
||||
/* CAN */
|
||||
GPIO_FN_CTX1, GPIO_FN_CRX1, GPIO_FN_CTX0, GPIO_FN_CTX0_CTX1,
|
||||
GPIO_FN_CRX0, GPIO_FN_CRX0_CRX1, GPIO_FN_CRX0_CRX1_CRX2,
|
||||
GPIO_FN_CTX2, GPIO_FN_CRX2,
|
||||
GPIO_FN_CTX1, GPIO_FN_CRX1,
|
||||
GPIO_FN_CTX0, GPIO_FN_CRX0,
|
||||
GPIO_FN_CTX0_CTX1, GPIO_FN_CRX0_CRX1,
|
||||
GPIO_FN_CTX0_CTX1_CTX2, GPIO_FN_CRX0_CRX1_CRX2,
|
||||
GPIO_FN_CTX2_PJ21, GPIO_FN_CRX2_PJ20,
|
||||
GPIO_FN_CTX1_PJ23, GPIO_FN_CRX1_PJ22,
|
||||
GPIO_FN_CTX0_CTX1_PJ23, GPIO_FN_CRX0_CRX1_PJ22,
|
||||
GPIO_FN_CTX0_CTX1_CTX2_PJ21, GPIO_FN_CRX0_CRX1_CRX2_PJ20,
|
||||
|
||||
/* DMAC */
|
||||
GPIO_FN_TEND0, GPIO_FN_DACK0, GPIO_FN_DREQ0,
|
||||
|
||||
@@ -151,12 +151,14 @@ SECTIONS
|
||||
}
|
||||
PERCPU_SECTION(SMP_CACHE_BYTES)
|
||||
|
||||
#ifdef CONFIG_JUMP_LABEL
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
.exit.text : {
|
||||
EXIT_TEXT
|
||||
}
|
||||
#endif
|
||||
|
||||
.exit.data : {
|
||||
EXIT_DATA
|
||||
}
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__init_end = .;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm_types.h>
|
||||
#include <linux/elf.h>
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/vdso.h>
|
||||
|
||||
@@ -239,6 +239,7 @@ static const u64 amd_f17h_perfmon_event_map[PERF_COUNT_HW_MAX] =
|
||||
[PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
|
||||
[PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
|
||||
[PERF_COUNT_HW_CACHE_REFERENCES] = 0xff60,
|
||||
[PERF_COUNT_HW_CACHE_MISSES] = 0x0964,
|
||||
[PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2,
|
||||
[PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3,
|
||||
[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 0x0287,
|
||||
|
||||
@@ -1326,6 +1326,8 @@ intel_pmu_save_and_restart_reload(struct perf_event *event, int count)
|
||||
old = ((s64)(prev_raw_count << shift) >> shift);
|
||||
local64_add(new - old + count * period, &event->count);
|
||||
|
||||
local64_set(&hwc->period_left, -new);
|
||||
|
||||
perf_event_update_userpage(event);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -305,6 +305,7 @@
|
||||
/* Intel-defined CPU features, CPUID level 0x00000007:0 (ecx), word 16 */
|
||||
#define X86_FEATURE_PKU (16*32+ 3) /* Protection Keys for Userspace */
|
||||
#define X86_FEATURE_OSPKE (16*32+ 4) /* OS Protection Keys Enable */
|
||||
#define X86_FEATURE_RDPID (16*32+ 22) /* RDPID instruction */
|
||||
|
||||
/* AMD-defined CPU features, CPUID level 0x80000007 (ebx), word 17 */
|
||||
#define X86_FEATURE_OVERFLOW_RECOV (17*32+0) /* MCA overflow recovery support */
|
||||
|
||||
@@ -89,8 +89,13 @@ static inline unsigned int __getcpu(void)
|
||||
* works on all CPUs. This is volatile so that it orders
|
||||
* correctly wrt barrier() and to keep gcc from cleverly
|
||||
* hoisting it out of the calling function.
|
||||
*
|
||||
* If RDPID is available, use it.
|
||||
*/
|
||||
asm volatile ("lsl %1,%0" : "=r" (p) : "r" (__PER_CPU_SEG));
|
||||
alternative_io ("lsl %[p],%[seg]",
|
||||
".byte 0xf3,0x0f,0xc7,0xf8", /* RDPID %eax/rax */
|
||||
X86_FEATURE_RDPID,
|
||||
[p] "=a" (p), [seg] "r" (__PER_CPU_SEG));
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -846,9 +846,12 @@ static const struct sysfs_ops threshold_ops = {
|
||||
.store = store,
|
||||
};
|
||||
|
||||
static void threshold_block_release(struct kobject *kobj);
|
||||
|
||||
static struct kobj_type threshold_ktype = {
|
||||
.sysfs_ops = &threshold_ops,
|
||||
.default_attrs = default_attrs,
|
||||
.release = threshold_block_release,
|
||||
};
|
||||
|
||||
static const char *get_name(unsigned int bank, struct threshold_block *b)
|
||||
@@ -879,8 +882,9 @@ static const char *get_name(unsigned int bank, struct threshold_block *b)
|
||||
return buf_mcatype;
|
||||
}
|
||||
|
||||
static int allocate_threshold_blocks(unsigned int cpu, unsigned int bank,
|
||||
unsigned int block, u32 address)
|
||||
static int allocate_threshold_blocks(unsigned int cpu, struct threshold_bank *tb,
|
||||
unsigned int bank, unsigned int block,
|
||||
u32 address)
|
||||
{
|
||||
struct threshold_block *b = NULL;
|
||||
u32 low, high;
|
||||
@@ -924,16 +928,12 @@ static int allocate_threshold_blocks(unsigned int cpu, unsigned int bank,
|
||||
|
||||
INIT_LIST_HEAD(&b->miscj);
|
||||
|
||||
if (per_cpu(threshold_banks, cpu)[bank]->blocks) {
|
||||
list_add(&b->miscj,
|
||||
&per_cpu(threshold_banks, cpu)[bank]->blocks->miscj);
|
||||
} else {
|
||||
per_cpu(threshold_banks, cpu)[bank]->blocks = b;
|
||||
}
|
||||
if (tb->blocks)
|
||||
list_add(&b->miscj, &tb->blocks->miscj);
|
||||
else
|
||||
tb->blocks = b;
|
||||
|
||||
err = kobject_init_and_add(&b->kobj, &threshold_ktype,
|
||||
per_cpu(threshold_banks, cpu)[bank]->kobj,
|
||||
get_name(bank, b));
|
||||
err = kobject_init_and_add(&b->kobj, &threshold_ktype, tb->kobj, get_name(bank, b));
|
||||
if (err)
|
||||
goto out_free;
|
||||
recurse:
|
||||
@@ -941,7 +941,7 @@ recurse:
|
||||
if (!address)
|
||||
return 0;
|
||||
|
||||
err = allocate_threshold_blocks(cpu, bank, block, address);
|
||||
err = allocate_threshold_blocks(cpu, tb, bank, block, address);
|
||||
if (err)
|
||||
goto out_free;
|
||||
|
||||
@@ -1026,8 +1026,6 @@ static int threshold_create_bank(unsigned int cpu, unsigned int bank)
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
per_cpu(threshold_banks, cpu)[bank] = b;
|
||||
|
||||
if (is_shared_bank(bank)) {
|
||||
atomic_set(&b->cpus, 1);
|
||||
|
||||
@@ -1038,9 +1036,13 @@ static int threshold_create_bank(unsigned int cpu, unsigned int bank)
|
||||
}
|
||||
}
|
||||
|
||||
err = allocate_threshold_blocks(cpu, bank, 0, msr_ops.misc(bank));
|
||||
if (!err)
|
||||
goto out;
|
||||
err = allocate_threshold_blocks(cpu, b, bank, 0, msr_ops.misc(bank));
|
||||
if (err)
|
||||
goto out_free;
|
||||
|
||||
per_cpu(threshold_banks, cpu)[bank] = b;
|
||||
|
||||
return 0;
|
||||
|
||||
out_free:
|
||||
kfree(b);
|
||||
@@ -1074,8 +1076,12 @@ static int threshold_create_device(unsigned int cpu)
|
||||
return err;
|
||||
}
|
||||
|
||||
static void deallocate_threshold_block(unsigned int cpu,
|
||||
unsigned int bank)
|
||||
static void threshold_block_release(struct kobject *kobj)
|
||||
{
|
||||
kfree(to_block(kobj));
|
||||
}
|
||||
|
||||
static void deallocate_threshold_block(unsigned int cpu, unsigned int bank)
|
||||
{
|
||||
struct threshold_block *pos = NULL;
|
||||
struct threshold_block *tmp = NULL;
|
||||
@@ -1085,13 +1091,11 @@ static void deallocate_threshold_block(unsigned int cpu,
|
||||
return;
|
||||
|
||||
list_for_each_entry_safe(pos, tmp, &head->blocks->miscj, miscj) {
|
||||
kobject_put(&pos->kobj);
|
||||
list_del(&pos->miscj);
|
||||
kfree(pos);
|
||||
kobject_put(&pos->kobj);
|
||||
}
|
||||
|
||||
kfree(per_cpu(threshold_banks, cpu)[bank]->blocks);
|
||||
per_cpu(threshold_banks, cpu)[bank]->blocks = NULL;
|
||||
kobject_put(&head->blocks->kobj);
|
||||
}
|
||||
|
||||
static void __threshold_remove_blocks(struct threshold_bank *b)
|
||||
|
||||
@@ -94,11 +94,11 @@ __init int create_simplefb(const struct screen_info *si,
|
||||
if (si->orig_video_isVGA == VIDEO_TYPE_VLFB)
|
||||
size <<= 16;
|
||||
length = mode->height * mode->stride;
|
||||
length = PAGE_ALIGN(length);
|
||||
if (length > size) {
|
||||
printk(KERN_WARNING "sysfb: VRAM smaller than advertised\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
length = PAGE_ALIGN(length);
|
||||
|
||||
/* setup IORESOURCE_MEM as framebuffer memory */
|
||||
memset(&res, 0, sizeof(res));
|
||||
|
||||
@@ -279,13 +279,18 @@ static int __do_cpuid_ent_emulated(struct kvm_cpuid_entry2 *entry,
|
||||
{
|
||||
switch (func) {
|
||||
case 0:
|
||||
entry->eax = 1; /* only one leaf currently */
|
||||
entry->eax = 7;
|
||||
++*nent;
|
||||
break;
|
||||
case 1:
|
||||
entry->ecx = F(MOVBE);
|
||||
++*nent;
|
||||
break;
|
||||
case 7:
|
||||
entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
|
||||
if (index == 0)
|
||||
entry->ecx = F(RDPID);
|
||||
++*nent;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -3531,6 +3531,16 @@ static int em_cwd(struct x86_emulate_ctxt *ctxt)
|
||||
return X86EMUL_CONTINUE;
|
||||
}
|
||||
|
||||
static int em_rdpid(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
u64 tsc_aux = 0;
|
||||
|
||||
if (ctxt->ops->get_msr(ctxt, MSR_TSC_AUX, &tsc_aux))
|
||||
return emulate_gp(ctxt, 0);
|
||||
ctxt->dst.val = tsc_aux;
|
||||
return X86EMUL_CONTINUE;
|
||||
}
|
||||
|
||||
static int em_rdtsc(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
u64 tsc = 0;
|
||||
@@ -4391,10 +4401,20 @@ static const struct opcode group8[] = {
|
||||
F(DstMem | SrcImmByte | Lock | PageTable, em_btc),
|
||||
};
|
||||
|
||||
/*
|
||||
* The "memory" destination is actually always a register, since we come
|
||||
* from the register case of group9.
|
||||
*/
|
||||
static const struct gprefix pfx_0f_c7_7 = {
|
||||
N, N, N, II(DstMem | ModRM | Op3264 | EmulateOnUD, em_rdpid, rdtscp),
|
||||
};
|
||||
|
||||
|
||||
static const struct group_dual group9 = { {
|
||||
N, I(DstMem64 | Lock | PageTable, em_cmpxchg8b), N, N, N, N, N, N,
|
||||
}, {
|
||||
N, N, N, N, N, N, N, N,
|
||||
N, N, N, N, N, N, N,
|
||||
GP(0, &pfx_0f_c7_7),
|
||||
} };
|
||||
|
||||
static const struct opcode group11[] = {
|
||||
|
||||
@@ -436,7 +436,7 @@ void kvm_scan_ioapic_routes(struct kvm_vcpu *vcpu,
|
||||
|
||||
kvm_set_msi_irq(vcpu->kvm, entry, &irq);
|
||||
|
||||
if (irq.level && kvm_apic_match_dest(vcpu, NULL, 0,
|
||||
if (irq.trig_mode && kvm_apic_match_dest(vcpu, NULL, 0,
|
||||
irq.dest_id, irq.dest_mode))
|
||||
__set_bit(irq.vector, ioapic_handled_vectors);
|
||||
}
|
||||
|
||||
@@ -532,9 +532,11 @@ static inline bool pv_eoi_enabled(struct kvm_vcpu *vcpu)
|
||||
static bool pv_eoi_get_pending(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u8 val;
|
||||
if (pv_eoi_get_user(vcpu, &val) < 0)
|
||||
if (pv_eoi_get_user(vcpu, &val) < 0) {
|
||||
apic_debug("Can't read EOI MSR value: 0x%llx\n",
|
||||
(unsigned long long)vcpu->arch.pv_eoi.msr_val);
|
||||
return false;
|
||||
}
|
||||
return val & 0x1;
|
||||
}
|
||||
|
||||
|
||||
@@ -4641,6 +4641,26 @@ static bool cs_ss_rpl_check(struct kvm_vcpu *vcpu)
|
||||
(ss.selector & SEGMENT_RPL_MASK));
|
||||
}
|
||||
|
||||
static bool nested_vmx_check_io_bitmaps(struct kvm_vcpu *vcpu,
|
||||
unsigned int port, int size);
|
||||
static bool nested_vmx_exit_handled_io(struct kvm_vcpu *vcpu,
|
||||
struct vmcs12 *vmcs12)
|
||||
{
|
||||
unsigned long exit_qualification;
|
||||
unsigned short port;
|
||||
int size;
|
||||
|
||||
if (!nested_cpu_has(vmcs12, CPU_BASED_USE_IO_BITMAPS))
|
||||
return nested_cpu_has(vmcs12, CPU_BASED_UNCOND_IO_EXITING);
|
||||
|
||||
exit_qualification = vmcs_readl(EXIT_QUALIFICATION);
|
||||
|
||||
port = exit_qualification >> 16;
|
||||
size = (exit_qualification & 7) + 1;
|
||||
|
||||
return nested_vmx_check_io_bitmaps(vcpu, port, size);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if guest state is valid. Returns true if valid, false if
|
||||
* not.
|
||||
@@ -8026,23 +8046,17 @@ static int (*const kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = {
|
||||
static const int kvm_vmx_max_exit_handlers =
|
||||
ARRAY_SIZE(kvm_vmx_exit_handlers);
|
||||
|
||||
static bool nested_vmx_exit_handled_io(struct kvm_vcpu *vcpu,
|
||||
struct vmcs12 *vmcs12)
|
||||
/*
|
||||
* Return true if an IO instruction with the specified port and size should cause
|
||||
* a VM-exit into L1.
|
||||
*/
|
||||
bool nested_vmx_check_io_bitmaps(struct kvm_vcpu *vcpu, unsigned int port,
|
||||
int size)
|
||||
{
|
||||
unsigned long exit_qualification;
|
||||
struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
|
||||
gpa_t bitmap, last_bitmap;
|
||||
unsigned int port;
|
||||
int size;
|
||||
u8 b;
|
||||
|
||||
if (!nested_cpu_has(vmcs12, CPU_BASED_USE_IO_BITMAPS))
|
||||
return nested_cpu_has(vmcs12, CPU_BASED_UNCOND_IO_EXITING);
|
||||
|
||||
exit_qualification = vmcs_readl(EXIT_QUALIFICATION);
|
||||
|
||||
port = exit_qualification >> 16;
|
||||
size = (exit_qualification & 7) + 1;
|
||||
|
||||
last_bitmap = (gpa_t)-1;
|
||||
b = -1;
|
||||
|
||||
@@ -11334,11 +11348,71 @@ static void nested_vmx_entry_failure(struct kvm_vcpu *vcpu,
|
||||
to_vmx(vcpu)->nested.sync_shadow_vmcs = true;
|
||||
}
|
||||
|
||||
static int vmx_check_intercept_io(struct kvm_vcpu *vcpu,
|
||||
struct x86_instruction_info *info)
|
||||
{
|
||||
struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
|
||||
unsigned short port;
|
||||
bool intercept;
|
||||
int size;
|
||||
|
||||
if (info->intercept == x86_intercept_in ||
|
||||
info->intercept == x86_intercept_ins) {
|
||||
port = info->src_val;
|
||||
size = info->dst_bytes;
|
||||
} else {
|
||||
port = info->dst_val;
|
||||
size = info->src_bytes;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the 'use IO bitmaps' VM-execution control is 0, IO instruction
|
||||
* VM-exits depend on the 'unconditional IO exiting' VM-execution
|
||||
* control.
|
||||
*
|
||||
* Otherwise, IO instruction VM-exits are controlled by the IO bitmaps.
|
||||
*/
|
||||
if (!nested_cpu_has(vmcs12, CPU_BASED_USE_IO_BITMAPS))
|
||||
intercept = nested_cpu_has(vmcs12,
|
||||
CPU_BASED_UNCOND_IO_EXITING);
|
||||
else
|
||||
intercept = nested_vmx_check_io_bitmaps(vcpu, port, size);
|
||||
|
||||
return intercept ? X86EMUL_UNHANDLEABLE : X86EMUL_CONTINUE;
|
||||
}
|
||||
|
||||
static int vmx_check_intercept(struct kvm_vcpu *vcpu,
|
||||
struct x86_instruction_info *info,
|
||||
enum x86_intercept_stage stage)
|
||||
{
|
||||
return X86EMUL_CONTINUE;
|
||||
struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
|
||||
struct x86_emulate_ctxt *ctxt = &vcpu->arch.emulate_ctxt;
|
||||
|
||||
switch (info->intercept) {
|
||||
/*
|
||||
* RDPID causes #UD if disabled through secondary execution controls.
|
||||
* Because it is marked as EmulateOnUD, we need to intercept it here.
|
||||
*/
|
||||
case x86_intercept_rdtscp:
|
||||
if (!nested_cpu_has2(vmcs12, SECONDARY_EXEC_RDTSCP)) {
|
||||
ctxt->exception.vector = UD_VECTOR;
|
||||
ctxt->exception.error_code_valid = false;
|
||||
return X86EMUL_PROPAGATE_FAULT;
|
||||
}
|
||||
break;
|
||||
|
||||
case x86_intercept_in:
|
||||
case x86_intercept_ins:
|
||||
case x86_intercept_out:
|
||||
case x86_intercept_outs:
|
||||
return vmx_check_intercept_io(vcpu, info);
|
||||
|
||||
/* TODO: check more intercepts... */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return X86EMUL_UNHANDLEABLE;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -909,7 +909,7 @@ EndTable
|
||||
|
||||
GrpTable: Grp3_2
|
||||
0: TEST Ev,Iz
|
||||
1:
|
||||
1: TEST Ev,Iz
|
||||
2: NOT Ev
|
||||
3: NEG Ev
|
||||
4: MUL rAX,Ev
|
||||
|
||||
@@ -478,7 +478,6 @@ void __init efi_init(void)
|
||||
efi_char16_t *c16;
|
||||
char vendor[100] = "unknown";
|
||||
int i = 0;
|
||||
void *tmp;
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
if (boot_params.efi_info.efi_systab_hi ||
|
||||
@@ -503,14 +502,16 @@ void __init efi_init(void)
|
||||
/*
|
||||
* Show what we know for posterity
|
||||
*/
|
||||
c16 = tmp = early_memremap(efi.systab->fw_vendor, 2);
|
||||
c16 = early_memremap_ro(efi.systab->fw_vendor,
|
||||
sizeof(vendor) * sizeof(efi_char16_t));
|
||||
if (c16) {
|
||||
for (i = 0; i < sizeof(vendor) - 1 && *c16; ++i)
|
||||
vendor[i] = *c16++;
|
||||
for (i = 0; i < sizeof(vendor) - 1 && c16[i]; ++i)
|
||||
vendor[i] = c16[i];
|
||||
vendor[i] = '\0';
|
||||
} else
|
||||
early_memunmap(c16, sizeof(vendor) * sizeof(efi_char16_t));
|
||||
} else {
|
||||
pr_err("Could not map the firmware vendor!\n");
|
||||
early_memunmap(tmp, 2);
|
||||
}
|
||||
|
||||
pr_info("EFI v%u.%.02u by %s\n",
|
||||
efi.systab->hdr.revision >> 16,
|
||||
|
||||
@@ -272,7 +272,7 @@ cleanup:
|
||||
* FUNCTION: acpi_ds_get_field_names
|
||||
*
|
||||
* PARAMETERS: info - create_field info structure
|
||||
* ` walk_state - Current method state
|
||||
* walk_state - Current method state
|
||||
* arg - First parser arg for the field name list
|
||||
*
|
||||
* RETURN: Status
|
||||
|
||||
@@ -440,6 +440,27 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
|
||||
walk_state));
|
||||
|
||||
/*
|
||||
* Disassembler: handle create field operators here.
|
||||
*
|
||||
* create_buffer_field is a deferred op that is typically processed in load
|
||||
* pass 2. However, disassembly of control method contents walk the parse
|
||||
* tree with ACPI_PARSE_LOAD_PASS1 and AML_CREATE operators are processed
|
||||
* in a later walk. This is a problem when there is a control method that
|
||||
* has the same name as the AML_CREATE object. In this case, any use of the
|
||||
* name segment will be detected as a method call rather than a reference
|
||||
* to a buffer field.
|
||||
*
|
||||
* This earlier creation during disassembly solves this issue by inserting
|
||||
* the named object in the ACPI namespace so that references to this name
|
||||
* would be a name string rather than a method call.
|
||||
*/
|
||||
if ((walk_state->parse_flags & ACPI_PARSE_DISASSEMBLE) &&
|
||||
(walk_state->op_info->flags & AML_CREATE)) {
|
||||
status = acpi_ds_create_buffer_field(op, walk_state);
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/* We are only interested in opcodes that have an associated name */
|
||||
|
||||
if (!(walk_state->op_info->flags & (AML_NAMED | AML_FIELD))) {
|
||||
|
||||
@@ -86,6 +86,7 @@ enum board_ids {
|
||||
|
||||
static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
|
||||
static void ahci_remove_one(struct pci_dev *dev);
|
||||
static void ahci_shutdown_one(struct pci_dev *dev);
|
||||
static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
|
||||
unsigned long deadline);
|
||||
static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
|
||||
@@ -582,6 +583,7 @@ static struct pci_driver ahci_pci_driver = {
|
||||
.id_table = ahci_pci_tbl,
|
||||
.probe = ahci_init_one,
|
||||
.remove = ahci_remove_one,
|
||||
.shutdown = ahci_shutdown_one,
|
||||
.driver = {
|
||||
.pm = &ahci_pci_pm_ops,
|
||||
},
|
||||
@@ -1775,6 +1777,11 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ahci_shutdown_one(struct pci_dev *pdev)
|
||||
{
|
||||
ata_pci_shutdown_one(pdev);
|
||||
}
|
||||
|
||||
static void ahci_remove_one(struct pci_dev *pdev)
|
||||
{
|
||||
pm_runtime_get_noresume(&pdev->dev);
|
||||
|
||||
@@ -6580,6 +6580,26 @@ void ata_pci_remove_one(struct pci_dev *pdev)
|
||||
ata_host_detach(host);
|
||||
}
|
||||
|
||||
void ata_pci_shutdown_one(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
struct ata_port *ap = host->ports[i];
|
||||
|
||||
ap->pflags |= ATA_PFLAG_FROZEN;
|
||||
|
||||
/* Disable port interrupts */
|
||||
if (ap->ops->freeze)
|
||||
ap->ops->freeze(ap);
|
||||
|
||||
/* Stop the port DMA engines */
|
||||
if (ap->ops->port_stop)
|
||||
ap->ops->port_stop(ap);
|
||||
}
|
||||
}
|
||||
|
||||
/* move to PCI subsystem */
|
||||
int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits)
|
||||
{
|
||||
@@ -7200,6 +7220,7 @@ EXPORT_SYMBOL_GPL(ata_timing_cycle2mode);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
EXPORT_SYMBOL_GPL(pci_test_config_bits);
|
||||
EXPORT_SYMBOL_GPL(ata_pci_shutdown_one);
|
||||
EXPORT_SYMBOL_GPL(ata_pci_remove_one);
|
||||
#ifdef CONFIG_PM
|
||||
EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend);
|
||||
|
||||
@@ -341,7 +341,10 @@ static int really_probe(struct device *dev, struct device_driver *drv)
|
||||
atomic_inc(&probe_count);
|
||||
pr_debug("bus: '%s': %s: probing driver %s with device %s\n",
|
||||
drv->bus->name, __func__, drv->name, dev_name(dev));
|
||||
WARN_ON(!list_empty(&dev->devres_head));
|
||||
if (!list_empty(&dev->devres_head)) {
|
||||
dev_crit(dev, "Resources present before probing\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
re_probe:
|
||||
dev->driver = drv;
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <linux/limits.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/kmemleak.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "base.h"
|
||||
#include "power/power.h"
|
||||
@@ -68,7 +69,7 @@ void __weak arch_setup_pdev_archdata(struct platform_device *pdev)
|
||||
struct resource *platform_get_resource(struct platform_device *dev,
|
||||
unsigned int type, unsigned int num)
|
||||
{
|
||||
int i;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < dev->num_resources; i++) {
|
||||
struct resource *r = &dev->resource[i];
|
||||
@@ -153,7 +154,7 @@ struct resource *platform_get_resource_byname(struct platform_device *dev,
|
||||
unsigned int type,
|
||||
const char *name)
|
||||
{
|
||||
int i;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < dev->num_resources; i++) {
|
||||
struct resource *r = &dev->resource[i];
|
||||
@@ -350,7 +351,8 @@ EXPORT_SYMBOL_GPL(platform_device_add_properties);
|
||||
*/
|
||||
int platform_device_add(struct platform_device *pdev)
|
||||
{
|
||||
int i, ret;
|
||||
u32 i;
|
||||
int ret;
|
||||
|
||||
if (!pdev)
|
||||
return -EINVAL;
|
||||
@@ -416,7 +418,7 @@ int platform_device_add(struct platform_device *pdev)
|
||||
pdev->id = PLATFORM_DEVID_AUTO;
|
||||
}
|
||||
|
||||
while (--i >= 0) {
|
||||
while (i--) {
|
||||
struct resource *r = &pdev->resource[i];
|
||||
if (r->parent)
|
||||
release_resource(r);
|
||||
@@ -437,7 +439,7 @@ EXPORT_SYMBOL_GPL(platform_device_add);
|
||||
*/
|
||||
void platform_device_del(struct platform_device *pdev)
|
||||
{
|
||||
int i;
|
||||
u32 i;
|
||||
|
||||
if (pdev) {
|
||||
device_remove_properties(&pdev->dev);
|
||||
|
||||
@@ -581,6 +581,25 @@ static struct kobject *brd_probe(dev_t dev, int *part, void *data)
|
||||
return kobj;
|
||||
}
|
||||
|
||||
static inline void brd_check_and_reset_par(void)
|
||||
{
|
||||
if (unlikely(!max_part))
|
||||
max_part = 1;
|
||||
|
||||
/*
|
||||
* make sure 'max_part' can be divided exactly by (1U << MINORBITS),
|
||||
* otherwise, it is possiable to get same dev_t when adding partitions.
|
||||
*/
|
||||
if ((1U << MINORBITS) % max_part != 0)
|
||||
max_part = 1UL << fls(max_part);
|
||||
|
||||
if (max_part > DISK_MAX_PARTS) {
|
||||
pr_info("brd: max_part can't be larger than %d, reset max_part = %d.\n",
|
||||
DISK_MAX_PARTS, DISK_MAX_PARTS);
|
||||
max_part = DISK_MAX_PARTS;
|
||||
}
|
||||
}
|
||||
|
||||
static int __init brd_init(void)
|
||||
{
|
||||
struct brd_device *brd, *next;
|
||||
@@ -604,8 +623,7 @@ static int __init brd_init(void)
|
||||
if (register_blkdev(RAMDISK_MAJOR, "ramdisk"))
|
||||
return -EIO;
|
||||
|
||||
if (unlikely(!max_part))
|
||||
max_part = 1;
|
||||
brd_check_and_reset_par();
|
||||
|
||||
for (i = 0; i < rd_nr; i++) {
|
||||
brd = brd_alloc(i);
|
||||
|
||||
@@ -848,14 +848,17 @@ static void reset_fdc_info(int mode)
|
||||
/* selects the fdc and drive, and enables the fdc's input/dma. */
|
||||
static void set_fdc(int drive)
|
||||
{
|
||||
unsigned int new_fdc = fdc;
|
||||
|
||||
if (drive >= 0 && drive < N_DRIVE) {
|
||||
fdc = FDC(drive);
|
||||
new_fdc = FDC(drive);
|
||||
current_drive = drive;
|
||||
}
|
||||
if (fdc != 1 && fdc != 0) {
|
||||
if (new_fdc >= N_FDC) {
|
||||
pr_info("bad fdc value\n");
|
||||
return;
|
||||
}
|
||||
fdc = new_fdc;
|
||||
set_dor(fdc, ~0, 8);
|
||||
#if N_FDC > 1
|
||||
set_dor(1 - fdc, ~8, 0);
|
||||
|
||||
@@ -194,6 +194,9 @@ static int _freq_tbl_determine_rate(struct clk_hw *hw,
|
||||
|
||||
clk_flags = clk_hw_get_flags(hw);
|
||||
p = clk_hw_get_parent_by_index(hw, index);
|
||||
if (!p)
|
||||
return -EINVAL;
|
||||
|
||||
if (clk_flags & CLK_SET_RATE_PARENT) {
|
||||
if (f->pre_div) {
|
||||
if (!rate)
|
||||
|
||||
@@ -102,7 +102,8 @@ config ARM_TEGRA_DEVFREQ
|
||||
|
||||
config ARM_RK3399_DMC_DEVFREQ
|
||||
tristate "ARM RK3399 DMC DEVFREQ Driver"
|
||||
depends on ARCH_ROCKCHIP
|
||||
depends on (ARCH_ROCKCHIP && HAVE_ARM_SMCCC) || \
|
||||
(COMPILE_TEST && HAVE_ARM_SMCCC)
|
||||
select DEVFREQ_EVENT_ROCKCHIP_DFI
|
||||
select DEVFREQ_GOV_SIMPLE_ONDEMAND
|
||||
select PM_DEVFREQ_EVENT
|
||||
|
||||
@@ -33,7 +33,7 @@ config DEVFREQ_EVENT_EXYNOS_PPMU
|
||||
|
||||
config DEVFREQ_EVENT_ROCKCHIP_DFI
|
||||
tristate "ROCKCHIP DFI DEVFREQ event Driver"
|
||||
depends on ARCH_ROCKCHIP
|
||||
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
||||
help
|
||||
This add the devfreq-event driver for Rockchip SoC. It provides DFI
|
||||
(DDR Monitor Module) driver to count ddr load.
|
||||
|
||||
@@ -259,17 +259,16 @@ static int grgpio_irq_map(struct irq_domain *d, unsigned int irq,
|
||||
lirq->irq = irq;
|
||||
uirq = &priv->uirqs[lirq->index];
|
||||
if (uirq->refcnt == 0) {
|
||||
spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags);
|
||||
ret = request_irq(uirq->uirq, grgpio_irq_handler, 0,
|
||||
dev_name(priv->dev), priv);
|
||||
if (ret) {
|
||||
dev_err(priv->dev,
|
||||
"Could not request underlying irq %d\n",
|
||||
uirq->uirq);
|
||||
|
||||
spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
spin_lock_irqsave(&priv->gc.bgpio_lock, flags);
|
||||
}
|
||||
uirq->refcnt++;
|
||||
|
||||
@@ -315,8 +314,11 @@ static void grgpio_irq_unmap(struct irq_domain *d, unsigned int irq)
|
||||
if (index >= 0) {
|
||||
uirq = &priv->uirqs[lirq->index];
|
||||
uirq->refcnt--;
|
||||
if (uirq->refcnt == 0)
|
||||
if (uirq->refcnt == 0) {
|
||||
spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags);
|
||||
free_irq(uirq->uirq, priv);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&priv->gc.bgpio_lock, flags);
|
||||
|
||||
@@ -336,17 +336,9 @@ bool amdgpu_atombios_get_connector_info_from_object_table(struct amdgpu_device *
|
||||
path_size += le16_to_cpu(path->usSize);
|
||||
|
||||
if (device_support & le16_to_cpu(path->usDeviceTag)) {
|
||||
uint8_t con_obj_id, con_obj_num, con_obj_type;
|
||||
|
||||
con_obj_id =
|
||||
uint8_t con_obj_id =
|
||||
(le16_to_cpu(path->usConnObjectId) & OBJECT_ID_MASK)
|
||||
>> OBJECT_ID_SHIFT;
|
||||
con_obj_num =
|
||||
(le16_to_cpu(path->usConnObjectId) & ENUM_ID_MASK)
|
||||
>> ENUM_ID_SHIFT;
|
||||
con_obj_type =
|
||||
(le16_to_cpu(path->usConnObjectId) &
|
||||
OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT;
|
||||
|
||||
/* Skip TV/CV support */
|
||||
if ((le16_to_cpu(path->usDeviceTag) ==
|
||||
@@ -371,14 +363,7 @@ bool amdgpu_atombios_get_connector_info_from_object_table(struct amdgpu_device *
|
||||
router.ddc_valid = false;
|
||||
router.cd_valid = false;
|
||||
for (j = 0; j < ((le16_to_cpu(path->usSize) - 8) / 2); j++) {
|
||||
uint8_t grph_obj_id, grph_obj_num, grph_obj_type;
|
||||
|
||||
grph_obj_id =
|
||||
(le16_to_cpu(path->usGraphicObjIds[j]) &
|
||||
OBJECT_ID_MASK) >> OBJECT_ID_SHIFT;
|
||||
grph_obj_num =
|
||||
(le16_to_cpu(path->usGraphicObjIds[j]) &
|
||||
ENUM_ID_MASK) >> ENUM_ID_SHIFT;
|
||||
uint8_t grph_obj_type=
|
||||
grph_obj_type =
|
||||
(le16_to_cpu(path->usGraphicObjIds[j]) &
|
||||
OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT;
|
||||
|
||||
@@ -516,6 +516,7 @@ static int psbfb_probe(struct drm_fb_helper *helper,
|
||||
container_of(helper, struct psb_fbdev, psb_fb_helper);
|
||||
struct drm_device *dev = psb_fbdev->psb_fb_helper.dev;
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
unsigned int fb_size;
|
||||
int bytespp;
|
||||
|
||||
bytespp = sizes->surface_bpp / 8;
|
||||
@@ -525,8 +526,11 @@ static int psbfb_probe(struct drm_fb_helper *helper,
|
||||
/* If the mode will not fit in 32bit then switch to 16bit to get
|
||||
a console on full resolution. The X mode setting server will
|
||||
allocate its own 32bit GEM framebuffer */
|
||||
if (ALIGN(sizes->fb_width * bytespp, 64) * sizes->fb_height >
|
||||
dev_priv->vram_stolen_size) {
|
||||
fb_size = ALIGN(sizes->surface_width * bytespp, 64) *
|
||||
sizes->surface_height;
|
||||
fb_size = ALIGN(fb_size, PAGE_SIZE);
|
||||
|
||||
if (fb_size > dev_priv->vram_stolen_size) {
|
||||
sizes->surface_bpp = 16;
|
||||
sizes->surface_depth = 16;
|
||||
}
|
||||
|
||||
@@ -306,6 +306,7 @@ err_pm_runtime_put:
|
||||
static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
|
||||
{
|
||||
struct drm_device *drm = mtk_crtc->base.dev;
|
||||
struct drm_crtc *crtc = &mtk_crtc->base;
|
||||
int i;
|
||||
|
||||
DRM_DEBUG_DRIVER("%s\n", __func__);
|
||||
@@ -327,6 +328,13 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc)
|
||||
mtk_disp_mutex_unprepare(mtk_crtc->mutex);
|
||||
|
||||
pm_runtime_put(drm->dev);
|
||||
|
||||
if (crtc->state->event && !crtc->state->active) {
|
||||
spin_lock_irq(&crtc->dev->event_lock);
|
||||
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
||||
crtc->state->event = NULL;
|
||||
spin_unlock_irq(&crtc->dev->event_lock);
|
||||
}
|
||||
}
|
||||
|
||||
static void mtk_drm_crtc_enable(struct drm_crtc *crtc)
|
||||
|
||||
@@ -158,7 +158,7 @@ nouveau_fence_wait_uevent_handler(struct nvif_notify *notify)
|
||||
|
||||
fence = list_entry(fctx->pending.next, typeof(*fence), head);
|
||||
chan = rcu_dereference_protected(fence->channel, lockdep_is_held(&fctx->lock));
|
||||
if (nouveau_fence_update(fence->channel, fctx))
|
||||
if (nouveau_fence_update(chan, fctx))
|
||||
ret = NVIF_NOTIFY_DROP;
|
||||
}
|
||||
spin_unlock_irqrestore(&fctx->lock, flags);
|
||||
|
||||
@@ -72,6 +72,8 @@ nv50_disp_chan_mthd(struct nv50_disp_chan *chan, int debug)
|
||||
|
||||
if (debug > subdev->debug)
|
||||
return;
|
||||
if (!mthd)
|
||||
return;
|
||||
|
||||
for (i = 0; (list = mthd->data[i].mthd) != NULL; i++) {
|
||||
u32 base = chan->head * mthd->addr;
|
||||
|
||||
@@ -143,23 +143,24 @@ gk20a_gr_av_to_method(struct gf100_gr *gr, const char *fw_name,
|
||||
|
||||
nent = (fuc.size / sizeof(struct gk20a_fw_av));
|
||||
|
||||
pack = vzalloc((sizeof(*pack) * max_classes) +
|
||||
(sizeof(*init) * (nent + 1)));
|
||||
pack = vzalloc((sizeof(*pack) * (max_classes + 1)) +
|
||||
(sizeof(*init) * (nent + max_classes + 1)));
|
||||
if (!pack) {
|
||||
ret = -ENOMEM;
|
||||
goto end;
|
||||
}
|
||||
|
||||
init = (void *)(pack + max_classes);
|
||||
init = (void *)(pack + max_classes + 1);
|
||||
|
||||
for (i = 0; i < nent; i++) {
|
||||
struct gf100_gr_init *ent = &init[i];
|
||||
for (i = 0; i < nent; i++, init++) {
|
||||
struct gk20a_fw_av *av = &((struct gk20a_fw_av *)fuc.data)[i];
|
||||
u32 class = av->addr & 0xffff;
|
||||
u32 addr = (av->addr & 0xffff0000) >> 14;
|
||||
|
||||
if (prevclass != class) {
|
||||
pack[classidx].init = ent;
|
||||
if (prevclass) /* Add terminator to the method list. */
|
||||
init++;
|
||||
pack[classidx].init = init;
|
||||
pack[classidx].type = class;
|
||||
prevclass = class;
|
||||
if (++classidx >= max_classes) {
|
||||
@@ -169,10 +170,10 @@ gk20a_gr_av_to_method(struct gf100_gr *gr, const char *fw_name,
|
||||
}
|
||||
}
|
||||
|
||||
ent->addr = addr;
|
||||
ent->data = av->data;
|
||||
ent->count = 1;
|
||||
ent->pitch = 1;
|
||||
init->addr = addr;
|
||||
init->data = av->data;
|
||||
init->count = 1;
|
||||
init->pitch = 1;
|
||||
}
|
||||
|
||||
*ppack = pack;
|
||||
|
||||
@@ -110,6 +110,8 @@ static void dce5_crtc_load_lut(struct drm_crtc *crtc)
|
||||
|
||||
DRM_DEBUG_KMS("%d\n", radeon_crtc->crtc_id);
|
||||
|
||||
msleep(10);
|
||||
|
||||
WREG32(NI_INPUT_CSC_CONTROL + radeon_crtc->crtc_offset,
|
||||
(NI_INPUT_CSC_GRPH_MODE(NI_INPUT_CSC_BYPASS) |
|
||||
NI_INPUT_CSC_OVL_MODE(NI_INPUT_CSC_BYPASS)));
|
||||
|
||||
@@ -210,8 +210,10 @@ int vmw_cmdbuf_res_add(struct vmw_cmdbuf_res_manager *man,
|
||||
|
||||
cres->hash.key = user_key | (res_type << 24);
|
||||
ret = drm_ht_insert_item(&man->resources, &cres->hash);
|
||||
if (unlikely(ret != 0))
|
||||
if (unlikely(ret != 0)) {
|
||||
kfree(cres);
|
||||
goto out_invalid_key;
|
||||
}
|
||||
|
||||
cres->state = VMW_CMDBUF_RES_ADD;
|
||||
cres->res = vmw_resource_reference(res);
|
||||
|
||||
@@ -89,8 +89,8 @@ enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882,
|
||||
|
||||
#define LTC_POLL_TIMEOUT 100 /* in milli-seconds */
|
||||
|
||||
#define LTC_NOT_BUSY BIT(5)
|
||||
#define LTC_NOT_PENDING BIT(4)
|
||||
#define LTC_NOT_BUSY BIT(6)
|
||||
#define LTC_NOT_PENDING BIT(5)
|
||||
|
||||
/*
|
||||
* LTC2978 clears peak data whenever the CLEAR_FAULTS command is executed, which
|
||||
|
||||
@@ -65,6 +65,9 @@ static void cmd64x_program_timings(ide_drive_t *drive, u8 mode)
|
||||
struct ide_timing t;
|
||||
u8 arttim = 0;
|
||||
|
||||
if (drive->dn >= ARRAY_SIZE(drwtim_regs))
|
||||
return;
|
||||
|
||||
ide_timing_compute(drive, mode, &t, T, 0);
|
||||
|
||||
/*
|
||||
|
||||
@@ -114,6 +114,9 @@ static void svwks_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
|
||||
struct pci_dev *dev = to_pci_dev(hwif->dev);
|
||||
const u8 pio = drive->pio_mode - XFER_PIO_0;
|
||||
|
||||
if (drive->dn >= ARRAY_SIZE(drive_pci))
|
||||
return;
|
||||
|
||||
pci_write_config_byte(dev, drive_pci[drive->dn], pio_modes[pio]);
|
||||
|
||||
if (svwks_csb_check(dev)) {
|
||||
@@ -140,6 +143,9 @@ static void svwks_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive)
|
||||
|
||||
u8 ultra_enable = 0, ultra_timing = 0, dma_timing = 0;
|
||||
|
||||
if (drive->dn >= ARRAY_SIZE(drive_pci2))
|
||||
return;
|
||||
|
||||
pci_read_config_byte(dev, (0x56|hwif->channel), &ultra_timing);
|
||||
pci_read_config_byte(dev, 0x54, &ultra_enable);
|
||||
|
||||
|
||||
@@ -422,7 +422,7 @@ struct rxe_dev {
|
||||
struct list_head pending_mmaps;
|
||||
|
||||
spinlock_t mmap_offset_lock; /* guard mmap_offset */
|
||||
int mmap_offset;
|
||||
u64 mmap_offset;
|
||||
|
||||
struct rxe_port port;
|
||||
struct list_head list;
|
||||
|
||||
@@ -2555,6 +2555,17 @@ isert_wait4logout(struct isert_conn *isert_conn)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
isert_wait4cmds(struct iscsi_conn *conn)
|
||||
{
|
||||
isert_info("iscsi_conn %p\n", conn);
|
||||
|
||||
if (conn->sess) {
|
||||
target_sess_cmd_list_set_waiting(conn->sess->se_sess);
|
||||
target_wait_for_sess_cmds(conn->sess->se_sess);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* isert_put_unsol_pending_cmds() - Drop commands waiting for
|
||||
* unsolicitate dataout
|
||||
@@ -2602,6 +2613,7 @@ static void isert_wait_conn(struct iscsi_conn *conn)
|
||||
|
||||
ib_drain_qp(isert_conn->qp);
|
||||
isert_put_unsol_pending_cmds(conn);
|
||||
isert_wait4cmds(conn);
|
||||
isert_wait4logout(isert_conn);
|
||||
|
||||
queue_work(isert_release_wq, &isert_conn->release_work);
|
||||
|
||||
@@ -887,6 +887,7 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
|
||||
{
|
||||
const struct edt_i2c_chip_data *chip_data;
|
||||
struct edt_ft5x06_ts_data *tsdata;
|
||||
u8 buf[2] = { 0xfc, 0x00 };
|
||||
struct input_dev *input;
|
||||
unsigned long irq_flags;
|
||||
int error;
|
||||
@@ -956,6 +957,12 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Dummy read access. EP0700MLP1 returns bogus data on the first
|
||||
* register read access and ignores writes.
|
||||
*/
|
||||
edt_ft5x06_ts_readwrite(tsdata->client, 2, buf, 2, buf);
|
||||
|
||||
edt_ft5x06_ts_set_regs(tsdata);
|
||||
edt_ft5x06_ts_get_defaults(&client->dev, tsdata);
|
||||
edt_ft5x06_ts_get_parameters(tsdata);
|
||||
|
||||
@@ -1103,7 +1103,8 @@ static void arm_smmu_write_strtab_ent(struct arm_smmu_device *smmu, u32 sid,
|
||||
}
|
||||
|
||||
arm_smmu_sync_ste_for_sid(smmu, sid);
|
||||
dst[0] = cpu_to_le64(val);
|
||||
/* See comment in arm_smmu_write_ctx_desc() */
|
||||
WRITE_ONCE(dst[0], cpu_to_le64(val));
|
||||
arm_smmu_sync_ste_for_sid(smmu, sid);
|
||||
|
||||
/* It's likely that we'll want to use the new STE soon */
|
||||
|
||||
@@ -365,7 +365,7 @@ static struct its_collection *its_build_invall_cmd(struct its_cmd_block *cmd,
|
||||
struct its_cmd_desc *desc)
|
||||
{
|
||||
its_encode_cmd(cmd, GITS_CMD_INVALL);
|
||||
its_encode_collection(cmd, desc->its_mapc_cmd.col->col_id);
|
||||
its_encode_collection(cmd, desc->its_invall_cmd.col->col_id);
|
||||
|
||||
its_fixup_cmd(cmd);
|
||||
|
||||
|
||||
@@ -1195,6 +1195,7 @@ static struct
|
||||
struct redist_region *redist_regs;
|
||||
u32 nr_redist_regions;
|
||||
bool single_redist;
|
||||
int enabled_rdists;
|
||||
u32 maint_irq;
|
||||
int maint_irq_mode;
|
||||
phys_addr_t vcpu_base;
|
||||
@@ -1289,8 +1290,10 @@ static int __init gic_acpi_match_gicc(struct acpi_subtable_header *header,
|
||||
* If GICC is enabled and has valid gicr base address, then it means
|
||||
* GICR base is presented via GICC
|
||||
*/
|
||||
if ((gicc->flags & ACPI_MADT_ENABLED) && gicc->gicr_base_address)
|
||||
if ((gicc->flags & ACPI_MADT_ENABLED) && gicc->gicr_base_address) {
|
||||
acpi_data.enabled_rdists++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* It's perfectly valid firmware can pass disabled GICC entry, driver
|
||||
@@ -1320,8 +1323,10 @@ static int __init gic_acpi_count_gicr_regions(void)
|
||||
|
||||
count = acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_INTERRUPT,
|
||||
gic_acpi_match_gicc, 0);
|
||||
if (count > 0)
|
||||
if (count > 0) {
|
||||
acpi_data.single_redist = true;
|
||||
count = acpi_data.enabled_rdists;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -380,7 +380,8 @@ void bch_btree_keys_stats(struct btree_keys *, struct bset_stats *);
|
||||
|
||||
/* Bkey utility code */
|
||||
|
||||
#define bset_bkey_last(i) bkey_idx((struct bkey *) (i)->d, (i)->keys)
|
||||
#define bset_bkey_last(i) bkey_idx((struct bkey *) (i)->d, \
|
||||
(unsigned int)(i)->keys)
|
||||
|
||||
static inline struct bkey *bset_bkey_idx(struct bset *i, unsigned idx)
|
||||
{
|
||||
|
||||
@@ -423,10 +423,12 @@ static int mt9v032_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
|
||||
if (code->index > 0)
|
||||
return -EINVAL;
|
||||
|
||||
code->code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
code->code = mt9v032->format.code;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -434,7 +436,11 @@ static int mt9v032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= 3 || fse->code != MEDIA_BUS_FMT_SGRBG10_1X10)
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
|
||||
if (fse->index >= 3)
|
||||
return -EINVAL;
|
||||
if (mt9v032->format.code != fse->code)
|
||||
return -EINVAL;
|
||||
|
||||
fse->min_width = MT9V032_WINDOW_WIDTH_DEF / (1 << fse->index);
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
#define MAX_SRC_WIDTH 2048
|
||||
|
||||
/* Reset & boot poll config */
|
||||
#define POLL_RST_MAX 50
|
||||
#define POLL_RST_DELAY_MS 20
|
||||
#define POLL_RST_MAX 500
|
||||
#define POLL_RST_DELAY_MS 2
|
||||
|
||||
enum bdisp_target_plan {
|
||||
BDISP_RGB,
|
||||
@@ -382,7 +382,7 @@ int bdisp_hw_reset(struct bdisp_dev *bdisp)
|
||||
for (i = 0; i < POLL_RST_MAX; i++) {
|
||||
if (readl(bdisp->regs + BLT_STA1) & BLT_STA1_IDLE)
|
||||
break;
|
||||
msleep(POLL_RST_DELAY_MS);
|
||||
udelay(POLL_RST_DELAY_MS * 1000);
|
||||
}
|
||||
if (i == POLL_RST_MAX)
|
||||
dev_err(bdisp->dev, "Reset timeout\n");
|
||||
|
||||
@@ -1806,10 +1806,10 @@ static int enic_stop(struct net_device *netdev)
|
||||
}
|
||||
|
||||
netif_carrier_off(netdev);
|
||||
netif_tx_disable(netdev);
|
||||
if (vnic_dev_get_intr_mode(enic->vdev) == VNIC_DEV_INTR_MODE_MSIX)
|
||||
for (i = 0; i < enic->wq_count; i++)
|
||||
napi_disable(&enic->napi[enic_cq_wq(enic, i)]);
|
||||
netif_tx_disable(netdev);
|
||||
|
||||
if (!enic_is_dynamic(enic) && !enic_is_sriov_vf(enic))
|
||||
enic_dev_del_station_addr(enic);
|
||||
|
||||
@@ -2688,13 +2688,17 @@ static void gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
|
||||
skb_dirtytx = tx_queue->skb_dirtytx;
|
||||
|
||||
while ((skb = tx_queue->tx_skbuff[skb_dirtytx])) {
|
||||
bool do_tstamp;
|
||||
|
||||
do_tstamp = (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
|
||||
priv->hwts_tx_en;
|
||||
|
||||
frags = skb_shinfo(skb)->nr_frags;
|
||||
|
||||
/* When time stamping, one additional TxBD must be freed.
|
||||
* Also, we need to dma_unmap_single() the TxPAL.
|
||||
*/
|
||||
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS))
|
||||
if (unlikely(do_tstamp))
|
||||
nr_txbds = frags + 2;
|
||||
else
|
||||
nr_txbds = frags + 1;
|
||||
@@ -2708,7 +2712,7 @@ static void gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
|
||||
(lstatus & BD_LENGTH_MASK))
|
||||
break;
|
||||
|
||||
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {
|
||||
if (unlikely(do_tstamp)) {
|
||||
next = next_txbd(bdp, base, tx_ring_size);
|
||||
buflen = be16_to_cpu(next->length) +
|
||||
GMAC_FCB_LEN + GMAC_TXPAL_LEN;
|
||||
@@ -2718,7 +2722,7 @@ static void gfar_clean_tx_ring(struct gfar_priv_tx_q *tx_queue)
|
||||
dma_unmap_single(priv->dev, be32_to_cpu(bdp->bufPtr),
|
||||
buflen, DMA_TO_DEVICE);
|
||||
|
||||
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {
|
||||
if (unlikely(do_tstamp)) {
|
||||
struct skb_shared_hwtstamps shhwtstamps;
|
||||
u64 *ns = (u64 *)(((uintptr_t)skb->data + 0x10) &
|
||||
~0x7UL);
|
||||
|
||||
@@ -209,6 +209,11 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
|
||||
ret = -ENOMEM;
|
||||
goto free_riptr;
|
||||
}
|
||||
if (riptr != (u16)riptr || tiptr != (u16)tiptr) {
|
||||
dev_err(priv->dev, "MURAM allocation out of addressable range\n");
|
||||
ret = -ENOMEM;
|
||||
goto free_tiptr;
|
||||
}
|
||||
|
||||
/* Set RIPTR, TIPTR */
|
||||
iowrite16be(riptr, &priv->ucc_pram->riptr);
|
||||
|
||||
@@ -261,7 +261,7 @@ struct port {
|
||||
struct hss_plat_info *plat;
|
||||
buffer_t *rx_buff_tab[RX_DESCS], *tx_buff_tab[TX_DESCS];
|
||||
struct desc *desc_tab; /* coherent */
|
||||
u32 desc_tab_phys;
|
||||
dma_addr_t desc_tab_phys;
|
||||
unsigned int id;
|
||||
unsigned int clock_type, clock_rate, loopback;
|
||||
unsigned int initialized, carrier;
|
||||
@@ -861,7 +861,7 @@ static int hss_hdlc_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
dev->stats.tx_dropped++;
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
memcpy_swab32(mem, (u32 *)((int)skb->data & ~3), bytes / 4);
|
||||
memcpy_swab32(mem, (u32 *)((uintptr_t)skb->data & ~3), bytes / 4);
|
||||
dev_kfree_skb(skb);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1304,8 +1304,9 @@ static void handle_irq_ucode_debug(struct b43legacy_wldev *dev)
|
||||
}
|
||||
|
||||
/* Interrupt handler bottom-half */
|
||||
static void b43legacy_interrupt_tasklet(struct b43legacy_wldev *dev)
|
||||
static void b43legacy_interrupt_tasklet(unsigned long data)
|
||||
{
|
||||
struct b43legacy_wldev *dev = (struct b43legacy_wldev *)data;
|
||||
u32 reason;
|
||||
u32 dma_reason[ARRAY_SIZE(dev->dma_reason)];
|
||||
u32 merged_dma_reason = 0;
|
||||
@@ -3775,7 +3776,7 @@ static int b43legacy_one_core_attach(struct ssb_device *dev,
|
||||
b43legacy_set_status(wldev, B43legacy_STAT_UNINIT);
|
||||
wldev->bad_frames_preempt = modparam_bad_frames_preempt;
|
||||
tasklet_init(&wldev->isr_tasklet,
|
||||
(void (*)(unsigned long))b43legacy_interrupt_tasklet,
|
||||
b43legacy_interrupt_tasklet,
|
||||
(unsigned long)wldev);
|
||||
if (modparam_pio)
|
||||
wldev->__using_pio = true;
|
||||
|
||||
@@ -1921,6 +1921,7 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)
|
||||
BRCMF_SDIO_FT_NORMAL)) {
|
||||
rd->len = 0;
|
||||
brcmu_pkt_buf_free_skb(pkt);
|
||||
continue;
|
||||
}
|
||||
bus->sdcnt.rx_readahead_cnt++;
|
||||
if (rd->len != roundup(rd_new.len, 16)) {
|
||||
|
||||
@@ -3220,8 +3220,9 @@ static void ipw2100_tx_send_data(struct ipw2100_priv *priv)
|
||||
}
|
||||
}
|
||||
|
||||
static void ipw2100_irq_tasklet(struct ipw2100_priv *priv)
|
||||
static void ipw2100_irq_tasklet(unsigned long data)
|
||||
{
|
||||
struct ipw2100_priv *priv = (struct ipw2100_priv *)data;
|
||||
struct net_device *dev = priv->net_dev;
|
||||
unsigned long flags;
|
||||
u32 inta, tmp;
|
||||
@@ -6029,7 +6030,7 @@ static void ipw2100_rf_kill(struct work_struct *work)
|
||||
spin_unlock_irqrestore(&priv->low_lock, flags);
|
||||
}
|
||||
|
||||
static void ipw2100_irq_tasklet(struct ipw2100_priv *priv);
|
||||
static void ipw2100_irq_tasklet(unsigned long data);
|
||||
|
||||
static const struct net_device_ops ipw2100_netdev_ops = {
|
||||
.ndo_open = ipw2100_open,
|
||||
@@ -6158,7 +6159,7 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
|
||||
INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
|
||||
INIT_DELAYED_WORK(&priv->scan_event, ipw2100_scan_event);
|
||||
|
||||
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
||||
tasklet_init(&priv->irq_tasklet,
|
||||
ipw2100_irq_tasklet, (unsigned long)priv);
|
||||
|
||||
/* NOTE: We do not start the deferred work for status checks yet */
|
||||
|
||||
@@ -1968,8 +1968,9 @@ static void notify_wx_assoc_event(struct ipw_priv *priv)
|
||||
wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL);
|
||||
}
|
||||
|
||||
static void ipw_irq_tasklet(struct ipw_priv *priv)
|
||||
static void ipw_irq_tasklet(unsigned long data)
|
||||
{
|
||||
struct ipw_priv *priv = (struct ipw_priv *)data;
|
||||
u32 inta, inta_mask, handled = 0;
|
||||
unsigned long flags;
|
||||
int rc = 0;
|
||||
@@ -10705,7 +10706,7 @@ static int ipw_setup_deferred_work(struct ipw_priv *priv)
|
||||
INIT_WORK(&priv->qos_activate, ipw_bg_qos_activate);
|
||||
#endif /* CONFIG_IPW2200_QOS */
|
||||
|
||||
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
||||
tasklet_init(&priv->irq_tasklet,
|
||||
ipw_irq_tasklet, (unsigned long)priv);
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -1399,8 +1399,9 @@ il3945_dump_nic_error_log(struct il_priv *il)
|
||||
}
|
||||
|
||||
static void
|
||||
il3945_irq_tasklet(struct il_priv *il)
|
||||
il3945_irq_tasklet(unsigned long data)
|
||||
{
|
||||
struct il_priv *il = (struct il_priv *)data;
|
||||
u32 inta, handled = 0;
|
||||
u32 inta_fh;
|
||||
unsigned long flags;
|
||||
@@ -3432,7 +3433,7 @@ il3945_setup_deferred_work(struct il_priv *il)
|
||||
setup_timer(&il->watchdog, il_bg_watchdog, (unsigned long)il);
|
||||
|
||||
tasklet_init(&il->irq_tasklet,
|
||||
(void (*)(unsigned long))il3945_irq_tasklet,
|
||||
il3945_irq_tasklet,
|
||||
(unsigned long)il);
|
||||
}
|
||||
|
||||
|
||||
@@ -4361,8 +4361,9 @@ il4965_synchronize_irq(struct il_priv *il)
|
||||
}
|
||||
|
||||
static void
|
||||
il4965_irq_tasklet(struct il_priv *il)
|
||||
il4965_irq_tasklet(unsigned long data)
|
||||
{
|
||||
struct il_priv *il = (struct il_priv *)data;
|
||||
u32 inta, handled = 0;
|
||||
u32 inta_fh;
|
||||
unsigned long flags;
|
||||
@@ -6260,7 +6261,7 @@ il4965_setup_deferred_work(struct il_priv *il)
|
||||
setup_timer(&il->watchdog, il_bg_watchdog, (unsigned long)il);
|
||||
|
||||
tasklet_init(&il->irq_tasklet,
|
||||
(void (*)(unsigned long))il4965_irq_tasklet,
|
||||
il4965_irq_tasklet,
|
||||
(unsigned long)il);
|
||||
}
|
||||
|
||||
|
||||
@@ -717,7 +717,7 @@ il_eeprom_init(struct il_priv *il)
|
||||
u32 gp = _il_rd(il, CSR_EEPROM_GP);
|
||||
int sz;
|
||||
int ret;
|
||||
u16 addr;
|
||||
int addr;
|
||||
|
||||
/* allocate eeprom */
|
||||
sz = il->cfg->eeprom_size;
|
||||
|
||||
@@ -736,7 +736,8 @@ static struct thermal_zone_device_ops tzone_ops = {
|
||||
static void iwl_mvm_thermal_zone_register(struct iwl_mvm *mvm)
|
||||
{
|
||||
int i;
|
||||
char name[] = "iwlwifi";
|
||||
char name[16];
|
||||
static atomic_t counter = ATOMIC_INIT(0);
|
||||
|
||||
if (!iwl_mvm_is_tt_in_fw(mvm)) {
|
||||
mvm->tz_device.tzone = NULL;
|
||||
@@ -746,6 +747,7 @@ static void iwl_mvm_thermal_zone_register(struct iwl_mvm *mvm)
|
||||
|
||||
BUILD_BUG_ON(ARRAY_SIZE(name) >= THERMAL_NAME_LENGTH);
|
||||
|
||||
sprintf(name, "iwlwifi_%u", atomic_inc_return(&counter) & 0xFF);
|
||||
mvm->tz_device.tzone = thermal_zone_device_register(name,
|
||||
IWL_MAX_DTS_TRIPS,
|
||||
IWL_WRITABLE_TRIPS_MSK,
|
||||
|
||||
@@ -2570,7 +2570,7 @@ static int prism2_hostapd_add_sta(struct ap_data *ap,
|
||||
sta->supported_rates[0] = 2;
|
||||
if (sta->tx_supp_rates & WLAN_RATE_2M)
|
||||
sta->supported_rates[1] = 4;
|
||||
if (sta->tx_supp_rates & WLAN_RATE_5M5)
|
||||
if (sta->tx_supp_rates & WLAN_RATE_5M5)
|
||||
sta->supported_rates[2] = 11;
|
||||
if (sta->tx_supp_rates & WLAN_RATE_11M)
|
||||
sta->supported_rates[3] = 22;
|
||||
|
||||
@@ -1351,7 +1351,8 @@ static int ezusb_init(struct hermes *hw)
|
||||
int retval;
|
||||
|
||||
BUG_ON(in_interrupt());
|
||||
BUG_ON(!upriv);
|
||||
if (!upriv)
|
||||
return -EINVAL;
|
||||
|
||||
upriv->reply_count = 0;
|
||||
/* Write the MAGIC number on the simulated registers to keep
|
||||
|
||||
@@ -1095,13 +1095,15 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void _rtl_pci_irq_tasklet(struct ieee80211_hw *hw)
|
||||
static void _rtl_pci_irq_tasklet(unsigned long data)
|
||||
{
|
||||
struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
|
||||
_rtl_pci_tx_chk_waitq(hw);
|
||||
}
|
||||
|
||||
static void _rtl_pci_prepare_bcn_tasklet(struct ieee80211_hw *hw)
|
||||
static void _rtl_pci_prepare_bcn_tasklet(unsigned long data)
|
||||
{
|
||||
struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
@@ -1223,10 +1225,10 @@ static void _rtl_pci_init_struct(struct ieee80211_hw *hw,
|
||||
|
||||
/*task */
|
||||
tasklet_init(&rtlpriv->works.irq_tasklet,
|
||||
(void (*)(unsigned long))_rtl_pci_irq_tasklet,
|
||||
_rtl_pci_irq_tasklet,
|
||||
(unsigned long)hw);
|
||||
tasklet_init(&rtlpriv->works.irq_prepare_bcn_tasklet,
|
||||
(void (*)(unsigned long))_rtl_pci_prepare_bcn_tasklet,
|
||||
_rtl_pci_prepare_bcn_tasklet,
|
||||
(unsigned long)hw);
|
||||
INIT_WORK(&rtlpriv->works.lps_change_work,
|
||||
rtl_lps_change_work_callback);
|
||||
|
||||
@@ -573,7 +573,7 @@ static void port100_tx_update_payload_len(void *_frame, int len)
|
||||
{
|
||||
struct port100_frame *frame = _frame;
|
||||
|
||||
frame->datalen = cpu_to_le16(le16_to_cpu(frame->datalen) + len);
|
||||
le16_add_cpu(&frame->datalen, len);
|
||||
}
|
||||
|
||||
static bool port100_rx_frame_is_valid(void *_frame)
|
||||
|
||||
@@ -181,6 +181,7 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)
|
||||
failed2:
|
||||
sysfs_remove_link(&dev->dev.kobj, buf);
|
||||
failed1:
|
||||
pci_stop_and_remove_bus_device(virtfn);
|
||||
pci_dev_put(dev);
|
||||
mutex_lock(&iov->dev->sriov->lock);
|
||||
pci_stop_and_remove_bus_device(virtfn);
|
||||
|
||||
@@ -958,7 +958,13 @@ static void byt_gpio_clear_triggering(struct byt_gpio *vg, unsigned int offset)
|
||||
|
||||
raw_spin_lock_irqsave(&byt_lock, flags);
|
||||
value = readl(reg);
|
||||
value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL);
|
||||
|
||||
/* Do not clear direct-irq enabled IRQs (from gpio_disable_free) */
|
||||
if (value & BYT_DIRECT_IRQ_EN)
|
||||
/* nothing to do */ ;
|
||||
else
|
||||
value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL);
|
||||
|
||||
writel(value, reg);
|
||||
raw_spin_unlock_irqrestore(&byt_lock, flags);
|
||||
}
|
||||
|
||||
@@ -500,17 +500,15 @@ enum {
|
||||
SD_WP_MARK, SD_CLK_MARK, SD_CMD_MARK,
|
||||
CRX0_MARK, CRX1_MARK,
|
||||
CTX0_MARK, CTX1_MARK,
|
||||
CRX0_CRX1_MARK, CTX0_CTX1_MARK,
|
||||
|
||||
PWM1A_MARK, PWM1B_MARK, PWM1C_MARK, PWM1D_MARK,
|
||||
PWM1E_MARK, PWM1F_MARK, PWM1G_MARK, PWM1H_MARK,
|
||||
PWM2A_MARK, PWM2B_MARK, PWM2C_MARK, PWM2D_MARK,
|
||||
PWM2E_MARK, PWM2F_MARK, PWM2G_MARK, PWM2H_MARK,
|
||||
IERXD_MARK, IETXD_MARK,
|
||||
CRX0_CRX1_MARK,
|
||||
WDTOVF_MARK,
|
||||
|
||||
CRX0X1_MARK,
|
||||
|
||||
/* DMAC */
|
||||
TEND0_MARK, DACK0_MARK, DREQ0_MARK,
|
||||
TEND1_MARK, DACK1_MARK, DREQ1_MARK,
|
||||
@@ -998,12 +996,12 @@ static const u16 pinmux_data[] = {
|
||||
|
||||
PINMUX_DATA(PJ3_DATA, PJ3MD_00),
|
||||
PINMUX_DATA(CRX1_MARK, PJ3MD_01),
|
||||
PINMUX_DATA(CRX0X1_MARK, PJ3MD_10),
|
||||
PINMUX_DATA(CRX0_CRX1_MARK, PJ3MD_10),
|
||||
PINMUX_DATA(IRQ1_PJ_MARK, PJ3MD_11),
|
||||
|
||||
PINMUX_DATA(PJ2_DATA, PJ2MD_000),
|
||||
PINMUX_DATA(CTX1_MARK, PJ2MD_001),
|
||||
PINMUX_DATA(CRX0_CRX1_MARK, PJ2MD_010),
|
||||
PINMUX_DATA(CTX0_CTX1_MARK, PJ2MD_010),
|
||||
PINMUX_DATA(CS2_MARK, PJ2MD_011),
|
||||
PINMUX_DATA(SCK0_MARK, PJ2MD_100),
|
||||
PINMUX_DATA(LCD_M_DISP_MARK, PJ2MD_101),
|
||||
@@ -1248,6 +1246,7 @@ static const struct pinmux_func pinmux_func_gpios[] = {
|
||||
GPIO_FN(CTX1),
|
||||
GPIO_FN(CRX1),
|
||||
GPIO_FN(CTX0),
|
||||
GPIO_FN(CTX0_CTX1),
|
||||
GPIO_FN(CRX0),
|
||||
GPIO_FN(CRX0_CRX1),
|
||||
|
||||
|
||||
@@ -740,13 +740,12 @@ enum {
|
||||
CRX0_MARK, CTX0_MARK,
|
||||
CRX1_MARK, CTX1_MARK,
|
||||
CRX2_MARK, CTX2_MARK,
|
||||
CRX0_CRX1_MARK,
|
||||
CRX0_CRX1_CRX2_MARK,
|
||||
CTX0CTX1CTX2_MARK,
|
||||
CRX0_CRX1_MARK, CTX0_CTX1_MARK,
|
||||
CRX0_CRX1_CRX2_MARK, CTX0_CTX1_CTX2_MARK,
|
||||
CRX1_PJ22_MARK, CTX1_PJ23_MARK,
|
||||
CRX2_PJ20_MARK, CTX2_PJ21_MARK,
|
||||
CRX0CRX1_PJ22_MARK,
|
||||
CRX0CRX1CRX2_PJ20_MARK,
|
||||
CRX0_CRX1_PJ22_MARK, CTX0_CTX1_PJ23_MARK,
|
||||
CRX0_CRX1_CRX2_PJ20_MARK, CTX0_CTX1_CTX2_PJ21_MARK,
|
||||
|
||||
/* VDC */
|
||||
DV_CLK_MARK,
|
||||
@@ -824,6 +823,7 @@ static const u16 pinmux_data[] = {
|
||||
PINMUX_DATA(CS3_MARK, PC8MD_001),
|
||||
PINMUX_DATA(TXD7_MARK, PC8MD_010),
|
||||
PINMUX_DATA(CTX1_MARK, PC8MD_011),
|
||||
PINMUX_DATA(CTX0_CTX1_MARK, PC8MD_100),
|
||||
|
||||
PINMUX_DATA(PC7_DATA, PC7MD_000),
|
||||
PINMUX_DATA(CKE_MARK, PC7MD_001),
|
||||
@@ -836,11 +836,12 @@ static const u16 pinmux_data[] = {
|
||||
PINMUX_DATA(CAS_MARK, PC6MD_001),
|
||||
PINMUX_DATA(SCK7_MARK, PC6MD_010),
|
||||
PINMUX_DATA(CTX0_MARK, PC6MD_011),
|
||||
PINMUX_DATA(CTX0_CTX1_CTX2_MARK, PC6MD_100),
|
||||
|
||||
PINMUX_DATA(PC5_DATA, PC5MD_000),
|
||||
PINMUX_DATA(RAS_MARK, PC5MD_001),
|
||||
PINMUX_DATA(CRX0_MARK, PC5MD_011),
|
||||
PINMUX_DATA(CTX0CTX1CTX2_MARK, PC5MD_100),
|
||||
PINMUX_DATA(CTX0_CTX1_CTX2_MARK, PC5MD_100),
|
||||
PINMUX_DATA(IRQ0_PC_MARK, PC5MD_101),
|
||||
|
||||
PINMUX_DATA(PC4_DATA, PC4MD_00),
|
||||
@@ -1292,30 +1293,32 @@ static const u16 pinmux_data[] = {
|
||||
PINMUX_DATA(LCD_DATA23_PJ23_MARK, PJ23MD_010),
|
||||
PINMUX_DATA(LCD_TCON6_MARK, PJ23MD_011),
|
||||
PINMUX_DATA(IRQ3_PJ_MARK, PJ23MD_100),
|
||||
PINMUX_DATA(CTX1_MARK, PJ23MD_101),
|
||||
PINMUX_DATA(CTX1_PJ23_MARK, PJ23MD_101),
|
||||
PINMUX_DATA(CTX0_CTX1_PJ23_MARK, PJ23MD_110),
|
||||
|
||||
PINMUX_DATA(PJ22_DATA, PJ22MD_000),
|
||||
PINMUX_DATA(DV_DATA22_MARK, PJ22MD_001),
|
||||
PINMUX_DATA(LCD_DATA22_PJ22_MARK, PJ22MD_010),
|
||||
PINMUX_DATA(LCD_TCON5_MARK, PJ22MD_011),
|
||||
PINMUX_DATA(IRQ2_PJ_MARK, PJ22MD_100),
|
||||
PINMUX_DATA(CRX1_MARK, PJ22MD_101),
|
||||
PINMUX_DATA(CRX0_CRX1_MARK, PJ22MD_110),
|
||||
PINMUX_DATA(CRX1_PJ22_MARK, PJ22MD_101),
|
||||
PINMUX_DATA(CRX0_CRX1_PJ22_MARK, PJ22MD_110),
|
||||
|
||||
PINMUX_DATA(PJ21_DATA, PJ21MD_000),
|
||||
PINMUX_DATA(DV_DATA21_MARK, PJ21MD_001),
|
||||
PINMUX_DATA(LCD_DATA21_PJ21_MARK, PJ21MD_010),
|
||||
PINMUX_DATA(LCD_TCON4_MARK, PJ21MD_011),
|
||||
PINMUX_DATA(IRQ1_PJ_MARK, PJ21MD_100),
|
||||
PINMUX_DATA(CTX2_MARK, PJ21MD_101),
|
||||
PINMUX_DATA(CTX2_PJ21_MARK, PJ21MD_101),
|
||||
PINMUX_DATA(CTX0_CTX1_CTX2_PJ21_MARK, PJ21MD_110),
|
||||
|
||||
PINMUX_DATA(PJ20_DATA, PJ20MD_000),
|
||||
PINMUX_DATA(DV_DATA20_MARK, PJ20MD_001),
|
||||
PINMUX_DATA(LCD_DATA20_PJ20_MARK, PJ20MD_010),
|
||||
PINMUX_DATA(LCD_TCON3_MARK, PJ20MD_011),
|
||||
PINMUX_DATA(IRQ0_PJ_MARK, PJ20MD_100),
|
||||
PINMUX_DATA(CRX2_MARK, PJ20MD_101),
|
||||
PINMUX_DATA(CRX0CRX1CRX2_PJ20_MARK, PJ20MD_110),
|
||||
PINMUX_DATA(CRX2_PJ20_MARK, PJ20MD_101),
|
||||
PINMUX_DATA(CRX0_CRX1_CRX2_PJ20_MARK, PJ20MD_110),
|
||||
|
||||
PINMUX_DATA(PJ19_DATA, PJ19MD_000),
|
||||
PINMUX_DATA(DV_DATA19_MARK, PJ19MD_001),
|
||||
@@ -1666,12 +1669,24 @@ static const struct pinmux_func pinmux_func_gpios[] = {
|
||||
GPIO_FN(WDTOVF),
|
||||
|
||||
/* CAN */
|
||||
GPIO_FN(CTX2),
|
||||
GPIO_FN(CRX2),
|
||||
GPIO_FN(CTX1),
|
||||
GPIO_FN(CRX1),
|
||||
GPIO_FN(CTX0),
|
||||
GPIO_FN(CRX0),
|
||||
GPIO_FN(CTX0_CTX1),
|
||||
GPIO_FN(CRX0_CRX1),
|
||||
GPIO_FN(CTX0_CTX1_CTX2),
|
||||
GPIO_FN(CRX0_CRX1_CRX2),
|
||||
GPIO_FN(CTX2_PJ21),
|
||||
GPIO_FN(CRX2_PJ20),
|
||||
GPIO_FN(CTX1_PJ23),
|
||||
GPIO_FN(CRX1_PJ22),
|
||||
GPIO_FN(CTX0_CTX1_PJ23),
|
||||
GPIO_FN(CRX0_CRX1_PJ22),
|
||||
GPIO_FN(CTX0_CTX1_CTX2_PJ21),
|
||||
GPIO_FN(CRX0_CRX1_CRX2_PJ20),
|
||||
|
||||
/* DMAC */
|
||||
GPIO_FN(TEND0),
|
||||
|
||||
@@ -337,6 +337,11 @@ static int pwm_omap_dmtimer_probe(struct platform_device *pdev)
|
||||
static int pwm_omap_dmtimer_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct pwm_omap_dmtimer_chip *omap = platform_get_drvdata(pdev);
|
||||
int ret;
|
||||
|
||||
ret = pwmchip_remove(&omap->chip);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (pm_runtime_active(&omap->dm_timer_pdev->dev))
|
||||
omap->pdata->stop(omap->dm_timer);
|
||||
@@ -345,7 +350,7 @@ static int pwm_omap_dmtimer_remove(struct platform_device *pdev)
|
||||
|
||||
mutex_destroy(&omap->mutex);
|
||||
|
||||
return pwmchip_remove(&omap->chip);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id pwm_omap_dmtimer_of_match[] = {
|
||||
|
||||
@@ -589,7 +589,7 @@ static int rk808_regulator_dt_parse_pdata(struct device *dev,
|
||||
}
|
||||
|
||||
if (!pdata->dvs_gpio[i]) {
|
||||
dev_warn(dev, "there is no dvs%d gpio\n", i);
|
||||
dev_info(dev, "there is no dvs%d gpio\n", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -1488,7 +1488,7 @@ static int __init remoteproc_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
module_init(remoteproc_init);
|
||||
subsys_initcall(remoteproc_init);
|
||||
|
||||
static void __exit remoteproc_exit(void)
|
||||
{
|
||||
|
||||
@@ -2321,7 +2321,7 @@ ahc_find_syncrate(struct ahc_softc *ahc, u_int *period,
|
||||
* At some speeds, we only support
|
||||
* ST transfers.
|
||||
*/
|
||||
if ((syncrate->sxfr_u2 & ST_SXFR) != 0)
|
||||
if ((syncrate->sxfr_u2 & ST_SXFR) != 0)
|
||||
*ppr_options &= ~MSG_EXT_PPR_DT_REQ;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -882,6 +882,10 @@ free_host:
|
||||
static void iscsi_sw_tcp_session_destroy(struct iscsi_cls_session *cls_session)
|
||||
{
|
||||
struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
|
||||
struct iscsi_session *session = cls_session->dd_data;
|
||||
|
||||
if (WARN_ON_ONCE(session->leadconn))
|
||||
return;
|
||||
|
||||
iscsi_tcp_r2tpool_free(cls_session->dd_data);
|
||||
iscsi_session_teardown(cls_session);
|
||||
|
||||
@@ -451,6 +451,12 @@ static int qla25xx_setup_mode(struct scsi_qla_host *vha)
|
||||
goto fail;
|
||||
}
|
||||
if (ql2xmultique_tag) {
|
||||
ha->wq = alloc_workqueue("qla2xxx_wq", WQ_MEM_RECLAIM, 1);
|
||||
if (unlikely(!ha->wq)) {
|
||||
ql_log(ql_log_warn, vha, 0x01e0,
|
||||
"Failed to alloc workqueue.\n");
|
||||
goto fail;
|
||||
}
|
||||
/* create a request queue for IO */
|
||||
options |= BIT_7;
|
||||
req = qla25xx_create_req_que(ha, options, 0, 0, -1,
|
||||
@@ -458,9 +464,8 @@ static int qla25xx_setup_mode(struct scsi_qla_host *vha)
|
||||
if (!req) {
|
||||
ql_log(ql_log_warn, vha, 0x00e0,
|
||||
"Failed to create request queue.\n");
|
||||
goto fail;
|
||||
goto fail2;
|
||||
}
|
||||
ha->wq = alloc_workqueue("qla2xxx_wq", WQ_MEM_RECLAIM, 1);
|
||||
vha->req = ha->req_q_map[req];
|
||||
options |= BIT_1;
|
||||
for (ques = 1; ques < ha->max_rsp_queues; ques++) {
|
||||
@@ -468,7 +473,7 @@ static int qla25xx_setup_mode(struct scsi_qla_host *vha)
|
||||
if (!ret) {
|
||||
ql_log(ql_log_warn, vha, 0x00e8,
|
||||
"Failed to create response queue.\n");
|
||||
goto fail2;
|
||||
goto fail3;
|
||||
}
|
||||
}
|
||||
ha->flags.cpu_affinity_enabled = 1;
|
||||
@@ -482,11 +487,13 @@ static int qla25xx_setup_mode(struct scsi_qla_host *vha)
|
||||
ha->max_rsp_queues, ha->max_req_queues);
|
||||
}
|
||||
return 0;
|
||||
fail2:
|
||||
|
||||
fail3:
|
||||
qla25xx_delete_queues(vha);
|
||||
destroy_workqueue(ha->wq);
|
||||
ha->wq = NULL;
|
||||
vha->req = ha->req_q_map[0];
|
||||
fail2:
|
||||
destroy_workqueue(ha->wq);
|
||||
ha->wq = NULL;
|
||||
fail:
|
||||
ha->mqenable = 0;
|
||||
kfree(ha->req_q_map);
|
||||
|
||||
@@ -2964,6 +2964,24 @@ iscsi_set_path(struct iscsi_transport *transport, struct iscsi_uevent *ev)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int iscsi_session_has_conns(int sid)
|
||||
{
|
||||
struct iscsi_cls_conn *conn;
|
||||
unsigned long flags;
|
||||
int found = 0;
|
||||
|
||||
spin_lock_irqsave(&connlock, flags);
|
||||
list_for_each_entry(conn, &connlist, conn_list) {
|
||||
if (iscsi_conn_get_sid(conn) == sid) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&connlock, flags);
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
static int
|
||||
iscsi_set_iface_params(struct iscsi_transport *transport,
|
||||
struct iscsi_uevent *ev, uint32_t len)
|
||||
@@ -3538,10 +3556,12 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group)
|
||||
break;
|
||||
case ISCSI_UEVENT_DESTROY_SESSION:
|
||||
session = iscsi_session_lookup(ev->u.d_session.sid);
|
||||
if (session)
|
||||
transport->destroy_session(session);
|
||||
else
|
||||
if (!session)
|
||||
err = -EINVAL;
|
||||
else if (iscsi_session_has_conns(ev->u.d_session.sid))
|
||||
err = -EBUSY;
|
||||
else
|
||||
transport->destroy_session(session);
|
||||
break;
|
||||
case ISCSI_UEVENT_UNBIND_SESSION:
|
||||
session = iscsi_session_lookup(ev->u.d_session.sid);
|
||||
|
||||
@@ -134,7 +134,7 @@ void __init tegra_init_apbmisc(void)
|
||||
apbmisc.flags = IORESOURCE_MEM;
|
||||
|
||||
/* strapping options */
|
||||
if (tegra_get_chip_id() == TEGRA124) {
|
||||
if (of_machine_is_compatible("nvidia,tegra124")) {
|
||||
straps.start = 0x7000e864;
|
||||
straps.end = 0x7000e867;
|
||||
} else {
|
||||
|
||||
@@ -370,8 +370,23 @@ static inline vm_flags_t calc_vm_may_flags(unsigned long prot)
|
||||
_calc_vm_trans(prot, PROT_EXEC, VM_MAYEXEC);
|
||||
}
|
||||
|
||||
static int ashmem_vmfile_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
{
|
||||
/* do not allow to mmap ashmem backing shmem file directly */
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
static unsigned long
|
||||
ashmem_vmfile_get_unmapped_area(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long pgoff,
|
||||
unsigned long flags)
|
||||
{
|
||||
return current->mm->get_unmapped_area(file, addr, len, pgoff, flags);
|
||||
}
|
||||
|
||||
static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
{
|
||||
static struct file_operations vmfile_fops;
|
||||
struct ashmem_area *asma = file->private_data;
|
||||
int ret = 0;
|
||||
|
||||
@@ -412,6 +427,19 @@ static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
}
|
||||
vmfile->f_mode |= FMODE_LSEEK;
|
||||
asma->file = vmfile;
|
||||
/*
|
||||
* override mmap operation of the vmfile so that it can't be
|
||||
* remapped which would lead to creation of a new vma with no
|
||||
* asma permission checks. Have to override get_unmapped_area
|
||||
* as well to prevent VM_BUG_ON check for f_ops modification.
|
||||
*/
|
||||
if (!vmfile_fops.mmap) {
|
||||
vmfile_fops = *vmfile->f_op;
|
||||
vmfile_fops.mmap = ashmem_vmfile_mmap;
|
||||
vmfile_fops.get_unmapped_area =
|
||||
ashmem_vmfile_get_unmapped_area;
|
||||
}
|
||||
vmfile->f_op = &vmfile_fops;
|
||||
}
|
||||
get_file(asma->file);
|
||||
|
||||
|
||||
@@ -90,8 +90,8 @@ void gb_audio_manager_remove_all(void)
|
||||
|
||||
list_for_each_entry_safe(module, next, &modules_list, list) {
|
||||
list_del(&module->list);
|
||||
kobject_put(&module->kobj);
|
||||
ida_simple_remove(&module_id, module->id);
|
||||
kobject_put(&module->kobj);
|
||||
}
|
||||
|
||||
is_empty = list_empty(&modules_list);
|
||||
|
||||
@@ -2052,7 +2052,7 @@ static int wpa_supplicant_ioctl(struct net_device *dev, struct iw_point *p)
|
||||
struct ieee_param *param;
|
||||
uint ret = 0;
|
||||
|
||||
if (p->length < sizeof(struct ieee_param) || !p->pointer) {
|
||||
if (!p->pointer || p->length != sizeof(struct ieee_param)) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
@@ -2859,7 +2859,7 @@ static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!p->pointer) {
|
||||
if (!p->pointer || p->length != sizeof(struct ieee_param)) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb,
|
||||
|
||||
vnt_rf_rssi_to_dbm(priv, *rssi, &rx_dbm);
|
||||
|
||||
priv->bb_pre_ed_rssi = (u8)rx_dbm + 1;
|
||||
priv->bb_pre_ed_rssi = (u8)-rx_dbm + 1;
|
||||
priv->current_rssi = priv->bb_pre_ed_rssi;
|
||||
|
||||
frame = skb_data + 8;
|
||||
|
||||
@@ -1168,9 +1168,7 @@ int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
||||
hdr->cmdsn, be32_to_cpu(hdr->data_length), payload_length,
|
||||
conn->cid);
|
||||
|
||||
if (target_get_sess_cmd(&cmd->se_cmd, true) < 0)
|
||||
return iscsit_add_reject_cmd(cmd,
|
||||
ISCSI_REASON_WAITING_FOR_LOGOUT, buf);
|
||||
target_get_sess_cmd(&cmd->se_cmd, true);
|
||||
|
||||
cmd->sense_reason = transport_lookup_cmd_lun(&cmd->se_cmd,
|
||||
scsilun_to_int(&hdr->lun));
|
||||
@@ -1988,9 +1986,7 @@ iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
||||
conn->sess->se_sess, 0, DMA_NONE,
|
||||
TCM_SIMPLE_TAG, cmd->sense_buffer + 2);
|
||||
|
||||
if (target_get_sess_cmd(&cmd->se_cmd, true) < 0)
|
||||
return iscsit_add_reject_cmd(cmd,
|
||||
ISCSI_REASON_WAITING_FOR_LOGOUT, buf);
|
||||
target_get_sess_cmd(&cmd->se_cmd, true);
|
||||
|
||||
/*
|
||||
* TASK_REASSIGN for ERL=2 / connection stays inside of
|
||||
@@ -4162,6 +4158,9 @@ int iscsit_close_connection(
|
||||
iscsit_stop_nopin_response_timer(conn);
|
||||
iscsit_stop_nopin_timer(conn);
|
||||
|
||||
if (conn->conn_transport->iscsit_wait_conn)
|
||||
conn->conn_transport->iscsit_wait_conn(conn);
|
||||
|
||||
/*
|
||||
* During Connection recovery drop unacknowledged out of order
|
||||
* commands for this connection, and prepare the other commands
|
||||
@@ -4244,11 +4243,6 @@ int iscsit_close_connection(
|
||||
* must wait until they have completed.
|
||||
*/
|
||||
iscsit_check_conn_usage_count(conn);
|
||||
target_sess_cmd_list_set_waiting(sess->se_sess);
|
||||
target_wait_for_sess_cmds(sess->se_sess);
|
||||
|
||||
if (conn->conn_transport->iscsit_wait_conn)
|
||||
conn->conn_transport->iscsit_wait_conn(conn);
|
||||
|
||||
ahash_request_free(conn->conn_tx_hash);
|
||||
if (conn->conn_rx_hash) {
|
||||
|
||||
@@ -501,7 +501,8 @@ static void atmel_stop_tx(struct uart_port *port)
|
||||
atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask);
|
||||
|
||||
if (atmel_uart_is_half_duplex(port))
|
||||
atmel_start_rx(port);
|
||||
if (!atomic_read(&atmel_port->tasklet_shutdown))
|
||||
atmel_start_rx(port);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -532,7 +532,7 @@ static void imx_dma_tx(struct imx_port *sport)
|
||||
|
||||
sport->tx_bytes = uart_circ_chars_pending(xmit);
|
||||
|
||||
if (xmit->tail < xmit->head) {
|
||||
if (xmit->tail < xmit->head || xmit->head == 0) {
|
||||
sport->dma_tx_nents = 1;
|
||||
sg_init_one(sgl, xmit->buf + xmit->tail, sport->tx_bytes);
|
||||
} else {
|
||||
|
||||
@@ -1349,10 +1349,10 @@ static void throttle(struct tty_struct * tty)
|
||||
DBGINFO(("%s throttle\n", info->device_name));
|
||||
if (I_IXOFF(tty))
|
||||
send_xchar(tty, STOP_CHAR(tty));
|
||||
if (C_CRTSCTS(tty)) {
|
||||
if (C_CRTSCTS(tty)) {
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
info->signals &= ~SerialSignal_RTS;
|
||||
set_signals(info);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
}
|
||||
}
|
||||
@@ -1374,10 +1374,10 @@ static void unthrottle(struct tty_struct * tty)
|
||||
else
|
||||
send_xchar(tty, START_CHAR(tty));
|
||||
}
|
||||
if (C_CRTSCTS(tty)) {
|
||||
if (C_CRTSCTS(tty)) {
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
info->signals |= SerialSignal_RTS;
|
||||
set_signals(info);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
}
|
||||
}
|
||||
@@ -2576,8 +2576,8 @@ static void change_params(struct slgt_info *info)
|
||||
info->read_status_mask = IRQ_RXOVER;
|
||||
if (I_INPCK(info->port.tty))
|
||||
info->read_status_mask |= MASK_PARITY | MASK_FRAMING;
|
||||
if (I_BRKINT(info->port.tty) || I_PARMRK(info->port.tty))
|
||||
info->read_status_mask |= MASK_BREAK;
|
||||
if (I_BRKINT(info->port.tty) || I_PARMRK(info->port.tty))
|
||||
info->read_status_mask |= MASK_BREAK;
|
||||
if (I_IGNPAR(info->port.tty))
|
||||
info->ignore_status_mask |= MASK_PARITY | MASK_FRAMING;
|
||||
if (I_IGNBRK(info->port.tty)) {
|
||||
@@ -3208,7 +3208,7 @@ static int tiocmset(struct tty_struct *tty,
|
||||
info->signals &= ~SerialSignal_DTR;
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
set_signals(info);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
return 0;
|
||||
}
|
||||
@@ -3219,7 +3219,7 @@ static int carrier_raised(struct tty_port *port)
|
||||
struct slgt_info *info = container_of(port, struct slgt_info, port);
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
get_signals(info);
|
||||
get_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
return (info->signals & SerialSignal_DCD) ? 1 : 0;
|
||||
}
|
||||
@@ -3234,7 +3234,7 @@ static void dtr_rts(struct tty_port *port, int on)
|
||||
info->signals |= SerialSignal_RTS | SerialSignal_DTR;
|
||||
else
|
||||
info->signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
|
||||
set_signals(info);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
}
|
||||
|
||||
|
||||
@@ -1467,10 +1467,10 @@ static void throttle(struct tty_struct * tty)
|
||||
if (I_IXOFF(tty))
|
||||
send_xchar(tty, STOP_CHAR(tty));
|
||||
|
||||
if (C_CRTSCTS(tty)) {
|
||||
if (C_CRTSCTS(tty)) {
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
info->serial_signals &= ~SerialSignal_RTS;
|
||||
set_signals(info);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
}
|
||||
}
|
||||
@@ -1496,10 +1496,10 @@ static void unthrottle(struct tty_struct * tty)
|
||||
send_xchar(tty, START_CHAR(tty));
|
||||
}
|
||||
|
||||
if (C_CRTSCTS(tty)) {
|
||||
if (C_CRTSCTS(tty)) {
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
info->serial_signals |= SerialSignal_RTS;
|
||||
set_signals(info);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
}
|
||||
}
|
||||
@@ -2485,7 +2485,7 @@ static void isr_io_pin( SLMP_INFO *info, u16 status )
|
||||
if (status & SerialSignal_CTS) {
|
||||
if ( debug_level >= DEBUG_LEVEL_ISR )
|
||||
printk("CTS tx start...");
|
||||
info->port.tty->hw_stopped = 0;
|
||||
info->port.tty->hw_stopped = 0;
|
||||
tx_start(info);
|
||||
info->pending_bh |= BH_TRANSMIT;
|
||||
return;
|
||||
@@ -2494,7 +2494,7 @@ static void isr_io_pin( SLMP_INFO *info, u16 status )
|
||||
if (!(status & SerialSignal_CTS)) {
|
||||
if ( debug_level >= DEBUG_LEVEL_ISR )
|
||||
printk("CTS tx stop...");
|
||||
info->port.tty->hw_stopped = 1;
|
||||
info->port.tty->hw_stopped = 1;
|
||||
tx_stop(info);
|
||||
}
|
||||
}
|
||||
@@ -2821,8 +2821,8 @@ static void change_params(SLMP_INFO *info)
|
||||
info->read_status_mask2 = OVRN;
|
||||
if (I_INPCK(info->port.tty))
|
||||
info->read_status_mask2 |= PE | FRME;
|
||||
if (I_BRKINT(info->port.tty) || I_PARMRK(info->port.tty))
|
||||
info->read_status_mask1 |= BRKD;
|
||||
if (I_BRKINT(info->port.tty) || I_PARMRK(info->port.tty))
|
||||
info->read_status_mask1 |= BRKD;
|
||||
if (I_IGNPAR(info->port.tty))
|
||||
info->ignore_status_mask2 |= PE | FRME;
|
||||
if (I_IGNBRK(info->port.tty)) {
|
||||
@@ -3192,7 +3192,7 @@ static int tiocmget(struct tty_struct *tty)
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
get_signals(info);
|
||||
get_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
|
||||
result = ((info->serial_signals & SerialSignal_RTS) ? TIOCM_RTS : 0) |
|
||||
@@ -3230,7 +3230,7 @@ static int tiocmset(struct tty_struct *tty,
|
||||
info->serial_signals &= ~SerialSignal_DTR;
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
set_signals(info);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
|
||||
return 0;
|
||||
@@ -3242,7 +3242,7 @@ static int carrier_raised(struct tty_port *port)
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
get_signals(info);
|
||||
get_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
|
||||
return (info->serial_signals & SerialSignal_DCD) ? 1 : 0;
|
||||
@@ -3258,7 +3258,7 @@ static void dtr_rts(struct tty_port *port, int on)
|
||||
info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR;
|
||||
else
|
||||
info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
|
||||
set_signals(info);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
}
|
||||
|
||||
|
||||
@@ -341,6 +341,7 @@ int paste_selection(struct tty_struct *tty)
|
||||
unsigned int count;
|
||||
struct tty_ldisc *ld;
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
int ret = 0;
|
||||
|
||||
console_lock();
|
||||
poke_blanked_console();
|
||||
@@ -354,6 +355,10 @@ int paste_selection(struct tty_struct *tty)
|
||||
add_wait_queue(&vc->paste_wait, &wait);
|
||||
while (sel_buffer && sel_buffer_lth > pasted) {
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
if (signal_pending(current)) {
|
||||
ret = -EINTR;
|
||||
break;
|
||||
}
|
||||
if (tty_throttled(tty)) {
|
||||
schedule();
|
||||
continue;
|
||||
@@ -369,5 +374,5 @@ int paste_selection(struct tty_struct *tty)
|
||||
|
||||
tty_buffer_unlock_exclusive(&vc->port);
|
||||
tty_ldisc_deref(ld);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user