state_transition.py: improve hit filter AND add miss filter

This commit is contained in:
LinJiawei 2021-09-07 15:40:52 +08:00
parent d9fbdb7b6b
commit 7522ed5ef7
1 changed files with 14 additions and 3 deletions

View File

@ -144,18 +144,28 @@ def invalid_filter(s):
def hit_filter(s):
if s.self_dir.hit_state == HitState.HIT:
if s.block_state.self_block == Block.NULL:
if s.block_state.self_block != s.block_state.req_block:
return False
if s.self_dir.tl_state == TLState.INVALID:
return False
for c, b in zip(s.client_dirs, s.block_state.client_blocks):
if c.hit_state == HitState.HIT:
if b == Block.NULL:
if b != s.block_state.req_block:
return False
if c.tl_state == TLState.INVALID:
return False
return True
def miss_filter(s):
if s.self_dir.hit_state == HitState.MISS:
if s.block_state.self_block == s.block_state.req_block:
return False
for c, b in zip(s.client_dirs, s.block_state.client_blocks):
if c.hit_state == HitState.MISS:
if b == s.block_state.req_block:
return False
return True
def retrieve_name(var):
for fi in reversed(inspect.stack()):
names = [var_name for var_name, var_val in fi.frame.f_locals.items() if var_val is var]
@ -164,7 +174,8 @@ def retrieve_name(var):
filters = [
invalid_filter,
hit_filter
hit_filter,
miss_filter
]
for f in filters: