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 ---