Denys Vlasenko wrote:
Hi Hannes,
On Friday 25 April 2008 15:01, Hannes Reinecke wrote:
Add "dont_generate_debug_code" syntax handling to aicasm_gram.y
aic79xx.reg, aic7xxx.reg: add dont_generate_debug_code keyword
for registers which are never referenced by the driver.
aicasm.c, aicasm_symbol.[ch]: don't emit code for those regs;
also add "const" keyword to generated code in few places.
Signed-off-by: Denys Vlasenko <vda.linux@xxxxxxxxxxxxxx>
No.
Adding a symbol to each and every register definition
which has to be hand-crafted anyway is not the correct way.
I would prefer this: Add a 'count' variable to each symbol
which gets increased every time the symbol is referenced.
And then modify the register definition to include counts
for symbols which are referenced from the source code only
and not from the sequencer code.
To be honest, I don't understand how your patch achieves it.
I am not familiar enough with the way aicasm machinery works.
Ach, that's just straight lex/yacc stuff :-)
No, seriously, it's not that hard to understand.
Basically aicasm builds a list of all used symbols, then
builds a reference table on to of that list whenever a
symbol is referenced in the actual code, and then does
some cleanup etc. to be able to put out proper sequencer
code.
So the trick here is that we can add a 'count' field to
the underlying symbol table, which will be incremented
everytime this symbol is referenced by the sequencer code.
Nice and clean.
In theory.
This will give us an automatic usage count for the symbols
with only minimal hand-crafting.
I tested your patches atop my patches 1,2,3 versus my patches
1...5, and versus original scsi-misc-2.6-2008_04_15.
They build successfully, although they result in bigger code:
[ .. ]
As compared to my patches there are more than 20 kb
of unused code. My patches can be improved too.
"make namespacecheck" shows unused functions' names.
Yes, I know. There is a snag to the above reasoning:
Symbols are not only referenced by the sequencer code, but
also by the actual driver. And there are symbols which
are referenced from the driver source code only, not from
the sequencer. So aicasm will _not_ catch those.
That's why I added to 'count' field explicitely to some
symbols; these are referenced from the source code only.
But now we're facing another problem: Those symbols
referenced from the sequencer code only will in most
cases _not_ be printed via the autogenerated _print
functions.
So what we really need to do here to do this properly
is to write a preprocessor, which checks the _used_
*_print() functions in the source code and generates
the aic7*xx_reg_print.c file on the fly. And remove
this code from aicasm entirely.
But this really might be considered a bit of an
overkill. But I wouldn't stand in the way of anyone
trying to do so.
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
hare@xxxxxxx +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Markus Rex, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html