Yes. The use of volatile in a function prototype like this means that it is valid to pass a volatile pointer to that function -- in other words, we're telling gcc that we're not going to do anything with the pointer that is invalid for a volatile pointer.
If I understand you correct then it is then not wrong to say
that we have the argument volatile to avoid warnings from gcc
when we pass a volatile pointer.
And then having the pointer marked volatile put a few restrictions
on iounmap().
A lot of the "volatile considered harmful" stuff that has been bandied about is explicitly about marking *data* items volatile (it does have its uses, but it's easy to get wrong); Linus has explicitly made the distinction between volatile *data* and volatile *operations*.
Yes - but unfortunately the volatile-considered-harmful.txt
does many deal with the data part.