[PATCH v7 056/120] agp/efficeon: Use parsed CPUID(0x1)

"Ahmed S. Darwish" <[email protected]> Thu, 28 May 2026 17:38:18 +0200
Newsgroups dev.linux.lists.x86-cpuid,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Use parsed CPUID(0x1) instead of manual bitwise operations and a direct
CPUID query.

Signed-off-by: Ahmed S. Darwish <[email protected]>
---
 drivers/char/agp/efficeon-agp.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/char/agp/efficeon-agp.c b/drivers/char/agp/efficeon-agp.c
index 4d0b7d7c0aad..41c7dac096ab 100644
--- a/drivers/char/agp/efficeon-agp.c
+++ b/drivers/char/agp/efficeon-agp.c
@@ -192,21 +192,24 @@ static int efficeon_free_gatt_table(struct agp_bridge_data *bridge)
 
 static int efficeon_create_gatt_table(struct agp_bridge_data *bridge)
 {
-	int index;
-	const int pati    = EFFICEON_PATI;
+	const struct leaf_0x1_0 *l = cpuid_leaf(&boot_cpu_data, 0x1);
+	int num_entries, l1_pages, clflush_chunk;
 	const int present = EFFICEON_PRESENT;
-	const int clflush_chunk = ((cpuid_ebx(1) >> 8) & 0xff) << 3;
-	int num_entries, l1_pages;
+	const int pati    = EFFICEON_PATI;
 
 	num_entries = A_SIZE_LVL2(agp_bridge->current_size)->num_entries;
 
 	printk(KERN_DEBUG PFX "efficeon_create_gatt_table(%d)\n", num_entries);
 
+	if (!l)
+		return -EIO;
+
 	/* There are 2^10 PTE pages per PDE page */
 	BUG_ON(num_entries & 0x3ff);
 	l1_pages = num_entries >> 10;
 
-	for (index = 0 ; index < l1_pages ; index++) {
+	clflush_chunk = l->clflush_size * 8;
+	for (int index = 0; index < l1_pages; index++) {
 		int offset;
 		unsigned long page;
 		unsigned long value;
@@ -236,13 +239,19 @@ static int efficeon_create_gatt_table(struct agp_bridge_data *bridge)
 
 static int efficeon_insert_memory(struct agp_memory * mem, off_t pg_start, int type)
 {
-	int i, count = mem->page_count, num_entries;
+	const struct leaf_0x1_0 *l1 = cpuid_leaf(&boot_cpu_data, 0x1);
+	int count = mem->page_count, num_entries, clflush_chunk;
 	unsigned int *page, *last_page;
-	const int clflush_chunk = ((cpuid_ebx(1) >> 8) & 0xff) << 3;
-	const unsigned long clflush_mask = ~(clflush_chunk-1);
+	unsigned long clflush_mask;
 
 	printk(KERN_DEBUG PFX "efficeon_insert_memory(%lx, %d)\n", pg_start, count);
 
+	if (!l1)
+		return -EIO;
+
+	clflush_chunk = l1->clflush_size * 8;
+	clflush_mask = ~(clflush_chunk - 1);
+
 	num_entries = A_SIZE_LVL2(agp_bridge->current_size)->num_entries;
 	if ((pg_start + mem->page_count) > num_entries)
 		return -EINVAL;
@@ -255,7 +264,7 @@ static int efficeon_insert_memory(struct agp_memory * mem, off_t pg_start, int t
 	}
 
 	last_page = NULL;
-	for (i = 0; i < count; i++) {
+	for (int i = 0; i < count; i++) {
 		int index = pg_start + i;
 		unsigned long insert = efficeon_mask_memory(mem->pages[i]);
 
-- 
2.54.0