Hi Mark, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linus/master] [cannot apply to v5.3-rc4 next-20190814] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Mark-Balantzyan/lsilogic-mpt-fusion-mptctl-Fixed-race-condition-around-mptctl_id-variable-using-mutexes/20190815-115822 config: x86_64-lkp (attached as .config) compiler: gcc-7 (Debian 7.4.0-10) 7.4.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 If you fix the issue, kindly add following tag Reported-by: kbuild test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): drivers/message/fusion/mptctl.c: In function 'mptctl_do_fw_download': >> drivers/message/fusion/mptctl.c:820:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation] if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL) ^~ drivers/message/fusion/mptctl.c:822:4: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if' return -EAGAIN; ^~~~~~ drivers/message/fusion/mptctl.c: In function 'mptctl_do_mpt_command': drivers/message/fusion/mptctl.c:1898:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation] if ((mf = mpt_get_msg_frame(mptctl_id, ioc)) == NULL) ^~ drivers/message/fusion/mptctl.c:1900:17: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if' return -EAGAIN; ^~~~~~ vim +/if +820 drivers/message/fusion/mptctl.c ^1da177e4c3f41 Linus Torvalds 2005-04-16 771 ^1da177e4c3f41 Linus Torvalds 2005-04-16 772 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ ^1da177e4c3f41 Linus Torvalds 2005-04-16 773 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 774 * FW Download engine. ^1da177e4c3f41 Linus Torvalds 2005-04-16 775 * Outputs: None. ^1da177e4c3f41 Linus Torvalds 2005-04-16 776 * Return: 0 if successful ^1da177e4c3f41 Linus Torvalds 2005-04-16 777 * -EFAULT if data unavailable ^1da177e4c3f41 Linus Torvalds 2005-04-16 778 * -ENXIO if no such device ^1da177e4c3f41 Linus Torvalds 2005-04-16 779 * -EAGAIN if resource problem ^1da177e4c3f41 Linus Torvalds 2005-04-16 780 * -ENOMEM if no memory for SGE ^1da177e4c3f41 Linus Torvalds 2005-04-16 781 * -EMLINK if too many chain buffers required ^1da177e4c3f41 Linus Torvalds 2005-04-16 782 * -EBADRQC if adapter does not support FW download ^1da177e4c3f41 Linus Torvalds 2005-04-16 783 * -EBUSY if adapter is busy ^1da177e4c3f41 Linus Torvalds 2005-04-16 784 * -ENOMSG if FW upload returned bad status ^1da177e4c3f41 Linus Torvalds 2005-04-16 785 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 786 static int ^1da177e4c3f41 Linus Torvalds 2005-04-16 787 mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen) ^1da177e4c3f41 Linus Torvalds 2005-04-16 788 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 789 FWDownload_t *dlmsg; ^1da177e4c3f41 Linus Torvalds 2005-04-16 790 MPT_FRAME_HDR *mf; ^1da177e4c3f41 Linus Torvalds 2005-04-16 791 MPT_ADAPTER *iocp; ^1da177e4c3f41 Linus Torvalds 2005-04-16 792 FWDownloadTCSGE_t *ptsge; ^1da177e4c3f41 Linus Torvalds 2005-04-16 793 MptSge_t *sgl, *sgIn; ^1da177e4c3f41 Linus Torvalds 2005-04-16 794 char *sgOut; ^1da177e4c3f41 Linus Torvalds 2005-04-16 795 struct buflist *buflist; ^1da177e4c3f41 Linus Torvalds 2005-04-16 796 struct buflist *bl; ^1da177e4c3f41 Linus Torvalds 2005-04-16 797 dma_addr_t sgl_dma; ^1da177e4c3f41 Linus Torvalds 2005-04-16 798 int ret; ^1da177e4c3f41 Linus Torvalds 2005-04-16 799 int numfrags = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 800 int maxfrags; ^1da177e4c3f41 Linus Torvalds 2005-04-16 801 int n = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 802 u32 sgdir; ^1da177e4c3f41 Linus Torvalds 2005-04-16 803 u32 nib; ^1da177e4c3f41 Linus Torvalds 2005-04-16 804 int fw_bytes_copied = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 805 int i; ^1da177e4c3f41 Linus Torvalds 2005-04-16 806 int sge_offset = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 807 u16 iocstat; ^1da177e4c3f41 Linus Torvalds 2005-04-16 808 pFWDownloadReply_t ReplyMsg = NULL; ea2a788de4ce5e Kashyap, Desai 2009-05-29 809 unsigned long timeleft; ^1da177e4c3f41 Linus Torvalds 2005-04-16 810 946cbf040adb9d Moore, Eric 2006-02-02 811 if (mpt_verify_adapter(ioc, &iocp) < 0) { 29dd3609f2fc70 Eric Moore 2007-09-14 812 printk(KERN_DEBUG MYNAM "ioctl_fwdl - ioc%d not found!\n", 29dd3609f2fc70 Eric Moore 2007-09-14 813 ioc); ^1da177e4c3f41 Linus Torvalds 2005-04-16 814 return -ENODEV; /* (-6) No such device or address */ 946cbf040adb9d Moore, Eric 2006-02-02 815 } else { ^1da177e4c3f41 Linus Torvalds 2005-04-16 816 ^1da177e4c3f41 Linus Torvalds 2005-04-16 817 /* Valid device. Get a message frame and construct the FW download message. ^1da177e4c3f41 Linus Torvalds 2005-04-16 818 */ b07cb166c26273 Mark Balantzyan 2019-08-14 819 mutex_lock(&mpctl_mutex); ^1da177e4c3f41 Linus Torvalds 2005-04-16 @820 if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL) b07cb166c26273 Mark Balantzyan 2019-08-14 821 mutex_unlock(&mpctl_mutex); ^1da177e4c3f41 Linus Torvalds 2005-04-16 822 return -EAGAIN; 946cbf040adb9d Moore, Eric 2006-02-02 823 } b07cb166c26273 Mark Balantzyan 2019-08-14 824 mutex_lock(&mpctl_mutex); 09120a8cd38dbd Prakash, Sathya 2007-07-24 825 dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT 09120a8cd38dbd Prakash, Sathya 2007-07-24 826 "mptctl_do_fwdl called. mptctl_id = %xh.\n", iocp->name, mptctl_id)); b07cb166c26273 Mark Balantzyan 2019-08-14 827 mutex_unlock(&mpctl_mutex); 09120a8cd38dbd Prakash, Sathya 2007-07-24 828 dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.bufp = %p\n", 09120a8cd38dbd Prakash, Sathya 2007-07-24 829 iocp->name, ufwbuf)); 09120a8cd38dbd Prakash, Sathya 2007-07-24 830 dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.fwlen = %d\n", 09120a8cd38dbd Prakash, Sathya 2007-07-24 831 iocp->name, (int)fwlen)); 09120a8cd38dbd Prakash, Sathya 2007-07-24 832 dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.ioc = %04xh\n", 09120a8cd38dbd Prakash, Sathya 2007-07-24 833 iocp->name, ioc)); 09120a8cd38dbd Prakash, Sathya 2007-07-24 834 ^1da177e4c3f41 Linus Torvalds 2005-04-16 835 dlmsg = (FWDownload_t*) mf; ^1da177e4c3f41 Linus Torvalds 2005-04-16 836 ptsge = (FWDownloadTCSGE_t *) &dlmsg->SGL; ^1da177e4c3f41 Linus Torvalds 2005-04-16 837 sgOut = (char *) (ptsge + 1); ^1da177e4c3f41 Linus Torvalds 2005-04-16 838 ^1da177e4c3f41 Linus Torvalds 2005-04-16 839 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 840 * Construct f/w download request ^1da177e4c3f41 Linus Torvalds 2005-04-16 841 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 842 dlmsg->ImageType = MPI_FW_DOWNLOAD_ITYPE_FW; ^1da177e4c3f41 Linus Torvalds 2005-04-16 843 dlmsg->Reserved = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 844 dlmsg->ChainOffset = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 845 dlmsg->Function = MPI_FUNCTION_FW_DOWNLOAD; ^1da177e4c3f41 Linus Torvalds 2005-04-16 846 dlmsg->Reserved1[0] = dlmsg->Reserved1[1] = dlmsg->Reserved1[2] = 0; 946cbf040adb9d Moore, Eric 2006-02-02 847 if (iocp->facts.MsgVersion >= MPI_VERSION_01_05) 946cbf040adb9d Moore, Eric 2006-02-02 848 dlmsg->MsgFlags = MPI_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT; 946cbf040adb9d Moore, Eric 2006-02-02 849 else ^1da177e4c3f41 Linus Torvalds 2005-04-16 850 dlmsg->MsgFlags = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 851 946cbf040adb9d Moore, Eric 2006-02-02 852 ^1da177e4c3f41 Linus Torvalds 2005-04-16 853 /* Set up the Transaction SGE. ^1da177e4c3f41 Linus Torvalds 2005-04-16 854 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 855 ptsge->Reserved = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 856 ptsge->ContextSize = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 857 ptsge->DetailsLength = 12; ^1da177e4c3f41 Linus Torvalds 2005-04-16 858 ptsge->Flags = MPI_SGE_FLAGS_TRANSACTION_ELEMENT; ^1da177e4c3f41 Linus Torvalds 2005-04-16 859 ptsge->Reserved_0100_Checksum = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 860 ptsge->ImageOffset = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 861 ptsge->ImageSize = cpu_to_le32(fwlen); ^1da177e4c3f41 Linus Torvalds 2005-04-16 862 ^1da177e4c3f41 Linus Torvalds 2005-04-16 863 /* Add the SGL ^1da177e4c3f41 Linus Torvalds 2005-04-16 864 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 865 ^1da177e4c3f41 Linus Torvalds 2005-04-16 866 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 867 * Need to kmalloc area(s) for holding firmware image bytes. ^1da177e4c3f41 Linus Torvalds 2005-04-16 868 * But we need to do it piece meal, using a proper ^1da177e4c3f41 Linus Torvalds 2005-04-16 869 * scatter gather list (with 128kB MAX hunks). ^1da177e4c3f41 Linus Torvalds 2005-04-16 870 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 871 * A practical limit here might be # of sg hunks that fit into ^1da177e4c3f41 Linus Torvalds 2005-04-16 872 * a single IOC request frame; 12 or 8 (see below), so: ^1da177e4c3f41 Linus Torvalds 2005-04-16 873 * For FC9xx: 12 x 128kB == 1.5 mB (max) ^1da177e4c3f41 Linus Torvalds 2005-04-16 874 * For C1030: 8 x 128kB == 1 mB (max) ^1da177e4c3f41 Linus Torvalds 2005-04-16 875 * We could support chaining, but things get ugly(ier:) ^1da177e4c3f41 Linus Torvalds 2005-04-16 876 * ^1da177e4c3f41 Linus Torvalds 2005-04-16 877 * Set the sge_offset to the start of the sgl (bytes). ^1da177e4c3f41 Linus Torvalds 2005-04-16 878 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 879 sgdir = 0x04000000; /* IOC will READ from sys mem */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 880 sge_offset = sizeof(MPIHeader_t) + sizeof(FWDownloadTCSGE_t); ^1da177e4c3f41 Linus Torvalds 2005-04-16 881 if ((sgl = kbuf_alloc_2_sgl(fwlen, sgdir, sge_offset, ^1da177e4c3f41 Linus Torvalds 2005-04-16 882 &numfrags, &buflist, &sgl_dma, iocp)) == NULL) ^1da177e4c3f41 Linus Torvalds 2005-04-16 883 return -ENOMEM; ^1da177e4c3f41 Linus Torvalds 2005-04-16 884 ^1da177e4c3f41 Linus Torvalds 2005-04-16 885 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 886 * We should only need SGL with 2 simple_32bit entries (up to 256 kB) ^1da177e4c3f41 Linus Torvalds 2005-04-16 887 * for FC9xx f/w image, but calculate max number of sge hunks ^1da177e4c3f41 Linus Torvalds 2005-04-16 888 * we can fit into a request frame, and limit ourselves to that. ^1da177e4c3f41 Linus Torvalds 2005-04-16 889 * (currently no chain support) ^1da177e4c3f41 Linus Torvalds 2005-04-16 890 * maxfrags = (Request Size - FWdownload Size ) / Size of 32 bit SGE ^1da177e4c3f41 Linus Torvalds 2005-04-16 891 * Request maxfrags ^1da177e4c3f41 Linus Torvalds 2005-04-16 892 * 128 12 ^1da177e4c3f41 Linus Torvalds 2005-04-16 893 * 96 8 ^1da177e4c3f41 Linus Torvalds 2005-04-16 894 * 64 4 ^1da177e4c3f41 Linus Torvalds 2005-04-16 895 */ 14d0f0b063f536 Kashyap, Desai 2009-05-29 896 maxfrags = (iocp->req_sz - sizeof(MPIHeader_t) - 14d0f0b063f536 Kashyap, Desai 2009-05-29 897 sizeof(FWDownloadTCSGE_t)) 14d0f0b063f536 Kashyap, Desai 2009-05-29 898 / iocp->SGE_size; ^1da177e4c3f41 Linus Torvalds 2005-04-16 899 if (numfrags > maxfrags) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 900 ret = -EMLINK; ^1da177e4c3f41 Linus Torvalds 2005-04-16 901 goto fwdl_out; ^1da177e4c3f41 Linus Torvalds 2005-04-16 902 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 903 09120a8cd38dbd Prakash, Sathya 2007-07-24 904 dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: sgl buffer = %p, sgfrags = %d\n", 09120a8cd38dbd Prakash, Sathya 2007-07-24 905 iocp->name, sgl, numfrags)); ^1da177e4c3f41 Linus Torvalds 2005-04-16 906 ^1da177e4c3f41 Linus Torvalds 2005-04-16 907 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 908 * Parse SG list, copying sgl itself, ^1da177e4c3f41 Linus Torvalds 2005-04-16 909 * plus f/w image hunks from user space as we go... ^1da177e4c3f41 Linus Torvalds 2005-04-16 910 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 911 ret = -EFAULT; ^1da177e4c3f41 Linus Torvalds 2005-04-16 912 sgIn = sgl; ^1da177e4c3f41 Linus Torvalds 2005-04-16 913 bl = buflist; ^1da177e4c3f41 Linus Torvalds 2005-04-16 914 for (i=0; i < numfrags; i++) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 915 ^1da177e4c3f41 Linus Torvalds 2005-04-16 916 /* Get the SGE type: 0 - TCSGE, 3 - Chain, 1 - Simple SGE ^1da177e4c3f41 Linus Torvalds 2005-04-16 917 * Skip everything but Simple. If simple, copy from ^1da177e4c3f41 Linus Torvalds 2005-04-16 918 * user space into kernel space. ^1da177e4c3f41 Linus Torvalds 2005-04-16 919 * Note: we should not have anything but Simple as ^1da177e4c3f41 Linus Torvalds 2005-04-16 920 * Chain SGE are illegal. ^1da177e4c3f41 Linus Torvalds 2005-04-16 921 */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 922 nib = (sgIn->FlagsLength & 0x30000000) >> 28; ^1da177e4c3f41 Linus Torvalds 2005-04-16 923 if (nib == 0 || nib == 3) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 924 ; ^1da177e4c3f41 Linus Torvalds 2005-04-16 925 } else if (sgIn->Address) { 14d0f0b063f536 Kashyap, Desai 2009-05-29 926 iocp->add_sge(sgOut, sgIn->FlagsLength, sgIn->Address); ^1da177e4c3f41 Linus Torvalds 2005-04-16 927 n++; ^1da177e4c3f41 Linus Torvalds 2005-04-16 928 if (copy_from_user(bl->kptr, ufwbuf+fw_bytes_copied, bl->len)) { 29dd3609f2fc70 Eric Moore 2007-09-14 929 printk(MYIOC_s_ERR_FMT "%s@%d::_ioctl_fwdl - " ^1da177e4c3f41 Linus Torvalds 2005-04-16 930 "Unable to copy f/w buffer hunk#%d @ %p\n", 29dd3609f2fc70 Eric Moore 2007-09-14 931 iocp->name, __FILE__, __LINE__, n, ufwbuf); ^1da177e4c3f41 Linus Torvalds 2005-04-16 932 goto fwdl_out; ^1da177e4c3f41 Linus Torvalds 2005-04-16 933 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 934 fw_bytes_copied += bl->len; ^1da177e4c3f41 Linus Torvalds 2005-04-16 935 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 936 sgIn++; ^1da177e4c3f41 Linus Torvalds 2005-04-16 937 bl++; 14d0f0b063f536 Kashyap, Desai 2009-05-29 938 sgOut += iocp->SGE_size; ^1da177e4c3f41 Linus Torvalds 2005-04-16 939 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 940 09120a8cd38dbd Prakash, Sathya 2007-07-24 941 DBG_DUMP_FW_DOWNLOAD(iocp, (u32 *)mf, numfrags); ^1da177e4c3f41 Linus Torvalds 2005-04-16 942 ^1da177e4c3f41 Linus Torvalds 2005-04-16 943 /* ^1da177e4c3f41 Linus Torvalds 2005-04-16 944 * Finally, perform firmware download. ^1da177e4c3f41 Linus Torvalds 2005-04-16 945 */ 946cbf040adb9d Moore, Eric 2006-02-02 946 ReplyMsg = NULL; ea2a788de4ce5e Kashyap, Desai 2009-05-29 947 SET_MGMT_MSG_CONTEXT(iocp->ioctl_cmds.msg_context, dlmsg->MsgContext); ea2a788de4ce5e Kashyap, Desai 2009-05-29 948 INITIALIZE_MGMT_STATUS(iocp->ioctl_cmds.status) b07cb166c26273 Mark Balantzyan 2019-08-14 949 mutex_lock(&mpctl_mutex); ^1da177e4c3f41 Linus Torvalds 2005-04-16 950 mpt_put_msg_frame(mptctl_id, iocp, mf); b07cb166c26273 Mark Balantzyan 2019-08-14 951 mutex_lock(&mpctl_mutex); ^1da177e4c3f41 Linus Torvalds 2005-04-16 952 ^1da177e4c3f41 Linus Torvalds 2005-04-16 953 /* Now wait for the command to complete */ ea2a788de4ce5e Kashyap, Desai 2009-05-29 954 retry_wait: ea2a788de4ce5e Kashyap, Desai 2009-05-29 955 timeleft = wait_for_completion_timeout(&iocp->ioctl_cmds.done, HZ*60); ea2a788de4ce5e Kashyap, Desai 2009-05-29 956 if (!(iocp->ioctl_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { ea2a788de4ce5e Kashyap, Desai 2009-05-29 957 ret = -ETIME; ea2a788de4ce5e Kashyap, Desai 2009-05-29 958 printk(MYIOC_s_WARN_FMT "%s: failed\n", iocp->name, __func__); ea2a788de4ce5e Kashyap, Desai 2009-05-29 959 if (iocp->ioctl_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) { ea2a788de4ce5e Kashyap, Desai 2009-05-29 960 mpt_free_msg_frame(iocp, mf); ea2a788de4ce5e Kashyap, Desai 2009-05-29 961 goto fwdl_out; ea2a788de4ce5e Kashyap, Desai 2009-05-29 962 } 97009a29e8c999 Kei Tokunaga 2010-06-22 963 if (!timeleft) { 97009a29e8c999 Kei Tokunaga 2010-06-22 964 printk(MYIOC_s_WARN_FMT 97009a29e8c999 Kei Tokunaga 2010-06-22 965 "FW download timeout, doorbell=0x%08x\n", 97009a29e8c999 Kei Tokunaga 2010-06-22 966 iocp->name, mpt_GetIocState(iocp, 0)); ea2a788de4ce5e Kashyap, Desai 2009-05-29 967 mptctl_timeout_expired(iocp, mf); 97009a29e8c999 Kei Tokunaga 2010-06-22 968 } else ea2a788de4ce5e Kashyap, Desai 2009-05-29 969 goto retry_wait; ea2a788de4ce5e Kashyap, Desai 2009-05-29 970 goto fwdl_out; ea2a788de4ce5e Kashyap, Desai 2009-05-29 971 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 972 ea2a788de4ce5e Kashyap, Desai 2009-05-29 973 if (!(iocp->ioctl_cmds.status & MPT_MGMT_STATUS_RF_VALID)) { ea2a788de4ce5e Kashyap, Desai 2009-05-29 974 printk(MYIOC_s_WARN_FMT "%s: failed\n", iocp->name, __func__); ea2a788de4ce5e Kashyap, Desai 2009-05-29 975 mpt_free_msg_frame(iocp, mf); ^1da177e4c3f41 Linus Torvalds 2005-04-16 976 ret = -ENODATA; ^1da177e4c3f41 Linus Torvalds 2005-04-16 977 goto fwdl_out; ^1da177e4c3f41 Linus Torvalds 2005-04-16 978 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 979 ^1da177e4c3f41 Linus Torvalds 2005-04-16 980 if (sgl) ^1da177e4c3f41 Linus Torvalds 2005-04-16 981 kfree_sgl(sgl, sgl_dma, buflist, iocp); ^1da177e4c3f41 Linus Torvalds 2005-04-16 982 ea2a788de4ce5e Kashyap, Desai 2009-05-29 983 ReplyMsg = (pFWDownloadReply_t)iocp->ioctl_cmds.reply; ^1da177e4c3f41 Linus Torvalds 2005-04-16 984 iocstat = le16_to_cpu(ReplyMsg->IOCStatus) & MPI_IOCSTATUS_MASK; ^1da177e4c3f41 Linus Torvalds 2005-04-16 985 if (iocstat == MPI_IOCSTATUS_SUCCESS) { 25985edcedea63 Lucas De Marchi 2011-03-30 986 printk(MYIOC_s_INFO_FMT "F/W update successful!\n", iocp->name); ^1da177e4c3f41 Linus Torvalds 2005-04-16 987 return 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 988 } else if (iocstat == MPI_IOCSTATUS_INVALID_FUNCTION) { 29dd3609f2fc70 Eric Moore 2007-09-14 989 printk(MYIOC_s_WARN_FMT "Hmmm... F/W download not supported!?!\n", 29dd3609f2fc70 Eric Moore 2007-09-14 990 iocp->name); 29dd3609f2fc70 Eric Moore 2007-09-14 991 printk(MYIOC_s_WARN_FMT "(time to go bang on somebodies door)\n", ^1da177e4c3f41 Linus Torvalds 2005-04-16 992 iocp->name); ^1da177e4c3f41 Linus Torvalds 2005-04-16 993 return -EBADRQC; ^1da177e4c3f41 Linus Torvalds 2005-04-16 994 } else if (iocstat == MPI_IOCSTATUS_BUSY) { 29dd3609f2fc70 Eric Moore 2007-09-14 995 printk(MYIOC_s_WARN_FMT "IOC_BUSY!\n", iocp->name); 29dd3609f2fc70 Eric Moore 2007-09-14 996 printk(MYIOC_s_WARN_FMT "(try again later?)\n", iocp->name); ^1da177e4c3f41 Linus Torvalds 2005-04-16 997 return -EBUSY; ^1da177e4c3f41 Linus Torvalds 2005-04-16 998 } else { 29dd3609f2fc70 Eric Moore 2007-09-14 999 printk(MYIOC_s_WARN_FMT "ioctl_fwdl() returned [bad] status = %04xh\n", ^1da177e4c3f41 Linus Torvalds 2005-04-16 1000 iocp->name, iocstat); 29dd3609f2fc70 Eric Moore 2007-09-14 1001 printk(MYIOC_s_WARN_FMT "(bad VooDoo)\n", iocp->name); ^1da177e4c3f41 Linus Torvalds 2005-04-16 1002 return -ENOMSG; ^1da177e4c3f41 Linus Torvalds 2005-04-16 1003 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 1004 return 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 1005 ^1da177e4c3f41 Linus Torvalds 2005-04-16 1006 fwdl_out: ea2a788de4ce5e Kashyap, Desai 2009-05-29 1007 ea2a788de4ce5e Kashyap, Desai 2009-05-29 1008 CLEAR_MGMT_STATUS(iocp->ioctl_cmds.status); ea2a788de4ce5e Kashyap, Desai 2009-05-29 1009 SET_MGMT_MSG_CONTEXT(iocp->ioctl_cmds.msg_context, 0); ^1da177e4c3f41 Linus Torvalds 2005-04-16 1010 kfree_sgl(sgl, sgl_dma, buflist, iocp); ^1da177e4c3f41 Linus Torvalds 2005-04-16 1011 return ret; ^1da177e4c3f41 Linus Torvalds 2005-04-16 1012 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 1013 :::::: The code at line 820 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :::::: TO: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx> :::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip