From: Eduard-Gabriel Munteanu <maxdamage@aladin.ro>
To: Jeff Dike <jdike@addtoit.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/1] UML: fix missing non-blocking I/O, now DEBUG_SHIRQ works
Date: Tue, 12 Jun 2007 01:39:25 +0300 [thread overview]
Message-ID: <466DCF1D.9050508@aladin.ro> (raw)
In-Reply-To: <20070611211604.GA8859@c2.user-mode-linux.org>
*This message was transferred with a trial version of CommuniGate(r) Pro*
Jeff Dike wrote:
> *This message was transferred with a trial version of CommuniGate(r) Pro*
> *This message was transferred with a trial version of CommuniGate(r) Pro*
> On Mon, Jun 11, 2007 at 10:39:56PM +0300, Eduard-Gabriel Munteanu wrote:
>> No offense, but this is an ugly hack.
>
> I'm not going to defend it too much, but the alternatives don't seem any
> better to me.
>
>> What if sizeof(int) != sizeof(long)?
>
> Doesn't matter - the casting will preserve the value. Of greater
> concern is the relationship between sizeof(void *) and sizeof(long).
> That's not guaranteed by the standard, but is by gcc.
>
The cast isn't done right. Doing "fd = (long) dev_id;" doesn't help,
since you pass fd to mconsole_get_request() as is. And
mconsole_get_request() expects an integer:
int mconsole_get_request(int fd, struct mc_request *req)
This will generate at least a warning on arches where sizeof(int) !=
sizeof(long). And as you say, then there is the problem with void
pointers and longs.
And by the way, AFAIK, GCC has the habit of breaking compatibility with
some userspace apps when a new GCC major version is released. And,
AFAIK, they're moving towards standards, so relying on GCC's
"guarantees" may backfire.
>> You're calling glibc functions
>> with that fd as a parameter. On some arches, compiling will issue
>> warnings or simply fail.
>
> Which ones?
>
An example is sparc64:
quote from http://lxr.linux.no/source/include/asm-sparc64/types.h#L49
38 #define BITS_PER_LONG 64
39
40 #ifndef __ASSEMBLY__
41
42 typedef __signed__ char s8;
43 typedef unsigned char u8;
44
45 typedef __signed__ short s16;
46 typedef unsigned short u16;
47
48 typedef __signed__ int s32;
49 typedef unsigned int u32;
50
51 typedef __signed__ long s64;
52 typedef unsigned long u64
>> An alternative would be to use kmalloc instead of a global static
>> variable. Do you like this one more?
>
> No, that trades the global variable for a new point of failure.
>
> The main reason I like the current casting better than your global
> (not by a lot) is that globals have to be audited for SMP safety. So,
> I don't want any globals which don't need to be. This implies a
> local, and to minimize the machinery associated with that (kmalloc, or
> passing a pointer and synchronizing to avoid returning too soon), just
> passing the descriptor in the pointer and accepting the casting needed
> to get it through the compiler.
>
> Jeff
>
Really, a kmalloc() isn't such a big deal, it only happens once and
we're not in interrupt context. One the other hand, ensuring safety and
portability on other arches is something that needs to be taken care of.
Of course, you could also cast to int when calling
mconsole_get_request(), but IMO that doesn't look nicer.
next prev parent reply other threads:[~2007-06-11 22:39 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-10 22:01 [PATCH 1/1] UML: fix missing non-blocking I/O, now DEBUG_SHIRQ works Eduard-Gabriel Munteanu
2007-06-11 17:31 ` Jeff Dike
2007-06-11 19:39 ` Eduard-Gabriel Munteanu
2007-06-11 21:16 ` Jeff Dike
2007-06-11 22:39 ` Eduard-Gabriel Munteanu [this message]
2007-06-12 0:48 ` Jeff Dike
2007-06-12 5:44 ` Eduard-Gabriel Munteanu
2007-06-12 13:26 ` Jeff Dike
-- strict thread matches above, loose matches on Subject: below --
2007-06-10 22:20 Eduard-Gabriel Munteanu
2007-06-11 10:26 ` Eduard-Gabriel Munteanu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=466DCF1D.9050508@aladin.ro \
--to=maxdamage@aladin.ro \
--cc=jdike@addtoit.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox