Browse Source

Merge commit '13acd4c' into bfgminer-3.10.x

Luke Dashjr 12 years ago
parent
commit
7591fa5f4f
2 changed files with 42 additions and 25 deletions
  1. 1 25
      deviceapi.c
  2. 41 0
      miner.c

+ 1 - 25
deviceapi.c

@@ -753,18 +753,13 @@ bool _add_cgpu(struct cgpu_info *cgpu)
 {
 	int lpcount;
 	
-	renumber_cgpu(cgpu);
 	if (!cgpu->procs)
 		cgpu->procs = 1;
 	lpcount = cgpu->procs;
 	cgpu->device = cgpu;
 	
 	cgpu->dev_repr = malloc(6);
-	sprintf(cgpu->dev_repr, "%s%2u", cgpu->drv->name, cgpu->device_id % 100);
 	cgpu->dev_repr_ns = malloc(6);
-	sprintf(cgpu->dev_repr_ns, "%s%u", cgpu->drv->name, cgpu->device_id % 100);
-	strcpy(cgpu->proc_repr, cgpu->dev_repr);
-	sprintf(cgpu->proc_repr_ns, "%s%u", cgpu->drv->name, cgpu->device_id);
 	
 #ifdef NEED_BFG_LOWL_VCOM
 	maybe_strdup_if_null(&cgpu->dev_manufacturer, detectone_meta_info.manufacturer);
@@ -777,16 +772,8 @@ bool _add_cgpu(struct cgpu_info *cgpu)
 	
 	if (lpcount > 1)
 	{
-		int ns;
 		int tpp = cgpu->threads / lpcount;
 		struct cgpu_info **nlp_p, *slave;
-		const bool manylp = (lpcount > 26);
-		const char *as = (manylp ? "aa" : "a");
-		
-		// Note, strcpy instead of assigning a byte to get the \0 too
-		strcpy(&cgpu->proc_repr[5], as);
-		ns = strlen(cgpu->proc_repr_ns);
-		strcpy(&cgpu->proc_repr_ns[ns], as);
 		
 		nlp_p = &cgpu->next_proc;
 		for (int i = 1; i < lpcount; ++i)
@@ -794,18 +781,6 @@ bool _add_cgpu(struct cgpu_info *cgpu)
 			slave = malloc(sizeof(*slave));
 			*slave = *cgpu;
 			slave->proc_id = i;
-			if (manylp)
-			{
-				slave->proc_repr[5] += i / 26;
-				slave->proc_repr[6] += i % 26;
-				slave->proc_repr_ns[ns    ] += i / 26;
-				slave->proc_repr_ns[ns + 1] += i % 26;
-			}
-			else
-			{
-				slave->proc_repr[5] += i;
-				slave->proc_repr_ns[ns] += i;
-			}
 			slave->threads = tpp;
 			devices_new[total_devices_new++] = slave;
 			*nlp_p = slave;
@@ -816,6 +791,7 @@ bool _add_cgpu(struct cgpu_info *cgpu)
 		cgpu->threads -= (tpp * (lpcount - 1));
 	}
 
+	renumber_cgpu(cgpu);
 	cgpu->last_device_valid_work = time(NULL);
 	
 	return true;

+ 41 - 0
miner.c

@@ -10560,6 +10560,47 @@ void renumber_cgpu(struct cgpu_info *cgpu)
 		cgpu->device_id = d->lastid = 0;
 		HASH_ADD_STR(devids, name, d);
 	}
+	
+	// Build repr strings
+	sprintf(cgpu->dev_repr, "%s%2u", cgpu->drv->name, cgpu->device_id % 100);
+	sprintf(cgpu->dev_repr_ns, "%s%u", cgpu->drv->name, cgpu->device_id % 100);
+	strcpy(cgpu->proc_repr, cgpu->dev_repr);
+	sprintf(cgpu->proc_repr_ns, "%s%u", cgpu->drv->name, cgpu->device_id);
+	
+	const int lpcount = cgpu->procs;
+	if (lpcount > 1)
+	{
+		int ns;
+		struct cgpu_info *slave;
+		const bool manylp = (lpcount > 26);
+		const char *as = (manylp ? "aa" : "a");
+		
+		// Note, strcpy instead of assigning a byte to get the \0 too
+		strcpy(&cgpu->proc_repr[5], as);
+		ns = strlen(cgpu->proc_repr_ns);
+		strcpy(&cgpu->proc_repr_ns[ns], as);
+		
+		slave = cgpu;
+		for (int i = 1; i < lpcount; ++i)
+		{
+			slave = slave->next_proc;
+			strcpy(slave->dev_repr, cgpu->dev_repr);
+			strcpy(slave->proc_repr, cgpu->proc_repr);
+			strcpy(slave->proc_repr_ns, cgpu->proc_repr_ns);
+			if (manylp)
+			{
+				slave->proc_repr[5] += i / 26;
+				slave->proc_repr[6] += i % 26;
+				slave->proc_repr_ns[ns    ] += i / 26;
+				slave->proc_repr_ns[ns + 1] += i % 26;
+			}
+			else
+			{
+				slave->proc_repr[5] += i;
+				slave->proc_repr_ns[ns] += i;
+			}
+		}
+	}
 }
 
 static bool my_blkmaker_sha256_callback(void *digest, const void *buffer, size_t length)