* [ogabbay:habanalabs-next 4/11] drivers/misc/habanalabs/common/device.c:1137 hl_device_reset() warn: missing error code 'rc'
@ 2021-02-23 2:18 kernel test robot
0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2021-02-23 2:18 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 38675 bytes --]
CC: kbuild-all(a)lists.01.org
TO: Oded Gabbay <ogabbay@kernel.org>
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
:::::: branch date: 7 hours ago
:::::: commit date: 7 hours ago
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 889
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 890 /*
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 891 * hl_device_reset - reset the device
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 892 *
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 893 * @hdev: pointer to habanalabs device structure
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 894 * @hard_reset: should we do hard reset to all engines or just reset the
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 895 * compute/dma engines
66446820df1864 drivers/misc/habanalabs/device.c Oded Gabbay 2020-05-18 896 * @from_hard_reset_thread: is the caller the hard-reset thread
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 897 *
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 898 * Block future CS and wait for pending CS to be enqueued
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 899 * Call ASIC H/W fini
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 900 * Flush all completions
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 901 * Re-initialize all internal data structures
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 902 * Call ASIC H/W init, late_init
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 903 * Test queues
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 904 * Enable device
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 905 *
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 906 * Returns 0 for success or an error on failure.
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 907 */
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;
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 }
f8c8c7d5f1b0ea drivers/misc/habanalabs/device.c Oded Gabbay 2019-02-16 1212
---
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 --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* [ogabbay:habanalabs-next 4/11] drivers/misc/habanalabs/common/device.c:1137 hl_device_reset() warn: missing error code 'rc'
@ 2021-02-23 7:53 ` Dan Carpenter
0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2021-02-23 7:53 UTC (permalink / raw)
To: kbuild
[-- 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 --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* [ogabbay:habanalabs-next 4/11] drivers/misc/habanalabs/common/device.c:1137 hl_device_reset() warn: missing error code 'rc'
@ 2021-02-23 7:53 ` Dan Carpenter
0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2021-02-23 7:53 UTC (permalink / raw)
To: kbuild-all
[-- 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 --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-02-23 7:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2021-02-23 7:53 ` Dan Carpenter
-- strict thread matches above, loose matches on Subject: below --
2021-02-23 2:18 kernel test robot
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.