nv_sleep_ms() function sets current process to TASK_INTERRUPTIBLE and call
schedule_timeout() in a while loop until less than a jiffie remains. It retains
in the loop regardless of whether signal is received. What's worse, process in
TASK_INTERRUPTIBLE state with pending signal would be set back to TASK_RUNNING
in __schedule() function, thus it would be rescheduled again and again, never
get into sleep state.
For example, processes calling nv_pci_remove() to remove a device which is still
in use would stuck in the sleep-check loop until usage_count down do zero.
Once SIGKILL received, it would remain in TASK_RUNNING, leading to a CPU usage
at 100%.
Instead, use schedule_timeout_uninterruptible() to substitute the while loop in
nv_sleep_ms(). The process would not be woken up only when the requested timeout
has expired.
Signed-off-by: huteng.ht <huteng.ht@bytedance.com>
All other values of the BITS_PER_PIXEL_INCREMENT are handled here.
This one was previously using a bitwise OR in, then also assigning directly after.
Closes: #54
http://www.nvidia.com redirects to https://www.nvidia.com/, so linking to http is reduntant.
More importantly, it could be considered a security issue, do to the nature of plain http. An attacker could perform a MITM attack and redirect the HTTP request to a malicious website.
```
> GET / HTTP/1.1
> Host: www.nvidia.com
Response:
< HTTP/1.1 307 Temporary Redirect
< Location: https://www.nvidia.com/
```