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; }
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); } }
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 }
// 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); }
// 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); }
// 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); }
// 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); }