ibcore: Allow passing NULL-pointers to ib_umem_release()
FreeBSD commit b633e08c70
removed the
NULL-checks from the mlx4ib-driver.
This fixes the following NULL-pointer panic when unloading mlx4ib:
ib_umem_release()
mlx4_ib_destroy_qp()
ib_destroy_qp_user()
ipoib_transport_dev_cleanup()
ipoib_dev_cleanup()
ipoib_remove_one()
ib_unregister_client()
ipoib_cleanup_module()
linker_file_sysuninit()
linker_file_unload()
kern_kldunload()
amd64_syscall()
Linux commit:
836a0fbb3e76f704ad65ddfb57f00725245e509b
MFC after: 1 week
Submitted by: dandan@lysator.liu.se
Sponsored by: Lysator ACS
Sponsored by: NVIDIA Networking
This commit is contained in:
parent
1599fc904d
commit
6244b53e16
@ -248,11 +248,13 @@ static void ib_umem_account(struct work_struct *work)
|
|||||||
*/
|
*/
|
||||||
void ib_umem_release(struct ib_umem *umem)
|
void ib_umem_release(struct ib_umem *umem)
|
||||||
{
|
{
|
||||||
struct ib_ucontext *context = umem->context;
|
|
||||||
struct mm_struct *mm;
|
struct mm_struct *mm;
|
||||||
struct task_struct *task;
|
struct task_struct *task;
|
||||||
unsigned long diff;
|
unsigned long diff;
|
||||||
|
|
||||||
|
if (!umem)
|
||||||
|
return;
|
||||||
|
|
||||||
if (umem->odp_data) {
|
if (umem->odp_data) {
|
||||||
ib_umem_odp_release(umem);
|
ib_umem_odp_release(umem);
|
||||||
return;
|
return;
|
||||||
@ -279,7 +281,7 @@ void ib_umem_release(struct ib_umem *umem)
|
|||||||
* up here and not be able to take the mmap_sem. In that case
|
* up here and not be able to take the mmap_sem. In that case
|
||||||
* we defer the vm_locked accounting to the system workqueue.
|
* we defer the vm_locked accounting to the system workqueue.
|
||||||
*/
|
*/
|
||||||
if (context->closing) {
|
if (umem->context->closing) {
|
||||||
if (!down_write_trylock(&mm->mmap_sem)) {
|
if (!down_write_trylock(&mm->mmap_sem)) {
|
||||||
INIT_WORK(&umem->work, ib_umem_account);
|
INIT_WORK(&umem->work, ib_umem_account);
|
||||||
umem->mm = mm;
|
umem->mm = mm;
|
||||||
|
Loading…
Reference in New Issue
Block a user