fix /proc/.../vm_info
PATCH 1/1 fix /proc/.../vm_info
Hi,
in vm_info the information about the supported memory attributes is wrong. The patch is based on 2.4.18, but it should also work for 2.4.20 and 2.5.x. Please apply.
Christian
palinfo.c renamed from palinfo.c_orig +21 -9
@@ -113,14 +113,14 @@* bit 7 - 111 - NatPage */ static const char *mem_attrib[]={ -"Write Back (WB)" ,/* 000 */ -"Uncacheable (UC)" ,/* 001 */ -"Reserved" ,/* 010 */ -"Reserved" ,/* 011 */ -"Uncacheable (UC)" ,/* 100 */ -"Uncacheable Exported (UCE)" ,/* 101 */ -"Write Coalescing (WC)" ,/* 110 */ -"NaTPage" /* 111 */ +"Write Back (WB) ma=000" ,/* 000 */ +"Uncacheable (UC) ma=001" ,/* 001 */ +"Reserved ma=010" ,/* 010 */ +"Reserved ma=011" ,/* 011 */ +"Uncacheable (UC) ma=100" ,/* 100 */ +"Uncacheable Exported (UCE) ma=101" ,/* 101 */ +"Write Coalescing (WC) ma=110" ,/* 110 */ +"NaTPage ma=111" /* 111 */ };/*
@@ -339,7 +339,15 @@if (ia64_pal_mem_attrib (&attrib) !=0 )return 0 ; - p +=sprintf (p,"Supported memory attributes : %s\n" , mem_attrib[attrib&0x7 ]); + p +=sprintf (p,"Supported memory attributes : " ); + j =0 ;// first line +for (i=0 ; i <8 ; i++) { +if (attrib & (1 << i)) { +if (j) p +=sprintf (p," " ); + p +=sprintf (p,"%s\n" , mem_attrib[i]); + j =1 ; + } + }if ((status=ia64_pal_vm_page_size (&tr_pages, &vw_pages)) !=0 ) {printk ("ia64_pal_vm_page_size=%ld\n" , status);
@@ -971,3 +979,7 @@module_init (palinfo_init);module_exit (palinfo_exit); + + + +
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Christian Hildner
Christian> Hi, in vm_info the information about the supported memory Christian> attributes is wrong. The patch is based on 2.4.18, but it Christian> should also work for 2.4.20 and 2.5.x. Please apply.
I'd like to keep the output a bit more concise. How about the attached patch (untested)?
--david
=== arch/ia64/kernel/palinfo.c 1.7 vs edited ==--- 1.7/arch/ia64/kernel/palinfo.c Sun Dec 1 22:17:31 2002
+++ edited/arch/ia64/kernel/palinfo.c Thu Dec 12 11:54:24 2002
@@ -101,26 +101,15 @@
#define RSE_HINTS_COUNT (sizeof(rse_hints)/sizeof(const char *))
-/*
- * The current revision of the Volume 2 (July 2000) of
- * IA-64 Architecture Software Developer's Manual is wrong.
- * Table 4-10 has invalid information concerning the ma field:
- * Correct table is:
- * bit 0 - 001 - UC - * bit 4 - 100 - UC - * bit 5 - 101 - UCE - * bit 6 - 110 - WC - * bit 7 - 111 - NatPage
- */
static const char *mem_attrib[]={
- "Write Back (WB)", /* 000 */
- "Uncacheable (UC)", /* 001 */
- "Reserved", /* 010 */
- "Reserved", /* 011 */
- "Uncacheable (UC)", /* 100 */
- "Uncacheable Exported (UCE)", /* 101 */
- "Write Coalescing (WC)", /* 110 */
- "NaTPage" /* 111 */
+ "WB", /* 000 */
+ "UC", /* 001 */
+ "010", /* 010 */
+ "011", /* 011 */
+ "UC", /* 100 */
+ "UCE", /* 101 */
+ "WC", /* 110 */
+ "NaTPage" /* 111 */
};
/*
@@ -315,6 +304,7 @@
pal_vm_info_2_u_t vm_info_2;
pal_tc_info_u_t tc_info;
ia64_ptce_info_t ptce;
+ const char *sep;
int i, j;
s64 status;
@@ -339,7 +329,14 @@
if (ia64_pal_mem_attrib(&attrib) != 0) return 0;
- p += sprintf(p, "Supported memory attributes : %s\n", mem_attrib[attrib&0x7]);
+ p += sprintf(p, "Supported memory attributes : ");
+ sep = "";
+ for (i = 0; i < 8; i++) {
+ if (attrib & (1 << i)) {
+ p += sprintf(p, "%s%s\n", sep, mem_attrib[i]);
+ sep = ", ";
+ }
+ }
if ((status=ia64_pal_vm_page_size(&tr_pages, &vw_pages)) !=0) {
printk("ia64_pal_vm_page_size=%ld\n", status);
Quoted 8 lines · David Mosberger
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Christian Hildner
Christian> Hi, in
vm_infothe information about the supported memory Christian> attributes is wrong. The patch is based on 2.4.18, but it Christian> should also work for 2.4.20 and 2.5.x. Please apply.I'd like to keep the output a bit more concise. How about the attached patch (untested)?
I agree. But I would like a distinction between both UCs like "UC (001)" and "UC (100)".
Christian
Quoted 65 lines
--david===
arch/ia64/kernel/palinfo.c1.7 vs edited ==> ---1.7/arch/ia64/kernel/palinfo.cSun Dec 1 22:17:31 2002
+++edited/arch/ia64/kernel/palinfo.cThu Dec 12 11:54:24 2002palinfo.c renamed from palinfo.c_orig +17
-20@@ -101,26 +101,15 @@#define RSE_HINTS_COUNT (sizeof(rse_hints)/sizeof(const char *)) -/* -* The current revision of the Volume 2 (July 2000) of -* IA-64 Architecture Software Developer's Manual is wrong. -* Table 4-10 has invalid information concerning the ma field: -* Correct table is: -* bit 0 - 001 - UC -* bit 4 - 100 - UC -* bit 5 - 101 - UCE -* bit 6 - 110 - WC -* bit 7 - 111 - NatPage -*/ static const char *mem_attrib[]={ -"Write Back (WB)" ,/* 000 */ -"Uncacheable (UC)" ,/* 001 */ -"Reserved" ,/* 010 */ -"Reserved" ,/* 011 */ -"Uncacheable (UC)" ,/* 100 */ -"Uncacheable Exported (UCE)" ,/* 101 */ -"Write Coalescing (WC)" ,/* 110 */ -"NaTPage" /* 111 */ +"WB" ,/* 000 */ +"UC" ,/* 001 */ +"010" ,/* 010 */ +"011" ,/* 011 */ +"UC" ,/* 100 */ +"UCE" ,/* 101 */ +"WC" ,/* 110 */ +"NaTPage" /* 111 */ };/* @@ -315,6 +304,7 @@pal_vm_info_2_u_t vm_info_2;pal_tc_info_u_t tc_info;ia64_ptce_info_t ptce; +const char *sep;int i, j;s64 status;@@ -339,7 +329,14 @@if (ia64_pal_mem_attrib (&attrib) !=0 )return 0 ; - p +=sprintf (p,"Supported memory attributes : %s\n" , mem_attrib[attrib&0x7 ]); + p +=sprintf (p,"Supported memory attributes : " ); + sep ="" ; +for (i =0 ; i <8 ; i++) { +if (attrib & (1 << i)) { + p +=sprintf (p,"%s%s\n" , sep, mem_attrib[i]); + sep =", " ; + } + }if ((status=ia64_pal_vm_page_size (&tr_pages, &vw_pages)) !=0 ) {printk ("ia64_pal_vm_page_size=%ld\n" , status);
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Christian Hildner
Christian> I agree. But I would like a distinction between both UCs Christian> like "UC (001)" and "UC (100)".
Ah, yes indeed. I changed it to the strings you suggested.
Thanks for catching this.
--david
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Christian Hildner
Christian> I agree. But I would like a distinction between both UCs Christian> like "UC (001)" and "UC (100)".
Actually, it turns out the double UC entry was just plain wrong. I wondered about that, but got distracted before I got to double-check it. In reality, 001 is reserved for Software Use. I changed the table to read:
"WB", /* 000 */ "SW", /* 001 */ "010", /* 010 */ "011", /* 011 */ "UC", /* 100 */ "UCE", /* 101 */ "WC", /* 110 */ "NaTPage" /* 111 */
Thanks to Jim Hull for catching this.
--david