Move the code to assign the max_hw_sectors to the place SOP REPORT GENERAL will be called.

Also Reduce the hardcoded value of max-hw-sectors
Reduce queue entries if any queue buffer allocation fails, esp for 32 bit kernels.

Try reallocating with lower values if possible, otherwise fail.
Make the MAX SGL as variable parameter
Allocate one SGl buffer for each entry of queue instead of allocation one huge memory array.

The maximum size portably allocated by kmalloc is 128KB and that could have
 limitited the maximun queue entries.
Fix the sequence of IO IRQ freeing and IO buffer free and seperate it from Admin.

We were getting IO IRQ at the timne of freeing IRQ, and if the IO queues are freed
 before that, it will cause NULL pointer access.
Remove extra checks for queue pointer for NUll as it is not required.