Browse Source

knc: Put knc_device on every processor device_data

Luke Dashjr 12 years ago
parent
commit
6acfa37728
1 changed files with 6 additions and 5 deletions
  1. 6 5
      driver-knc.c

+ 6 - 5
driver-knc.c

@@ -56,6 +56,7 @@ struct device_drv knc_drv;
 struct knc_device {
 struct knc_device {
 	int i2c;
 	int i2c;
 	struct spi_port *spi;
 	struct spi_port *spi;
+	struct cgpu_info *cgpu;
 	
 	
 	bool need_flush;
 	bool need_flush;
 	struct work *workqueue;
 	struct work *workqueue;
@@ -221,6 +222,8 @@ bool knc_init(struct thr_info * const thr)
 		return false;
 		return false;
 	}
 	}
 	
 	
+	knc = malloc(sizeof(*knc));
+	
 	for (proc = cgpu; proc; )
 	for (proc = cgpu; proc; )
 	{
 	{
 		if (proc->device != proc)
 		if (proc->device != proc)
@@ -249,10 +252,8 @@ bool knc_init(struct thr_info * const thr)
 					.asicno = i2cslave - 0x20,
 					.asicno = i2cslave - 0x20,
 				};
 				};
 				if (proc != cgpu)
 				if (proc != cgpu)
-				{
 					mythr->queue_full = true;
 					mythr->queue_full = true;
-					proc->device_data = NULL;
-				}
+				proc->device_data = knc;
 				if (buf[j] != 3)
 				if (buf[j] != 3)
 					proc->deven = DEV_DISABLED;
 					proc->deven = DEV_DISABLED;
 				
 				
@@ -264,11 +265,11 @@ bool knc_init(struct thr_info * const thr)
 nomorecores: ;
 nomorecores: ;
 	}
 	}
 	
 	
-	cgpu->device_data = knc = malloc(sizeof(*knc));
 	spi = malloc(sizeof(*spi));
 	spi = malloc(sizeof(*spi));
 	*knc = (struct knc_device){
 	*knc = (struct knc_device){
 		.i2c = i2c,
 		.i2c = i2c,
 		.spi = spi,
 		.spi = spi,
+		.cgpu = cgpu,
 		.workqueue_max = 1,
 		.workqueue_max = 1,
 	};
 	};
 	*spi = (struct spi_port){
 	*spi = (struct spi_port){
@@ -348,7 +349,7 @@ void knc_queue_flush(struct thr_info * const thr)
 	struct knc_device * const knc = cgpu->device_data;
 	struct knc_device * const knc = cgpu->device_data;
 	struct work *work, *tmp;
 	struct work *work, *tmp;
 	
 	
-	if (!knc)
+	if (knc->cgpu != cgpu)
 		return;
 		return;
 	
 	
 	DL_FOREACH_SAFE(knc->workqueue, work, tmp)
 	DL_FOREACH_SAFE(knc->workqueue, work, tmp)