softint_establish() already fails if there is no space, and prints a WARNING in this case. The caller however needs to check for the failure, which ixgbe(4) mostly doesn't. Not sure if that is really the root cause, the panic seems to be actually in different area, and I didn't actually see the warning in the dmesg.
Making softint size fully dynamic is unfortunately not straighforward, it would need to reallocate the softint memory on all CPUs in a way that any serviced softints would continue working during this time. It would be simple however to adjust it based on % of physical memory, instead of fixed value.
If I count correctly, with current 8192 bytes the system supports some 100 softints, which seems to be on quite low side - more advanced hardware and drivers usually use queue and softint per cpu, so it can quickly run out on system with e.g. 32 cores.
I agree that the sysctl seems somewhat unnecessary, since the limit is only relevant during boot anyway, so it's not very helpful.
Jaromir