Skip to content
Snippets Groups Projects
Commit 4ee9f621 authored by Daniela Genius's avatar Daniela Genius
Browse files

semantique syncchannel corrigee

parent 4f45a8c7
Branches
No related tags found
No related merge requests found
......@@ -66,13 +66,32 @@ void executeSendSyncTransaction(request *req) {
debugInt("syncchannel paramsize \n", sizeof(req->params));
debugInt("syncchannel params \n", req->params[0]);
//sync_write(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params)||1);//DG 14.03.+1
/* while(1){
if(req->nbOfParams==0){
debugMsg("pas de params");
sync_write(req->syncChannel->mwmr_fifo, &(req->params), 4);//DG 10.5. 4 not 1
if(sync_write(req->syncChannel->mwmr_fifo, &(req->params), 4)!=4)continue;
break;
}
else{
if(sync_write(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params))!=req->nbOfParams*sizeof(req->params))continue;
break;
}*/
selectedReq->syncChannel->ok=1;
if(req->nbOfParams==0){
debugMsg("no params");
if(sync_write(req->syncChannel->mwmr_fifo, &(req->params), 4)!=4){ debugMsg("****syncchannel write echec");//req->executable==0;
selectedReq->syncChannel->ok=0;selectedReq->syncChannel->ok2=1;
}else{ debugMsg("****syncchannel write success");//req->executable==1;
selectedReq->syncChannel->ok=0;selectedReq->syncChannel->ok2=1;
}
}
else{
if(sync_write(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params))!=req->nbOfParams*sizeof(req->params)){ debugMsg("****syncchannel write echec");//req->executable==0;
selectedReq->syncChannel->ok=0;selectedReq->syncChannel->ok2=1;
}else{debugMsg("****syncchannel write success");//req->executable==1;
selectedReq->syncChannel->ok=0;selectedReq->syncChannel->ok2=1;
}
}
else
sync_write(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params));//DG 30.03.
traceSynchroRequest(req, selectedReq);
}
......@@ -117,14 +136,33 @@ void executeReceiveSyncTransaction(request *req) {
debugInt("syncchannel burst \n", req->nbOfParams*sizeof(req->params));
debugInt("syncchannel params \n", req->params[0]);
debugInt("syncchannel paramsize \n", sizeof(req->params));
/* while(1){
if(req->nbOfParams==0){
debugMsg("pas de params");
sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), 4 ); //DG 10.05. 4 not 1
if(sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), 4 )!=4) continue
; //DG 10.05. there is at least one item transferred even if no parameters break;
}
else
sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), selectedReq->nbOfParams*sizeof(selectedReq->params));
//DG 30.03.
if(sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), selectedReq->nbOfParams*sizeof(selectedReq->params))!= selectedReq->nbOfParams*sizeof(selectedReq->params))
continue;
break;
}*/
//DG 11.05.
selectedReq->syncChannel->ok=1;
if(req->nbOfParams==0){
debugMsg("pas de params");
if(sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), 4 )!=4){ debugMsg("****syncchannel read echec");//req->executable==0;
selectedReq->syncChannel->ok=1;selectedReq->syncChannel->ok2==0;
} else { debugMsg("****syncchannel read success");//req->executable==1;
selectedReq->syncChannel->ok==1;selectedReq->syncChannel->ok2==0;
}}
else{
if(sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), selectedReq->nbOfParams*sizeof(selectedReq->params))!= selectedReq->nbOfParams*sizeof(selectedReq->params)){debugMsg("****syncchannel read echec");//req->executable==0;
selectedReq->syncChannel->ok=1;selectedReq->syncChannel->ok2==0;
}else{
debugMsg("****syncchannel read success");//req->executable==1;
selectedReq->syncChannel->ok=1;selectedReq->syncChannel->ok2==0;
}}
debugMsg("after syncchannel read");
debugInt("req->params \n", req->params);
......@@ -294,9 +332,13 @@ int executable(setOfRequests *list, int nb) {
debugMsg("Send sync");
debugInt("req->syncChannel->inWaitQueue ",req->syncChannel->inWaitQueue);
debugInt("req->syncChannel address", &(req->syncChannel));
if (req->syncChannel->inWaitQueue != NULL) {// DG 8.2. non c'est correct: il faut un rendez-vous synchrone entre inqueue et outqueue
//if ((req->syncChannel->inWaitQueue != NULL)&&(req->syncChannel->ok==1)) {// DG 8.2. non c'est correct: il faut un rendez-vous synchrone entre inqueue et outqueue
//if (req->syncChannel->outWaitQueue != NULL) {//DG 8.2.??
if ((req->syncChannel->inWaitQueue != NULL)){
debugMsg("Send sync executable");
//req->syncChannel->ok==0;
req->syncChannel->ok2==0;
req->executable = 1;
cpt ++;
} else {
......@@ -310,10 +352,15 @@ int executable(setOfRequests *list, int nb) {
debugInt("req->syncChannel->outWaitQueue ",req->syncChannel->outWaitQueue);
debugInt("req->syncChannel address", &(req->syncChannel));
//if ((req->syncChannel->outWaitQueue != NULL)&&(req->syncChannel->inWaitQueue != NULL)) {
if (req->syncChannel->outWaitQueue != NULL) {// DG 8.2. non c'est correct: il faut un rendez-vous synchrone entre inqueue et outqueue
// if ((req->syncChannel->outWaitQueue != NULL)&&(req->syncChannel->ok==1)) {// DG 8.2. non c'est correct: il faut un rendez-vous synchrone entre inqueue et outqueue
//if (req->syncChannel->inWaitQueue != NULL) {//DG 8.2.??
//if ((req->syncChannel->ok2==1)&&(req->syncChannel->inWaitQueue != NULL)) {
//if (req->syncChannel->ok2==1){
if ((req->syncChannel->outWaitQueue != NULL)){
req->executable = 1;
debugMsg("Receive sync executable");
//req->syncChannel->ok2==0;
req->syncChannel->ok==0;
cpt ++;
}
else {
......@@ -603,9 +650,9 @@ request *executeListOfRequests(setOfRequests *list) {
debug2Msg(list->owner, "Request selected!");
my_clock_gettime(&list->completionTime);
debug2Msg(list->owner, "Request selected0!");
// debug2Msg(list->owner, "Request selected0!");
pthread_mutex_unlock(list->mutex);
debug2Msg(list->owner, "Request selected1!");
//debug2Msg(list->owner, "Request selected1!");
debug2Msg(list->owner, "Mutex unlocked");
return req;
}
......
......@@ -14,7 +14,7 @@ void mwmr_sync_flush(struct mwmr_s *fifo){
}
}
void sync_read( struct mwmr_s *fifo, void *_ptr, int lensw ){
int sync_read( struct mwmr_s *fifo, void *_ptr, int lensw ){
int i;
debugInt("debug fifo read\n",fifo);
debugInt("debug ptr \n",_ptr);
......@@ -25,16 +25,12 @@ void sync_read( struct mwmr_s *fifo, void *_ptr, int lensw ){
debugInt("debug fifo rptr address\n", &(fifo->status->rptr));
debugInt("debug fifo wptr address\n", &(fifo->status->rptr));
debugInt("debug fifo lock \n", fifo->status->lock);
/*i=mwmr_try_read(fifo,_ptr,lensw);
if(i>0)
mwmr_read(fifo,_ptr,(lensw-i)); */
mwmr_read(fifo,_ptr,lensw);
//mwmr_read(fifo,_ptr,1);
return;
i=mwmr_try_read(fifo,_ptr,lensw);
return i;
}
void sync_write( struct mwmr_s *fifo, void *_ptr, int lensw ){
int sync_write( struct mwmr_s *fifo, void *_ptr, int lensw ){
int i;
debugInt("debug fifo write\n",fifo);
debugInt("debug ptr \n",_ptr);
debugInt("debug lensw \n", lensw);
......@@ -44,9 +40,9 @@ void sync_write( struct mwmr_s *fifo, void *_ptr, int lensw ){
debugInt("debug fifo rptr address\n", &(fifo->status->rptr));
debugInt("debug fifo wptr address\n", &(fifo->status->rptr));
debugInt("debug fifo lock \n", fifo->status->lock);
mwmr_write(fifo,_ptr,lensw);
i=mwmr_try_write(fifo,_ptr,lensw);
//mwmr_write(fifo,_ptr,1);
return;
return i;
}
syncchannel *getNewSyncchannel(char *outname, char *inname, struct mwmr_s *fifo) {
......
......@@ -13,6 +13,8 @@ struct syncchannel {
struct request* outWaitQueue;
bool isBroadcast;
struct mwmr_s *mwmr_fifo;
int ok;
int ok2;
};
typedef struct syncchannel syncchannel;
......@@ -25,5 +27,9 @@ syncchannel *getNewSyncchannel(char *inname, char *outname, struct mwmr_s *fifo)
//request *makeNewReceiveSync(int hasDelay, long delay, int nbOfParams, int *params[]);
void destroySyncchannel(syncchannel *syncch);
int sync_read( struct mwmr_s *fifo, void *_ptr, int lensw );
int sync_write( struct mwmr_s *fifo, void *_ptr, int lensw );
void mwmr_sync_flush(struct mwmr_s *fifo);
#endif
......@@ -247,7 +247,7 @@ public class TasksAndMainGenerator {
if (nbParams>0)
mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ (nbParams*4)+";" + CR);
else mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ 1 +";" + CR);
else mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ 4 +";" + CR);
mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = 100;" + CR);
//mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = "+((nbParams*4)+4)+";" + CR);
......@@ -258,7 +258,7 @@ public class TasksAndMainGenerator {
mainFile.appendToMainCode("__" + getChannelName(ar, i) + ".inname =\"" + ar.getInSignal(i).getName() + "\";" + CR);
mainFile.appendToMainCode("__" +getChannelName(ar, i) + ".outname =\"" + ar.getOutSignal(i).getName() + "\";" + CR);
mainFile.appendToMainCode("__" + getChannelName(ar, i) + ".mwmr_fifo = &" + getChannelName(ar, i) + ";" + CR);
mainFile.appendToMainCode("__" + getChannelName(ar, i) + ".ok = 1;" + CR); mainFile.appendToMainCode("__" + getChannelName(ar, i) + ".ok2 = 0;" + CR);
/* init because mutekh initializer does not work for this */
mainFile.appendToMainCode(getChannelName(ar, i) + ".status =&"+ getChannelName(ar, i)+"_status;" + CR);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment