execute.cc (13632:483aaa00c69c) | execute.cc (13646:626670cc6da4) |
---|---|
1/* 2 * Copyright (c) 2013-2014 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 1662 unchanged lines hidden (view full) --- 1671 priority_list = cpu.randomPriority(); 1672 break; 1673 default: 1674 panic("Invalid thread policy"); 1675 } 1676 1677 for (auto tid : priority_list) { 1678 ExecuteThreadInfo &ex_info = executeInfo[tid]; | 1/* 2 * Copyright (c) 2013-2014 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 1662 unchanged lines hidden (view full) --- 1671 priority_list = cpu.randomPriority(); 1672 break; 1673 default: 1674 panic("Invalid thread policy"); 1675 } 1676 1677 for (auto tid : priority_list) { 1678 ExecuteThreadInfo &ex_info = executeInfo[tid]; |
1679 bool can_commit_insts = !ex_info.inFlightInsts->empty(); | 1679 1680 bool is_thread_active = 1681 cpu.getContext(tid)->status() == ThreadContext::Active; 1682 bool can_commit_insts = !ex_info.inFlightInsts->empty() && 1683 is_thread_active; 1684 |
1680 if (can_commit_insts) { 1681 QueuedInst *head_inflight_inst = &(ex_info.inFlightInsts->front()); 1682 MinorDynInstPtr inst = head_inflight_inst->inst; 1683 1684 can_commit_insts = can_commit_insts && 1685 (!inst->inLSQ || (lsq.findResponse(inst) != NULL)); 1686 1687 if (!inst->inLSQ) { --- 49 unchanged lines hidden (view full) --- 1737 case Enums::Random: 1738 priority_list = cpu.randomPriority(); 1739 break; 1740 default: 1741 panic("Invalid thread scheduling policy."); 1742 } 1743 1744 for (auto tid : priority_list) { | 1685 if (can_commit_insts) { 1686 QueuedInst *head_inflight_inst = &(ex_info.inFlightInsts->front()); 1687 MinorDynInstPtr inst = head_inflight_inst->inst; 1688 1689 can_commit_insts = can_commit_insts && 1690 (!inst->inLSQ || (lsq.findResponse(inst) != NULL)); 1691 1692 if (!inst->inLSQ) { --- 49 unchanged lines hidden (view full) --- 1742 case Enums::Random: 1743 priority_list = cpu.randomPriority(); 1744 break; 1745 default: 1746 panic("Invalid thread scheduling policy."); 1747 } 1748 1749 for (auto tid : priority_list) { |
1745 if (getInput(tid)) { | 1750 if (cpu.getContext(tid)->status() == ThreadContext::Active && 1751 getInput(tid)) { |
1746 issuePriority = tid; 1747 return tid; 1748 } 1749 } 1750 1751 return InvalidThreadID; 1752} 1753 --- 115 unchanged lines hidden --- | 1752 issuePriority = tid; 1753 return tid; 1754 } 1755 } 1756 1757 return InvalidThreadID; 1758} 1759 --- 115 unchanged lines hidden --- |