I finally cleaned up Peter Fuerst's IP28 patches and solved some of the IP28 issues in an IMHO more eye-friendly way (no ip26ucmem). My IP28 boots with these patches from an Debian sarge NFS root and is able to dd data from the harddrive. I'm going to send this patches to this list and the subsystem maintainers. There is one change missing to get a working SCSI driver, because a proper fix will be done in 2.6.25. The quick&dirty workaround is below. The workaround makes sure that the sense_buffer lives in its own cache line by aligning and extendin it. The patch "Use real cache invalidate" still contains one problem. It will not flush the cache correctly, if the given size is bigger than the second level cache. The problem is, that there is no index invalidate cache operation available. I have two ideas to solve that. One is to always do a range invalidate (maybe just by using this only for R10k machines, which usually have quite big caches) or scan through the cache and use the tag informations to do hit invalidate. If anybody has a better idea please speak up :-) Have fun with the patches, Thomas. diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 3f47e52..3f3d7aa 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h @@ -87,11 +87,13 @@ struct scsi_cmnd { struct request *request; /* The command we are working on */ + unsigned char xxx1[0x48]; #define SCSI_SENSE_BUFFERSIZE 96 unsigned char sense_buffer[SCSI_SENSE_BUFFERSIZE]; /* obtained by REQUEST SENSE when * CHECK CONDITION is received on original * command (auto-sense) */ + unsigned char xxx2[32]; /* Low-level done function - can be used by low-level driver to point * to completion function. Not used by mid/upper level code. */ -- Crap can work. Given enough thrust pigs will fly, but it's not necessary a good idea. [ RFC1925, 2.3 ]