This is the 4.9.211 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl4pSQ8ACgkQONu9yGCS aT7byBAA1Sx2dkXj107MHQ/XQUQjn9LeDoUtdB105780XXRJqS1L6Bsm5pvsiOvQ GvkKpCHCWg12iuEKJCQ1pr88XKQrik68vRUOCgMt4rh0TovM8eUz9fuvFGO+u330 tCyW9zftkKNMYJmPSn2w6hOZcDK4wxgVjP6hkFgQJjyjFy/dbkcwFb6Vg9cfMRKc kkuacR9Hm7hG4V2RWD1pNsI4Nlly/oPXEmLJMplVGY+YyOAB5ne14JCevVX22bV2 WD9EUihPCsyB41LF2FhX5jzWhyFKgt/9tyrl7VFjsEqmvvdS7S9YMD3RJ2alzQbo qT4Wph+xVT3JIdXuFZuAaHUfFKwnWR/6cHcMiejsv/A6B72aRaECSMSN8aCJSYit eV3L/LNoLaKcpdpJLKVAWSny1ZaLnYTxk0E3OilQz+ZzqRk/LDjnxQry5sem6oXt 3HJlo2cuvd2bQ0Jd5RDnGW6N8CLx4HIMwnnxEjJmOqpUog6zSnhSbsvzpkQ2IZVs 3pFj1eYMausbEfdLXrFuky0cLvswjcYKT6W+CcapGba6IaHDhSg5V2WkPOktwxMW BYnnzJptWXbbCt6de1ZwOyVpKdmmf/9hDG4egPVaCAs7/AOzE7P5+zIheiN9KqRw 3Fz+KNFB85oztp5Ds4gnd9xYa11uEzTSm+vVCKGVfymPEKvCQfU= =84H5 -----END PGP SIGNATURE----- Merge 4.9.211 into android-4.9-q Changes in 4.9.211 hidraw: Return EPOLLOUT from hidraw_poll HID: hidraw: Fix returning EPOLLOUT from hidraw_poll HID: hidraw, uhid: Always report EPOLLOUT ethtool: reduce stack usage with clang fs/select: avoid clang stack usage warning rsi: add fix for crash during assertions arm64: mm: BUG on unsupported manipulations of live kernel mappings arm64: don't open code page table entry creation arm64: mm: Change page table pointer name in p[md]_set_huge() arm64: Enforce BBM for huge IO/VMAP mappings arm64: Make sure permission updates happen for pmd/pud cfg80211/mac80211: make ieee80211_send_layer2_update a public function mac80211: Do not send Layer 2 Update frame before authorization media: usb:zr364xx:Fix KASAN:null-ptr-deref Read in zr364xx_vidioc_querycap wimax: i2400: fix memory leak wimax: i2400: Fix memory leak in i2400m_op_rfkill_sw_toggle ext4: fix use-after-free race with debug_want_extra_isize ext4: add more paranoia checking in ext4_expand_extra_isize handling dccp: Fix memleak in __feat_register_sp rtc: mt6397: fix alarm register overwrite iommu: Remove device link to group on failure gpio: Fix error message on out-of-range GPIO in lookup table hsr: reset network header when supervision frame is created cifs: Adjust indentation in smb2_open_file RDMA/srpt: Report the SCSI residual to the initiator scsi: enclosure: Fix stale device oops with hot replug scsi: sd: Clear sdkp->protection_type if disk is reformatted without PI platform/x86: asus-wmi: Fix keyboard brightness cannot be set to 0 iio: imu: adis16480: assign bias value only if operation succeeded mei: fix modalias documentation clk: samsung: exynos5420: Preserve CPU clocks configuration during suspend/resume compat_ioctl: handle SIOCOUTQNSD PCI/PTM: Remove spurious "d" from granularity message powerpc/powernv: Disable native PCIe port management tty: serial: imx: use the sg count from dma_map_sg tty: serial: pch_uart: correct usage of dma_unmap_sg media: exynos4-is: Fix recursive locking in isp_video_release() mtd: spi-nor: fix silent truncation in spi_nor_read() spi: atmel: fix handling of cs_change set on non-last xfer rtlwifi: Remove unnecessary NULL check in rtl_regd_init f2fs: fix potential overflow rtc: msm6242: Fix reading of 10-hour digit gpio: mpc8xxx: Add platform device to gpiochip->parent scsi: libcxgbi: fix NULL pointer dereference in cxgbi_device_destroy() rseq/selftests: Turn off timeout setting MIPS: Prevent link failure with kcov instrumentation ioat: ioat_alloc_ring() failure handling. hexagon: parenthesize registers in asm predicates hexagon: work around compiler crash ocfs2: call journal flush to mark journal as empty after journal recovery when mount dt-bindings: reset: meson8b: fix duplicate reset IDs clk: Don't try to enable critical clocks if prepare failed ALSA: seq: Fix racy access for queue timer in proc read Fix built-in early-load Intel microcode alignment block: fix an integer overflow in logical block size iio: buffer: align the size of scan bytes to size of the largest element USB: serial: simple: Add Motorola Solutions TETRA MTP3xxx and MTP85xx USB: serial: opticon: fix control-message timeouts USB: serial: suppress driver bind attributes USB: serial: ch341: handle unbound port at reset_resume USB: serial: io_edgeport: add missing active-port sanity check USB: serial: quatech2: handle unbound ports scsi: mptfusion: Fix double fetch bug in ioctl usb: core: hub: Improved device recognition on remote wakeup x86/efistub: Disable paging at mixed mode entry perf hists: Fix variable name's inconsistency in hists__for_each() macro perf report: Fix incorrectly added dimensions as switch perf data file mm/page-writeback.c: avoid potential division by zero in wb_min_max_ratio() net: stmmac: 16KB buffer must be 16 byte aligned net: stmmac: Enable 16KB buffer size USB: serial: io_edgeport: use irqsave() in USB's complete callback USB: serial: io_edgeport: handle unbound ports on URB completion USB: serial: keyspan: handle unbound ports scsi: fnic: use kernel's '%pM' format option to print MAC scsi: fnic: fix invalid stack access arm64: dts: agilex/stratix10: fix pmu interrupt numbers cfg80211: fix page refcount issue in A-MSDU decap netfilter: fix a use-after-free in mtype_destroy() netfilter: arp_tables: init netns pointer in xt_tgdtor_param struct batman-adv: Fix DAT candidate selection on little endian systems macvlan: use skb_reset_mac_header() in macvlan_queue_xmit() net: dsa: tag_qca: fix doubled Tx statistics net/wan/fsl_ucc_hdlc: fix out of bounds write on array utdm_info r8152: add missing endpoint sanity check tcp: fix marked lost packets not being retransmitted net: usb: lan78xx: limit size of local TSO packets xen/blkfront: Adjust indentation in xlvbd_alloc_gendisk cw1200: Fix a signedness bug in cw1200_load_firmware() cfg80211: check for set_wiphy_params reiserfs: fix handling of -EOPNOTSUPP in reiserfs_for_each_xattr scsi: esas2r: unlock on error in esas2r_nvram_read_direct() scsi: qla4xxx: fix double free bug scsi: bnx2i: fix potential use after free scsi: target: core: Fix a pr_debug() argument scsi: core: scsi_trace: Use get_unaligned_be*() perf probe: Fix wrong address verification regulator: ab8500: Remove SYSCLKREQ from enum ab8505_regulator_id Linux 4.9.211 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ifc27b3c6afdbd6a39bd7ae4e551d8bed42dc4973
This commit is contained in:
commit
5af9b7f917
1 changed files with 619 additions and 564 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue