Calibration also ran like forever on my MI3. I installed FasterFix, started it and selected the European server, when I realized 2 things:
1st: This app just adjusts the time on my phone by contacting a time-server.
2nd: GPS was (like almost always) deactivated on my phone. So I switched it on.
After that the calibration ran once again, but for like 10 seconds only.
In other words: I am convinced that FasterFix is not necessary. If you encounter the "endless calibration"-issue, try this:
* Make sure that the time on your phone is correct, related to your position on earth (for this I use ClockSync since several years)
* Activate GPS and make sure, that your phone has a fix on your position.
* Then run the compass and calibrate it.