Anish Mistry wrote: > On Friday 30 June 2006 22:14, Anish Mistry wrote: > >> On Friday 30 June 2006 17:33, you wrote: >> >>> Anish Mistry wrote: >>> >>>> On Friday 30 June 2006 16:54, you wrote: >>>> >>>>> Anish Mistry wrote: >>>>> >>>>>>> No, it fell through the cracks somewhere... >>>>>>> >>>>>>> Do you still have the HW in question so tests can be done ? >>>>>>> >>>>>> Yes, in the exact same configuration >>>>>> >>>>> OK, so lets start over, I've not been following this, could >>>>> you get me a dmesg from a verbose booted system please ? >>>>> It fails because the disk geometry is invalid right ? >>>>> >>>> http://am-productions.biz/docs/boot-panic-script.txt.gz >>>> >>>> The email I sent earlier today contains all of the details >>>> including the above link. Let me know if you need further >>>> clarification. >>>> >>> OK, in ata-disk.c::ad_attach the following lines is around line >>> 100: >>> >>> if (atadev->param.atavalid & ATA_FLAG_54_58) { >>> adp->heads = atadev->param.current_heads; >>> adp->sectors = atadev->param.current_sectors; >>> adp->total_secs = (u_int32_t)atadev->param.current_size_1 >>> | ((u_int32_t)atadev->param.current_size_2 << 16); } >>> else { >>> adp->heads = atadev->param.heads; >>> adp->sectors = atadev->param.sectors; >>> adp->total_secs = atadev->param.cylinders * adp->heads * >>> adp->sectors; >>> } >>> >>> It would seem that the wrong way of getting at the >>> cyl/head/sector is used for your disk. >>> My guess is that ->param.current_* isn't set correctly in your >>> disk (firmware / BIOS mishap), so we need to take the old >>> defaults instead. That is instead of relying on good values as >>> the ATA_FLAG_54_58 was supposed to say, we also need to check the >>> values for sane settings. >>> >>> I just love how hard it is to understand the word "shall" in >>> standards, sigh.... >>> >> Changing that bit to the following fixed it and allows it to boot. >> >> if (atadev->param.atavalid & ATA_FLAG_54_58) { >> adp->heads = atadev->param.current_heads; >> adp->sectors = atadev->param.current_sectors; >> adp->total_secs = (u_int32_t)atadev->param.current_size_1 | >> ((u_int32_t)atadev->param.current_size_2 << 16); >> } >> if (!(atadev->param.atavalid & ATA_FLAG_54_58) || >> ((atadev->param.atavalid & ATA_FLAG_54_58) && (adp->heads == 0 || >> adp->sectors == 0))) { >> adp->heads = atadev->param.heads; >> adp->sectors = atadev->param.sectors; >> adp->total_secs = atadev->param.cylinders * adp->heads * >> adp->sectors; >> } >> > Do you have an ETA on committing this fix? Or is there something > wrong with the change? > I've been out-of-office for the last week so thats why... It needs a bit more refinement to be on the safe side however, I'll get it in there, no worries... -Søren > Thanks, > >Received on Sun Jul 16 2006 - 08:29:26 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:58 UTC