Skip to contentSkip to conversation

reduce large stack usage

PATCH In review Randy.Dunlap 3 participants 3 messages Mar 1, 2003 NTFS filesystem

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 reduce large stack usage

Hi,

This patch to 2.5.63 reduces stack usage in generate_default_upcase() from 0x3d4 bytes to just noise (on x86).

The arrays are static so they are still private (hidden), but now they aren't allocated on the stack and copied there for temp use.

Please apply.

Thanks,
~Randy

patch_name: ntfs_stack_2563.patch
patch_version: 2003-02-28.22:42:57
author: Randy.Dunlap <[email protected]>
description: ntfs: reduce function local stack usage from 0x3d4 bytes to just noise;
product: Linux
product_versions: linux-2563
changelog: _
URL: _
requires: _
conflicts: _
maintainer: Anton Altaparmakov <[email protected]>
diffstat: =

 fs/ntfs/upcase.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)
fs/ntfs/upcase.c renamed from fs/ntfs/upcase.c%NTSTK +5 -5
diff -Naur ./fs/ntfs/upcase.c%NTSTK ./fs/ntfs/upcase.c
@@ -26,9 +26,7 @@
 
 #include "ntfs.h"
 
-uchar_t *generate_default_upcase(void)
-{
-	const int uc_run_table[][3] = { /* Start, End, Add */
+static const int uc_run_table[][3] = { /* Start, End, Add */
 	{0x0061, 0x007B,  -32}, {0x0451, 0x045D, -80}, {0x1F70, 0x1F72,  74},
 	{0x00E0, 0x00F7,  -32}, {0x045E, 0x0460, -80}, {0x1F72, 0x1F76,  86},
 	{0x00F8, 0x00FF,  -32}, {0x0561, 0x0587, -48}, {0x1F76, 0x1F78, 100},
@@ -45,7 +43,7 @@
 	{0}
 	};
 
-	const int uc_dup_table[][2] = { /* Start, End */
+static const int uc_dup_table[][2] = { /* Start, End */
 	{0x0100, 0x012F}, {0x01A0, 0x01A6}, {0x03E2, 0x03EF}, {0x04CB, 0x04CC},
 	{0x0132, 0x0137}, {0x01B3, 0x01B7}, {0x0460, 0x0481}, {0x04D0, 0x04EB},
 	{0x0139, 0x0149}, {0x01CD, 0x01DD}, {0x0490, 0x04BF}, {0x04EE, 0x04F5},
@@ -55,7 +53,7 @@
 	{0}
 	};
 
-	const int uc_word_table[][2] = { /* Offset, Value */
+static const int uc_word_table[][2] = { /* Offset, Value */
 	{0x00FF, 0x0178}, {0x01AD, 0x01AC}, {0x01F3, 0x01F1}, {0x0269, 0x0196},
 	{0x0183, 0x0182}, {0x01B0, 0x01AF}, {0x0253, 0x0181}, {0x026F, 0x019C},
 	{0x0185, 0x0184}, {0x01B9, 0x01B8}, {0x0254, 0x0186}, {0x0272, 0x019D},
@@ -67,6 +65,8 @@
 	{0}
 	};
 
+uchar_t *generate_default_upcase(void)
+{
 	int i, r;
 	uchar_t *uc;
 
#1 lore raw

Hi Randy,

Quoted 6 lines · Randy.Dunlap

This patch to 2.5.63 reduces stack usage in generate_default_upcase() from 0x3d4 bytes to just noise (on x86).

The arrays are static so they are still private (hidden), but now they aren't allocated on the stack and copied there for temp use.

BTW, you can declare "local" variables inside a function as static, which makes them "global", but locally scoped. The code should be basically equivalent, but perhaps more elegant...

i.e.:

uchar_t *generate_default_upcase(void)
{
- const int uc_run_table[][3] = { /* Start, End, Add */
+static const int uc_run_table[][3] = { /* Start, End, Add */

 	{0x0061, 0x007B,  -32}, {0x0451, 0x045D, -80}, {0x1F70, 0x1F72,  74},
 	{0x00E0, 0x00F7,  -32}, {0x045E, 0x0460, -80}, {0x1F72, 0x1F76,  86},
 	{0x00F8, 0x00FF,  -32}, {0x0561, 0x0587, -48}, {0x1F76, 0x1F78, 100},

Cheers,
Andrew

#2 lore raw
Quoted 24 lines

Hi Randy,

Quoted 6 lines · Randy.Dunlap

This patch to 2.5.63 reduces stack usage in generate_default_upcase() from 0x3d4 bytes to just noise (on x86).

The arrays are static so they are still private (hidden), but now they aren't allocated on the stack and copied there for temp use.

BTW, you can declare "local" variables inside a function as static, which makes them "global", but locally scoped. The code should be basically equivalent, but perhaps more elegant...

i.e.:

uchar_t *generate_default_upcase(void)
{

fs/ntfs/upcase.c renamed from fs/ntfs/upcase.c%NTSTK +1 -1
-	const int uc_run_table[][3] = { /* Start, End, Add */
+static const int uc_run_table[][3] = { /* Start, End, Add */
 	{0x0061, 0x007B,  -32}, {0x0451, 0x045D, -80}, {0x1F70, 0x1F72,  74},

{0x00E0, 0x00F7, -32}, {0x045E, 0x0460, -80}, {0x1F72, 0x1F76, 86}, {0x00F8, 0x00FF, -32}, {0x0561, 0x0587, -48}, {0x1F76, 0x1F78, 100},

Quoted 2 lines

Cheers,
Andrew

Yes, of course. I'll remake the patch unless someone else does. (-ESLEEPY last night)

Thanks,
~Randy