From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org
Subject: [ogabbay:habanalabs-next 4/11] drivers/misc/habanalabs/common/device.c:1137 hl_device_reset() warn: missing error code 'rc'
Date: Tue, 23 Feb 2021 10:53:19 +0300 [thread overview]
Message-ID: <20210223075319.GP2087@kadam> (raw)
[-- Attachment #1: Type: text/plain, Size: 36215 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git habanalabs-next
head: ea9bcaec82e5895e1090b36a850c119075ca590e
commit: 5755bd9a5a1212b52dbbb5864a863d5dc20c91cb [4/11] habanalabs: fail reset if device is not idle
config: x86_64-randconfig-m031-20210222 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/misc/habanalabs/common/device.c:1137 hl_device_reset() warn: missing error code 'rc'
Old smatch warnings:
drivers/misc/habanalabs/common/device.c:1400 hl_device_init() warn: missing error code 'rc'
vim +/rc +1137 drivers/misc/habanalabs/common/device.c
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 908 int hl_device_reset(struct hl_device *hdev, bool hard_reset,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 909 bool from_hard_reset_thread)
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 910 {
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 911 u64 idle_mask[HL_BUSY_ENGINES_MASK_EXT_SIZE] = {0};
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 912 int i, rc;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 913
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 914 if (!hdev->init_done) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 915 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 916 "Can't reset before initialization is done\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 917 return 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 918 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 919
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 920 if ((!hard_reset) && (!hdev->supports_soft_reset)) {
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 921 dev_dbg(hdev->dev, "Doing hard-reset instead of soft-reset\n");
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 922 hard_reset = true;
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 923 }
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 924
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 925 /* Re-entry of reset thread */
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 926 if (from_hard_reset_thread && hdev->process_kill_trial_cnt)
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 927 goto kill_processes;
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 928
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 929 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 930 * Prevent concurrency in this function - only one reset should be
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 931 * done at any given time. Only need to perform this if we didn't
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 932 * get from the dedicated hard reset thread
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 933 */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 934 if (!from_hard_reset_thread) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 935 /* Block future CS/VM/JOB completion operations */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 936 rc = atomic_cmpxchg(&hdev->in_reset, 0, 1);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 937 if (rc)
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 938 return 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 939
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 940 if (hard_reset) {
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 941 /* Disable PCI access from device F/W so he won't send
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 942 * us additional interrupts. We disable MSI/MSI-X at
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 943 * the halt_engines function and we can't have the F/W
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 944 * sending us interrupts after that. We need to disable
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 945 * the access here because if the device is marked
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 946 * disable, the message won't be send. Also, in case
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 947 * of heartbeat, the device CPU is marked as disable
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 948 * so this message won't be sent
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 949 */
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 950 if (hl_fw_send_pci_access_msg(hdev,
2f55342c5e4d3e drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-08-15 951 CPUCP_PACKET_DISABLE_PCI_ACCESS))
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 952 dev_warn(hdev->dev,
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 953 "Failed to disable PCI access by F/W\n");
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 954 }
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 955
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 956 /* This also blocks future CS/VM/JOB completion operations */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 957 hdev->disabled = true;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 958
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 959 /* Flush anyone that is inside the critical section of enqueue
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 960 * jobs to the H/W
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 961 */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 962 hdev->asic_funcs->hw_queues_lock(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 963 hdev->asic_funcs->hw_queues_unlock(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 964
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 965 /* Flush anyone that is inside device open */
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 966 mutex_lock(&hdev->fpriv_list_lock);
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 967 mutex_unlock(&hdev->fpriv_list_lock);
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 968
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 969 dev_err(hdev->dev, "Going to RESET device!\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 970 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 971
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 972 again:
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 973 if ((hard_reset) && (!from_hard_reset_thread)) {
3f5398cfbf051d drivers/misc/habanalabs/device.c Oded Gabbay 2019-04-06 974 hdev->hard_reset_pending = true;
3f5398cfbf051d drivers/misc/habanalabs/device.c Oded Gabbay 2019-04-06 975
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 976 hdev->process_kill_trial_cnt = 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 977
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 978 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 979 * Because the reset function can't run from interrupt or
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 980 * from heartbeat work, we need to call the reset function
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 981 * from a dedicated work
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 982 */
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 983 queue_delayed_work(hdev->device_reset_work.wq,
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 984 &hdev->device_reset_work.reset_work, 0);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 985
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 986 return 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 987 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 988
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 989 if (hard_reset) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 990 device_late_fini(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 991
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 992 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 993 * Now that the heartbeat thread is closed, flush processes
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 994 * which are sending messages to CPU
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 995 */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 996 mutex_lock(&hdev->send_cpu_message_lock);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 997 mutex_unlock(&hdev->send_cpu_message_lock);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 998 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 999
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1000 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1001 * Halt the engines and disable interrupts so we won't get any more
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1002 * completions from H/W and we won't have any accesses from the
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1003 * H/W to the host machine
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1004 */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1005 hdev->asic_funcs->halt_engines(hdev, hard_reset);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1006
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1007 /* Go over all the queues, release all CS and their jobs */
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1008 hl_cs_rollback_all(hdev);
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1009
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1010 kill_processes:
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1011 if (hard_reset) {
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1012 /* Kill processes here after CS rollback. This is because the
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1013 * process can't really exit until all its CSs are done, which
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1014 * is what we do in cs rollback
4aecb05e526a42 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-22 1015 */
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1016 rc = device_kill_open_processes(hdev, 0);
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1017
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1018 if (rc == -EBUSY) {
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1019 if (hdev->device_fini_pending) {
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1020 dev_crit(hdev->dev,
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1021 "Failed to kill all open processes, stopping hard reset\n");
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1022 goto out_err;
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1023 }
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1024
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1025 /* signal reset thread to reschedule */
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1026 return rc;
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1027 }
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1028
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1029 if (rc) {
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1030 dev_crit(hdev->dev,
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1031 "Failed to kill all open processes, stopping hard reset\n");
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1032 goto out_err;
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1033 }
4aecb05e526a42 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-22 1034
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1035 /* Flush the Event queue workers to make sure no other thread is
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1036 * reading or writing to registers during the reset
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1037 */
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1038 flush_workqueue(hdev->eq_wq);
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1039 }
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1040
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1041 /* Reset the H/W. It will be in idle state after this returns */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1042 hdev->asic_funcs->hw_fini(hdev, hard_reset);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1043
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1044 if (hard_reset) {
9e2e8fc7d65c9c drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-09-23 1045 /* Release kernel context */
aa6df6533b8f9e drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-01-11 1046 if (hdev->kernel_ctx && hl_ctx_put(hdev->kernel_ctx) == 1)
9e2e8fc7d65c9c drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-09-23 1047 hdev->kernel_ctx = NULL;
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1048 hl_vm_fini(hdev);
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1049 hl_mmu_fini(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1050 hl_eq_reset(hdev, &hdev->event_queue);
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1051 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1052
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1053 /* Re-initialize PI,CI to 0 in all queues (hw queue, cq) */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1054 hl_hw_queue_reset(hdev, hard_reset);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1055 for (i = 0 ; i < hdev->asic_prop.completion_queues_count ; i++)
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1056 hl_cq_reset(hdev, &hdev->completion_queue[i]);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1057
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1058 hdev->idle_busy_ts_idx = 0;
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1059 hdev->idle_busy_ts_arr[0].busy_to_idle_ts = ktime_set(0, 0);
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1060 hdev->idle_busy_ts_arr[0].idle_to_busy_ts = ktime_set(0, 0);
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1061
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1062 if (hdev->cs_active_cnt)
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1063 dev_crit(hdev->dev, "CS active cnt %d is not 0 during reset\n",
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1064 hdev->cs_active_cnt);
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1065
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1066 mutex_lock(&hdev->fpriv_list_lock);
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1067
027d35d0b6999c drivers/misc/habanalabs/device.c Oded Gabbay 2019-04-25 1068 /* Make sure the context switch phase will run again */
86d5307a6d3507 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1069 if (hdev->compute_ctx) {
86d5307a6d3507 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1070 atomic_set(&hdev->compute_ctx->thread_ctx_switch_token, 1);
86d5307a6d3507 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1071 hdev->compute_ctx->thread_ctx_switch_wait_token = 0;
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1072 }
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1073
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1074 mutex_unlock(&hdev->fpriv_list_lock);
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1075
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1076 /* Finished tear-down, starting to re-initialize */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1077
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1078 if (hard_reset) {
a28ce422a6d926 drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-28 1079 hdev->device_cpu_disabled = false;
3f5398cfbf051d drivers/misc/habanalabs/device.c Oded Gabbay 2019-04-06 1080 hdev->hard_reset_pending = false;
a28ce422a6d926 drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-28 1081
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1082 if (hdev->kernel_ctx) {
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1083 dev_crit(hdev->dev,
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1084 "kernel ctx was alive during hard reset, something is terribly wrong\n");
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1085 rc = -EBUSY;
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1086 goto out_err;
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1087 }
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1088
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1089 rc = hl_mmu_init(hdev);
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1090 if (rc) {
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1091 dev_err(hdev->dev,
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1092 "Failed to initialize MMU S/W after hard reset\n");
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1093 goto out_err;
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1094 }
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1095
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1096 /* Allocate the kernel context */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1097 hdev->kernel_ctx = kzalloc(sizeof(*hdev->kernel_ctx),
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1098 GFP_KERNEL);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1099 if (!hdev->kernel_ctx) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1100 rc = -ENOMEM;
b000700d6db50c drivers/misc/habanalabs/common/device.c Dinghao Liu 2020-12-26 1101 hl_mmu_fini(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1102 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1103 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1104
86d5307a6d3507 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1105 hdev->compute_ctx = NULL;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1106
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1107 rc = hl_ctx_init(hdev, hdev->kernel_ctx, true);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1108 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1109 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1110 "failed to init kernel ctx in hard reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1111 kfree(hdev->kernel_ctx);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1112 hdev->kernel_ctx = NULL;
b000700d6db50c drivers/misc/habanalabs/common/device.c Dinghao Liu 2020-12-26 1113 hl_mmu_fini(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1114 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1115 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1116 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1117
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1118 /* Device is now enabled as part of the initialization requires
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1119 * communication with the device firmware to get information that
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1120 * is required for the initialization itself
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1121 */
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1122 hdev->disabled = false;
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1123
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1124 rc = hdev->asic_funcs->hw_init(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1125 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1126 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1127 "failed to initialize the H/W after reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1128 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1129 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1130
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1131 /* If device is not idle fail the reset process */
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1132 if (!hdev->asic_funcs->is_device_idle(hdev, idle_mask,
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1133 HL_BUSY_ENGINES_MASK_EXT_SIZE, NULL)) {
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1134 dev_err(hdev->dev,
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1135 "device is not idle (mask %#llx %#llx) after reset\n",
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1136 idle_mask[0], idle_mask[1]);
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 @1137 goto out_err;
"rc = -EIO;" ?
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1138 }
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1139
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1140 /* Check that the communication with the device is working */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1141 rc = hdev->asic_funcs->test_queues(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1142 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1143 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1144 "Failed to detect if device is alive after reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1145 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1146 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1147
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1148 if (hard_reset) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1149 rc = device_late_init(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1150 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1151 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1152 "Failed late init after hard reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1153 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1154 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1155
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1156 rc = hl_vm_init(hdev);
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1157 if (rc) {
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1158 dev_err(hdev->dev,
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1159 "Failed to init memory module after hard reset\n");
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1160 goto out_err;
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1161 }
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1162
58361aae4b0eed drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-08-08 1163 hl_set_max_power(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1164 } else {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1165 rc = hdev->asic_funcs->soft_reset_late_init(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1166 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1167 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1168 "Failed late init after soft reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1169 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1170 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1171 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1172
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1173 atomic_set(&hdev->in_reset, 0);
66a76401c50b26 drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-05 1174 hdev->needs_reset = false;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1175
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1176 dev_notice(hdev->dev, "Successfully finished resetting the device\n");
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1177
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1178 if (hard_reset) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1179 hdev->hard_reset_cnt++;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1180
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1181 /* After reset is done, we are ready to receive events from
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1182 * the F/W. We can't do it before because we will ignore events
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1183 * and if those events are fatal, we won't know about it and
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1184 * the device will be operational although it shouldn't be
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1185 */
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1186 hdev->asic_funcs->enable_events_from_fw(hdev);
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1187 } else {
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1188 hdev->soft_reset_cnt++;
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1189 }
867b58ac944557 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-08 1190
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1191 return 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1192
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1193 out_err:
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1194 hdev->disabled = true;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1195
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1196 if (hard_reset) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1197 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1198 "Failed to reset! Device is NOT usable\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1199 hdev->hard_reset_cnt++;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1200 } else {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1201 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1202 "Failed to do soft-reset, trying hard reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1203 hdev->soft_reset_cnt++;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1204 hard_reset = true;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1205 goto again;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1206 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1207
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1208 atomic_set(&hdev->in_reset, 0);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1209
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1210 return rc;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1211 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32261 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: [ogabbay:habanalabs-next 4/11] drivers/misc/habanalabs/common/device.c:1137 hl_device_reset() warn: missing error code 'rc'
Date: Tue, 23 Feb 2021 10:53:19 +0300 [thread overview]
Message-ID: <20210223075319.GP2087@kadam> (raw)
[-- Attachment #1: Type: text/plain, Size: 36215 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git habanalabs-next
head: ea9bcaec82e5895e1090b36a850c119075ca590e
commit: 5755bd9a5a1212b52dbbb5864a863d5dc20c91cb [4/11] habanalabs: fail reset if device is not idle
config: x86_64-randconfig-m031-20210222 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/misc/habanalabs/common/device.c:1137 hl_device_reset() warn: missing error code 'rc'
Old smatch warnings:
drivers/misc/habanalabs/common/device.c:1400 hl_device_init() warn: missing error code 'rc'
vim +/rc +1137 drivers/misc/habanalabs/common/device.c
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 908 int hl_device_reset(struct hl_device *hdev, bool hard_reset,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 909 bool from_hard_reset_thread)
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 910 {
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 911 u64 idle_mask[HL_BUSY_ENGINES_MASK_EXT_SIZE] = {0};
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 912 int i, rc;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 913
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 914 if (!hdev->init_done) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 915 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 916 "Can't reset before initialization is done\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 917 return 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 918 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 919
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 920 if ((!hard_reset) && (!hdev->supports_soft_reset)) {
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 921 dev_dbg(hdev->dev, "Doing hard-reset instead of soft-reset\n");
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 922 hard_reset = true;
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 923 }
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 924
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 925 /* Re-entry of reset thread */
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 926 if (from_hard_reset_thread && hdev->process_kill_trial_cnt)
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 927 goto kill_processes;
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 928
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 929 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 930 * Prevent concurrency in this function - only one reset should be
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 931 * done at any given time. Only need to perform this if we didn't
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 932 * get from the dedicated hard reset thread
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 933 */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 934 if (!from_hard_reset_thread) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 935 /* Block future CS/VM/JOB completion operations */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 936 rc = atomic_cmpxchg(&hdev->in_reset, 0, 1);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 937 if (rc)
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 938 return 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 939
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 940 if (hard_reset) {
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 941 /* Disable PCI access from device F/W so he won't send
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 942 * us additional interrupts. We disable MSI/MSI-X at
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 943 * the halt_engines function and we can't have the F/W
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 944 * sending us interrupts after that. We need to disable
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 945 * the access here because if the device is marked
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 946 * disable, the message won't be send. Also, in case
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 947 * of heartbeat, the device CPU is marked as disable
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 948 * so this message won't be sent
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 949 */
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 950 if (hl_fw_send_pci_access_msg(hdev,
2f55342c5e4d3e drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-08-15 951 CPUCP_PACKET_DISABLE_PCI_ACCESS))
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 952 dev_warn(hdev->dev,
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 953 "Failed to disable PCI access by F/W\n");
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 954 }
c83c4171933bc4 drivers/misc/habanalabs/device.c Oded Gabbay 2020-07-05 955
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 956 /* This also blocks future CS/VM/JOB completion operations */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 957 hdev->disabled = true;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 958
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 959 /* Flush anyone that is inside the critical section of enqueue
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 960 * jobs to the H/W
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 961 */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 962 hdev->asic_funcs->hw_queues_lock(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 963 hdev->asic_funcs->hw_queues_unlock(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 964
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 965 /* Flush anyone that is inside device open */
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 966 mutex_lock(&hdev->fpriv_list_lock);
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 967 mutex_unlock(&hdev->fpriv_list_lock);
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 968
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 969 dev_err(hdev->dev, "Going to RESET device!\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 970 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 971
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 972 again:
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 973 if ((hard_reset) && (!from_hard_reset_thread)) {
3f5398cfbf051d drivers/misc/habanalabs/device.c Oded Gabbay 2019-04-06 974 hdev->hard_reset_pending = true;
3f5398cfbf051d drivers/misc/habanalabs/device.c Oded Gabbay 2019-04-06 975
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 976 hdev->process_kill_trial_cnt = 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 977
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 978 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 979 * Because the reset function can't run from interrupt or
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 980 * from heartbeat work, we need to call the reset function
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 981 * from a dedicated work
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 982 */
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 983 queue_delayed_work(hdev->device_reset_work.wq,
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 984 &hdev->device_reset_work.reset_work, 0);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 985
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 986 return 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 987 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 988
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 989 if (hard_reset) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 990 device_late_fini(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 991
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 992 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 993 * Now that the heartbeat thread is closed, flush processes
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 994 * which are sending messages to CPU
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 995 */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 996 mutex_lock(&hdev->send_cpu_message_lock);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 997 mutex_unlock(&hdev->send_cpu_message_lock);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 998 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 999
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1000 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1001 * Halt the engines and disable interrupts so we won't get any more
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1002 * completions from H/W and we won't have any accesses from the
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1003 * H/W to the host machine
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1004 */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1005 hdev->asic_funcs->halt_engines(hdev, hard_reset);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1006
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1007 /* Go over all the queues, release all CS and their jobs */
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1008 hl_cs_rollback_all(hdev);
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1009
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1010 kill_processes:
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1011 if (hard_reset) {
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1012 /* Kill processes here after CS rollback. This is because the
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1013 * process can't really exit until all its CSs are done, which
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1014 * is what we do in cs rollback
4aecb05e526a42 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-22 1015 */
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1016 rc = device_kill_open_processes(hdev, 0);
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1017
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1018 if (rc == -EBUSY) {
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1019 if (hdev->device_fini_pending) {
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1020 dev_crit(hdev->dev,
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1021 "Failed to kill all open processes, stopping hard reset\n");
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1022 goto out_err;
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1023 }
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1024
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1025 /* signal reset thread to reschedule */
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1026 return rc;
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1027 }
adb51298fdc41b drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-08 1028
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1029 if (rc) {
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1030 dev_crit(hdev->dev,
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1031 "Failed to kill all open processes, stopping hard reset\n");
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1032 goto out_err;
36fafe87edd636 drivers/misc/habanalabs/device.c Omer Shpigelman 2020-05-18 1033 }
4aecb05e526a42 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-22 1034
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1035 /* Flush the Event queue workers to make sure no other thread is
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1036 * reading or writing to registers during the reset
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1037 */
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1038 flush_workqueue(hdev->eq_wq);
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1039 }
55f6d680970ea9 drivers/misc/habanalabs/device.c Oded Gabbay 2019-11-17 1040
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1041 /* Reset the H/W. It will be in idle state after this returns */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1042 hdev->asic_funcs->hw_fini(hdev, hard_reset);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1043
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1044 if (hard_reset) {
9e2e8fc7d65c9c drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-09-23 1045 /* Release kernel context */
aa6df6533b8f9e drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-01-11 1046 if (hdev->kernel_ctx && hl_ctx_put(hdev->kernel_ctx) == 1)
9e2e8fc7d65c9c drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-09-23 1047 hdev->kernel_ctx = NULL;
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1048 hl_vm_fini(hdev);
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1049 hl_mmu_fini(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1050 hl_eq_reset(hdev, &hdev->event_queue);
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1051 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1052
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1053 /* Re-initialize PI,CI to 0 in all queues (hw queue, cq) */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1054 hl_hw_queue_reset(hdev, hard_reset);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1055 for (i = 0 ; i < hdev->asic_prop.completion_queues_count ; i++)
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1056 hl_cq_reset(hdev, &hdev->completion_queue[i]);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1057
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1058 hdev->idle_busy_ts_idx = 0;
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1059 hdev->idle_busy_ts_arr[0].busy_to_idle_ts = ktime_set(0, 0);
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1060 hdev->idle_busy_ts_arr[0].idle_to_busy_ts = ktime_set(0, 0);
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1061
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1062 if (hdev->cs_active_cnt)
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1063 dev_crit(hdev->dev, "CS active cnt %d is not 0 during reset\n",
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1064 hdev->cs_active_cnt);
75b3cb2bb08037 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-28 1065
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1066 mutex_lock(&hdev->fpriv_list_lock);
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1067
027d35d0b6999c drivers/misc/habanalabs/device.c Oded Gabbay 2019-04-25 1068 /* Make sure the context switch phase will run again */
86d5307a6d3507 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1069 if (hdev->compute_ctx) {
86d5307a6d3507 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1070 atomic_set(&hdev->compute_ctx->thread_ctx_switch_token, 1);
86d5307a6d3507 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1071 hdev->compute_ctx->thread_ctx_switch_wait_token = 0;
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1072 }
eff6f4a0e70b7b drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1073
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1074 mutex_unlock(&hdev->fpriv_list_lock);
eb7caf84b02938 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1075
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1076 /* Finished tear-down, starting to re-initialize */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1077
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1078 if (hard_reset) {
a28ce422a6d926 drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-28 1079 hdev->device_cpu_disabled = false;
3f5398cfbf051d drivers/misc/habanalabs/device.c Oded Gabbay 2019-04-06 1080 hdev->hard_reset_pending = false;
a28ce422a6d926 drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-28 1081
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1082 if (hdev->kernel_ctx) {
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1083 dev_crit(hdev->dev,
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1084 "kernel ctx was alive during hard reset, something is terribly wrong\n");
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1085 rc = -EBUSY;
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1086 goto out_err;
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1087 }
0878a42086e0a6 drivers/misc/habanalabs/device.c Oded Gabbay 2019-03-17 1088
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1089 rc = hl_mmu_init(hdev);
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1090 if (rc) {
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1091 dev_err(hdev->dev,
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1092 "Failed to initialize MMU S/W after hard reset\n");
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1093 goto out_err;
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1094 }
37d68ce5274fac drivers/misc/habanalabs/device.c Oded Gabbay 2019-05-29 1095
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1096 /* Allocate the kernel context */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1097 hdev->kernel_ctx = kzalloc(sizeof(*hdev->kernel_ctx),
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1098 GFP_KERNEL);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1099 if (!hdev->kernel_ctx) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1100 rc = -ENOMEM;
b000700d6db50c drivers/misc/habanalabs/common/device.c Dinghao Liu 2020-12-26 1101 hl_mmu_fini(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1102 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1103 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1104
86d5307a6d3507 drivers/misc/habanalabs/device.c Oded Gabbay 2019-07-30 1105 hdev->compute_ctx = NULL;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1106
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1107 rc = hl_ctx_init(hdev, hdev->kernel_ctx, true);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1108 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1109 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1110 "failed to init kernel ctx in hard reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1111 kfree(hdev->kernel_ctx);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1112 hdev->kernel_ctx = NULL;
b000700d6db50c drivers/misc/habanalabs/common/device.c Dinghao Liu 2020-12-26 1113 hl_mmu_fini(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1114 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1115 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1116 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1117
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1118 /* Device is now enabled as part of the initialization requires
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1119 * communication with the device firmware to get information that
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1120 * is required for the initialization itself
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1121 */
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1122 hdev->disabled = false;
8df8cb1efc1962 drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-07-15 1123
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1124 rc = hdev->asic_funcs->hw_init(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1125 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1126 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1127 "failed to initialize the H/W after reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1128 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1129 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1130
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1131 /* If device is not idle fail the reset process */
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1132 if (!hdev->asic_funcs->is_device_idle(hdev, idle_mask,
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1133 HL_BUSY_ENGINES_MASK_EXT_SIZE, NULL)) {
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1134 dev_err(hdev->dev,
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1135 "device is not idle (mask %#llx %#llx) after reset\n",
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1136 idle_mask[0], idle_mask[1]);
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 @1137 goto out_err;
"rc = -EIO;" ?
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1138 }
5755bd9a5a1212 drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-16 1139
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1140 /* Check that the communication with the device is working */
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1141 rc = hdev->asic_funcs->test_queues(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1142 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1143 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1144 "Failed to detect if device is alive after reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1145 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1146 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1147
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1148 if (hard_reset) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1149 rc = device_late_init(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1150 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1151 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1152 "Failed late init after hard reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1153 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1154 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1155
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1156 rc = hl_vm_init(hdev);
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1157 if (rc) {
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1158 dev_err(hdev->dev,
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1159 "Failed to init memory module after hard reset\n");
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1160 goto out_err;
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1161 }
0feaf86d4e6950 drivers/misc/habanalabs/device.c Omer Shpigelman 2019-02-16 1162
58361aae4b0eed drivers/misc/habanalabs/common/device.c Oded Gabbay 2020-08-08 1163 hl_set_max_power(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1164 } else {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1165 rc = hdev->asic_funcs->soft_reset_late_init(hdev);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1166 if (rc) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1167 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1168 "Failed late init after soft reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1169 goto out_err;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1170 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1171 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1172
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1173 atomic_set(&hdev->in_reset, 0);
66a76401c50b26 drivers/misc/habanalabs/common/device.c Ofir Bitton 2020-10-05 1174 hdev->needs_reset = false;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1175
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1176 dev_notice(hdev->dev, "Successfully finished resetting the device\n");
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1177
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1178 if (hard_reset) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1179 hdev->hard_reset_cnt++;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1180
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1181 /* After reset is done, we are ready to receive events from
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1182 * the F/W. We can't do it before because we will ignore events
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1183 * and if those events are fatal, we won't know about it and
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1184 * the device will be operational although it shouldn't be
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1185 */
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1186 hdev->asic_funcs->enable_events_from_fw(hdev);
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1187 } else {
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1188 hdev->soft_reset_cnt++;
28bcf1fdc408cd drivers/misc/habanalabs/common/device.c Oded Gabbay 2021-02-01 1189 }
867b58ac944557 drivers/misc/habanalabs/device.c Oded Gabbay 2019-08-08 1190
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1191 return 0;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1192
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1193 out_err:
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1194 hdev->disabled = true;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1195
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1196 if (hard_reset) {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1197 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1198 "Failed to reset! Device is NOT usable\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1199 hdev->hard_reset_cnt++;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1200 } else {
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1201 dev_err(hdev->dev,
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1202 "Failed to do soft-reset, trying hard reset\n");
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1203 hdev->soft_reset_cnt++;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1204 hard_reset = true;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1205 goto again;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1206 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1207
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1208 atomic_set(&hdev->in_reset, 0);
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1209
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1210 return rc;
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1211 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32261 bytes --]
next reply other threads:[~2021-02-23 7:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-23 7:53 Dan Carpenter [this message]
2021-02-23 7:53 ` [ogabbay:habanalabs-next 4/11] drivers/misc/habanalabs/common/device.c:1137 hl_device_reset() warn: missing error code 'rc' Dan Carpenter
-- strict thread matches above, loose matches on Subject: below --
2021-02-23 2:18 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210223075319.GP2087@kadam \
--to=dan.carpenter@oracle.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.