mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
Merge android-4.14.167 (571f968) into msm-4.14
* refs/heads/tmp-571f968: Linux 4.14.167 regulator: ab8500: Remove SYSCLKREQ from enum ab8505_regulator_id perf probe: Fix wrong address verification scsi: core: scsi_trace: Use get_unaligned_be*() scsi: qla2xxx: fix rports not being mark as lost in sync fabric scan scsi: qla2xxx: Fix qla2x00_request_irqs() for MSI scsi: target: core: Fix a pr_debug() argument scsi: bnx2i: fix potential use after free scsi: qla4xxx: fix double free bug scsi: esas2r: unlock on error in esas2r_nvram_read_direct() reiserfs: fix handling of -EOPNOTSUPP in reiserfs_for_each_xattr Revert "arm64: dts: juno: add dma-ranges property" tick/sched: Annotate lockless access to last_jiffies_update cfg80211: check for set_wiphy_params arm64: dts: meson-gxl-s905x-khadas-vim: fix gpio-keys-polled node cw1200: Fix a signedness bug in cw1200_load_firmware() xen/blkfront: Adjust indentation in xlvbd_alloc_gendisk tcp: fix marked lost packets not being retransmitted r8152: add missing endpoint sanity check ptp: free ptp device pin descriptors properly net/wan/fsl_ucc_hdlc: fix out of bounds write on array utdm_info net: usb: lan78xx: limit size of local TSO packets net: hns: fix soft lockup when there is not enough memory net: dsa: tag_qca: fix doubled Tx statistics hv_netvsc: Fix memory leak when removing rndis device macvlan: use skb_reset_mac_header() in macvlan_queue_xmit() batman-adv: Fix DAT candidate selection on little endian systems NFC: pn533: fix bulk-message timeout netfilter: arp_tables: init netns pointer in xt_tgdtor_param struct netfilter: fix a use-after-free in mtype_destroy() cfg80211: fix page refcount issue in A-MSDU decap arm64: dts: agilex/stratix10: fix pmu interrupt numbers mm/huge_memory.c: thp: fix conflict of above-47bit hint address and PMD alignment mm/huge_memory.c: make __thp_get_unmapped_area static USB: serial: io_edgeport: handle unbound ports on URB completion USB: serial: io_edgeport: use irqsave() in USB's complete callback net: stmmac: Enable 16KB buffer size net: stmmac: 16KB buffer must be 16 byte aligned mm/page-writeback.c: avoid potential division by zero in wb_min_max_ratio() btrfs: fix memory leak in qgroup accounting mm/shmem.c: thp, shmem: fix conflict of above-47bit hint address and PMD alignment perf report: Fix incorrectly added dimensions as switch perf data file perf hists: Fix variable name's inconsistency in hists__for_each() macro x86/efistub: Disable paging at mixed mode entry x86/resctrl: Fix an imbalance in domain_remove_cpu() usb: core: hub: Improved device recognition on remote wakeup ptrace: reintroduce usage of subjective credentials in ptrace_has_cap() scsi: mptfusion: Fix double fetch bug in ioctl scsi: fnic: fix invalid stack access USB: serial: quatech2: handle unbound ports USB: serial: keyspan: handle unbound ports USB: serial: io_edgeport: add missing active-port sanity check USB: serial: ch341: handle unbound port at reset_resume USB: serial: suppress driver bind attributes USB: serial: option: add support for Quectel RM500Q in QDL mode USB: serial: opticon: fix control-message timeouts USB: serial: option: Add support for Quectel RM500Q USB: serial: simple: Add Motorola Solutions TETRA MTP3xxx and MTP85xx iio: buffer: align the size of scan bytes to size of the largest element ARM: dts: am571x-idk: Fix gpios property to have the correct gpio number block: fix an integer overflow in logical block size Fix built-in early-load Intel microcode alignment ALSA: seq: Fix racy access for queue timer in proc read ASoC: msm8916-wcd-analog: Fix selected events for MIC BIAS External1 clk: Don't try to enable critical clocks if prepare failed dt-bindings: reset: meson8b: fix duplicate reset IDs Change-Id: I8dd465e2236497910afadfc5546a0b9ee84d0543 Signed-off-by: Srinivasarao P <spathi@codeaurora.org>
This commit is contained in:
commit
410eca3cca
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 166
|
||||
SUBLEVEL = 167
|
||||
EXTRAVERSION =
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
@ -93,7 +93,7 @@
|
||||
|
||||
&pcie1_rc {
|
||||
status = "okay";
|
||||
gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
|
||||
gpios = <&gpio5 18 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
&pcie1_ep {
|
||||
|
@ -56,10 +56,10 @@
|
||||
|
||||
pmu {
|
||||
compatible = "arm,armv8-pmuv3";
|
||||
interrupts = <0 120 8>,
|
||||
<0 121 8>,
|
||||
<0 122 8>,
|
||||
<0 123 8>;
|
||||
interrupts = <0 170 4>,
|
||||
<0 171 4>,
|
||||
<0 172 4>,
|
||||
<0 173 4>;
|
||||
interrupt-affinity = <&cpu0>,
|
||||
<&cpu1>,
|
||||
<&cpu2>,
|
||||
|
@ -33,11 +33,9 @@
|
||||
|
||||
gpio-keys-polled {
|
||||
compatible = "gpio-keys-polled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
poll-interval = <100>;
|
||||
|
||||
button@0 {
|
||||
power-button {
|
||||
label = "power";
|
||||
linux,code = <KEY_POWER>;
|
||||
gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
|
||||
|
@ -5,7 +5,6 @@
|
||||
/*
|
||||
* Devices shared by all Juno boards
|
||||
*/
|
||||
dma-ranges = <0 0 0 0 0x100 0>;
|
||||
|
||||
memtimer: timer@2a810000 {
|
||||
compatible = "arm,armv7-timer-mem";
|
||||
|
@ -227,6 +227,11 @@ ENTRY(efi32_stub_entry)
|
||||
leal efi32_config(%ebp), %eax
|
||||
movl %eax, efi_config(%ebp)
|
||||
|
||||
/* Disable paging */
|
||||
movl %cr0, %eax
|
||||
btrl $X86_CR0_PG_BIT, %eax
|
||||
movl %eax, %cr0
|
||||
|
||||
jmp startup_32
|
||||
ENDPROC(efi32_stub_entry)
|
||||
#endif
|
||||
|
@ -526,7 +526,7 @@ static void domain_remove_cpu(int cpu, struct rdt_resource *r)
|
||||
if (static_branch_unlikely(&rdt_mon_enable_key))
|
||||
rmdir_mondata_subdir_allrdtgrp(r, d->id);
|
||||
list_del(&d->list);
|
||||
if (is_mbm_enabled())
|
||||
if (r->mon_capable && is_mbm_enabled())
|
||||
cancel_delayed_work(&d->mbm_over);
|
||||
if (is_llc_occupancy_enabled() && has_busy_rmid(r, d)) {
|
||||
/*
|
||||
|
@ -379,7 +379,7 @@ EXPORT_SYMBOL(blk_queue_max_segment_size);
|
||||
* storage device can address. The default of 512 covers most
|
||||
* hardware.
|
||||
**/
|
||||
void blk_queue_logical_block_size(struct request_queue *q, unsigned short size)
|
||||
void blk_queue_logical_block_size(struct request_queue *q, unsigned int size)
|
||||
{
|
||||
q->limits.logical_block_size = size;
|
||||
|
||||
|
@ -1115,8 +1115,8 @@ static int xlvbd_alloc_gendisk(blkif_sector_t capacity,
|
||||
if (!VDEV_IS_EXTENDED(info->vdevice)) {
|
||||
err = xen_translate_vdev(info->vdevice, &minor, &offset);
|
||||
if (err)
|
||||
return err;
|
||||
nr_parts = PARTS_PER_DISK;
|
||||
return err;
|
||||
nr_parts = PARTS_PER_DISK;
|
||||
} else {
|
||||
minor = BLKIF_MINOR_EXT(info->vdevice);
|
||||
nr_parts = PARTS_PER_EXT_DISK;
|
||||
|
@ -3676,11 +3676,17 @@ static int __clk_core_init(struct clk_core *core)
|
||||
if (core->flags & CLK_IS_CRITICAL) {
|
||||
unsigned long flags;
|
||||
|
||||
clk_core_prepare(core);
|
||||
ret = clk_core_prepare(core);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
flags = clk_enable_lock();
|
||||
clk_core_enable(core);
|
||||
ret = clk_core_enable(core);
|
||||
clk_enable_unlock(flags);
|
||||
if (ret) {
|
||||
clk_core_unprepare(core);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -570,7 +570,7 @@ static int iio_compute_scan_bytes(struct iio_dev *indio_dev,
|
||||
const unsigned long *mask, bool timestamp)
|
||||
{
|
||||
unsigned bytes = 0;
|
||||
int length, i;
|
||||
int length, i, largest = 0;
|
||||
|
||||
/* How much space will the demuxed element take? */
|
||||
for_each_set_bit(i, mask,
|
||||
@ -578,13 +578,17 @@ static int iio_compute_scan_bytes(struct iio_dev *indio_dev,
|
||||
length = iio_storage_bytes_for_si(indio_dev, i);
|
||||
bytes = ALIGN(bytes, length);
|
||||
bytes += length;
|
||||
largest = max(largest, length);
|
||||
}
|
||||
|
||||
if (timestamp) {
|
||||
length = iio_storage_bytes_for_timestamp(indio_dev);
|
||||
bytes = ALIGN(bytes, length);
|
||||
bytes += length;
|
||||
largest = max(largest, length);
|
||||
}
|
||||
|
||||
bytes = ALIGN(bytes, largest);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include "dm-bufio.h"
|
||||
|
||||
#define DM_MSG_PREFIX "persistent snapshot"
|
||||
#define DM_CHUNK_SIZE_DEFAULT_SECTORS 32 /* 16KB */
|
||||
#define DM_CHUNK_SIZE_DEFAULT_SECTORS 32U /* 16KB */
|
||||
|
||||
#define DM_PREFETCH_CHUNKS 12
|
||||
|
||||
|
@ -94,7 +94,7 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
|
||||
char b[BDEVNAME_SIZE];
|
||||
char b2[BDEVNAME_SIZE];
|
||||
struct r0conf *conf = kzalloc(sizeof(*conf), GFP_KERNEL);
|
||||
unsigned short blksize = 512;
|
||||
unsigned blksize = 512;
|
||||
|
||||
*private_conf = ERR_PTR(-ENOMEM);
|
||||
if (!conf)
|
||||
|
@ -100,19 +100,19 @@ struct buflist {
|
||||
* Function prototypes. Called from OS entry point mptctl_ioctl.
|
||||
* arg contents specific to function.
|
||||
*/
|
||||
static int mptctl_fw_download(unsigned long arg);
|
||||
static int mptctl_getiocinfo(unsigned long arg, unsigned int cmd);
|
||||
static int mptctl_gettargetinfo(unsigned long arg);
|
||||
static int mptctl_readtest(unsigned long arg);
|
||||
static int mptctl_mpt_command(unsigned long arg);
|
||||
static int mptctl_eventquery(unsigned long arg);
|
||||
static int mptctl_eventenable(unsigned long arg);
|
||||
static int mptctl_eventreport(unsigned long arg);
|
||||
static int mptctl_replace_fw(unsigned long arg);
|
||||
static int mptctl_fw_download(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
static int mptctl_getiocinfo(MPT_ADAPTER *iocp, unsigned long arg, unsigned int cmd);
|
||||
static int mptctl_gettargetinfo(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
static int mptctl_readtest(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
static int mptctl_mpt_command(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
static int mptctl_eventquery(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
static int mptctl_eventenable(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
static int mptctl_eventreport(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
static int mptctl_replace_fw(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
|
||||
static int mptctl_do_reset(unsigned long arg);
|
||||
static int mptctl_hp_hostinfo(unsigned long arg, unsigned int cmd);
|
||||
static int mptctl_hp_targetinfo(unsigned long arg);
|
||||
static int mptctl_do_reset(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
static int mptctl_hp_hostinfo(MPT_ADAPTER *iocp, unsigned long arg, unsigned int cmd);
|
||||
static int mptctl_hp_targetinfo(MPT_ADAPTER *iocp, unsigned long arg);
|
||||
|
||||
static int mptctl_probe(struct pci_dev *, const struct pci_device_id *);
|
||||
static void mptctl_remove(struct pci_dev *);
|
||||
@ -123,8 +123,8 @@ static long compat_mpctl_ioctl(struct file *f, unsigned cmd, unsigned long arg);
|
||||
/*
|
||||
* Private function calls.
|
||||
*/
|
||||
static int mptctl_do_mpt_command(struct mpt_ioctl_command karg, void __user *mfPtr);
|
||||
static int mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen);
|
||||
static int mptctl_do_mpt_command(MPT_ADAPTER *iocp, struct mpt_ioctl_command karg, void __user *mfPtr);
|
||||
static int mptctl_do_fw_download(MPT_ADAPTER *iocp, char __user *ufwbuf, size_t fwlen);
|
||||
static MptSge_t *kbuf_alloc_2_sgl(int bytes, u32 dir, int sge_offset, int *frags,
|
||||
struct buflist **blp, dma_addr_t *sglbuf_dma, MPT_ADAPTER *ioc);
|
||||
static void kfree_sgl(MptSge_t *sgl, dma_addr_t sgl_dma,
|
||||
@ -656,19 +656,19 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
* by TM and FW reloads.
|
||||
*/
|
||||
if ((cmd & ~IOCSIZE_MASK) == (MPTIOCINFO & ~IOCSIZE_MASK)) {
|
||||
return mptctl_getiocinfo(arg, _IOC_SIZE(cmd));
|
||||
return mptctl_getiocinfo(iocp, arg, _IOC_SIZE(cmd));
|
||||
} else if (cmd == MPTTARGETINFO) {
|
||||
return mptctl_gettargetinfo(arg);
|
||||
return mptctl_gettargetinfo(iocp, arg);
|
||||
} else if (cmd == MPTTEST) {
|
||||
return mptctl_readtest(arg);
|
||||
return mptctl_readtest(iocp, arg);
|
||||
} else if (cmd == MPTEVENTQUERY) {
|
||||
return mptctl_eventquery(arg);
|
||||
return mptctl_eventquery(iocp, arg);
|
||||
} else if (cmd == MPTEVENTENABLE) {
|
||||
return mptctl_eventenable(arg);
|
||||
return mptctl_eventenable(iocp, arg);
|
||||
} else if (cmd == MPTEVENTREPORT) {
|
||||
return mptctl_eventreport(arg);
|
||||
return mptctl_eventreport(iocp, arg);
|
||||
} else if (cmd == MPTFWREPLACE) {
|
||||
return mptctl_replace_fw(arg);
|
||||
return mptctl_replace_fw(iocp, arg);
|
||||
}
|
||||
|
||||
/* All of these commands require an interrupt or
|
||||
@ -678,15 +678,15 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
return ret;
|
||||
|
||||
if (cmd == MPTFWDOWNLOAD)
|
||||
ret = mptctl_fw_download(arg);
|
||||
ret = mptctl_fw_download(iocp, arg);
|
||||
else if (cmd == MPTCOMMAND)
|
||||
ret = mptctl_mpt_command(arg);
|
||||
ret = mptctl_mpt_command(iocp, arg);
|
||||
else if (cmd == MPTHARDRESET)
|
||||
ret = mptctl_do_reset(arg);
|
||||
ret = mptctl_do_reset(iocp, arg);
|
||||
else if ((cmd & ~IOCSIZE_MASK) == (HP_GETHOSTINFO & ~IOCSIZE_MASK))
|
||||
ret = mptctl_hp_hostinfo(arg, _IOC_SIZE(cmd));
|
||||
ret = mptctl_hp_hostinfo(iocp, arg, _IOC_SIZE(cmd));
|
||||
else if (cmd == HP_GETTARGETINFO)
|
||||
ret = mptctl_hp_targetinfo(arg);
|
||||
ret = mptctl_hp_targetinfo(iocp, arg);
|
||||
else
|
||||
ret = -EINVAL;
|
||||
|
||||
@ -705,11 +705,10 @@ mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int mptctl_do_reset(unsigned long arg)
|
||||
static int mptctl_do_reset(MPT_ADAPTER *iocp, unsigned long arg)
|
||||
{
|
||||
struct mpt_ioctl_diag_reset __user *urinfo = (void __user *) arg;
|
||||
struct mpt_ioctl_diag_reset krinfo;
|
||||
MPT_ADAPTER *iocp;
|
||||
|
||||
if (copy_from_user(&krinfo, urinfo, sizeof(struct mpt_ioctl_diag_reset))) {
|
||||
printk(KERN_ERR MYNAM "%s@%d::mptctl_do_reset - "
|
||||
@ -718,12 +717,6 @@ static int mptctl_do_reset(unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (mpt_verify_adapter(krinfo.hdr.iocnum, &iocp) < 0) {
|
||||
printk(KERN_DEBUG MYNAM "%s@%d::mptctl_do_reset - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, krinfo.hdr.iocnum);
|
||||
return -ENODEV; /* (-6) No such device or address */
|
||||
}
|
||||
|
||||
dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "mptctl_do_reset called.\n",
|
||||
iocp->name));
|
||||
|
||||
@ -754,7 +747,7 @@ static int mptctl_do_reset(unsigned long arg)
|
||||
* -ENOMSG if FW upload returned bad status
|
||||
*/
|
||||
static int
|
||||
mptctl_fw_download(unsigned long arg)
|
||||
mptctl_fw_download(MPT_ADAPTER *iocp, unsigned long arg)
|
||||
{
|
||||
struct mpt_fw_xfer __user *ufwdl = (void __user *) arg;
|
||||
struct mpt_fw_xfer kfwdl;
|
||||
@ -766,7 +759,7 @@ mptctl_fw_download(unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return mptctl_do_fw_download(kfwdl.iocnum, kfwdl.bufp, kfwdl.fwlen);
|
||||
return mptctl_do_fw_download(iocp, kfwdl.bufp, kfwdl.fwlen);
|
||||
}
|
||||
|
||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||
@ -784,11 +777,10 @@ mptctl_fw_download(unsigned long arg)
|
||||
* -ENOMSG if FW upload returned bad status
|
||||
*/
|
||||
static int
|
||||
mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen)
|
||||
mptctl_do_fw_download(MPT_ADAPTER *iocp, char __user *ufwbuf, size_t fwlen)
|
||||
{
|
||||
FWDownload_t *dlmsg;
|
||||
MPT_FRAME_HDR *mf;
|
||||
MPT_ADAPTER *iocp;
|
||||
FWDownloadTCSGE_t *ptsge;
|
||||
MptSge_t *sgl, *sgIn;
|
||||
char *sgOut;
|
||||
@ -808,17 +800,10 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen)
|
||||
pFWDownloadReply_t ReplyMsg = NULL;
|
||||
unsigned long timeleft;
|
||||
|
||||
if (mpt_verify_adapter(ioc, &iocp) < 0) {
|
||||
printk(KERN_DEBUG MYNAM "ioctl_fwdl - ioc%d not found!\n",
|
||||
ioc);
|
||||
return -ENODEV; /* (-6) No such device or address */
|
||||
} else {
|
||||
|
||||
/* Valid device. Get a message frame and construct the FW download message.
|
||||
*/
|
||||
if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL)
|
||||
return -EAGAIN;
|
||||
}
|
||||
/* Valid device. Get a message frame and construct the FW download message.
|
||||
*/
|
||||
if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL)
|
||||
return -EAGAIN;
|
||||
|
||||
dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT
|
||||
"mptctl_do_fwdl called. mptctl_id = %xh.\n", iocp->name, mptctl_id));
|
||||
@ -826,8 +811,6 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen)
|
||||
iocp->name, ufwbuf));
|
||||
dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.fwlen = %d\n",
|
||||
iocp->name, (int)fwlen));
|
||||
dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.ioc = %04xh\n",
|
||||
iocp->name, ioc));
|
||||
|
||||
dlmsg = (FWDownload_t*) mf;
|
||||
ptsge = (FWDownloadTCSGE_t *) &dlmsg->SGL;
|
||||
@ -1238,13 +1221,11 @@ kfree_sgl(MptSge_t *sgl, dma_addr_t sgl_dma, struct buflist *buflist, MPT_ADAPTE
|
||||
* -ENODEV if no such device/adapter
|
||||
*/
|
||||
static int
|
||||
mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
|
||||
mptctl_getiocinfo (MPT_ADAPTER *ioc, unsigned long arg, unsigned int data_size)
|
||||
{
|
||||
struct mpt_ioctl_iocinfo __user *uarg = (void __user *) arg;
|
||||
struct mpt_ioctl_iocinfo *karg;
|
||||
MPT_ADAPTER *ioc;
|
||||
struct pci_dev *pdev;
|
||||
int iocnum;
|
||||
unsigned int port;
|
||||
int cim_rev;
|
||||
struct scsi_device *sdev;
|
||||
@ -1272,14 +1253,6 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
|
||||
return PTR_ERR(karg);
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_getiocinfo() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
kfree(karg);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Verify the data transfer size is correct. */
|
||||
if (karg->hdr.maxDataSize != data_size) {
|
||||
printk(MYIOC_s_ERR_FMT "%s@%d::mptctl_getiocinfo - "
|
||||
@ -1385,15 +1358,13 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
|
||||
* -ENODEV if no such device/adapter
|
||||
*/
|
||||
static int
|
||||
mptctl_gettargetinfo (unsigned long arg)
|
||||
mptctl_gettargetinfo (MPT_ADAPTER *ioc, unsigned long arg)
|
||||
{
|
||||
struct mpt_ioctl_targetinfo __user *uarg = (void __user *) arg;
|
||||
struct mpt_ioctl_targetinfo karg;
|
||||
MPT_ADAPTER *ioc;
|
||||
VirtDevice *vdevice;
|
||||
char *pmem;
|
||||
int *pdata;
|
||||
int iocnum;
|
||||
int numDevices = 0;
|
||||
int lun;
|
||||
int maxWordsLeft;
|
||||
@ -1408,13 +1379,6 @@ mptctl_gettargetinfo (unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_gettargetinfo() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_gettargetinfo called.\n",
|
||||
ioc->name));
|
||||
/* Get the port number and set the maximum number of bytes
|
||||
@ -1510,12 +1474,10 @@ mptctl_gettargetinfo (unsigned long arg)
|
||||
* -ENODEV if no such device/adapter
|
||||
*/
|
||||
static int
|
||||
mptctl_readtest (unsigned long arg)
|
||||
mptctl_readtest (MPT_ADAPTER *ioc, unsigned long arg)
|
||||
{
|
||||
struct mpt_ioctl_test __user *uarg = (void __user *) arg;
|
||||
struct mpt_ioctl_test karg;
|
||||
MPT_ADAPTER *ioc;
|
||||
int iocnum;
|
||||
|
||||
if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_test))) {
|
||||
printk(KERN_ERR MYNAM "%s@%d::mptctl_readtest - "
|
||||
@ -1524,13 +1486,6 @@ mptctl_readtest (unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_readtest() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_readtest called.\n",
|
||||
ioc->name));
|
||||
/* Fill in the data and return the structure to the calling
|
||||
@ -1571,12 +1526,10 @@ mptctl_readtest (unsigned long arg)
|
||||
* -ENODEV if no such device/adapter
|
||||
*/
|
||||
static int
|
||||
mptctl_eventquery (unsigned long arg)
|
||||
mptctl_eventquery (MPT_ADAPTER *ioc, unsigned long arg)
|
||||
{
|
||||
struct mpt_ioctl_eventquery __user *uarg = (void __user *) arg;
|
||||
struct mpt_ioctl_eventquery karg;
|
||||
MPT_ADAPTER *ioc;
|
||||
int iocnum;
|
||||
|
||||
if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventquery))) {
|
||||
printk(KERN_ERR MYNAM "%s@%d::mptctl_eventquery - "
|
||||
@ -1585,13 +1538,6 @@ mptctl_eventquery (unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_eventquery() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventquery called.\n",
|
||||
ioc->name));
|
||||
karg.eventEntries = MPTCTL_EVENT_LOG_SIZE;
|
||||
@ -1610,12 +1556,10 @@ mptctl_eventquery (unsigned long arg)
|
||||
|
||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||
static int
|
||||
mptctl_eventenable (unsigned long arg)
|
||||
mptctl_eventenable (MPT_ADAPTER *ioc, unsigned long arg)
|
||||
{
|
||||
struct mpt_ioctl_eventenable __user *uarg = (void __user *) arg;
|
||||
struct mpt_ioctl_eventenable karg;
|
||||
MPT_ADAPTER *ioc;
|
||||
int iocnum;
|
||||
|
||||
if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventenable))) {
|
||||
printk(KERN_ERR MYNAM "%s@%d::mptctl_eventenable - "
|
||||
@ -1624,13 +1568,6 @@ mptctl_eventenable (unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_eventenable() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventenable called.\n",
|
||||
ioc->name));
|
||||
if (ioc->events == NULL) {
|
||||
@ -1658,12 +1595,10 @@ mptctl_eventenable (unsigned long arg)
|
||||
|
||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||
static int
|
||||
mptctl_eventreport (unsigned long arg)
|
||||
mptctl_eventreport (MPT_ADAPTER *ioc, unsigned long arg)
|
||||
{
|
||||
struct mpt_ioctl_eventreport __user *uarg = (void __user *) arg;
|
||||
struct mpt_ioctl_eventreport karg;
|
||||
MPT_ADAPTER *ioc;
|
||||
int iocnum;
|
||||
int numBytes, maxEvents, max;
|
||||
|
||||
if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventreport))) {
|
||||
@ -1673,12 +1608,6 @@ mptctl_eventreport (unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_eventreport() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventreport called.\n",
|
||||
ioc->name));
|
||||
|
||||
@ -1712,12 +1641,10 @@ mptctl_eventreport (unsigned long arg)
|
||||
|
||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||
static int
|
||||
mptctl_replace_fw (unsigned long arg)
|
||||
mptctl_replace_fw (MPT_ADAPTER *ioc, unsigned long arg)
|
||||
{
|
||||
struct mpt_ioctl_replace_fw __user *uarg = (void __user *) arg;
|
||||
struct mpt_ioctl_replace_fw karg;
|
||||
MPT_ADAPTER *ioc;
|
||||
int iocnum;
|
||||
int newFwSize;
|
||||
|
||||
if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_replace_fw))) {
|
||||
@ -1727,13 +1654,6 @@ mptctl_replace_fw (unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_replace_fw() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_replace_fw called.\n",
|
||||
ioc->name));
|
||||
/* If caching FW, Free the old FW image
|
||||
@ -1780,12 +1700,10 @@ mptctl_replace_fw (unsigned long arg)
|
||||
* -ENOMEM if memory allocation error
|
||||
*/
|
||||
static int
|
||||
mptctl_mpt_command (unsigned long arg)
|
||||
mptctl_mpt_command (MPT_ADAPTER *ioc, unsigned long arg)
|
||||
{
|
||||
struct mpt_ioctl_command __user *uarg = (void __user *) arg;
|
||||
struct mpt_ioctl_command karg;
|
||||
MPT_ADAPTER *ioc;
|
||||
int iocnum;
|
||||
int rc;
|
||||
|
||||
|
||||
@ -1796,14 +1714,7 @@ mptctl_mpt_command (unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_mpt_command() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
rc = mptctl_do_mpt_command (karg, &uarg->MF);
|
||||
rc = mptctl_do_mpt_command (ioc, karg, &uarg->MF);
|
||||
|
||||
return rc;
|
||||
}
|
||||
@ -1821,9 +1732,8 @@ mptctl_mpt_command (unsigned long arg)
|
||||
* -EPERM if SCSI I/O and target is untagged
|
||||
*/
|
||||
static int
|
||||
mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
|
||||
mptctl_do_mpt_command (MPT_ADAPTER *ioc, struct mpt_ioctl_command karg, void __user *mfPtr)
|
||||
{
|
||||
MPT_ADAPTER *ioc;
|
||||
MPT_FRAME_HDR *mf = NULL;
|
||||
MPIHeader_t *hdr;
|
||||
char *psge;
|
||||
@ -1832,7 +1742,7 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
|
||||
dma_addr_t dma_addr_in;
|
||||
dma_addr_t dma_addr_out;
|
||||
int sgSize = 0; /* Num SG elements */
|
||||
int iocnum, flagsLength;
|
||||
int flagsLength;
|
||||
int sz, rc = 0;
|
||||
int msgContext;
|
||||
u16 req_idx;
|
||||
@ -1847,13 +1757,6 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr)
|
||||
bufIn.kptr = bufOut.kptr = NULL;
|
||||
bufIn.len = bufOut.len = 0;
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_do_mpt_command() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&ioc->taskmgmt_lock, flags);
|
||||
if (ioc->ioc_reset_in_progress) {
|
||||
spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
|
||||
@ -2418,17 +2321,15 @@ done_free_mem:
|
||||
* -ENOMEM if memory allocation error
|
||||
*/
|
||||
static int
|
||||
mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
|
||||
mptctl_hp_hostinfo(MPT_ADAPTER *ioc, unsigned long arg, unsigned int data_size)
|
||||
{
|
||||
hp_host_info_t __user *uarg = (void __user *) arg;
|
||||
MPT_ADAPTER *ioc;
|
||||
struct pci_dev *pdev;
|
||||
char *pbuf=NULL;
|
||||
dma_addr_t buf_dma;
|
||||
hp_host_info_t karg;
|
||||
CONFIGPARMS cfg;
|
||||
ConfigPageHeader_t hdr;
|
||||
int iocnum;
|
||||
int rc, cim_rev;
|
||||
ToolboxIstwiReadWriteRequest_t *IstwiRWRequest;
|
||||
MPT_FRAME_HDR *mf = NULL;
|
||||
@ -2452,12 +2353,6 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_hp_hostinfo() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": mptctl_hp_hostinfo called.\n",
|
||||
ioc->name));
|
||||
|
||||
@ -2670,15 +2565,13 @@ retry_wait:
|
||||
* -ENOMEM if memory allocation error
|
||||
*/
|
||||
static int
|
||||
mptctl_hp_targetinfo(unsigned long arg)
|
||||
mptctl_hp_targetinfo(MPT_ADAPTER *ioc, unsigned long arg)
|
||||
{
|
||||
hp_target_info_t __user *uarg = (void __user *) arg;
|
||||
SCSIDevicePage0_t *pg0_alloc;
|
||||
SCSIDevicePage3_t *pg3_alloc;
|
||||
MPT_ADAPTER *ioc;
|
||||
MPT_SCSI_HOST *hd = NULL;
|
||||
hp_target_info_t karg;
|
||||
int iocnum;
|
||||
int data_sz;
|
||||
dma_addr_t page_dma;
|
||||
CONFIGPARMS cfg;
|
||||
@ -2692,12 +2585,6 @@ mptctl_hp_targetinfo(unsigned long arg)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
|
||||
(ioc == NULL)) {
|
||||
printk(KERN_DEBUG MYNAM "%s::mptctl_hp_targetinfo() @%d - ioc%d not found!\n",
|
||||
__FILE__, __LINE__, iocnum);
|
||||
return -ENODEV;
|
||||
}
|
||||
if (karg.hdr.id >= MPT_MAX_FC_DEVICES)
|
||||
return -EINVAL;
|
||||
dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_hp_targetinfo called.\n",
|
||||
@ -2865,7 +2752,7 @@ compat_mptfwxfer_ioctl(struct file *filp, unsigned int cmd,
|
||||
kfw.fwlen = kfw32.fwlen;
|
||||
kfw.bufp = compat_ptr(kfw32.bufp);
|
||||
|
||||
ret = mptctl_do_fw_download(kfw.iocnum, kfw.bufp, kfw.fwlen);
|
||||
ret = mptctl_do_fw_download(iocp, kfw.bufp, kfw.fwlen);
|
||||
|
||||
mutex_unlock(&iocp->ioctl_cmds.mutex);
|
||||
|
||||
@ -2919,7 +2806,7 @@ compat_mpt_command(struct file *filp, unsigned int cmd,
|
||||
|
||||
/* Pass new structure to do_mpt_command
|
||||
*/
|
||||
ret = mptctl_do_mpt_command (karg, &uarg->MF);
|
||||
ret = mptctl_do_mpt_command (iocp, karg, &uarg->MF);
|
||||
|
||||
mutex_unlock(&iocp->ioctl_cmds.mutex);
|
||||
|
||||
|
@ -669,7 +669,6 @@ static int hns_nic_poll_rx_skb(struct hns_nic_ring_data *ring_data,
|
||||
skb = *out_skb = napi_alloc_skb(&ring_data->napi,
|
||||
HNS_RX_HEAD_SIZE);
|
||||
if (unlikely(!skb)) {
|
||||
netdev_err(ndev, "alloc rx skb fail\n");
|
||||
ring->stats.sw_err_cnt++;
|
||||
return -ENOMEM;
|
||||
}
|
||||
@ -1180,7 +1179,6 @@ static int hns_nic_common_poll(struct napi_struct *napi, int budget)
|
||||
container_of(napi, struct hns_nic_ring_data, napi);
|
||||
struct hnae_ring *ring = ring_data->ring;
|
||||
|
||||
try_again:
|
||||
clean_complete += ring_data->poll_one(
|
||||
ring_data, budget - clean_complete,
|
||||
ring_data->ex_process);
|
||||
@ -1190,7 +1188,7 @@ try_again:
|
||||
napi_complete(napi);
|
||||
ring->q->handle->dev->ops->toggle_ring_irq(ring, 0);
|
||||
} else {
|
||||
goto try_again;
|
||||
return budget;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -341,9 +341,8 @@ struct dma_features {
|
||||
unsigned int pps_out_num;
|
||||
};
|
||||
|
||||
/* GMAC TX FIFO is 8K, Rx FIFO is 16K */
|
||||
#define BUF_SIZE_16KiB 16384
|
||||
/* RX Buffer size must be < 8191 and multiple of 4/8/16 bytes */
|
||||
/* RX Buffer size must be multiple of 4/8/16 bytes */
|
||||
#define BUF_SIZE_16KiB 16368
|
||||
#define BUF_SIZE_8KiB 8188
|
||||
#define BUF_SIZE_4KiB 4096
|
||||
#define BUF_SIZE_2KiB 2048
|
||||
|
@ -1134,7 +1134,9 @@ static int stmmac_set_bfsize(int mtu, int bufsize)
|
||||
{
|
||||
int ret = bufsize;
|
||||
|
||||
if (mtu >= BUF_SIZE_4KiB)
|
||||
if (mtu >= BUF_SIZE_8KiB)
|
||||
ret = BUF_SIZE_16KiB;
|
||||
else if (mtu >= BUF_SIZE_4KiB)
|
||||
ret = BUF_SIZE_8KiB;
|
||||
else if (mtu >= BUF_SIZE_2KiB)
|
||||
ret = BUF_SIZE_4KiB;
|
||||
|
@ -1331,8 +1331,6 @@ void rndis_filter_device_remove(struct hv_device *dev,
|
||||
/* Halt and release the rndis device */
|
||||
rndis_filter_halt_device(rndis_dev);
|
||||
|
||||
net_dev->extension = NULL;
|
||||
|
||||
netvsc_device_remove(dev);
|
||||
}
|
||||
|
||||
|
@ -263,7 +263,7 @@ static void macvlan_broadcast(struct sk_buff *skb,
|
||||
struct net_device *src,
|
||||
enum macvlan_mode mode)
|
||||
{
|
||||
const struct ethhdr *eth = skb_eth_hdr(skb);
|
||||
const struct ethhdr *eth = eth_hdr(skb);
|
||||
const struct macvlan_dev *vlan;
|
||||
struct sk_buff *nskb;
|
||||
unsigned int i;
|
||||
@ -515,10 +515,11 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
const struct macvlan_dev *dest;
|
||||
|
||||
if (vlan->mode == MACVLAN_MODE_BRIDGE) {
|
||||
const struct ethhdr *eth = (void *)skb->data;
|
||||
const struct ethhdr *eth = skb_eth_hdr(skb);
|
||||
|
||||
/* send to other bridge ports directly */
|
||||
if (is_multicast_ether_addr(eth->h_dest)) {
|
||||
skb_reset_mac_header(skb);
|
||||
macvlan_broadcast(skb, port, dev, MACVLAN_MODE_BRIDGE);
|
||||
goto xmit_world;
|
||||
}
|
||||
|
@ -3609,6 +3609,7 @@ static int lan78xx_probe(struct usb_interface *intf,
|
||||
|
||||
/* MTU range: 68 - 9000 */
|
||||
netdev->max_mtu = MAX_SINGLE_PACKET_SIZE;
|
||||
netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER);
|
||||
|
||||
dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0;
|
||||
dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1;
|
||||
|
@ -5158,6 +5158,9 @@ static int rtl8152_probe(struct usb_interface *intf,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (intf->cur_altsetting->desc.bNumEndpoints < 3)
|
||||
return -ENODEV;
|
||||
|
||||
usb_reset_device(udev);
|
||||
netdev = alloc_etherdev(sizeof(struct r8152));
|
||||
if (!netdev) {
|
||||
|
@ -76,7 +76,7 @@ static struct ucc_tdm_info utdm_primary_info = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct ucc_tdm_info utdm_info[MAX_HDLC_NUM];
|
||||
static struct ucc_tdm_info utdm_info[UCC_MAX_NUM];
|
||||
|
||||
static int uhdlc_init(struct ucc_hdlc_private *priv)
|
||||
{
|
||||
|
@ -323,12 +323,12 @@ int cw1200_load_firmware(struct cw1200_common *priv)
|
||||
goto out;
|
||||
}
|
||||
|
||||
priv->hw_type = cw1200_get_hw_type(val32, &major_revision);
|
||||
if (priv->hw_type < 0) {
|
||||
ret = cw1200_get_hw_type(val32, &major_revision);
|
||||
if (ret < 0) {
|
||||
pr_err("Can't deduce hardware type.\n");
|
||||
ret = -ENOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
priv->hw_type = ret;
|
||||
|
||||
/* Set DPLL Reg value, and read back to confirm writes work */
|
||||
ret = cw1200_reg_write_32(priv, ST90TDS_TSET_GEN_R_W_REG_ID,
|
||||
|
@ -403,7 +403,7 @@ static int pn533_acr122_poweron_rdr(struct pn533_usb_phy *phy)
|
||||
cmd, sizeof(cmd), false);
|
||||
|
||||
rc = usb_bulk_msg(phy->udev, phy->out_urb->pipe, buffer, sizeof(cmd),
|
||||
&transferred, 0);
|
||||
&transferred, 5000);
|
||||
kfree(buffer);
|
||||
if (rc || (transferred != sizeof(cmd))) {
|
||||
nfc_err(&phy->udev->dev,
|
||||
|
@ -179,6 +179,7 @@ static void ptp_clock_release(struct device *dev)
|
||||
{
|
||||
struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
|
||||
|
||||
ptp_cleanup_pin_groups(ptp);
|
||||
mutex_destroy(&ptp->tsevq_mux);
|
||||
mutex_destroy(&ptp->pincfg_mux);
|
||||
ida_simple_remove(&ptp_clocks_map, ptp->index);
|
||||
@ -315,9 +316,8 @@ int ptp_clock_unregister(struct ptp_clock *ptp)
|
||||
if (ptp->pps_source)
|
||||
pps_unregister_source(ptp->pps_source);
|
||||
|
||||
ptp_cleanup_pin_groups(ptp);
|
||||
|
||||
posix_clock_unregister(&ptp->clock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(ptp_clock_unregister);
|
||||
|
@ -915,12 +915,12 @@ void bnx2i_free_hba(struct bnx2i_hba *hba)
|
||||
INIT_LIST_HEAD(&hba->ep_ofld_list);
|
||||
INIT_LIST_HEAD(&hba->ep_active_list);
|
||||
INIT_LIST_HEAD(&hba->ep_destroy_list);
|
||||
pci_dev_put(hba->pcidev);
|
||||
|
||||
if (hba->regview) {
|
||||
pci_iounmap(hba->pcidev, hba->regview);
|
||||
hba->regview = NULL;
|
||||
}
|
||||
pci_dev_put(hba->pcidev);
|
||||
bnx2i_free_mp_bdt(hba);
|
||||
bnx2i_release_free_cid_que(hba);
|
||||
iscsi_host_free(shost);
|
||||
|
@ -1197,6 +1197,7 @@ bool esas2r_nvram_read_direct(struct esas2r_adapter *a)
|
||||
if (!esas2r_read_flash_block(a, a->nvram, FLS_OFFSET_NVR,
|
||||
sizeof(struct esas2r_sas_nvram))) {
|
||||
esas2r_hdebug("NVRAM read failed, using defaults");
|
||||
up(&a->nvram_semaphore);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -445,26 +445,26 @@ int vnic_dev_soft_reset_done(struct vnic_dev *vdev, int *done)
|
||||
|
||||
int vnic_dev_hang_notify(struct vnic_dev *vdev)
|
||||
{
|
||||
u64 a0, a1;
|
||||
u64 a0 = 0, a1 = 0;
|
||||
int wait = 1000;
|
||||
return vnic_dev_cmd(vdev, CMD_HANG_NOTIFY, &a0, &a1, wait);
|
||||
}
|
||||
|
||||
int vnic_dev_mac_addr(struct vnic_dev *vdev, u8 *mac_addr)
|
||||
{
|
||||
u64 a0, a1;
|
||||
u64 a[2] = {};
|
||||
int wait = 1000;
|
||||
int err, i;
|
||||
|
||||
for (i = 0; i < ETH_ALEN; i++)
|
||||
mac_addr[i] = 0;
|
||||
|
||||
err = vnic_dev_cmd(vdev, CMD_MAC_ADDR, &a0, &a1, wait);
|
||||
err = vnic_dev_cmd(vdev, CMD_MAC_ADDR, &a[0], &a[1], wait);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
for (i = 0; i < ETH_ALEN; i++)
|
||||
mac_addr[i] = ((u8 *)&a0)[i];
|
||||
mac_addr[i] = ((u8 *)&a)[i];
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -489,30 +489,30 @@ void vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,
|
||||
|
||||
void vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr)
|
||||
{
|
||||
u64 a0 = 0, a1 = 0;
|
||||
u64 a[2] = {};
|
||||
int wait = 1000;
|
||||
int err;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ETH_ALEN; i++)
|
||||
((u8 *)&a0)[i] = addr[i];
|
||||
((u8 *)&a)[i] = addr[i];
|
||||
|
||||
err = vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a0, &a1, wait);
|
||||
err = vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a[0], &a[1], wait);
|
||||
if (err)
|
||||
pr_err("Can't add addr [%pM], %d\n", addr, err);
|
||||
}
|
||||
|
||||
void vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr)
|
||||
{
|
||||
u64 a0 = 0, a1 = 0;
|
||||
u64 a[2] = {};
|
||||
int wait = 1000;
|
||||
int err;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ETH_ALEN; i++)
|
||||
((u8 *)&a0)[i] = addr[i];
|
||||
((u8 *)&a)[i] = addr[i];
|
||||
|
||||
err = vnic_dev_cmd(vdev, CMD_ADDR_DEL, &a0, &a1, wait);
|
||||
err = vnic_dev_cmd(vdev, CMD_ADDR_DEL, &a[0], &a[1], wait);
|
||||
if (err)
|
||||
pr_err("Can't del addr [%pM], %d\n", addr, err);
|
||||
}
|
||||
|
@ -5145,8 +5145,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)
|
||||
if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags))
|
||||
break;
|
||||
|
||||
if ((fcport->flags & FCF_FABRIC_DEVICE) == 0 ||
|
||||
(fcport->flags & FCF_LOGIN_NEEDED) == 0)
|
||||
if ((fcport->flags & FCF_FABRIC_DEVICE) == 0)
|
||||
continue;
|
||||
|
||||
if (fcport->scan_state == QLA_FCPORT_SCAN) {
|
||||
@ -5171,7 +5170,8 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha)
|
||||
}
|
||||
}
|
||||
|
||||
if (fcport->scan_state == QLA_FCPORT_FOUND)
|
||||
if (fcport->scan_state == QLA_FCPORT_FOUND &&
|
||||
(fcport->flags & FCF_LOGIN_NEEDED) != 0)
|
||||
qla24xx_fcport_handle_login(vha, fcport);
|
||||
}
|
||||
return (rval);
|
||||
|
@ -3519,7 +3519,7 @@ qla2x00_request_irqs(struct qla_hw_data *ha, struct rsp_que *rsp)
|
||||
skip_msix:
|
||||
|
||||
ql_log(ql_log_info, vha, 0x0037,
|
||||
"Falling back-to MSI mode -%d.\n", ret);
|
||||
"Falling back-to MSI mode -- ret=%d.\n", ret);
|
||||
|
||||
if (!IS_QLA24XX(ha) && !IS_QLA2532(ha) && !IS_QLA8432(ha) &&
|
||||
!IS_QLA8001(ha) && !IS_P3P_TYPE(ha) && !IS_QLAFX00(ha) &&
|
||||
@ -3527,13 +3527,13 @@ skip_msix:
|
||||
goto skip_msi;
|
||||
|
||||
ret = pci_alloc_irq_vectors(ha->pdev, 1, 1, PCI_IRQ_MSI);
|
||||
if (!ret) {
|
||||
if (ret > 0) {
|
||||
ql_dbg(ql_dbg_init, vha, 0x0038,
|
||||
"MSI: Enabled.\n");
|
||||
ha->flags.msi_enabled = 1;
|
||||
} else
|
||||
ql_log(ql_log_warn, vha, 0x0039,
|
||||
"Falling back-to INTa mode -- %d.\n", ret);
|
||||
"Falling back-to INTa mode -- ret=%d.\n", ret);
|
||||
skip_msi:
|
||||
|
||||
/* Skip INTx on ISP82xx. */
|
||||
|
@ -641,9 +641,6 @@ int qla4xxx_initialize_fw_cb(struct scsi_qla_host * ha)
|
||||
|
||||
if (qla4xxx_get_ifcb(ha, &mbox_cmd[0], &mbox_sts[0], init_fw_cb_dma) !=
|
||||
QLA_SUCCESS) {
|
||||
dma_free_coherent(&ha->pdev->dev,
|
||||
sizeof(struct addr_ctrl_blk),
|
||||
init_fw_cb, init_fw_cb_dma);
|
||||
goto exit_init_fw_cb;
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include <trace/events/scsi.h>
|
||||
|
||||
#define SERVICE_ACTION16(cdb) (cdb[1] & 0x1f)
|
||||
#define SERVICE_ACTION32(cdb) ((cdb[8] << 8) | cdb[9])
|
||||
#define SERVICE_ACTION32(cdb) (get_unaligned_be16(&cdb[8]))
|
||||
|
||||
static const char *
|
||||
scsi_trace_misc(struct trace_seq *, unsigned char *, int);
|
||||
@ -51,17 +51,12 @@ static const char *
|
||||
scsi_trace_rw10(struct trace_seq *p, unsigned char *cdb, int len)
|
||||
{
|
||||
const char *ret = trace_seq_buffer_ptr(p);
|
||||
sector_t lba = 0, txlen = 0;
|
||||
u32 lba, txlen;
|
||||
|
||||
lba |= (cdb[2] << 24);
|
||||
lba |= (cdb[3] << 16);
|
||||
lba |= (cdb[4] << 8);
|
||||
lba |= cdb[5];
|
||||
txlen |= (cdb[7] << 8);
|
||||
txlen |= cdb[8];
|
||||
lba = get_unaligned_be32(&cdb[2]);
|
||||
txlen = get_unaligned_be16(&cdb[7]);
|
||||
|
||||
trace_seq_printf(p, "lba=%llu txlen=%llu protect=%u",
|
||||
(unsigned long long)lba, (unsigned long long)txlen,
|
||||
trace_seq_printf(p, "lba=%u txlen=%u protect=%u", lba, txlen,
|
||||
cdb[1] >> 5);
|
||||
|
||||
if (cdb[0] == WRITE_SAME)
|
||||
@ -76,19 +71,12 @@ static const char *
|
||||
scsi_trace_rw12(struct trace_seq *p, unsigned char *cdb, int len)
|
||||
{
|
||||
const char *ret = trace_seq_buffer_ptr(p);
|
||||
sector_t lba = 0, txlen = 0;
|
||||
u32 lba, txlen;
|
||||
|
||||
lba |= (cdb[2] << 24);
|
||||
lba |= (cdb[3] << 16);
|
||||
lba |= (cdb[4] << 8);
|
||||
lba |= cdb[5];
|
||||
txlen |= (cdb[6] << 24);
|
||||
txlen |= (cdb[7] << 16);
|
||||
txlen |= (cdb[8] << 8);
|
||||
txlen |= cdb[9];
|
||||
lba = get_unaligned_be32(&cdb[2]);
|
||||
txlen = get_unaligned_be32(&cdb[6]);
|
||||
|
||||
trace_seq_printf(p, "lba=%llu txlen=%llu protect=%u",
|
||||
(unsigned long long)lba, (unsigned long long)txlen,
|
||||
trace_seq_printf(p, "lba=%u txlen=%u protect=%u", lba, txlen,
|
||||
cdb[1] >> 5);
|
||||
trace_seq_putc(p, 0);
|
||||
|
||||
@ -99,23 +87,13 @@ static const char *
|
||||
scsi_trace_rw16(struct trace_seq *p, unsigned char *cdb, int len)
|
||||
{
|
||||
const char *ret = trace_seq_buffer_ptr(p);
|
||||
sector_t lba = 0, txlen = 0;
|
||||
u64 lba;
|
||||
u32 txlen;
|
||||
|
||||
lba |= ((u64)cdb[2] << 56);
|
||||
lba |= ((u64)cdb[3] << 48);
|
||||
lba |= ((u64)cdb[4] << 40);
|
||||
lba |= ((u64)cdb[5] << 32);
|
||||
lba |= (cdb[6] << 24);
|
||||
lba |= (cdb[7] << 16);
|
||||
lba |= (cdb[8] << 8);
|
||||
lba |= cdb[9];
|
||||
txlen |= (cdb[10] << 24);
|
||||
txlen |= (cdb[11] << 16);
|
||||
txlen |= (cdb[12] << 8);
|
||||
txlen |= cdb[13];
|
||||
lba = get_unaligned_be64(&cdb[2]);
|
||||
txlen = get_unaligned_be32(&cdb[10]);
|
||||
|
||||
trace_seq_printf(p, "lba=%llu txlen=%llu protect=%u",
|
||||
(unsigned long long)lba, (unsigned long long)txlen,
|
||||
trace_seq_printf(p, "lba=%llu txlen=%u protect=%u", lba, txlen,
|
||||
cdb[1] >> 5);
|
||||
|
||||
if (cdb[0] == WRITE_SAME_16)
|
||||
@ -130,8 +108,8 @@ static const char *
|
||||
scsi_trace_rw32(struct trace_seq *p, unsigned char *cdb, int len)
|
||||
{
|
||||
const char *ret = trace_seq_buffer_ptr(p), *cmd;
|
||||
sector_t lba = 0, txlen = 0;
|
||||
u32 ei_lbrt = 0;
|
||||
u64 lba;
|
||||
u32 ei_lbrt, txlen;
|
||||
|
||||
switch (SERVICE_ACTION32(cdb)) {
|
||||
case READ_32:
|
||||
@ -151,26 +129,12 @@ scsi_trace_rw32(struct trace_seq *p, unsigned char *cdb, int len)
|
||||
goto out;
|
||||
}
|
||||
|
||||
lba |= ((u64)cdb[12] << 56);
|
||||
lba |= ((u64)cdb[13] << 48);
|
||||
lba |= ((u64)cdb[14] << 40);
|
||||
lba |= ((u64)cdb[15] << 32);
|
||||
lba |= (cdb[16] << 24);
|
||||
lba |= (cdb[17] << 16);
|
||||
lba |= (cdb[18] << 8);
|
||||
lba |= cdb[19];
|
||||
ei_lbrt |= (cdb[20] << 24);
|
||||
ei_lbrt |= (cdb[21] << 16);
|
||||
ei_lbrt |= (cdb[22] << 8);
|
||||
ei_lbrt |= cdb[23];
|
||||
txlen |= (cdb[28] << 24);
|
||||
txlen |= (cdb[29] << 16);
|
||||
txlen |= (cdb[30] << 8);
|
||||
txlen |= cdb[31];
|
||||
lba = get_unaligned_be64(&cdb[12]);
|
||||
ei_lbrt = get_unaligned_be32(&cdb[20]);
|
||||
txlen = get_unaligned_be32(&cdb[28]);
|
||||
|
||||
trace_seq_printf(p, "%s_32 lba=%llu txlen=%llu protect=%u ei_lbrt=%u",
|
||||
cmd, (unsigned long long)lba,
|
||||
(unsigned long long)txlen, cdb[10] >> 5, ei_lbrt);
|
||||
trace_seq_printf(p, "%s_32 lba=%llu txlen=%u protect=%u ei_lbrt=%u",
|
||||
cmd, lba, txlen, cdb[10] >> 5, ei_lbrt);
|
||||
|
||||
if (SERVICE_ACTION32(cdb) == WRITE_SAME_32)
|
||||
trace_seq_printf(p, " unmap=%u", cdb[10] >> 3 & 1);
|
||||
@ -185,7 +149,7 @@ static const char *
|
||||
scsi_trace_unmap(struct trace_seq *p, unsigned char *cdb, int len)
|
||||
{
|
||||
const char *ret = trace_seq_buffer_ptr(p);
|
||||
unsigned int regions = cdb[7] << 8 | cdb[8];
|
||||
unsigned int regions = get_unaligned_be16(&cdb[7]);
|
||||
|
||||
trace_seq_printf(p, "regions=%u", (regions - 8) / 16);
|
||||
trace_seq_putc(p, 0);
|
||||
@ -197,8 +161,8 @@ static const char *
|
||||
scsi_trace_service_action_in(struct trace_seq *p, unsigned char *cdb, int len)
|
||||
{
|
||||
const char *ret = trace_seq_buffer_ptr(p), *cmd;
|
||||
sector_t lba = 0;
|
||||
u32 alloc_len = 0;
|
||||
u64 lba;
|
||||
u32 alloc_len;
|
||||
|
||||
switch (SERVICE_ACTION16(cdb)) {
|
||||
case SAI_READ_CAPACITY_16:
|
||||
@ -212,21 +176,10 @@ scsi_trace_service_action_in(struct trace_seq *p, unsigned char *cdb, int len)
|
||||
goto out;
|
||||
}
|
||||
|
||||
lba |= ((u64)cdb[2] << 56);
|
||||
lba |= ((u64)cdb[3] << 48);
|
||||
lba |= ((u64)cdb[4] << 40);
|
||||
lba |= ((u64)cdb[5] << 32);
|
||||
lba |= (cdb[6] << 24);
|
||||
lba |= (cdb[7] << 16);
|
||||
lba |= (cdb[8] << 8);
|
||||
lba |= cdb[9];
|
||||
alloc_len |= (cdb[10] << 24);
|
||||
alloc_len |= (cdb[11] << 16);
|
||||
alloc_len |= (cdb[12] << 8);
|
||||
alloc_len |= cdb[13];
|
||||
lba = get_unaligned_be64(&cdb[2]);
|
||||
alloc_len = get_unaligned_be32(&cdb[10]);
|
||||
|
||||
trace_seq_printf(p, "%s lba=%llu alloc_len=%u", cmd,
|
||||
(unsigned long long)lba, alloc_len);
|
||||
trace_seq_printf(p, "%s lba=%llu alloc_len=%u", cmd, lba, alloc_len);
|
||||
|
||||
out:
|
||||
trace_seq_putc(p, 0);
|
||||
|
@ -131,7 +131,7 @@ static int srp_get_pr_transport_id(
|
||||
memset(buf + 8, 0, leading_zero_bytes);
|
||||
rc = hex2bin(buf + 8 + leading_zero_bytes, p, count);
|
||||
if (rc < 0) {
|
||||
pr_debug("hex2bin failed for %s: %d\n", __func__, rc);
|
||||
pr_debug("hex2bin failed for %s: %d\n", p, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -1176,6 +1176,7 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
|
||||
* PORT_OVER_CURRENT is not. So check for any of them.
|
||||
*/
|
||||
if (udev || (portstatus & USB_PORT_STAT_CONNECTION) ||
|
||||
(portchange & USB_PORT_STAT_C_CONNECTION) ||
|
||||
(portstatus & USB_PORT_STAT_OVERCURRENT) ||
|
||||
(portchange & USB_PORT_STAT_C_OVERCURRENT))
|
||||
set_bit(port1, hub->change_bits);
|
||||
|
@ -592,9 +592,13 @@ static int ch341_tiocmget(struct tty_struct *tty)
|
||||
static int ch341_reset_resume(struct usb_serial *serial)
|
||||
{
|
||||
struct usb_serial_port *port = serial->port[0];
|
||||
struct ch341_private *priv = usb_get_serial_port_data(port);
|
||||
struct ch341_private *priv;
|
||||
int ret;
|
||||
|
||||
priv = usb_get_serial_port_data(port);
|
||||
if (!priv)
|
||||
return 0;
|
||||
|
||||
/* reconfigure ch341 serial port after bus-reset */
|
||||
ch341_configure(serial->dev, priv);
|
||||
|
||||
|
@ -652,6 +652,7 @@ static void edge_interrupt_callback(struct urb *urb)
|
||||
struct usb_serial_port *port;
|
||||
unsigned char *data = urb->transfer_buffer;
|
||||
int length = urb->actual_length;
|
||||
unsigned long flags;
|
||||
int bytes_avail;
|
||||
int position;
|
||||
int txCredits;
|
||||
@ -683,7 +684,7 @@ static void edge_interrupt_callback(struct urb *urb)
|
||||
if (length > 1) {
|
||||
bytes_avail = data[0] | (data[1] << 8);
|
||||
if (bytes_avail) {
|
||||
spin_lock(&edge_serial->es_lock);
|
||||
spin_lock_irqsave(&edge_serial->es_lock, flags);
|
||||
edge_serial->rxBytesAvail += bytes_avail;
|
||||
dev_dbg(dev,
|
||||
"%s - bytes_avail=%d, rxBytesAvail=%d, read_in_progress=%d\n",
|
||||
@ -706,7 +707,8 @@ static void edge_interrupt_callback(struct urb *urb)
|
||||
edge_serial->read_in_progress = false;
|
||||
}
|
||||
}
|
||||
spin_unlock(&edge_serial->es_lock);
|
||||
spin_unlock_irqrestore(&edge_serial->es_lock,
|
||||
flags);
|
||||
}
|
||||
}
|
||||
/* grab the txcredits for the ports if available */
|
||||
@ -718,10 +720,12 @@ static void edge_interrupt_callback(struct urb *urb)
|
||||
if (txCredits) {
|
||||
port = edge_serial->serial->port[portNumber];
|
||||
edge_port = usb_get_serial_port_data(port);
|
||||
if (edge_port->open) {
|
||||
spin_lock(&edge_port->ep_lock);
|
||||
if (edge_port && edge_port->open) {
|
||||
spin_lock_irqsave(&edge_port->ep_lock,
|
||||
flags);
|
||||
edge_port->txCredits += txCredits;
|
||||
spin_unlock(&edge_port->ep_lock);
|
||||
spin_unlock_irqrestore(&edge_port->ep_lock,
|
||||
flags);
|
||||
dev_dbg(dev, "%s - txcredits for port%d = %d\n",
|
||||
__func__, portNumber,
|
||||
edge_port->txCredits);
|
||||
@ -762,6 +766,7 @@ static void edge_bulk_in_callback(struct urb *urb)
|
||||
int retval;
|
||||
__u16 raw_data_length;
|
||||
int status = urb->status;
|
||||
unsigned long flags;
|
||||
|
||||
if (status) {
|
||||
dev_dbg(&urb->dev->dev, "%s - nonzero read bulk status received: %d\n",
|
||||
@ -781,7 +786,7 @@ static void edge_bulk_in_callback(struct urb *urb)
|
||||
|
||||
usb_serial_debug_data(dev, __func__, raw_data_length, data);
|
||||
|
||||
spin_lock(&edge_serial->es_lock);
|
||||
spin_lock_irqsave(&edge_serial->es_lock, flags);
|
||||
|
||||
/* decrement our rxBytes available by the number that we just got */
|
||||
edge_serial->rxBytesAvail -= raw_data_length;
|
||||
@ -805,7 +810,7 @@ static void edge_bulk_in_callback(struct urb *urb)
|
||||
edge_serial->read_in_progress = false;
|
||||
}
|
||||
|
||||
spin_unlock(&edge_serial->es_lock);
|
||||
spin_unlock_irqrestore(&edge_serial->es_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
@ -1733,7 +1738,8 @@ static void edge_break(struct tty_struct *tty, int break_state)
|
||||
static void process_rcvd_data(struct edgeport_serial *edge_serial,
|
||||
unsigned char *buffer, __u16 bufferLength)
|
||||
{
|
||||
struct device *dev = &edge_serial->serial->dev->dev;
|
||||
struct usb_serial *serial = edge_serial->serial;
|
||||
struct device *dev = &serial->dev->dev;
|
||||
struct usb_serial_port *port;
|
||||
struct edgeport_port *edge_port;
|
||||
__u16 lastBufferLength;
|
||||
@ -1838,11 +1844,10 @@ static void process_rcvd_data(struct edgeport_serial *edge_serial,
|
||||
|
||||
/* spit this data back into the tty driver if this
|
||||
port is open */
|
||||
if (rxLen) {
|
||||
port = edge_serial->serial->port[
|
||||
edge_serial->rxPort];
|
||||
if (rxLen && edge_serial->rxPort < serial->num_ports) {
|
||||
port = serial->port[edge_serial->rxPort];
|
||||
edge_port = usb_get_serial_port_data(port);
|
||||
if (edge_port->open) {
|
||||
if (edge_port && edge_port->open) {
|
||||
dev_dbg(dev, "%s - Sending %d bytes to TTY for port %d\n",
|
||||
__func__, rxLen,
|
||||
edge_serial->rxPort);
|
||||
@ -1850,8 +1855,8 @@ static void process_rcvd_data(struct edgeport_serial *edge_serial,
|
||||
rxLen);
|
||||
edge_port->port->icount.rx += rxLen;
|
||||
}
|
||||
buffer += rxLen;
|
||||
}
|
||||
buffer += rxLen;
|
||||
break;
|
||||
|
||||
case EXPECT_HDR3: /* Expect 3rd byte of status header */
|
||||
@ -1886,6 +1891,8 @@ static void process_rcvd_status(struct edgeport_serial *edge_serial,
|
||||
__u8 code = edge_serial->rxStatusCode;
|
||||
|
||||
/* switch the port pointer to the one being currently talked about */
|
||||
if (edge_serial->rxPort >= edge_serial->serial->num_ports)
|
||||
return;
|
||||
port = edge_serial->serial->port[edge_serial->rxPort];
|
||||
edge_port = usb_get_serial_port_data(port);
|
||||
if (edge_port == NULL) {
|
||||
|
@ -1062,6 +1062,8 @@ static void usa49_glocont_callback(struct urb *urb)
|
||||
for (i = 0; i < serial->num_ports; ++i) {
|
||||
port = serial->port[i];
|
||||
p_priv = usb_get_serial_port_data(port);
|
||||
if (!p_priv)
|
||||
continue;
|
||||
|
||||
if (p_priv->resend_cont) {
|
||||
dev_dbg(&port->dev, "%s - sending setup\n", __func__);
|
||||
@ -1463,6 +1465,8 @@ static void usa67_glocont_callback(struct urb *urb)
|
||||
for (i = 0; i < serial->num_ports; ++i) {
|
||||
port = serial->port[i];
|
||||
p_priv = usb_get_serial_port_data(port);
|
||||
if (!p_priv)
|
||||
continue;
|
||||
|
||||
if (p_priv->resend_cont) {
|
||||
dev_dbg(&port->dev, "%s - sending setup\n", __func__);
|
||||
|
@ -116,7 +116,7 @@ static int send_control_msg(struct usb_serial_port *port, u8 requesttype,
|
||||
retval = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
|
||||
requesttype,
|
||||
USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
|
||||
0, 0, buffer, 1, 0);
|
||||
0, 0, buffer, 1, USB_CTRL_SET_TIMEOUT);
|
||||
kfree(buffer);
|
||||
|
||||
if (retval < 0)
|
||||
|
@ -251,6 +251,7 @@ static void option_instat_callback(struct urb *urb);
|
||||
#define QUECTEL_PRODUCT_BG96 0x0296
|
||||
#define QUECTEL_PRODUCT_EP06 0x0306
|
||||
#define QUECTEL_PRODUCT_EM12 0x0512
|
||||
#define QUECTEL_PRODUCT_RM500Q 0x0800
|
||||
|
||||
#define CMOTECH_VENDOR_ID 0x16d8
|
||||
#define CMOTECH_PRODUCT_6001 0x6001
|
||||
@ -1107,6 +1108,11 @@ static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff),
|
||||
.driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x30) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
|
||||
.driver_info = ZLP },
|
||||
|
||||
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
|
||||
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
|
||||
{ USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),
|
||||
|
@ -867,7 +867,10 @@ static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch)
|
||||
u8 newMSR = (u8) *ch;
|
||||
unsigned long flags;
|
||||
|
||||
/* May be called from qt2_process_read_urb() for an unbound port. */
|
||||
port_priv = usb_get_serial_port_data(port);
|
||||
if (!port_priv)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&port_priv->lock, flags);
|
||||
port_priv->shadowMSR = newMSR;
|
||||
@ -895,7 +898,10 @@ static void qt2_update_lsr(struct usb_serial_port *port, unsigned char *ch)
|
||||
unsigned long flags;
|
||||
u8 newLSR = (u8) *ch;
|
||||
|
||||
/* May be called from qt2_process_read_urb() for an unbound port. */
|
||||
port_priv = usb_get_serial_port_data(port);
|
||||
if (!port_priv)
|
||||
return;
|
||||
|
||||
if (newLSR & UART_LSR_BI)
|
||||
newLSR &= (u8) (UART_LSR_OE | UART_LSR_BI);
|
||||
|
@ -89,6 +89,8 @@ DEVICE(moto_modem, MOTO_IDS);
|
||||
#define MOTOROLA_TETRA_IDS() \
|
||||
{ USB_DEVICE(0x0cad, 0x9011) }, /* Motorola Solutions TETRA PEI */ \
|
||||
{ USB_DEVICE(0x0cad, 0x9012) }, /* MTP6550 */ \
|
||||
{ USB_DEVICE(0x0cad, 0x9013) }, /* MTP3xxx */ \
|
||||
{ USB_DEVICE(0x0cad, 0x9015) }, /* MTP85xx */ \
|
||||
{ USB_DEVICE(0x0cad, 0x9016) } /* TPG2200 */
|
||||
DEVICE(motorola_tetra, MOTOROLA_TETRA_IDS);
|
||||
|
||||
|
@ -1332,6 +1332,9 @@ static int usb_serial_register(struct usb_serial_driver *driver)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Prevent individual ports from being unbound. */
|
||||
driver->driver.suppress_bind_attrs = true;
|
||||
|
||||
usb_serial_operations_init(driver);
|
||||
|
||||
/* Add this device to our list of devices */
|
||||
|
@ -19,7 +19,7 @@ quiet_cmd_fwbin = MK_FW $@
|
||||
PROGBITS=$(if $(CONFIG_ARM),%,@)progbits; \
|
||||
echo "/* Generated by firmware/Makefile */" > $@;\
|
||||
echo " .section .rodata" >>$@;\
|
||||
echo " .p2align $${ASM_ALIGN}" >>$@;\
|
||||
echo " .p2align 4" >>$@;\
|
||||
echo "_fw_$${FWSTR}_bin:" >>$@;\
|
||||
echo " .incbin \"$(2)\"" >>$@;\
|
||||
echo "_fw_end:" >>$@;\
|
||||
|
@ -1928,8 +1928,12 @@ btrfs_qgroup_account_extent(struct btrfs_trans_handle *trans,
|
||||
u64 nr_old_roots = 0;
|
||||
int ret = 0;
|
||||
|
||||
/*
|
||||
* If quotas get disabled meanwhile, the resouces need to be freed and
|
||||
* we can't just exit here.
|
||||
*/
|
||||
if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags))
|
||||
return 0;
|
||||
goto out_free;
|
||||
|
||||
if (new_roots) {
|
||||
if (!maybe_fs_roots(new_roots))
|
||||
|
@ -319,8 +319,12 @@ static int reiserfs_for_each_xattr(struct inode *inode,
|
||||
out_dir:
|
||||
dput(dir);
|
||||
out:
|
||||
/* -ENODATA isn't an error */
|
||||
if (err == -ENODATA)
|
||||
/*
|
||||
* -ENODATA: this object doesn't have any xattrs
|
||||
* -EOPNOTSUPP: this file system doesn't have xattrs enabled on disk.
|
||||
* Neither are errors
|
||||
*/
|
||||
if (err == -ENODATA || err == -EOPNOTSUPP)
|
||||
err = 0;
|
||||
return err;
|
||||
}
|
||||
|
@ -95,9 +95,9 @@
|
||||
#define RESET_VD_RMEM 64
|
||||
#define RESET_AUDIN 65
|
||||
#define RESET_DBLK 66
|
||||
#define RESET_PIC_DC 66
|
||||
#define RESET_PSC 66
|
||||
#define RESET_NAND 66
|
||||
#define RESET_PIC_DC 67
|
||||
#define RESET_PSC 68
|
||||
#define RESET_NAND 69
|
||||
#define RESET_GE2D 70
|
||||
#define RESET_PARSER_REG 71
|
||||
#define RESET_PARSER_FETCH 72
|
||||
|
@ -347,6 +347,7 @@ struct queue_limits {
|
||||
unsigned int max_sectors;
|
||||
unsigned int max_segment_size;
|
||||
unsigned int physical_block_size;
|
||||
unsigned int logical_block_size;
|
||||
unsigned int alignment_offset;
|
||||
unsigned int io_min;
|
||||
unsigned int io_opt;
|
||||
@ -357,7 +358,6 @@ struct queue_limits {
|
||||
unsigned int discard_granularity;
|
||||
unsigned int discard_alignment;
|
||||
|
||||
unsigned short logical_block_size;
|
||||
unsigned short max_segments;
|
||||
unsigned short max_integrity_segments;
|
||||
unsigned short max_discard_segments;
|
||||
@ -1190,7 +1190,7 @@ extern void blk_queue_max_write_same_sectors(struct request_queue *q,
|
||||
unsigned int max_write_same_sectors);
|
||||
extern void blk_queue_max_write_zeroes_sectors(struct request_queue *q,
|
||||
unsigned int max_write_same_sectors);
|
||||
extern void blk_queue_logical_block_size(struct request_queue *, unsigned short);
|
||||
extern void blk_queue_logical_block_size(struct request_queue *, unsigned int);
|
||||
extern void blk_queue_physical_block_size(struct request_queue *, unsigned int);
|
||||
extern void blk_queue_alignment_offset(struct request_queue *q,
|
||||
unsigned int alignment);
|
||||
@ -1448,7 +1448,7 @@ static inline unsigned int queue_max_segment_size(struct request_queue *q)
|
||||
return q->limits.max_segment_size;
|
||||
}
|
||||
|
||||
static inline unsigned short queue_logical_block_size(struct request_queue *q)
|
||||
static inline unsigned queue_logical_block_size(struct request_queue *q)
|
||||
{
|
||||
int retval = 512;
|
||||
|
||||
@ -1458,7 +1458,7 @@ static inline unsigned short queue_logical_block_size(struct request_queue *q)
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline unsigned short bdev_logical_block_size(struct block_device *bdev)
|
||||
static inline unsigned int bdev_logical_block_size(struct block_device *bdev)
|
||||
{
|
||||
return queue_logical_block_size(bdev_get_queue(bdev));
|
||||
}
|
||||
|
@ -43,8 +43,6 @@ enum ab8505_regulator_id {
|
||||
AB8505_LDO_ANAMIC2,
|
||||
AB8505_LDO_AUX8,
|
||||
AB8505_LDO_ANA,
|
||||
AB8505_SYSCLKREQ_2,
|
||||
AB8505_SYSCLKREQ_4,
|
||||
AB8505_NUM_REGULATORS,
|
||||
};
|
||||
|
||||
|
@ -258,12 +258,17 @@ static int ptrace_check_attach(struct task_struct *child, bool ignore_state)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ptrace_has_cap(struct user_namespace *ns, unsigned int mode)
|
||||
static bool ptrace_has_cap(const struct cred *cred, struct user_namespace *ns,
|
||||
unsigned int mode)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (mode & PTRACE_MODE_NOAUDIT)
|
||||
return has_ns_capability_noaudit(current, ns, CAP_SYS_PTRACE);
|
||||
ret = security_capable(cred, ns, CAP_SYS_PTRACE);
|
||||
else
|
||||
return has_ns_capability(current, ns, CAP_SYS_PTRACE);
|
||||
ret = security_capable(cred, ns, CAP_SYS_PTRACE);
|
||||
|
||||
return ret == 0;
|
||||
}
|
||||
|
||||
/* Returns 0 on success, -errno on denial. */
|
||||
@ -315,7 +320,7 @@ static int __ptrace_may_access(struct task_struct *task, unsigned int mode)
|
||||
gid_eq(caller_gid, tcred->sgid) &&
|
||||
gid_eq(caller_gid, tcred->gid))
|
||||
goto ok;
|
||||
if (ptrace_has_cap(tcred->user_ns, mode))
|
||||
if (ptrace_has_cap(cred, tcred->user_ns, mode))
|
||||
goto ok;
|
||||
rcu_read_unlock();
|
||||
return -EPERM;
|
||||
@ -334,7 +339,7 @@ ok:
|
||||
mm = task->mm;
|
||||
if (mm &&
|
||||
((get_dumpable(mm) != SUID_DUMP_USER) &&
|
||||
!ptrace_has_cap(mm->user_ns, mode)))
|
||||
!ptrace_has_cap(cred, mm->user_ns, mode)))
|
||||
return -EPERM;
|
||||
|
||||
return security_ptrace_access_check(task, mode);
|
||||
|
@ -66,8 +66,9 @@ static void tick_do_update_jiffies64(ktime_t now)
|
||||
|
||||
/*
|
||||
* Do a quick check without holding jiffies_lock:
|
||||
* The READ_ONCE() pairs with two updates done later in this function.
|
||||
*/
|
||||
delta = ktime_sub(now, last_jiffies_update);
|
||||
delta = ktime_sub(now, READ_ONCE(last_jiffies_update));
|
||||
if (delta < tick_period)
|
||||
return;
|
||||
|
||||
@ -78,8 +79,9 @@ static void tick_do_update_jiffies64(ktime_t now)
|
||||
if (delta >= tick_period) {
|
||||
|
||||
delta = ktime_sub(delta, tick_period);
|
||||
last_jiffies_update = ktime_add(last_jiffies_update,
|
||||
tick_period);
|
||||
/* Pairs with the lockless read in this function. */
|
||||
WRITE_ONCE(last_jiffies_update,
|
||||
ktime_add(last_jiffies_update, tick_period));
|
||||
|
||||
/* Slow path for long timeouts */
|
||||
if (unlikely(delta >= tick_period)) {
|
||||
@ -87,8 +89,10 @@ static void tick_do_update_jiffies64(ktime_t now)
|
||||
|
||||
ticks = ktime_divns(delta, incr);
|
||||
|
||||
last_jiffies_update = ktime_add_ns(last_jiffies_update,
|
||||
incr * ticks);
|
||||
/* Pairs with the lockless read in this function. */
|
||||
WRITE_ONCE(last_jiffies_update,
|
||||
ktime_add_ns(last_jiffies_update,
|
||||
incr * ticks));
|
||||
}
|
||||
do_timer(++ticks);
|
||||
|
||||
|
@ -502,13 +502,13 @@ void prep_transhuge_page(struct page *page)
|
||||
set_compound_page_dtor(page, TRANSHUGE_PAGE_DTOR);
|
||||
}
|
||||
|
||||
unsigned long __thp_get_unmapped_area(struct file *filp, unsigned long len,
|
||||
static unsigned long __thp_get_unmapped_area(struct file *filp,
|
||||
unsigned long addr, unsigned long len,
|
||||
loff_t off, unsigned long flags, unsigned long size)
|
||||
{
|
||||
unsigned long addr;
|
||||
loff_t off_end = off + len;
|
||||
loff_t off_align = round_up(off, size);
|
||||
unsigned long len_pad;
|
||||
unsigned long len_pad, ret;
|
||||
|
||||
if (off_end <= off_align || (off_end - off_align) < size)
|
||||
return 0;
|
||||
@ -517,30 +517,40 @@ unsigned long __thp_get_unmapped_area(struct file *filp, unsigned long len,
|
||||
if (len_pad < len || (off + len_pad) < off)
|
||||
return 0;
|
||||
|
||||
addr = current->mm->get_unmapped_area(filp, 0, len_pad,
|
||||
ret = current->mm->get_unmapped_area(filp, addr, len_pad,
|
||||
off >> PAGE_SHIFT, flags);
|
||||
if (IS_ERR_VALUE(addr))
|
||||
|
||||
/*
|
||||
* The failure might be due to length padding. The caller will retry
|
||||
* without the padding.
|
||||
*/
|
||||
if (IS_ERR_VALUE(ret))
|
||||
return 0;
|
||||
|
||||
addr += (off - addr) & (size - 1);
|
||||
return addr;
|
||||
/*
|
||||
* Do not try to align to THP boundary if allocation at the address
|
||||
* hint succeeds.
|
||||
*/
|
||||
if (ret == addr)
|
||||
return addr;
|
||||
|
||||
ret += (off - ret) & (size - 1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
unsigned long thp_get_unmapped_area(struct file *filp, unsigned long addr,
|
||||
unsigned long len, unsigned long pgoff, unsigned long flags)
|
||||
{
|
||||
unsigned long ret;
|
||||
loff_t off = (loff_t)pgoff << PAGE_SHIFT;
|
||||
|
||||
if (addr)
|
||||
goto out;
|
||||
if (!IS_DAX(filp->f_mapping->host) || !IS_ENABLED(CONFIG_FS_DAX_PMD))
|
||||
goto out;
|
||||
|
||||
addr = __thp_get_unmapped_area(filp, len, off, flags, PMD_SIZE);
|
||||
if (addr)
|
||||
return addr;
|
||||
|
||||
out:
|
||||
ret = __thp_get_unmapped_area(filp, addr, len, off, flags, PMD_SIZE);
|
||||
if (ret)
|
||||
return ret;
|
||||
out:
|
||||
return current->mm->get_unmapped_area(filp, addr, len, pgoff, flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(thp_get_unmapped_area);
|
||||
|
@ -201,11 +201,11 @@ static void wb_min_max_ratio(struct bdi_writeback *wb,
|
||||
if (this_bw < tot_bw) {
|
||||
if (min) {
|
||||
min *= this_bw;
|
||||
do_div(min, tot_bw);
|
||||
min = div64_ul(min, tot_bw);
|
||||
}
|
||||
if (max < 100) {
|
||||
max *= this_bw;
|
||||
do_div(max, tot_bw);
|
||||
max = div64_ul(max, tot_bw);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2055,9 +2055,10 @@ unsigned long shmem_get_unmapped_area(struct file *file,
|
||||
/*
|
||||
* Our priority is to support MAP_SHARED mapped hugely;
|
||||
* and support MAP_PRIVATE mapped hugely too, until it is COWed.
|
||||
* But if caller specified an address hint, respect that as before.
|
||||
* But if caller specified an address hint and we allocated area there
|
||||
* successfully, respect that as before.
|
||||
*/
|
||||
if (uaddr)
|
||||
if (uaddr == addr)
|
||||
return addr;
|
||||
|
||||
if (shmem_huge != SHMEM_HUGE_FORCE) {
|
||||
@ -2091,7 +2092,7 @@ unsigned long shmem_get_unmapped_area(struct file *file,
|
||||
if (inflated_len < len)
|
||||
return addr;
|
||||
|
||||
inflated_addr = get_area(NULL, 0, inflated_len, 0, flags);
|
||||
inflated_addr = get_area(NULL, uaddr, inflated_len, 0, flags);
|
||||
if (IS_ERR_VALUE(inflated_addr))
|
||||
return addr;
|
||||
if (inflated_addr & ~PAGE_MASK)
|
||||
|
@ -243,6 +243,7 @@ static u32 batadv_hash_dat(const void *data, u32 size)
|
||||
u32 hash = 0;
|
||||
const struct batadv_dat_entry *dat = data;
|
||||
const unsigned char *key;
|
||||
__be16 vid;
|
||||
u32 i;
|
||||
|
||||
key = (const unsigned char *)&dat->ip;
|
||||
@ -252,7 +253,8 @@ static u32 batadv_hash_dat(const void *data, u32 size)
|
||||
hash ^= (hash >> 6);
|
||||
}
|
||||
|
||||
key = (const unsigned char *)&dat->vid;
|
||||
vid = htons(dat->vid);
|
||||
key = (__force const unsigned char *)&vid;
|
||||
for (i = 0; i < sizeof(dat->vid); i++) {
|
||||
hash += key[i];
|
||||
hash += (hash << 10);
|
||||
|
@ -41,9 +41,6 @@ static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
struct dsa_slave_priv *p = netdev_priv(dev);
|
||||
u16 *phdr, hdr;
|
||||
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
|
||||
if (skb_cow_head(skb, 0) < 0)
|
||||
return NULL;
|
||||
|
||||
|
@ -506,12 +506,13 @@ static inline int check_entry_size_and_hooks(struct arpt_entry *e,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void cleanup_entry(struct arpt_entry *e)
|
||||
static void cleanup_entry(struct arpt_entry *e, struct net *net)
|
||||
{
|
||||
struct xt_tgdtor_param par;
|
||||
struct xt_entry_target *t;
|
||||
|
||||
t = arpt_get_target(e);
|
||||
par.net = net;
|
||||
par.target = t->u.kernel.target;
|
||||
par.targinfo = t->data;
|
||||
par.family = NFPROTO_ARP;
|
||||
@ -601,7 +602,7 @@ static int translate_table(struct net *net,
|
||||
xt_entry_foreach(iter, entry0, newinfo->size) {
|
||||
if (i-- == 0)
|
||||
break;
|
||||
cleanup_entry(iter);
|
||||
cleanup_entry(iter, net);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -926,7 +927,7 @@ static int __do_replace(struct net *net, const char *name,
|
||||
/* Decrease module usage counts and free resource */
|
||||
loc_cpu_old_entry = oldinfo->entries;
|
||||
xt_entry_foreach(iter, loc_cpu_old_entry, oldinfo->size)
|
||||
cleanup_entry(iter);
|
||||
cleanup_entry(iter, net);
|
||||
|
||||
xt_free_table_info(oldinfo);
|
||||
if (copy_to_user(counters_ptr, counters,
|
||||
@ -990,7 +991,7 @@ static int do_replace(struct net *net, const void __user *user,
|
||||
|
||||
free_newinfo_untrans:
|
||||
xt_entry_foreach(iter, loc_cpu_entry, newinfo->size)
|
||||
cleanup_entry(iter);
|
||||
cleanup_entry(iter, net);
|
||||
free_newinfo:
|
||||
xt_free_table_info(newinfo);
|
||||
return ret;
|
||||
@ -1287,7 +1288,7 @@ static int compat_do_replace(struct net *net, void __user *user,
|
||||
|
||||
free_newinfo_untrans:
|
||||
xt_entry_foreach(iter, loc_cpu_entry, newinfo->size)
|
||||
cleanup_entry(iter);
|
||||
cleanup_entry(iter, net);
|
||||
free_newinfo:
|
||||
xt_free_table_info(newinfo);
|
||||
return ret;
|
||||
@ -1514,7 +1515,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __arpt_unregister_table(struct xt_table *table)
|
||||
static void __arpt_unregister_table(struct net *net, struct xt_table *table)
|
||||
{
|
||||
struct xt_table_info *private;
|
||||
void *loc_cpu_entry;
|
||||
@ -1526,7 +1527,7 @@ static void __arpt_unregister_table(struct xt_table *table)
|
||||
/* Decrease module usage counts and free resources */
|
||||
loc_cpu_entry = private->entries;
|
||||
xt_entry_foreach(iter, loc_cpu_entry, private->size)
|
||||
cleanup_entry(iter);
|
||||
cleanup_entry(iter, net);
|
||||
if (private->number > private->initial_entries)
|
||||
module_put(table_owner);
|
||||
xt_free_table_info(private);
|
||||
@ -1566,7 +1567,7 @@ int arpt_register_table(struct net *net,
|
||||
|
||||
ret = nf_register_net_hooks(net, ops, hweight32(table->valid_hooks));
|
||||
if (ret != 0) {
|
||||
__arpt_unregister_table(new_table);
|
||||
__arpt_unregister_table(net, new_table);
|
||||
*res = NULL;
|
||||
}
|
||||
|
||||
@ -1581,7 +1582,7 @@ void arpt_unregister_table(struct net *net, struct xt_table *table,
|
||||
const struct nf_hook_ops *ops)
|
||||
{
|
||||
nf_unregister_net_hooks(net, ops, hweight32(table->valid_hooks));
|
||||
__arpt_unregister_table(table);
|
||||
__arpt_unregister_table(net, table);
|
||||
}
|
||||
|
||||
/* The built-in targets: standard (NULL) and error. */
|
||||
|
@ -933,9 +933,10 @@ static void tcp_update_reordering(struct sock *sk, const int metric,
|
||||
/* This must be called before lost_out is incremented */
|
||||
static void tcp_verify_retransmit_hint(struct tcp_sock *tp, struct sk_buff *skb)
|
||||
{
|
||||
if (!tp->retransmit_skb_hint ||
|
||||
before(TCP_SKB_CB(skb)->seq,
|
||||
TCP_SKB_CB(tp->retransmit_skb_hint)->seq))
|
||||
if ((!tp->retransmit_skb_hint && tp->retrans_out >= tp->lost_out) ||
|
||||
(tp->retransmit_skb_hint &&
|
||||
before(TCP_SKB_CB(skb)->seq,
|
||||
TCP_SKB_CB(tp->retransmit_skb_hint)->seq)))
|
||||
tp->retransmit_skb_hint = skb;
|
||||
}
|
||||
|
||||
|
@ -64,9 +64,9 @@ mtype_destroy(struct ip_set *set)
|
||||
if (SET_WITH_TIMEOUT(set))
|
||||
del_timer_sync(&map->gc);
|
||||
|
||||
ip_set_free(map->members);
|
||||
if (set->dsize && set->extensions & IPSET_EXT_DESTROY)
|
||||
mtype_ext_cleanup(set);
|
||||
ip_set_free(map->members);
|
||||
ip_set_free(map);
|
||||
|
||||
set->data = NULL;
|
||||
|
@ -550,6 +550,10 @@ static inline int
|
||||
rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!rdev->ops->set_wiphy_params)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
trace_rdev_set_wiphy_params(&rdev->wiphy, changed);
|
||||
ret = rdev->ops->set_wiphy_params(&rdev->wiphy, changed);
|
||||
trace_rdev_return_int(&rdev->wiphy, ret);
|
||||
|
@ -659,7 +659,7 @@ __frame_add_frag(struct sk_buff *skb, struct page *page,
|
||||
struct skb_shared_info *sh = skb_shinfo(skb);
|
||||
int page_offset;
|
||||
|
||||
page_ref_inc(page);
|
||||
get_page(page);
|
||||
page_offset = ptr - page_address(page);
|
||||
skb_add_rx_frag(skb, sh->nr_frags, page, page_offset, len, size);
|
||||
}
|
||||
|
@ -479,15 +479,19 @@ void snd_seq_info_timer_read(struct snd_info_entry *entry,
|
||||
q = queueptr(idx);
|
||||
if (q == NULL)
|
||||
continue;
|
||||
if ((tmr = q->timer) == NULL ||
|
||||
(ti = tmr->timeri) == NULL) {
|
||||
queuefree(q);
|
||||
continue;
|
||||
}
|
||||
mutex_lock(&q->timer_mutex);
|
||||
tmr = q->timer;
|
||||
if (!tmr)
|
||||
goto unlock;
|
||||
ti = tmr->timeri;
|
||||
if (!ti)
|
||||
goto unlock;
|
||||
snd_iprintf(buffer, "Timer for queue %i : %s\n", q->queue, ti->timer->name);
|
||||
resolution = snd_timer_resolution(ti) * tmr->ticks;
|
||||
snd_iprintf(buffer, " Period time : %lu.%09lu\n", resolution / 1000000000, resolution % 1000000000);
|
||||
snd_iprintf(buffer, " Skew : %u / %u\n", tmr->skew, tmr->skew_base);
|
||||
unlock:
|
||||
mutex_unlock(&q->timer_mutex);
|
||||
queuefree(q);
|
||||
}
|
||||
}
|
||||
|
@ -876,10 +876,10 @@ static const struct snd_soc_dapm_widget pm8916_wcd_analog_dapm_widgets[] = {
|
||||
|
||||
SND_SOC_DAPM_SUPPLY("MIC BIAS External1", CDC_A_MICB_1_EN, 7, 0,
|
||||
pm8916_wcd_analog_enable_micbias_ext1,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
SND_SOC_DAPM_POST_PMU),
|
||||
SND_SOC_DAPM_SUPPLY("MIC BIAS External2", CDC_A_MICB_2_EN, 7, 0,
|
||||
pm8916_wcd_analog_enable_micbias_ext2,
|
||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
SND_SOC_DAPM_POST_PMU),
|
||||
|
||||
SND_SOC_DAPM_ADC_E("ADC1", NULL, CDC_A_TX_1_EN, 7, 0,
|
||||
pm8916_wcd_analog_enable_adc,
|
||||
|
@ -742,6 +742,7 @@ int cmd_report(int argc, const char **argv)
|
||||
struct stat st;
|
||||
bool has_br_stack = false;
|
||||
int branch_mode = -1;
|
||||
int last_key = 0;
|
||||
bool branch_call_mode = false;
|
||||
char callchain_default_opt[] = CALLCHAIN_DEFAULT_OPT;
|
||||
const char * const report_usage[] = {
|
||||
@ -1048,7 +1049,8 @@ repeat:
|
||||
else
|
||||
use_browser = 0;
|
||||
|
||||
if (setup_sorting(session->evlist) < 0) {
|
||||
if ((last_key != K_SWITCH_INPUT_DATA) &&
|
||||
(setup_sorting(session->evlist) < 0)) {
|
||||
if (sort_order)
|
||||
parse_options_usage(report_usage, options, "s", 1);
|
||||
if (field_order)
|
||||
@ -1108,6 +1110,7 @@ repeat:
|
||||
ret = __cmd_report(&report);
|
||||
if (ret == K_SWITCH_INPUT_DATA) {
|
||||
perf_session__delete(session);
|
||||
last_key = K_SWITCH_INPUT_DATA;
|
||||
goto repeat;
|
||||
} else
|
||||
ret = 0;
|
||||
|
@ -317,10 +317,10 @@ static inline void perf_hpp__prepend_sort_field(struct perf_hpp_fmt *format)
|
||||
list_for_each_entry_safe(format, tmp, &(_list)->sorts, sort_list)
|
||||
|
||||
#define hists__for_each_format(hists, format) \
|
||||
perf_hpp_list__for_each_format((hists)->hpp_list, fmt)
|
||||
perf_hpp_list__for_each_format((hists)->hpp_list, format)
|
||||
|
||||
#define hists__for_each_sort_list(hists, format) \
|
||||
perf_hpp_list__for_each_sort_list((hists)->hpp_list, fmt)
|
||||
perf_hpp_list__for_each_sort_list((hists)->hpp_list, format)
|
||||
|
||||
extern struct perf_hpp_fmt perf_hpp__format[];
|
||||
|
||||
|
@ -615,38 +615,26 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwfl_Module *mod,
|
||||
const char *function,
|
||||
struct probe_trace_point *tp)
|
||||
{
|
||||
Dwarf_Addr eaddr, highaddr;
|
||||
Dwarf_Addr eaddr;
|
||||
GElf_Sym sym;
|
||||
const char *symbol;
|
||||
|
||||
/* Verify the address is correct */
|
||||
if (dwarf_entrypc(sp_die, &eaddr) != 0) {
|
||||
pr_warning("Failed to get entry address of %s\n",
|
||||
dwarf_diename(sp_die));
|
||||
return -ENOENT;
|
||||
}
|
||||
if (dwarf_highpc(sp_die, &highaddr) != 0) {
|
||||
pr_warning("Failed to get end address of %s\n",
|
||||
dwarf_diename(sp_die));
|
||||
return -ENOENT;
|
||||
}
|
||||
if (paddr > highaddr) {
|
||||
pr_warning("Offset specified is greater than size of %s\n",
|
||||
if (!dwarf_haspc(sp_die, paddr)) {
|
||||
pr_warning("Specified offset is out of %s\n",
|
||||
dwarf_diename(sp_die));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
symbol = dwarf_diename(sp_die);
|
||||
/* Try to get actual symbol name from symtab */
|
||||
symbol = dwfl_module_addrsym(mod, paddr, &sym, NULL);
|
||||
if (!symbol) {
|
||||
/* Try to get the symbol name from symtab */
|
||||
symbol = dwfl_module_addrsym(mod, paddr, &sym, NULL);
|
||||
if (!symbol) {
|
||||
pr_warning("Failed to find symbol at 0x%lx\n",
|
||||
(unsigned long)paddr);
|
||||
return -ENOENT;
|
||||
}
|
||||
eaddr = sym.st_value;
|
||||
pr_warning("Failed to find symbol at 0x%lx\n",
|
||||
(unsigned long)paddr);
|
||||
return -ENOENT;
|
||||
}
|
||||
eaddr = sym.st_value;
|
||||
|
||||
tp->offset = (unsigned long)(paddr - eaddr);
|
||||
tp->address = (unsigned long)paddr;
|
||||
tp->symbol = strdup(symbol);
|
||||
|
Loading…
x
Reference in New Issue
Block a user