void l2_cache_fill(int cpu_num, unsigned long long int addr, int set, int way, int prefetch, unsigned long long int evicted_addr) { // uncomment this line to see the information available to you when there is a cache fill event //printf("0x%llx %d %d %d 0x%llx\n", addr, set, way, prefetch, evicted_addr); cache_insert(addr, prefetch); if (prefetch==1) { prefetch_tot_num++; // Insert Evicted address into pollution filter // only if it is not prefetch int found = cache_search(evicted_addr); if (found == -1) { if (evicted_addr != 0) { printf("ERROR: evicted address not in the cache - %llx \n", evicted_addr); exit(1); } } else if (cache[found].pf != 1) poll_insert(evicted_addr); poll_remove(addr); } cache_remove(evicted_addr); }
int uart_incoming_data(short revents) { int i; unsigned char buf[FIFO_SIZE]; /* Check OOB first */ int r; r = recv(clientsockfd,buf,sizeof(buf),MSG_OOB); if (r>0) { fprintf(stderr,"OOB data %d\n",r); handle_escape(buf[0]); return 0; } r = recv(clientsockfd,buf,sizeof(buf),0); fprintf(stderr,"UART read %d\n",r); if (r>0) { i=0; pthread_mutex_lock(&fifo_lock); while (r--) { /* if (uartescape) { uartescape=0; if (buf[i]!=0xff) { fprintf(stderr,"Escape sequence: 0x%02x\n",buf[i]); handle_escape(buf[i]); i++; continue; } } else { if (buf[i]==0xff) { uartescape=1; i++; continue; } } */ fifodata[highmark]=buf[i]; i++; highmark++; if (highmark>=FIFO_SIZE) highmark=0; if (highmark==lowmark) { printf("UART: FIFO overrun\n"); pthread_mutex_unlock(&fifo_lock); abort(); } } } else { poll_remove(clientsockfd); printf("Disconnected\n"); clientsockfd=-1; } pthread_mutex_unlock(&fifo_lock); return 0; }
void server_process(struct pollfd *fds, int num) { int i = 0; for(i = 0; i < server_max_pollfd; ++i) { if(fds[i].revents == 0) { continue; } if(fds[i].fd == sock_fd) { if(fds[i].revents & POLLIN) { int data_fd; struct sockaddr_in clnt; int clnt_len = sizeof(clnt); memset(&clnt, 0, sizeof(clnt)); if((data_fd = accept(sock_fd, (struct sockaddr*)&clnt, &clnt_len)) < 0) { perror("accept"); } char clnt_addr[16] = ""; inet_ntop(AF_INET, &clnt.sin_addr, clnt_addr, sizeof(clnt_addr)); printf("[%s] connected\n", clnt_addr); poll_add(data_fd); } if(fds[i].revents & POLLERR) { printf("error occured\n"); } if(fds[i].revents & POLLNVAL) { printf("invalid request\n"); } } else { if(fds[i].revents & POLLIN) { char clnt_addr[16] = ""; struct sockaddr_in clnt; int clnt_len = sizeof(clnt); if(getpeername(fds[i].fd, (struct sockaddr*)&clnt, &clnt_len) < 0) { perror("getpeername"); } inet_ntop(AF_INET, &clnt.sin_addr, clnt_addr, sizeof(clnt_addr)); int recv_data = 0; int recv_cnt = 0; recv_cnt = recv(fds[i].fd, &recv_data, sizeof(recv_data), 0); if(recv_cnt > 0) { printf("receive [%d] from [%s]\n", recv_data, clnt_addr); } else if(recv_cnt == 0) { printf("[%s] disconnected\n\n", clnt_addr); close(fds[i].fd); poll_remove(i); } else if(recv_cnt == -1) { perror("recv"); } } if(fds[i].revents & POLLOUT) { printf("ready to write data\n"); } if(fds[i].revents & POLLERR) { printf("error occured\n"); } if(fds[i].revents & POLLNVAL) { printf("invalid request\n"); } if(fds[i].revents & POLLHUP) { printf("pollhup\n"); } if(fds[i].revents & POLLRDHUP) { printf("pollrdhup\n"); } } } }