diff --git a/Kernel/arch/x86/errors.c b/Kernel/arch/x86/errors.c index c1c3ae676e60e45668a77d50ec2ab67638628750..1139fe40225ba99d5f5876613da94151c567d180 100644 --- a/Kernel/arch/x86/errors.c +++ b/Kernel/arch/x86/errors.c @@ -207,7 +207,8 @@ void Error_Backtrace(Uint eip, Uint ebp) // LogF("Backtrace: User - 0x%x\n", eip); // return; //} - + + #if 0 if(eip > 0xE0000000) { LogF("Backtrace: Data Area - 0x%x\n", eip); @@ -219,7 +220,8 @@ void Error_Backtrace(Uint eip, Uint ebp) LogF("Backtrace: Kernel Module - 0x%x\n", eip); return; } - + #endif + //str = Debug_GetSymbol(eip, &delta); // if(str == NULL) LogF("Backtrace: 0x%x", eip); diff --git a/Modules/USB/UHCI/uhci.c b/Modules/USB/UHCI/uhci.c index 9ef8b0bc43681177b1dee70cc4947d77bb9f84ab..7b40b143dfbe984faa7b2783037a92a3de3b2572 100644 --- a/Modules/USB/UHCI/uhci.c +++ b/Modules/USB/UHCI/uhci.c @@ -151,8 +151,16 @@ tUHCI_TD *UHCI_int_GetTDFromPhys(tPAddr PAddr) { // TODO: Fix this to work with a non-contiguous pool static tPAddr td_pool_base; + const int pool_size = NUM_TDs; + int offset; if(!td_pool_base) td_pool_base = MM_GetPhysAddr( (tVAddr)gaUHCI_TDPool ); - return gaUHCI_TDPool + (PAddr - td_pool_base) / sizeof(gaUHCI_TDPool[0]); + offset = (PAddr - td_pool_base) / sizeof(gaUHCI_TDPool[0]); + if( offset < 0 || offset >= pool_size ) + { + Log_Error("UHCI", "TD PAddr %P not from pool", PAddr); + return NULL; + } + return gaUHCI_TDPool + offset; } void UHCI_int_AppendTD(tUHCI_Controller *Cont, tUHCI_TD *TD) @@ -375,7 +383,7 @@ void UHCI_InterruptHandler(int IRQ, void *Ptr) { link = Host->FrameList[frame]; Host->FrameList[frame] = 1; - while( !(link & 1) ) + while( link && !(link & 1) ) { tUHCI_TD *td = UHCI_int_GetTDFromPhys(link); int byte_count = (td->Control&0x7FF)+1; @@ -385,6 +393,7 @@ void UHCI_InterruptHandler(int IRQ, void *Ptr) if(td->_info.bCopyData) { void *ptr = (void*)MM_MapTemp(td->BufferPointer); + Log_Debug("UHCI", "td->_info.DataPtr = %p", td->_info.DataPtr); memcpy(td->_info.DataPtr, ptr, byte_count); MM_FreeTemp((tVAddr)ptr); }