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? Thanks, -- Anish Mistry
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:58 UTC