Date: Mon, 26 Dec 2016 10:48:03 +0100 From: Hans Petter Selasky <hps@selasky.org> To: mmel@freebsd.org, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r310559 - in head/sys/compat/linuxkpi/common: include/linux src Message-ID: <4cd92dee-4cb2-954d-7157-6fcd122131c2@selasky.org> In-Reply-To: <eb3ae7ea-0881-d76f-788e-c200aa22fc45@freebsd.org> References: <201612260118.uBQ1I8Dm015288@repo.freebsd.org> <eb3ae7ea-0881-d76f-788e-c200aa22fc45@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 12/26/16 10:38, Michal Meloun wrote: > > > On 26.12.2016 2:18, Hans Petter Selasky wrote: >> Author: hselasky >> Date: Mon Dec 26 01:18:07 2016 >> New Revision: 310559 >> URL: https://svnweb.freebsd.org/changeset/base/310559 >> >> Log: >> Implement register and unregister chrdev in the LinuxKPI. >> >> Obtained from: kmacy @ >> MFC after: 1 week >> Sponsored by: Mellanox Technologies >> >> Modified: >> head/sys/compat/linuxkpi/common/include/linux/cdev.h >> head/sys/compat/linuxkpi/common/include/linux/fs.h >> head/sys/compat/linuxkpi/common/src/linux_compat.c >> >> Modified: head/sys/compat/linuxkpi/common/include/linux/cdev.h >> ============================================================================== >> --- head/sys/compat/linuxkpi/common/include/linux/cdev.h Sun Dec 25 22:32:16 2016 (r310558) >> +++ head/sys/compat/linuxkpi/common/include/linux/cdev.h Mon Dec 26 01:18:07 2016 (r310559) >> @@ -95,7 +95,7 @@ cdev_add(struct linux_cdev *cdev, dev_t >> args.mda_gid = 0; >> args.mda_mode = 0700; >> args.mda_si_drv1 = cdev; >> - args.mda_unit = MINOR(dev); >> + args.mda_unit = dev; >> >> error = make_dev_s(&args, &cdev->cdev, "%s", >> kobject_name(&cdev->kobj)); >> @@ -121,7 +121,7 @@ cdev_add_ext(struct linux_cdev *cdev, de >> args.mda_gid = gid; >> args.mda_mode = mode; >> args.mda_si_drv1 = cdev; >> - args.mda_unit = MINOR(dev); >> + args.mda_unit = dev; >> >> error = make_dev_s(&args, &cdev->cdev, "%s/%d", >> kobject_name(&cdev->kobj), MINOR(dev)); >> @@ -142,6 +142,8 @@ cdev_del(struct linux_cdev *cdev) >> kobject_put(&cdev->kobj); >> } >> >> +struct linux_cdev *linux_find_cdev(const char *name, unsigned major, unsigned minor); >> + >> #define cdev linux_cdev >> >> #endif /* _LINUX_CDEV_H_ */ >> >> Modified: head/sys/compat/linuxkpi/common/include/linux/fs.h >> ============================================================================== >> --- head/sys/compat/linuxkpi/common/include/linux/fs.h Sun Dec 25 22:32:16 2016 (r310558) >> +++ head/sys/compat/linuxkpi/common/include/linux/fs.h Mon Dec 26 01:18:07 2016 (r310559) >> @@ -2,7 +2,7 @@ >> * Copyright (c) 2010 Isilon Systems, Inc. >> * Copyright (c) 2010 iX Systems, Inc. >> * Copyright (c) 2010 Panasas, Inc. >> - * Copyright (c) 2013 Mellanox Technologies, Ltd. >> + * Copyright (c) 2013-2016 Mellanox Technologies, Ltd. >> * All rights reserved. >> * >> * Redistribution and use in source and binary forms, with or without >> @@ -151,6 +151,39 @@ struct file_operations { >> #define FMODE_WRITE FWRITE >> #define FMODE_EXEC FEXEC >> >> +int __register_chrdev(unsigned int major, unsigned int baseminor, >> + unsigned int count, const char *name, >> + const struct file_operations *fops); >> +int __register_chrdev_p(unsigned int major, unsigned int baseminor, >> + unsigned int count, const char *name, >> + const struct file_operations *fops, uid_t uid, >> + gid_t gid, int mode); >> +void __unregister_chrdev(unsigned int major, unsigned int baseminor, >> + unsigned int count, const char *name); >> + >> +static inline void >> +unregister_chrdev(unsigned int major, const char *name) >> +{ >> + >> + __unregister_chrdev(major, 0, 256, name); >> +} >> + >> +static inline int >> +register_chrdev(unsigned int major, const char *name, >> + const struct file_operations *fops) >> +{ >> + >> + return (__register_chrdev(major, 0, 256, name, fops)); >> +} >> + >> +static inline int >> +register_chrdev_p(unsigned int major, const char *name, >> + const struct file_operations *fops, uid_t uid, gid_t gid, int mode) >> +{ >> + >> + return (__register_chrdev_p(major, 0, 256, name, fops, uid, gid, mode)); >> +} >> + >> static inline int >> register_chrdev_region(dev_t dev, unsigned range, const char *name) >> { >> @@ -184,7 +217,7 @@ static inline dev_t >> iminor(struct inode *inode) >> { >> >> - return dev2unit(inode->v_rdev); >> + return (MINOR(dev2unit(inode->v_rdev))); > > This breaks many kernels: > > --- all_subdir_ibcore --- > In file included from > /usr2/Meloun/svn/src/sys/modules/ibcore/../../ofed/drivers/infiniband/core/ucma.c:34: > In file included from > /usr2/Meloun/svn/src/sys/modules/ibcore/../../compat/linuxkpi/common/include/linux/file.h:41: > /usr2/Meloun/svn/src/sys/modules/ibcore/../../compat/linuxkpi/common/include/linux/fs.h:220:10: error: implicit declaration of function 'MINOR' is invalid in C99 > [-Werror,-Wimplicit-function-declaration] > return (MINOR(dev2unit(inode->v_rdev))); > ^ > I'll fix shortly. --HPS
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4cd92dee-4cb2-954d-7157-6fcd122131c2>