From: Andries.Brouwer@cwi.nl
To: Joel.Becker@oracle.com
Cc: linux-kernel@vger.kernel.org
Subject: 64-bit kdev_t - just for playing
Date: Thu, 27 Mar 2003 02:09:22 +0100 (MET) [thread overview]
Message-ID: <UTC200303270109.h2R19ME28410.aeb@smtp.cwi.nl> (raw)
>> Maybe I should send another patch tonight, just for playing.
> Please, I'd like that.
Below a random version of kdev_t.h.
(The file is smaller than the patch.)
kdev_t is the kernel-internal representation
dev_t is the kernel idea of the user space representation
(of course glibc uses 64 bits, split up as 8+8 :-)
kdev_t can be equal to dev_t.
The file below completely randomly makes kdev_t
64 bits, split up 32+32, and dev_t 32 bits, split up 12+20.
Andries
------------------------------------------------------------
#ifndef _LINUX_KDEV_T_H
#define _LINUX_KDEV_T_H
#ifdef __KERNEL__
typedef struct {
unsigned long long value;
} kdev_t;
#define KDEV_MINOR_BITS 32
#define KDEV_MAJOR_BITS 32
#define KDEV_MINOR_MASK ((1ULL << KDEV_MINOR_BITS) - 1)
#define __mkdev(major, minor) (((unsigned long long)(major) << KDEV_MINOR_BITS) + (minor))
#define mk_kdev(major, minor) ((kdev_t) { __mkdev(major,minor) } )
/*
* The "values" are just _cookies_, usable for
* internal equality comparisons and for things
* like NFS filehandle conversion.
*/
static inline unsigned long long kdev_val(kdev_t dev)
{
return dev.value;
}
static inline kdev_t val_to_kdev(unsigned long long val)
{
kdev_t dev;
dev.value = val;
return dev;
}
#define HASHDEV(dev) (kdev_val(dev))
#define NODEV (mk_kdev(0,0))
extern const char * kdevname(kdev_t); /* note: returns pointer to static data! */
static inline int kdev_same(kdev_t dev1, kdev_t dev2)
{
return dev1.value == dev2.value;
}
#define kdev_none(d1) (!kdev_val(d1))
#define minor(dev) (unsigned int)((dev).value & KDEV_MINOR_MASK)
#define major(dev) (unsigned int)((dev).value >> KDEV_MINOR_BITS)
/* These are for user-level "dev_t" */
#define MINORBITS 8
#define MINORMASK ((1U << MINORBITS) - 1)
#define DEV_MINOR_BITS 20
#define DEV_MAJOR_BITS 12
#define DEV_MINOR_MASK ((1U << DEV_MINOR_BITS) - 1)
#define DEV_MAJOR_MASK ((1U << DEV_MAJOR_BITS) - 1)
#include <linux/types.h> /* dev_t */
#define MAJOR(dev) ((unsigned int)(((dev) & 0xffff0000) ? ((dev) >> DEV_MINOR_BITS) & DEV_MAJOR_MASK : ((dev) >> 8) & 0xff))
#define MINOR(dev) ((unsigned int)(((dev) & 0xffff0000) ? ((dev) & DEV_MINOR_MASK) : ((dev) & 0xff)))
#define MKDEV(ma,mi) ((dev_t)((((ma) & ~0xff) == 0 && ((mi) & ~0xff) == 0) ? (((ma) << 8) | (mi)) : (((ma) << DEV_MINOR_BITS) | (mi))))
/*
* Conversion functions
*/
static inline int kdev_t_to_nr(kdev_t dev)
{
unsigned int ma = major(dev);
unsigned int mi = minor(dev);
return MKDEV(ma, mi);
}
static inline kdev_t to_kdev_t(dev_t dev)
{
unsigned int ma = MAJOR(dev);
unsigned int mi = MINOR(dev);
return mk_kdev(ma, mi);
}
#else /* __KERNEL__ */
/*
Some programs want their definitions of MAJOR and MINOR and MKDEV
from the kernel sources. These must be the externally visible ones.
Of course such programs should be updated.
*/
#define MAJOR(dev) ((dev)>>8)
#define MINOR(dev) ((dev) & 0xff)
#define MKDEV(ma,mi) ((ma)<<8 | (mi))
#endif /* __KERNEL__ */
#endif
next reply other threads:[~2003-03-27 0:58 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-03-27 1:09 Andries.Brouwer [this message]
2003-03-27 19:23 ` 64-bit kdev_t - just for playing Roman Zippel
2003-03-30 20:10 ` H. Peter Anvin
2003-03-27 20:27 Andries.Brouwer
2003-03-27 22:12 ` Roman Zippel
2003-03-27 22:55 ` Alan Cox
2003-03-27 23:19 ` Roman Zippel
2003-03-27 23:48 ` Greg KH
2003-03-28 9:47 ` Roman Zippel
2003-03-28 18:05 ` Joel Becker
2003-03-28 18:48 ` Roman Zippel
2003-03-31 8:31 ` bert hubert
2003-03-31 8:52 ` Roman Zippel
2003-03-31 17:24 ` Joel Becker
2003-03-31 21:32 ` Roman Zippel
2003-03-31 22:18 ` Alan Cox
2003-03-31 23:42 ` Roman Zippel
2003-04-01 14:42 ` Alan Cox
2003-04-01 16:35 ` Greg KH
2003-04-02 13:02 ` Roman Zippel
2003-04-01 14:42 ` Alan Cox
2003-04-01 16:52 ` Christoph Hellwig
2003-04-01 21:59 ` H. Peter Anvin
2003-04-02 7:12 ` Christoph Hellwig
2003-04-02 7:22 ` H. Peter Anvin
2003-03-31 23:45 ` Joel Becker
2003-03-31 23:07 ` Joel Becker
2003-03-31 23:35 ` Roman Zippel
2003-03-27 22:37 Andries.Brouwer
2003-03-27 22:55 ` Roman Zippel
2003-03-28 11:10 Andries.Brouwer
2003-03-28 11:36 ` Roman Zippel
2003-03-30 20:05 ` H. Peter Anvin
2003-03-30 20:13 ` Roman Zippel
2003-03-28 11:46 Andries.Brouwer
2003-03-28 11:57 ` Roman Zippel
2003-03-28 15:33 Andries.Brouwer
2003-03-28 15:49 ` Roman Zippel
2003-03-31 23:41 Badari Pulavarty
2003-03-31 23:54 ` William Lee Irwin III
2003-03-31 23:55 ` Joel Becker
2003-04-02 12:18 ` Roman Zippel
2003-04-02 17:31 ` Badari Pulavarty
2003-04-02 22:03 ` H. Peter Anvin
2003-04-03 10:09 ` David Lang
2003-04-03 11:14 ` Lars Marowsky-Bree
2003-04-03 12:13 ` Roman Zippel
2003-04-03 13:37 ` Andries Brouwer
2003-04-03 14:01 ` Roman Zippel
2003-04-07 15:02 ` H. Peter Anvin
2003-04-07 20:10 ` Roman Zippel
2003-04-07 21:57 ` Roman Zippel
2003-04-07 22:43 ` Kevin P. Fleming
2003-04-08 15:22 ` Roman Zippel
2003-04-08 22:53 ` Werner Almesberger
2003-04-08 23:11 ` David Lang
2003-04-08 23:47 ` Werner Almesberger
2003-04-08 23:58 ` Kevin P. Fleming
2003-04-08 23:56 ` H. Peter Anvin
2003-04-08 23:06 ` Andrew Morton
2003-04-09 0:40 ` Roman Zippel
2003-04-09 1:02 ` Joel Becker
2003-04-09 1:25 ` Roman Zippel
2003-04-09 16:42 ` Roman Zippel
2003-04-09 0:21 ` Roman Zippel
2003-04-11 9:58 ` Pavel Machek
2003-04-08 15:29 ` Roman Zippel
2003-04-01 18:32 Andries.Brouwer
2003-04-09 18:36 Andries.Brouwer
2003-04-09 21:11 ` Roman Zippel
2003-04-09 18:40 James Bottomley
2003-04-09 20:54 ` Roman Zippel
2003-04-10 2:19 ` James Bottomley
2003-04-10 12:47 ` Roman Zippel
2003-04-10 15:30 ` James Bottomley
2003-04-10 23:53 ` Roman Zippel
2003-04-11 0:01 ` David Lang
2003-04-11 0:17 ` Roman Zippel
2003-04-11 0:47 ` Joel Becker
2003-04-11 1:11 ` Roman Zippel
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=UTC200303270109.h2R19ME28410.aeb@smtp.cwi.nl \
--to=andries.brouwer@cwi.nl \
--cc=Joel.Becker@oracle.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;
as well as URLs for NNTP newsgroup(s).