[parisc-linux] Pb with ioctl and 64bits

Bruno Vidal bruno_vidal@hpfrcu03.france.hp.com
Tue, 11 Jun 2002 07:52:19 +0200


This is a multi-part message in MIME format.
--------------FF9D73B59D549C57264DDB22
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

	Hi
Yes, I've follow nearly the same than "PA_PERF_ON", "PA_PERF_OFF".
I've used:
#define DIOSDUMPDEV             _IOW('p',1,unsigned long)       /* set the dump device                 */
#define DIOGDUMPDEV             _IOR('p',2,unsigned long)       /* get the dump device                 */
#define DIOSDUMPLEVEL           _IOW('p',3,unsigned long)       /* set the dump level                  */
#define DIOGDUMPLEVEL           _IOR('p',4,unsigned long)       /* get the dump level                  */
#define DIOSDUMPFLAGS           _IOW('p',5,unsigned long)       /* set the dump flag parameters        */
#define DIOGDUMPFLAGS           _IOR('p',6,unsigned long)       /* get the dump flag parameters        */
#define DIOSDUMPCOMPRESS        _IOW('p',7,unsigned long)       /* set the dump compress level         */
#define DIOGDUMPCOMPRESS        _IOR('p',8,unsigned long)       /* get the dump compress level         */
#define DIOGDINDEX              _IOR('p',9,unsigned long)       /* get the number of configured device */ 

But I don't understand what's wrong, does I need to declare something else somewhere else ????

Randolph Chung wrote:
> 
> > I'm loosing my nerves. I'm stuck with it since two days, and I don't understand :-(
> > My ioctls are running fine with 32bits kernel. I thought I've done everything fine,
> > but when compiling it with 64 bits kernel it fail with:
> > sys32_ioctl: Unknown cmd fd(3) cmd(80047001) arg(00000803)
> > So my question is: what is the difference between 32bits and 64bits kernel about
> > the ioctls ?
> 
> as you discovered, there's some translation that is needed for 64-bit
> kernels because userspace is always 32-bits. So when running a 64-bit
> kernel, some ioctls need to be translated via the logic in ioctl32.c.
> The situation is similar to sparc32/sparc64.
> 
> > I think that arch/parisc/kernel/ioctl32.c is used with 64bits and not with 32bits, right ?
> 
> yes.
> 
> > If yes, what I need to do more than:
> > #if defined(CONFIG_DUMP) || defined(CONFIG_DUMP_MODULE)
> > COMPATIBLE_IOCTL(DIOSDUMPDEV);
> > COMPATIBLE_IOCTL(DIOGDUMPDEV);
> > COMPATIBLE_IOCTL(DIOSDUMPLEVEL);
> > COMPATIBLE_IOCTL(DIOGDUMPLEVEL);
> > COMPATIBLE_IOCTL(DIOSDUMPFLAGS);
> > COMPATIBLE_IOCTL(DIOGDUMPFLAGS);
> > COMPATIBLE_IOCTL(DIOSDUMPCOMPRESS);
> > COMPATIBLE_IOCTL(DIOGDUMPCOMPRESS);
> > COMPATIBLE_IOCTL(DIOGDINDEX);
> > #endif /* DUMP */
> 
> what are the ioctl definitions used by the dump driver? (the _IO{,R,W,RW}
> values). From the output you pasted:
> 
> > sys32_ioctl: Unknown cmd fd(3) cmd(80047001) arg(00000803)
> 
> that ioctl seems to be _IOW('p', 1, int) (or unsigned int or so)?
> 
> randolph

-- 
	Vidal Bruno, (770-4271)
        SSD-HA Team, HP-UX & LINUX Support
	bruno_vidal@admin.france.hp.com
--------------FF9D73B59D549C57264DDB22
Content-Type: text/x-vcard; charset=iso-8859-1;
 name="bruno_vidal.vcf"
Content-Transfer-Encoding: base64
Content-Description: Card for Bruno Vidal
Content-Disposition: attachment;
 filename="bruno_vidal.vcf"

YmVnaW46dmNhcmQgCm46QnJ1bm87VklEQUwKdGVsO2ZheDowMS02OS04Mi02MC0xNAp0ZWw7
d29yazowMS02OS0yOS00Mi03MQp4LW1vemlsbGEtaHRtbDpUUlVFCnVybDp3d3cuZnJhbmNl
LmhwLmNvbQpvcmc6U29sdXRpb24gQ2VudGVyCnZlcnNpb246Mi4xCmVtYWlsO2ludGVybmV0
OmJydW5vX3ZpZGFsQGhwLmNvbQp0aXRsZTpFeHBlcnQgTG9naWNpZWwgRW52aXJvbm5lbWVu
dCBIYXV0ZSBEaXNwb25pYmlsaXTpCmFkcjtxdW90ZWQtcHJpbnRhYmxlOjs7SFAgRnJhbmNl
PTBEPTBBO1ouQSBkZSBDb3VydGFib2V1ZjsxIEF2LiBkdSBDYW5hZGE7OTE5NDcgTGVzIFVs
aXMgY2VkZXg7RnJhbmNlCngtbW96aWxsYS1jcHQ6OzI2MjA4CmZuOlZJREFMIEJydW5vCmVu
ZDp2Y2FyZAo=
--------------FF9D73B59D549C57264DDB22--