Bug fix 'refill row with bad data pattern'

This commit is contained in:
emanuele 2020-03-14 14:24:24 +01:00
parent a28d497f1b
commit d67badb12e
2 changed files with 18 additions and 13 deletions

View File

@ -273,13 +273,18 @@ void fill_stripe(DRAMAddr d_addr, uint8_t val, ADDRMapper * mapper)
}
void fill_row(HammerSuite * suite, DRAMAddr * d_addr, HammerData data_patt)
void fill_row(HammerSuite *suite, DRAMAddr *d_addr, HammerData data_patt, int reverse)
{
if (p->vpat != (void *)NULL && p->tpat != (void *)NULL) {
fill_stripe(*d_addr, (uint8_t) * p->tpat, suite->mapper);
uint8_t pat = reverse ? *p->vpat : *p->tpat;
fill_stripe(*d_addr, pat, suite->mapper);
return;
}
if (reverse) {
data_patt = (HammerData)((int)data_patt ^(int)REVERSE);
}
switch (data_patt) {
case RANDOM:
// rows are already filled for random data patt
@ -587,15 +592,14 @@ int free_triple_sided_test(HammerSuite * suite)
h_patt.d_lst[2].bank = bk;
// fill all the aggressor rows
for (int idx = 0; idx < 3; idx++) {
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg);
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg, 0);
}
uint64_t time = hammer_it(&h_patt, mem);
fprintf(stderr, "%ld ", time);
scan_rows(suite, &h_patt, 0);
for (int idx = 0; idx < 3; idx++) {
fill_row(suite, &h_patt.d_lst[idx], (HammerData) ((int)cfg->
d_cfg ^ (int) REVERSE));
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg, 1);
}
}
fprintf(stderr, "\n");
@ -646,7 +650,7 @@ int assisted_double_sided_test(HammerSuite * suite)
h_patt.d_lst[2].bank = bk;
// fill all the aggressor rows
for (int idx = 0; idx < 3; idx++) {
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg);
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg, 0);
// fprintf(stderr, "d_addr: %s\n", dram_2_str(&h_patt.d_lst[idx]));
}
// fprintf(stderr, "d_addr: %s\n", dram_2_str(&h_patt.d_lst[idx]));
@ -655,7 +659,7 @@ int assisted_double_sided_test(HammerSuite * suite)
scan_rows(suite, &h_patt, 0);
for (int idx = 0; idx<3; idx++) {
fill_row(suite, &h_patt.d_lst[idx], (HammerData) ((int)cfg->d_cfg ^ (int)REVERSE));
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg, 1);
}
}
fprintf(stderr, "\n");
@ -707,7 +711,7 @@ int n_sided_test(HammerSuite * suite)
#endif
// fill all the aggressor rows
for (int idx = 0; idx < cfg->aggr_n; idx++) {
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg);
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg, 0);
}
uint64_t time = hammer_it(&h_patt, mem);
@ -715,8 +719,7 @@ int n_sided_test(HammerSuite * suite)
scan_rows(suite, &h_patt, 0);
for (int idx = 0; idx<h_patt.len; idx++) {
fill_row(suite, &h_patt.d_lst[idx], (HammerData)
((int)cfg->d_cfg ^ (int)REVERSE));
fill_row(suite, &h_patt.d_lst[idx], cfg->d_cfg, 1);
#ifdef FLIPTABLE
print_end_attack();
#endif
@ -767,15 +770,14 @@ void fuzz(HammerSuite *suite, int d, int v)
print_start_attack(&h_patt);
#endif
for (int idx = 0; idx < h_patt.len; idx++)
fill_row(suite, &h_patt.d_lst[idx], suite->cfg->d_cfg);
fill_row(suite, &h_patt.d_lst[idx], suite->cfg->d_cfg, 0);
uint64_t time = hammer_it(&h_patt, suite->mem);
fprintf(stderr, "%lu ",time);
scan_rows(suite, &h_patt, 0);
for (int idx = 0; idx<h_patt.len; idx++) {
fill_row(suite, &h_patt.d_lst[idx], (HammerData)
((int)suite->cfg->d_cfg ^ (int)REVERSE));
fill_row(suite, &h_patt.d_lst[idx], suite->cfg->d_cfg, 1);
}
#ifdef FLIPTABLE

View File

@ -25,6 +25,9 @@
ProfileParams *p;
// DRAMLayout g_mem_layout = {{{0x4080,0x88000,0x110000,0x220000,0x440000,0x4b300}, 6}, 0xffff80000, ((1<<13)-1)};
// DRAMLayout g_mem_layout = { {{0x2040, 0x44000, 0x88000, 0x110000, 0x220000}, 5}, 0xffffc0000, ((1 << 13) - 1) };
// DRAMLayout g_mem_layout = {{{0x2040,0x24000,0x48000,0x90000},4}, 0xffffe0000, ((1<<13)-1)};
DRAMLayout g_mem_layout = {{{0x4080,0x48000,0x90000,0x120000,0x1b300}, 5}, 0xffffc0000, ROW_SIZE-1};
void read_config(SessionConfig * cfg, char *f_name)