Changes between Version 7 and Version 8 of Ticket #228


Ignore:
Timestamp:
06/22/2021 02:36:40 PM (5 years ago)
Author:
Gary Dixon
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #228 – Description

    v7 v8  
    2424}}}
    2525
    26 Beginning at line 3900, the read_clock macro reads the system's calendar clock into the AQ register as a signed fixed bin(71) integer.  It saves this clock reading into tc_data|last_time to record when the scheduler last ran on any processor.  It then subtracts from this time stamp the value prds$last_recorded_time: the time at which the scheduler last ran on this processor.  This gives a delta_t value: the microseconds of quanta that can be added to tc_data|governing_bank_credit, which is also a signed fixed bin(71) integer value.  [See lines 3902-3903 above.]
     26Beginning at line 3900, the read_clock macro reads the system's calendar clock into the AQ register as a signed fixed bin(71) integer.  It saves this clock reading into tc_data|last_time to record when the scheduler last ran on any processor.  It then subtracts from this time stamp the value prds$last_recorded_time: the time at which the scheduler last ran on this processor.  This gives a delta_t value: the microseconds of quanta which is also a signed fixed bin(71) integer value.  [See lines 3902-3903 above.]
    2727
    28 The problem occurs in the ASQ instruction on line 3904.  That instruction uses signed arithmetic to add two single-word integers together:  C(Q) + C(Y)  ->  C(Y).  In this case, Y is the address of tc_data|governing_credit_bank, a fixed bin(35) signed value.  Q contains the right word of a double-word fixed bin(71) value; it is effectively an unsigned fixed bin(36) integer.  But the ASQ instruction treats Q as a signed fixed bin(35) value, with the left-most bit in this word being the sign bit. 
     28The problem occurs in the ASQ instruction on line 3904.  That instruction uses signed arithmetic to add two single-word integers together:  C(Q) + C(Y)  ->  C(Y).  In this case, Y is the address of tc_data|governing_credit_bank, a fixed bin(35) signed value.  Q contains the right word of delta_t: a double-word fixed bin(71) value.  The right-word is effectively an unsigned fixed bin(36) integer.  But the ASQ instruction treats Q as a signed fixed bin(35) value, with the left-most bit in this word being the sign bit. 
    2929
    3030In situations where that sign bit is "1"b, the ASQ instruction adds a negative value to the previous tc_data|governing_credit_bank, often causing it to become negative.  Code which assigns those credits (see pxss.alm line 2963++) ignores assignment of credits if the bank value is negative.  Thus the negative tc_data|govern_credit_bank value remains negative when scheduling ends on that CPU.