If the program that invokes the accelerator loops on the finish_flag instead of waiting for an interrupt, it will likely panic and die. This is caused by the accelerator writing to an uncacheable memory region and the CPU MSHR being unaware of it. Because the finish_flag is uncacheable, the accelerator's write request sets the needsWriteable flag of the memory packet but not the isInvalidate flag. The CPU MSHR, which is not aware of the presence of uncacheable memory, assumes both must be set or neither, triggering the panic.
If the program that invokes the accelerator loops on the
finish_flag
instead of waiting for an interrupt, it will likely panic and die. This is caused by the accelerator writing to an uncacheable memory region and the CPU MSHR being unaware of it. Because thefinish_flag
is uncacheable, the accelerator's write request sets theneedsWriteable
flag of the memory packet but not theisInvalidate
flag. The CPU MSHR, which is not aware of the presence of uncacheable memory, assumes both must be set or neither, triggering the panic.