I am trying to understand the reason for 3rd point - and most importantly the must condition from the link below :
https://www.freebsd.org/cgi/man.cgi?locking(9)
Giant
Giant is a special mutex used to protect data structures that do not yet have their own locks. Since it provides semantics akin to the old spl(9) interface, Giant has special characteristics:
1. It is recursive.
2. Drivers can request that Giant be locked around them by not marking
themselves MPSAFE. Note that infrastructure to do this is slowly
going away as non-MPSAFE drivers either became properly locked or
disappear.
3. Giant must be locked before other non-sleepable locks.
4. Giant is dropped during unbounded sleeps and reacquired after
wakeup.
5. There are places in the kernel that drop Giant and pick it back up
again. Sleep locks will do this before sleeping. Parts of the net-
work or VM code may do this as well. This means that you cannot
count on Giant keeping other code from running if your code sleeps,
even if you want it to.