[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC v3 2/4] xen/linux_compat: Add a Linux compat header
On 12/5/2017 5:31 AM, Julien Grall wrote: > Hi Sameer, > > On 05/12/17 03:59, Sameer Goel wrote: >> For porting files from Linux it is useful to have a Linux API to Xen API >> mapping header at a common location. >> This file adds common API functions and other defines that are needed for >> porting arm SMMU drivers. >> >> --- >> xen/include/xen/linux_compat.h | 106 >> +++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 106 insertions(+) >> create mode 100644 xen/include/xen/linux_compat.h >> >> diff --git a/xen/include/xen/linux_compat.h b/xen/include/xen/linux_compat.h >> new file mode 100644 >> index 0000000..217e0cc >> --- /dev/null >> +++ b/xen/include/xen/linux_compat.h >> @@ -0,0 +1,106 @@ >> +/****************************************************************************** >> + * include/xen/linux_compat.h >> + * >> + * Compatibility defines for porting code from Linux to Xen >> + * >> + * Copyright (c) 2017 Linaro Limited >> + * >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License as published by >> + * the Free Software Foundation; either version 2 of the License, or >> + * (at your option) any later version. >> + * >> + * This program is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + * >> + * You should have received a copy of the GNU General Public License >> + * along with this program; If not, see <http://www.gnu.org/licenses/>. >> + */ >> + >> +#ifndef __XEN_LINUX_COMPAT_H__ >> +#define __XEN_LINUX_COMPAT_H__ >> + >> +#include <asm/types.h> >> + >> +typedef paddr_t phys_addr_t; >> +typedef paddr_t dma_addr_t; >> + >> +/* Alias to Xen device tree helpers */ >> +#define device_node dt_device_node >> +#define of_phandle_args dt_phandle_args >> +#define of_device_id dt_device_match >> +#define of_match_node dt_match_node >> +#define of_property_read_u32(np, pname, out) (!dt_property_read_u32(np, >> pname, out)) >> +#define of_property_read_bool dt_property_read_bool >> +#define of_parse_phandle_with_args dt_parse_phandle_with_args >> +/* The user should consider if it is safe to treat mutex as a spinlock */ > > I am against defining mutex as spinlock in a generic header. People will > overlook it and it is hardly going to be detected in a verbatim port. > > This should be done on the case by case basis. > >> +#define mutex spinlock_t >> +#define mutex_init spin_lock_init >> +#define mutex_lock spin_lock >> +#define mutex_unlock spin_unlock >> + >> +#define ilog2 LOG_2 > > There is only one user of LOG_2 in Xen. So wouldn't it be better to rename > directly to ilog2? Its used in a couple of places (x86_64/asm-offsets.c). I can change that file too, let me know what you think. I am keeping this for now. > >> + >> +#define readx_poll_timeout(op, addr, val, cond, sleep_us, timeout_us) \ >> +({ \ >> + s_time_t deadline = NOW() + MICROSECS(timeout_us); \ >> + for (;;) \ >> + { \ >> + (val) = op(addr); \ >> + if ( cond ) \ >> + break; \ >> + if ( NOW() > deadline ) \ >> + { \ >> + (val) = op(addr); \ >> + break; \ >> + } \ >> + udelay(sleep_us); \ >> + } \ >> + (cond) ? 0 : -ETIMEDOUT; \ >> +}) >> + >> +#define readl_relaxed_poll_timeout(addr, val, cond, delay_us, timeout_us) \ >> + readx_poll_timeout(readl_relaxed, addr, val, cond, delay_us, timeout_us) > > I don't think putting read* macros in a common header is necessary. Their use > in Linux is very limited. > >> + >> +/* Xen: Helpers for IRQ functions */ >> +#define request_irq(irq, func, flags, name, dev) request_irq(irq, flags, >> func, name, dev) >> +#define free_irq release_irq >> + >> +enum irqreturn { >> + IRQ_NONE = (0 << 0), >> + IRQ_HANDLED = (1 << 0), >> + IRQ_WAKE_THREAD = (2 << 0), >> +}; >> + >> +typedef enum irqreturn irqreturn_t; >> + >> +/* Device logger functions */ >> +#define dev_print(dev, lvl, fmt, ...) \ >> + printk(lvl fmt, ## __VA_ARGS__) >> + >> +#define dev_dbg(dev, fmt, ...) dev_print(dev, XENLOG_DEBUG, fmt, ## >> __VA_ARGS__) >> +#define dev_notice(dev, fmt, ...) dev_print(dev, XENLOG_INFO, fmt, ## >> __VA_ARGS__) >> +#define dev_warn(dev, fmt, ...) dev_print(dev, XENLOG_WARNING, fmt, ## >> __VA_ARGS__) >> +#define dev_err(dev, fmt, ...) dev_print(dev, XENLOG_ERR, fmt, ## >> __VA_ARGS__) >> +#define dev_info(dev, fmt, ...) dev_print(dev, XENLOG_INFO, fmt, ## >> __VA_ARGS__) >> + >> +#define dev_err_ratelimited(dev, fmt, ...) \ >> + dev_print(dev, XENLOG_ERR, fmt, ## __VA_ARGS__) >> + >> +#define dev_name(dev) dt_node_full_name(dev_to_dt(dev)) >> + >> +/* Alias to Xen allocation helpers */ >> +#define kfree xfree >> +#define kmalloc(size, flags) _xmalloc(size, sizeof(void *)) >> +#define kzalloc(size, flags) _xzalloc(size, sizeof(void *)) >> +#define devm_kzalloc(dev, size, flags) _xzalloc(size, sizeof(void *)) >> +#define kmalloc_array(size, n, flags) _xmalloc_array(size, sizeof(void >> *), n) >> + >> +/* Alias to Xen time functions */ >> +#define ktime_t s_time_t >> +#define ktime_add_us(t,i) (NOW() + MICROSECS(i)) >> +#define ktime_compare(t,i) (NOW() > (i)) >> + >> +#endif /* __XEN_LINUX_COMPAT_H__ */ >> > > Cheers, > -- Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |