Browse Source

Bugfix: renumber_cgpu: Rebuild repr strings to match new information

Luke Dashjr 11 years ago
parent
commit
cb226af68d
2 changed files with 36 additions and 19 deletions
  1. 1 19
      deviceapi.c
  2. 35 0
      miner.c

+ 1 - 19
deviceapi.c

@@ -754,18 +754,13 @@ bool _add_cgpu(struct cgpu_info *cgpu)
 {
 {
 	int lpcount;
 	int lpcount;
 	
 	
-	renumber_cgpu(cgpu);
 	if (!cgpu->procs)
 	if (!cgpu->procs)
 		cgpu->procs = 1;
 		cgpu->procs = 1;
 	lpcount = cgpu->procs;
 	lpcount = cgpu->procs;
 	cgpu->device = cgpu;
 	cgpu->device = cgpu;
 	
 	
 	cgpu->dev_repr = malloc(6);
 	cgpu->dev_repr = malloc(6);
-	sprintf(cgpu->dev_repr, "%s%2u", cgpu->drv->name, cgpu->device_id % 100);
 	cgpu->dev_repr_ns = malloc(6);
 	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
 #ifdef NEED_BFG_LOWL_VCOM
 	maybe_strdup_if_null(&cgpu->dev_manufacturer, detectone_meta_info.manufacturer);
 	maybe_strdup_if_null(&cgpu->dev_manufacturer, detectone_meta_info.manufacturer);
@@ -778,17 +773,8 @@ bool _add_cgpu(struct cgpu_info *cgpu)
 	
 	
 	if (lpcount > 1)
 	if (lpcount > 1)
 	{
 	{
-		int ns;
 		int tpp = cgpu->threads / lpcount;
 		int tpp = cgpu->threads / lpcount;
 		struct cgpu_info **nlp_p, *slave;
 		struct cgpu_info **nlp_p, *slave;
-		int lpdigits = 1;
-		for (int i = lpcount; i > 26 && lpdigits < 3; i /= 26)
-			++lpdigits;
-		
-		memset(&cgpu->proc_repr[5], 'a', lpdigits);
-		cgpu->proc_repr[5 + lpdigits] = '\0';
-		ns = strlen(cgpu->proc_repr_ns);
-		strcpy(&cgpu->proc_repr_ns[ns], &cgpu->proc_repr[5]);
 		
 		
 		nlp_p = &cgpu->next_proc;
 		nlp_p = &cgpu->next_proc;
 		for (int i = 1; i < lpcount; ++i)
 		for (int i = 1; i < lpcount; ++i)
@@ -796,11 +782,6 @@ bool _add_cgpu(struct cgpu_info *cgpu)
 			slave = malloc(sizeof(*slave));
 			slave = malloc(sizeof(*slave));
 			*slave = *cgpu;
 			*slave = *cgpu;
 			slave->proc_id = i;
 			slave->proc_id = i;
-			for (int x = i, y = lpdigits; --y, x; x /= 26)
-			{
-				slave->proc_repr_ns[ns + y] =
-				slave->proc_repr[5 + y] += (x % 26);
-			}
 			slave->threads = tpp;
 			slave->threads = tpp;
 			devices_new[total_devices_new++] = slave;
 			devices_new[total_devices_new++] = slave;
 			*nlp_p = slave;
 			*nlp_p = slave;
@@ -811,6 +792,7 @@ bool _add_cgpu(struct cgpu_info *cgpu)
 		cgpu->threads -= (tpp * (lpcount - 1));
 		cgpu->threads -= (tpp * (lpcount - 1));
 	}
 	}
 
 
+	renumber_cgpu(cgpu);
 	cgpu->last_device_valid_work = time(NULL);
 	cgpu->last_device_valid_work = time(NULL);
 	
 	
 	return true;
 	return true;

+ 35 - 0
miner.c

@@ -10525,6 +10525,41 @@ void renumber_cgpu(struct cgpu_info *cgpu)
 		cgpu->device_id = d->lastid = 0;
 		cgpu->device_id = d->lastid = 0;
 		HASH_ADD_STR(devids, name, d);
 		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;
+		int lpdigits = 1;
+		for (int i = lpcount; i > 26 && lpdigits < 3; i /= 26)
+			++lpdigits;
+		
+		memset(&cgpu->proc_repr[5], 'a', lpdigits);
+		cgpu->proc_repr[5 + lpdigits] = '\0';
+		ns = strlen(cgpu->proc_repr_ns);
+		strcpy(&cgpu->proc_repr_ns[ns], &cgpu->proc_repr[5]);
+		
+		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);
+			for (int x = i, y = lpdigits; --y, x; x /= 26)
+			{
+				slave->proc_repr_ns[ns + y] =
+				slave->proc_repr[5 + y] += (x % 26);
+			}
+		}
+	}
 }
 }
 
 
 static bool my_blkmaker_sha256_callback(void *digest, const void *buffer, size_t length)
 static bool my_blkmaker_sha256_callback(void *digest, const void *buffer, size_t length)