io_device.cc (7729:d3c006ecccd3) | io_device.cc (7823:dac01f14f20f) |
---|---|
1/* 2 * Copyright (c) 2006 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 107 unchanged lines hidden (view full) --- 116 DPRINTF(DMA, "Received nacked %s addr %#x\n", 117 pkt->cmdString(), pkt->getAddr()); 118 119 if (backoffTime < minBackoffDelay) 120 backoffTime = minBackoffDelay; 121 else if (backoffTime < maxBackoffDelay) 122 backoffTime <<= 1; 123 | 1/* 2 * Copyright (c) 2006 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 107 unchanged lines hidden (view full) --- 116 DPRINTF(DMA, "Received nacked %s addr %#x\n", 117 pkt->cmdString(), pkt->getAddr()); 118 119 if (backoffTime < minBackoffDelay) 120 backoffTime = minBackoffDelay; 121 else if (backoffTime < maxBackoffDelay) 122 backoffTime <<= 1; 123 |
124 reschedule(backoffEvent, curTick + backoffTime, true); | 124 reschedule(backoffEvent, curTick() + backoffTime, true); |
125 126 DPRINTF(DMA, "Backoff time set to %d ticks\n", backoffTime); 127 128 pkt->reinitNacked(); 129 queueDma(pkt, true); 130 } else if (pkt->senderState) { 131 DmaReqState *state; 132 backoffTime >>= 2; --- 6 unchanged lines hidden (view full) --- 139 assert(pendingCount >= 0); 140 assert(state); 141 142 state->numBytes += pkt->req->getSize(); 143 assert(state->totBytes >= state->numBytes); 144 if (state->totBytes == state->numBytes) { 145 if (state->completionEvent) { 146 if (state->delay) | 125 126 DPRINTF(DMA, "Backoff time set to %d ticks\n", backoffTime); 127 128 pkt->reinitNacked(); 129 queueDma(pkt, true); 130 } else if (pkt->senderState) { 131 DmaReqState *state; 132 backoffTime >>= 2; --- 6 unchanged lines hidden (view full) --- 139 assert(pendingCount >= 0); 140 assert(state); 141 142 state->numBytes += pkt->req->getSize(); 143 assert(state->totBytes >= state->numBytes); 144 if (state->totBytes == state->numBytes) { 145 if (state->completionEvent) { 146 if (state->delay) |
147 schedule(state->completionEvent, curTick + state->delay); | 147 schedule(state->completionEvent, curTick() + state->delay); |
148 else 149 state->completionEvent->process(); 150 } 151 delete state; 152 } 153 delete pkt->req; 154 delete pkt; 155 --- 51 unchanged lines hidden (view full) --- 207 inRetry = false; 208 } else { 209 inRetry = true; 210 DPRINTF(DMA, "-- Failed, queued\n"); 211 } 212 } while (!backoffTime && result && transmitList.size()); 213 214 if (transmitList.size() && backoffTime && !inRetry) { | 148 else 149 state->completionEvent->process(); 150 } 151 delete state; 152 } 153 delete pkt->req; 154 delete pkt; 155 --- 51 unchanged lines hidden (view full) --- 207 inRetry = false; 208 } else { 209 inRetry = true; 210 DPRINTF(DMA, "-- Failed, queued\n"); 211 } 212 } while (!backoffTime && result && transmitList.size()); 213 214 if (transmitList.size() && backoffTime && !inRetry) { |
215 DPRINTF(DMA, "Scheduling backoff for %d\n", curTick+backoffTime); | 215 DPRINTF(DMA, "Scheduling backoff for %d\n", curTick()+backoffTime); |
216 if (!backoffEvent.scheduled()) | 216 if (!backoffEvent.scheduled()) |
217 schedule(backoffEvent, backoffTime + curTick); | 217 schedule(backoffEvent, backoffTime + curTick()); |
218 } 219 DPRINTF(DMA, "TransmitList: %d, backoffTime: %d inRetry: %d es: %d\n", 220 transmitList.size(), backoffTime, inRetry, 221 backoffEvent.scheduled()); 222} 223 224 225void --- 68 unchanged lines hidden (view full) --- 294 inRetry = true; 295 DPRINTF(DMA, "-- Failed: queued\n"); 296 } 297 } while (result && !backoffTime && transmitList.size()); 298 299 if (transmitList.size() && backoffTime && !inRetry && 300 !backoffEvent.scheduled()) { 301 DPRINTF(DMA, "-- Scheduling backoff timer for %d\n", | 218 } 219 DPRINTF(DMA, "TransmitList: %d, backoffTime: %d inRetry: %d es: %d\n", 220 transmitList.size(), backoffTime, inRetry, 221 backoffEvent.scheduled()); 222} 223 224 225void --- 68 unchanged lines hidden (view full) --- 294 inRetry = true; 295 DPRINTF(DMA, "-- Failed: queued\n"); 296 } 297 } while (result && !backoffTime && transmitList.size()); 298 299 if (transmitList.size() && backoffTime && !inRetry && 300 !backoffEvent.scheduled()) { 301 DPRINTF(DMA, "-- Scheduling backoff timer for %d\n", |
302 backoffTime+curTick); 303 schedule(backoffEvent, backoffTime + curTick); | 302 backoffTime+curTick()); 303 schedule(backoffEvent, backoffTime + curTick()); |
304 } 305 } else if (state == Enums::atomic) { 306 transmitList.pop_front(); 307 308 Tick lat; 309 DPRINTF(DMA, "--Sending DMA for addr: %#x size: %d\n", 310 pkt->req->getPaddr(), pkt->req->getSize()); 311 lat = sendAtomic(pkt); --- 5 unchanged lines hidden (view full) --- 317 DPRINTF(DMA, "--Received response for DMA for addr: %#x size: %d nb: %d, tot: %d sched %d\n", 318 pkt->req->getPaddr(), pkt->req->getSize(), state->numBytes, 319 state->totBytes, 320 state->completionEvent ? state->completionEvent->scheduled() : 0 ); 321 322 if (state->totBytes == state->numBytes) { 323 if (state->completionEvent) { 324 assert(!state->completionEvent->scheduled()); | 304 } 305 } else if (state == Enums::atomic) { 306 transmitList.pop_front(); 307 308 Tick lat; 309 DPRINTF(DMA, "--Sending DMA for addr: %#x size: %d\n", 310 pkt->req->getPaddr(), pkt->req->getSize()); 311 lat = sendAtomic(pkt); --- 5 unchanged lines hidden (view full) --- 317 DPRINTF(DMA, "--Received response for DMA for addr: %#x size: %d nb: %d, tot: %d sched %d\n", 318 pkt->req->getPaddr(), pkt->req->getSize(), state->numBytes, 319 state->totBytes, 320 state->completionEvent ? state->completionEvent->scheduled() : 0 ); 321 322 if (state->totBytes == state->numBytes) { 323 if (state->completionEvent) { 324 assert(!state->completionEvent->scheduled()); |
325 schedule(state->completionEvent, curTick + lat + state->delay); | 325 schedule(state->completionEvent, curTick() + lat + state->delay); |
326 } 327 delete state; 328 delete pkt->req; 329 } 330 pendingCount--; 331 assert(pendingCount >= 0); 332 delete pkt; 333 --- 14 unchanged lines hidden --- | 326 } 327 delete state; 328 delete pkt->req; 329 } 330 pendingCount--; 331 assert(pendingCount >= 0); 332 delete pkt; 333 --- 14 unchanged lines hidden --- |