Пример #1
0
void invoke_consensus_req(node *cur, 
    call type, data, data_size) {
  vs;

  // Local preparation.
  spin_lock();
  vs = idx++;
  spin_unlock();
  call_entry *entry = build_entry(cur,vs,data,data_size);
  mem_write(cur_log_offset, entry); 
  store_entry(entry);

  // RDMA write.
  for (i = 0; i < group_size; i++) {
    RDMA_write(i, remote_log_offset[i], entry);
  }
  
  // Wait for quorum.
recheck:
  for (i = 0; i < ; i++) {
    bitmap += ack[i].reply;
  }
  if (reach_quorum()) {
    process_req();
  } else
    goto recheck;
}
Пример #2
0
PRIVATE void props(Component *c, Generator *g) {
  Data *data = g->data;
  GtkWidget *min, *max, *step, *page;
  GtkWidget *vbox;

  vbox = gtk_vbox_new(FALSE, 2);

  min = build_entry(vbox, "Range Minimum:", data->min);
  max = build_entry(vbox, "Range Maximum:", data->max);
  step = build_entry(vbox, "Step Increment:", data->step);
  page = build_entry(vbox, "Page Increment:", data->page);

  if (popup_dialog(g->name, MSGBOX_OK | MSGBOX_CANCEL, 0, MSGBOX_OK, vbox, NULL, 0) == MSGBOX_OK) {
    data->min = atof(gtk_entry_get_text(GTK_ENTRY(min)));
    data->max = atof(gtk_entry_get_text(GTK_ENTRY(max)));
    data->step = atof(gtk_entry_get_text(GTK_ENTRY(step)));
    data->page = atof(gtk_entry_get_text(GTK_ENTRY(page)));

    g_list_foreach(g->controls, (GFunc) ctrl_setrange, NULL);
    g_list_foreach(g->controls, (GFunc) control_update_range, NULL);
  }
}
Пример #3
0
void create_link_table(struct BAS_PFENTRY *list)
{
  int tsize,inst_size,f_cnt,p_cnt;
  struct BAS_PFENTRY *p;
  w32 bext_table;
  w16 *etab;
  w16 *instr;
  int fnccnt,pccnt;
  
  pccnt=fnccnt=f_cnt=p_cnt=0;
  tsize=2+2+4+2; /*count,count, end markers */
  inst_size=0;
  /* somewhat generously counting */
  p=list;
  while(p)
    {        /*    len +.b+allign+addr */
      tsize+= (((strlen(p->name)+1)>>1)<<1)+2;
      inst_size+=2;
      switch(p->type)
	{
	case X_FUN:
	  f_cnt++;
	  fnccnt+=strlen(p->name);
	  break;
	case X_PROC:
	  p_cnt++;
	  pccnt+=strlen(p->name);
	  break;
	default:
	  fprintf(stderr,"wrong basic extension type %d\n",p->type);
	  return;
	}
      p=p->link;
    }
  
  reg[1]=tsize+inst_size+12+100; /* some pad */
  reg[2]=0;
    
  /*printf("totsize %d, tsize %d, inst_size %d,\n reserve %d\n",reg[1],tsize,inst_size,reg[1]);*/
#if 1
  QLtrap(1,0x18,2000000);
  if (reg[0]) 
    {
      fprintf(stderr,"allocation failed, QDOS error %d\n",reg[0]);
      return;
    }
#endif
#if 1
  bext_table=aReg[0];
  etab=(w16 *)((char*)theROM+aReg[0]);
  instr=(w16 *)((char*)etab+(((tsize+6+10)>>1)<<1));
  
  WW(etab++,mangle_count(pccnt,p_cnt));
  p=ext_list;
  while(p_cnt--)
    {
      fnext(X_PROC,&p);
      build_entry(&etab,p,&instr);
      p=p->link;
    }
  WW(etab++,0);  /* end proc marker */
  
  WW(etab++,mangle_count(fnccnt,f_cnt));
  p=ext_list;
  while(f_cnt--)
    {
      fnext(X_FUN,&p);
      build_entry(&etab,p,&instr);
      p=p->link;
    }
  WW(etab++,0);  /* end fun marker */
  WW(etab++,0);  /* another marker to be sure */
  /*printf("Basic Extensions table at %d\n",bext_table);*/
#endif 
#if 1
  aReg[1]=bext_table;
   
  QLvector(0x110,2000000);   /* and BP.INIT */ 
 
#endif
}
Пример #4
0
// Return a data segment specified by the base, limit and privilege level passed in arguments.
static gdt_entry_t data_segment(uint32_t base, uint32_t limit, uint8_t dpl) {
    return build_entry(base, limit, TYPE_DATA_READWRITE, S_CODE_OR_DATA, DB_SEG, 1, dpl);
}
Пример #5
0
// Return a code segment specified by the base, limit and privilege level passed in arguments.
static gdt_entry_t code_segment(uint32_t base, uint32_t limit, uint8_t dpl) {
    return build_entry(base, limit, TYPE_CODE_EXECREAD, S_CODE_OR_DATA, DB_SEG, 1, dpl);
}
Пример #6
0
// Can only be set in the GDT!
gdt_entry_t gdt_make_ldt(uint32_t base, uint32_t limit, uint8_t dpl) {
	return build_entry(base, limit, TYPE_LDT, S_SYSTEM, DB_SYS, 0, dpl);
}
Пример #7
0
// Return a TSS entry  specified by the TSS structure and privilege level passed in arguments.
// NOTE: a TSS entry can only reside in the GDT!
gdt_entry_t gdt_make_tss(tss_t *tss, uint8_t dpl) {
	return build_entry((uint32_t)tss, sizeof(tss_t)-1, TYPE_TSS, S_SYSTEM, DB_SYS, 0, dpl);
}