Merge tag 'v3.10.89' into update
This is the 3.10.89 stable release
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL = 88
|
||||
SUBLEVEL = 89
|
||||
EXTRAVERSION =
|
||||
NAME = TOSSUG Baby Fish
|
||||
|
||||
|
||||
@@ -291,6 +291,7 @@ static struct ahash_alg ghash_async_alg = {
|
||||
.cra_name = "ghash",
|
||||
.cra_driver_name = "ghash-clmulni",
|
||||
.cra_priority = 400,
|
||||
.cra_ctxsize = sizeof(struct ghash_async_ctx),
|
||||
.cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_ASYNC,
|
||||
.cra_blocksize = GHASH_BLOCK_SIZE,
|
||||
.cra_type = &crypto_ahash_type,
|
||||
|
||||
@@ -55,10 +55,10 @@ ifneq ($(CONFIG_LD_NO_RELAX),)
|
||||
LDFLAGS := --no-relax
|
||||
endif
|
||||
|
||||
ifeq ($(shell echo -e __XTENSA_EB__ | $(CC) -E - | grep -v "\#"),1)
|
||||
ifeq ($(shell echo __XTENSA_EB__ | $(CC) -E - | grep -v "\#"),1)
|
||||
CHECKFLAGS += -D__XTENSA_EB__
|
||||
endif
|
||||
ifeq ($(shell echo -e __XTENSA_EL__ | $(CC) -E - | grep -v "\#"),1)
|
||||
ifeq ($(shell echo __XTENSA_EL__ | $(CC) -E - | grep -v "\#"),1)
|
||||
CHECKFLAGS += -D__XTENSA_EL__
|
||||
endif
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
KBUILD_CFLAGS += -fno-builtin -Iarch/$(ARCH)/boot/include
|
||||
HOSTFLAGS += -Iarch/$(ARCH)/boot/include
|
||||
|
||||
BIG_ENDIAN := $(shell echo -e __XTENSA_EB__ | $(CC) -E - | grep -v "\#")
|
||||
BIG_ENDIAN := $(shell echo __XTENSA_EB__ | $(CC) -E - | grep -v "\#")
|
||||
|
||||
export ccflags-y
|
||||
export BIG_ENDIAN
|
||||
|
||||
@@ -24,30 +24,39 @@ static inline void spill_registers(void)
|
||||
{
|
||||
#if XCHAL_NUM_AREGS > 16
|
||||
__asm__ __volatile__ (
|
||||
" call12 1f\n"
|
||||
" call8 1f\n"
|
||||
" _j 2f\n"
|
||||
" retw\n"
|
||||
" .align 4\n"
|
||||
"1:\n"
|
||||
#if XCHAL_NUM_AREGS == 32
|
||||
" _entry a1, 32\n"
|
||||
" addi a8, a0, 3\n"
|
||||
" _entry a1, 16\n"
|
||||
" mov a12, a12\n"
|
||||
" retw\n"
|
||||
#else
|
||||
" _entry a1, 48\n"
|
||||
" addi a12, a0, 3\n"
|
||||
#if XCHAL_NUM_AREGS > 32
|
||||
" .rept (" __stringify(XCHAL_NUM_AREGS) " - 32) / 12\n"
|
||||
" call12 1f\n"
|
||||
" retw\n"
|
||||
" .align 4\n"
|
||||
"1:\n"
|
||||
" .rept (" __stringify(XCHAL_NUM_AREGS) " - 16) / 12\n"
|
||||
" _entry a1, 48\n"
|
||||
" mov a12, a0\n"
|
||||
" .endr\n"
|
||||
#endif
|
||||
" _entry a1, 48\n"
|
||||
" _entry a1, 16\n"
|
||||
#if XCHAL_NUM_AREGS % 12 == 0
|
||||
" mov a8, a8\n"
|
||||
#elif XCHAL_NUM_AREGS % 12 == 4
|
||||
" mov a12, a12\n"
|
||||
#elif XCHAL_NUM_AREGS % 12 == 8
|
||||
#elif XCHAL_NUM_AREGS % 12 == 4
|
||||
" mov a4, a4\n"
|
||||
#elif XCHAL_NUM_AREGS % 12 == 8
|
||||
" mov a8, a8\n"
|
||||
#endif
|
||||
" retw\n"
|
||||
#endif
|
||||
"2:\n"
|
||||
: : : "a12", "a13", "memory");
|
||||
: : : "a8", "a9", "memory");
|
||||
#else
|
||||
__asm__ __volatile__ (
|
||||
" mov a12, a12\n"
|
||||
|
||||
@@ -549,12 +549,13 @@ user_exception_exit:
|
||||
* (if we have restored WSBITS-1 frames).
|
||||
*/
|
||||
|
||||
2:
|
||||
#if XCHAL_HAVE_THREADPTR
|
||||
l32i a3, a1, PT_THREADPTR
|
||||
wur a3, threadptr
|
||||
#endif
|
||||
|
||||
2: j common_exception_exit
|
||||
j common_exception_exit
|
||||
|
||||
/* This is the kernel exception exit.
|
||||
* We avoided to do a MOVSP when we entered the exception, but we
|
||||
@@ -1933,7 +1934,7 @@ ENDPROC(system_call)
|
||||
mov a12, a0
|
||||
.endr
|
||||
#endif
|
||||
_entry a1, 48
|
||||
_entry a1, 16
|
||||
#if XCHAL_NUM_AREGS % 12 == 0
|
||||
mov a8, a8
|
||||
#elif XCHAL_NUM_AREGS % 12 == 4
|
||||
@@ -1957,7 +1958,7 @@ ENDPROC(system_call)
|
||||
|
||||
ENTRY(_switch_to)
|
||||
|
||||
entry a1, 16
|
||||
entry a1, 48
|
||||
|
||||
mov a11, a3 # and 'next' (a3)
|
||||
|
||||
|
||||
@@ -139,6 +139,7 @@ static int __init ks0108_init(void)
|
||||
|
||||
ks0108_pardevice = parport_register_device(ks0108_parport, KS0108_NAME,
|
||||
NULL, NULL, NULL, PARPORT_DEV_EXCL, NULL);
|
||||
parport_put_port(ks0108_parport);
|
||||
if (ks0108_pardevice == NULL) {
|
||||
printk(KERN_ERR KS0108_NAME ": ERROR: "
|
||||
"parport didn't register new device\n");
|
||||
|
||||
@@ -296,10 +296,10 @@ void * devres_get(struct device *dev, void *new_res,
|
||||
if (!dr) {
|
||||
add_dr(dev, &new_dr->node);
|
||||
dr = new_dr;
|
||||
new_dr = NULL;
|
||||
new_res = NULL;
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->devres_lock, flags);
|
||||
devres_free(new_dr);
|
||||
devres_free(new_res);
|
||||
|
||||
return dr->data;
|
||||
}
|
||||
|
||||
@@ -348,9 +348,7 @@ int platform_device_add(struct platform_device *pdev)
|
||||
|
||||
while (--i >= 0) {
|
||||
struct resource *r = &pdev->resource[i];
|
||||
unsigned long type = resource_type(r);
|
||||
|
||||
if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
|
||||
if (r->parent)
|
||||
release_resource(r);
|
||||
}
|
||||
|
||||
@@ -381,9 +379,7 @@ void platform_device_del(struct platform_device *pdev)
|
||||
|
||||
for (i = 0; i < pdev->num_resources; i++) {
|
||||
struct resource *r = &pdev->resource[i];
|
||||
unsigned long type = resource_type(r);
|
||||
|
||||
if (type == IORESOURCE_MEM || type == IORESOURCE_IO)
|
||||
if (r->parent)
|
||||
release_resource(r);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,8 +128,8 @@ struct clk *clk_sp810_timerclken_of_get(struct of_phandle_args *clkspec,
|
||||
{
|
||||
struct clk_sp810 *sp810 = data;
|
||||
|
||||
if (WARN_ON(clkspec->args_count != 1 || clkspec->args[0] >
|
||||
ARRAY_SIZE(sp810->timerclken)))
|
||||
if (WARN_ON(clkspec->args_count != 1 ||
|
||||
clkspec->args[0] >= ARRAY_SIZE(sp810->timerclken)))
|
||||
return NULL;
|
||||
|
||||
return sp810->timerclken[clkspec->args[0]].clk;
|
||||
|
||||
@@ -78,6 +78,11 @@ void radeon_connector_hotplug(struct drm_connector *connector)
|
||||
if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
|
||||
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
|
||||
} else if (radeon_dp_needs_link_train(radeon_connector)) {
|
||||
/* Don't try to start link training before we
|
||||
* have the dpcd */
|
||||
if (!radeon_dp_getdpcd(radeon_connector))
|
||||
return;
|
||||
|
||||
/* set it to OFF so that drm_helper_connector_dpms()
|
||||
* won't return immediately since the current state
|
||||
* is ON at this point.
|
||||
|
||||
@@ -180,7 +180,7 @@ static void hid_io_error(struct hid_device *hid)
|
||||
if (time_after(jiffies, usbhid->stop_retry)) {
|
||||
|
||||
/* Retries failed, so do a port reset unless we lack bandwidth*/
|
||||
if (test_bit(HID_NO_BANDWIDTH, &usbhid->iofl)
|
||||
if (!test_bit(HID_NO_BANDWIDTH, &usbhid->iofl)
|
||||
&& !test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) {
|
||||
|
||||
schedule_work(&usbhid->reset_work);
|
||||
|
||||
@@ -73,7 +73,8 @@ config IIO_ST_GYRO_SPI_3AXIS
|
||||
config ITG3200
|
||||
tristate "InvenSense ITG3200 Digital 3-Axis Gyroscope I2C driver"
|
||||
depends on I2C
|
||||
select IIO_TRIGGERED_BUFFER if IIO_BUFFER
|
||||
select IIO_BUFFER
|
||||
select IIO_TRIGGERED_BUFFER
|
||||
help
|
||||
Say yes here to add support for the InvenSense ITG3200 digital
|
||||
3-axis gyroscope sensor.
|
||||
|
||||
@@ -110,6 +110,10 @@
|
||||
struct adis16480_chip_info {
|
||||
unsigned int num_channels;
|
||||
const struct iio_chan_spec *channels;
|
||||
unsigned int gyro_max_val;
|
||||
unsigned int gyro_max_scale;
|
||||
unsigned int accel_max_val;
|
||||
unsigned int accel_max_scale;
|
||||
};
|
||||
|
||||
struct adis16480 {
|
||||
@@ -533,19 +537,21 @@ static int adis16480_set_filter_freq(struct iio_dev *indio_dev,
|
||||
static int adis16480_read_raw(struct iio_dev *indio_dev,
|
||||
const struct iio_chan_spec *chan, int *val, int *val2, long info)
|
||||
{
|
||||
struct adis16480 *st = iio_priv(indio_dev);
|
||||
|
||||
switch (info) {
|
||||
case IIO_CHAN_INFO_RAW:
|
||||
return adis_single_conversion(indio_dev, chan, 0, val);
|
||||
case IIO_CHAN_INFO_SCALE:
|
||||
switch (chan->type) {
|
||||
case IIO_ANGL_VEL:
|
||||
*val = 0;
|
||||
*val2 = IIO_DEGREE_TO_RAD(20000); /* 0.02 degree/sec */
|
||||
return IIO_VAL_INT_PLUS_MICRO;
|
||||
*val = st->chip_info->gyro_max_scale;
|
||||
*val2 = st->chip_info->gyro_max_val;
|
||||
return IIO_VAL_FRACTIONAL;
|
||||
case IIO_ACCEL:
|
||||
*val = 0;
|
||||
*val2 = IIO_G_TO_M_S_2(800); /* 0.8 mg */
|
||||
return IIO_VAL_INT_PLUS_MICRO;
|
||||
*val = st->chip_info->accel_max_scale;
|
||||
*val2 = st->chip_info->accel_max_val;
|
||||
return IIO_VAL_FRACTIONAL;
|
||||
case IIO_MAGN:
|
||||
*val = 0;
|
||||
*val2 = 100; /* 0.0001 gauss */
|
||||
@@ -702,18 +708,39 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
|
||||
[ADIS16375] = {
|
||||
.channels = adis16485_channels,
|
||||
.num_channels = ARRAY_SIZE(adis16485_channels),
|
||||
/*
|
||||
* storing the value in rad/degree and the scale in degree
|
||||
* gives us the result in rad and better precession than
|
||||
* storing the scale directly in rad.
|
||||
*/
|
||||
.gyro_max_val = IIO_RAD_TO_DEGREE(22887),
|
||||
.gyro_max_scale = 300,
|
||||
.accel_max_val = IIO_M_S_2_TO_G(21973),
|
||||
.accel_max_scale = 18,
|
||||
},
|
||||
[ADIS16480] = {
|
||||
.channels = adis16480_channels,
|
||||
.num_channels = ARRAY_SIZE(adis16480_channels),
|
||||
.gyro_max_val = IIO_RAD_TO_DEGREE(22500),
|
||||
.gyro_max_scale = 450,
|
||||
.accel_max_val = IIO_M_S_2_TO_G(12500),
|
||||
.accel_max_scale = 5,
|
||||
},
|
||||
[ADIS16485] = {
|
||||
.channels = adis16485_channels,
|
||||
.num_channels = ARRAY_SIZE(adis16485_channels),
|
||||
.gyro_max_val = IIO_RAD_TO_DEGREE(22500),
|
||||
.gyro_max_scale = 450,
|
||||
.accel_max_val = IIO_M_S_2_TO_G(20000),
|
||||
.accel_max_scale = 5,
|
||||
},
|
||||
[ADIS16488] = {
|
||||
.channels = adis16480_channels,
|
||||
.num_channels = ARRAY_SIZE(adis16480_channels),
|
||||
.gyro_max_val = IIO_RAD_TO_DEGREE(22500),
|
||||
.gyro_max_scale = 450,
|
||||
.accel_max_val = IIO_M_S_2_TO_G(22500),
|
||||
.accel_max_scale = 18,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -629,10 +629,10 @@ struct device_node *of_find_matching_node_by_address(struct device_node *from,
|
||||
struct resource res;
|
||||
|
||||
while (dn) {
|
||||
if (of_address_to_resource(dn, 0, &res))
|
||||
continue;
|
||||
if (res.start == base_address)
|
||||
if (!of_address_to_resource(dn, 0, &res) &&
|
||||
res.start == base_address)
|
||||
return dn;
|
||||
|
||||
dn = of_find_matching_node(dn, matches);
|
||||
}
|
||||
|
||||
|
||||
@@ -2796,12 +2796,15 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x3c28, vtd_mask_spec_errors);
|
||||
|
||||
static void fixup_ti816x_class(struct pci_dev *dev)
|
||||
{
|
||||
u32 class = dev->class;
|
||||
|
||||
/* TI 816x devices do not have class code set when in PCIe boot mode */
|
||||
dev_info(&dev->dev, "Setting PCI class for 816x PCIe device\n");
|
||||
dev->class = PCI_CLASS_MULTIMEDIA_VIDEO;
|
||||
dev->class = PCI_CLASS_MULTIMEDIA_VIDEO << 8;
|
||||
dev_info(&dev->dev, "PCI class overridden (%#08x -> %#08x)\n",
|
||||
class, dev->class);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_TI, 0xb800,
|
||||
PCI_CLASS_NOT_DEFINED, 0, fixup_ti816x_class);
|
||||
PCI_CLASS_NOT_DEFINED, 0, fixup_ti816x_class);
|
||||
|
||||
/* Some PCIe devices do not work reliably with the claimed maximum
|
||||
* payload size supported.
|
||||
|
||||
@@ -365,6 +365,11 @@ static const struct pnp_device_id pnp_dev_table[] = {
|
||||
/* Winbond CIR port, should not be probed. We should keep track
|
||||
of it to prevent the legacy serial driver from probing it */
|
||||
{ "WEC1022", CIR_PORT },
|
||||
/*
|
||||
* SMSC IrCC SIR/FIR port, should not be probed by serial driver
|
||||
* as well so its own driver can bind to it.
|
||||
*/
|
||||
{ "SMCF010", CIR_PORT },
|
||||
{ "", 0 }
|
||||
};
|
||||
|
||||
|
||||
+10
-2
@@ -804,6 +804,11 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
|
||||
unsigned maxp = ep0->endpoint.maxpacket;
|
||||
|
||||
transfer_size += (maxp - (transfer_size % maxp));
|
||||
|
||||
/* Maximum of DWC3_EP0_BOUNCE_SIZE can only be received */
|
||||
if (transfer_size > DWC3_EP0_BOUNCE_SIZE)
|
||||
transfer_size = DWC3_EP0_BOUNCE_SIZE;
|
||||
|
||||
transferred = min_t(u32, ur->length,
|
||||
transfer_size - length);
|
||||
memcpy(ur->buf, dwc->ep0_bounce, transferred);
|
||||
@@ -916,11 +921,14 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
|
||||
return;
|
||||
}
|
||||
|
||||
WARN_ON(req->request.length > DWC3_EP0_BOUNCE_SIZE);
|
||||
|
||||
maxpacket = dep->endpoint.maxpacket;
|
||||
transfer_size = roundup(req->request.length, maxpacket);
|
||||
|
||||
if (transfer_size > DWC3_EP0_BOUNCE_SIZE) {
|
||||
dev_WARN(dwc->dev, "bounce buf can't handle req len\n");
|
||||
transfer_size = DWC3_EP0_BOUNCE_SIZE;
|
||||
}
|
||||
|
||||
dwc->ep0_bounced = true;
|
||||
|
||||
/*
|
||||
|
||||
@@ -29,7 +29,7 @@ static ssize_t show_companion(struct device *dev,
|
||||
int count = PAGE_SIZE;
|
||||
char *ptr = buf;
|
||||
|
||||
ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
|
||||
ehci = hcd_to_ehci(dev_get_drvdata(dev));
|
||||
nports = HCS_N_PORTS(ehci->hcs_params);
|
||||
|
||||
for (index = 0; index < nports; ++index) {
|
||||
@@ -54,7 +54,7 @@ static ssize_t store_companion(struct device *dev,
|
||||
struct ehci_hcd *ehci;
|
||||
int portnum, new_owner;
|
||||
|
||||
ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
|
||||
ehci = hcd_to_ehci(dev_get_drvdata(dev));
|
||||
new_owner = PORT_OWNER; /* Owned by companion */
|
||||
if (sscanf(buf, "%d", &portnum) != 1)
|
||||
return -EINVAL;
|
||||
@@ -85,7 +85,7 @@ static ssize_t show_uframe_periodic_max(struct device *dev,
|
||||
struct ehci_hcd *ehci;
|
||||
int n;
|
||||
|
||||
ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
|
||||
ehci = hcd_to_ehci(dev_get_drvdata(dev));
|
||||
n = scnprintf(buf, PAGE_SIZE, "%d\n", ehci->uframe_periodic_max);
|
||||
return n;
|
||||
}
|
||||
@@ -102,7 +102,7 @@ static ssize_t store_uframe_periodic_max(struct device *dev,
|
||||
unsigned long flags;
|
||||
ssize_t ret;
|
||||
|
||||
ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
|
||||
ehci = hcd_to_ehci(dev_get_drvdata(dev));
|
||||
if (kstrtouint(buf, 0, &uframe_periodic_max) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
@@ -621,6 +621,10 @@ static struct usb_device_id id_table_combined [] = {
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2WI_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX3_PID) },
|
||||
/*
|
||||
* ELV devices:
|
||||
*/
|
||||
|
||||
@@ -568,6 +568,14 @@
|
||||
*/
|
||||
#define FTDI_SYNAPSE_SS200_PID 0x9090 /* SS200 - SNAP Stick 200 */
|
||||
|
||||
/*
|
||||
* CustomWare / ShipModul NMEA multiplexers product ids (FTDI_VID)
|
||||
*/
|
||||
#define FTDI_CUSTOMWARE_MINIPLEX_PID 0xfd48 /* MiniPlex first generation NMEA Multiplexer */
|
||||
#define FTDI_CUSTOMWARE_MINIPLEX2_PID 0xfd49 /* MiniPlex-USB and MiniPlex-2 series */
|
||||
#define FTDI_CUSTOMWARE_MINIPLEX2WI_PID 0xfd4a /* MiniPlex-2Wi */
|
||||
#define FTDI_CUSTOMWARE_MINIPLEX3_PID 0xfd4b /* MiniPlex-3 series */
|
||||
|
||||
|
||||
/********************************/
|
||||
/** third-party VID/PID combos **/
|
||||
|
||||
@@ -97,7 +97,7 @@ exit:
|
||||
|
||||
static int symbol_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
{
|
||||
struct symbol_private *priv = usb_get_serial_data(port->serial);
|
||||
struct symbol_private *priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags;
|
||||
int result = 0;
|
||||
|
||||
@@ -123,7 +123,7 @@ static void symbol_close(struct usb_serial_port *port)
|
||||
static void symbol_throttle(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct symbol_private *priv = usb_get_serial_data(port->serial);
|
||||
struct symbol_private *priv = usb_get_serial_port_data(port);
|
||||
|
||||
spin_lock_irq(&priv->lock);
|
||||
priv->throttled = true;
|
||||
@@ -133,7 +133,7 @@ static void symbol_throttle(struct tty_struct *tty)
|
||||
static void symbol_unthrottle(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct symbol_private *priv = usb_get_serial_data(port->serial);
|
||||
struct symbol_private *priv = usb_get_serial_port_data(port);
|
||||
int result;
|
||||
bool was_throttled;
|
||||
|
||||
|
||||
+24
-1
@@ -8,6 +8,17 @@
|
||||
#include <linux/sched.h>
|
||||
#include "hpfs_fn.h"
|
||||
|
||||
static void hpfs_update_directory_times(struct inode *dir)
|
||||
{
|
||||
time_t t = get_seconds();
|
||||
if (t == dir->i_mtime.tv_sec &&
|
||||
t == dir->i_ctime.tv_sec)
|
||||
return;
|
||||
dir->i_mtime.tv_sec = dir->i_ctime.tv_sec = t;
|
||||
dir->i_mtime.tv_nsec = dir->i_ctime.tv_nsec = 0;
|
||||
hpfs_write_inode_nolock(dir);
|
||||
}
|
||||
|
||||
static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
{
|
||||
const unsigned char *name = dentry->d_name.name;
|
||||
@@ -99,6 +110,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
result->i_mode = mode | S_IFDIR;
|
||||
hpfs_write_inode_nolock(result);
|
||||
}
|
||||
hpfs_update_directory_times(dir);
|
||||
d_instantiate(dentry, result);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return 0;
|
||||
@@ -187,6 +199,7 @@ static int hpfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, b
|
||||
result->i_mode = mode | S_IFREG;
|
||||
hpfs_write_inode_nolock(result);
|
||||
}
|
||||
hpfs_update_directory_times(dir);
|
||||
d_instantiate(dentry, result);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return 0;
|
||||
@@ -262,6 +275,7 @@ static int hpfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, de
|
||||
insert_inode_hash(result);
|
||||
|
||||
hpfs_write_inode_nolock(result);
|
||||
hpfs_update_directory_times(dir);
|
||||
d_instantiate(dentry, result);
|
||||
brelse(bh);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
@@ -340,6 +354,7 @@ static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *sy
|
||||
insert_inode_hash(result);
|
||||
|
||||
hpfs_write_inode_nolock(result);
|
||||
hpfs_update_directory_times(dir);
|
||||
d_instantiate(dentry, result);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return 0;
|
||||
@@ -423,6 +438,8 @@ again:
|
||||
out1:
|
||||
hpfs_brelse4(&qbh);
|
||||
out:
|
||||
if (!err)
|
||||
hpfs_update_directory_times(dir);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return err;
|
||||
}
|
||||
@@ -477,6 +494,8 @@ static int hpfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
out1:
|
||||
hpfs_brelse4(&qbh);
|
||||
out:
|
||||
if (!err)
|
||||
hpfs_update_directory_times(dir);
|
||||
hpfs_unlock(dir->i_sb);
|
||||
return err;
|
||||
}
|
||||
@@ -595,7 +614,7 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
goto end1;
|
||||
}
|
||||
|
||||
end:
|
||||
end:
|
||||
hpfs_i(i)->i_parent_dir = new_dir->i_ino;
|
||||
if (S_ISDIR(i->i_mode)) {
|
||||
inc_nlink(new_dir);
|
||||
@@ -610,6 +629,10 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
brelse(bh);
|
||||
}
|
||||
end1:
|
||||
if (!err) {
|
||||
hpfs_update_directory_times(old_dir);
|
||||
hpfs_update_directory_times(new_dir);
|
||||
}
|
||||
hpfs_unlock(i->i_sb);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -568,6 +568,15 @@ int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer,
|
||||
*/
|
||||
#define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL)
|
||||
|
||||
/**
|
||||
* IIO_RAD_TO_DEGREE() - Convert rad to degree
|
||||
* @rad: A value in rad
|
||||
*
|
||||
* Returns the given value converted from rad to degree
|
||||
*/
|
||||
#define IIO_RAD_TO_DEGREE(rad) \
|
||||
(((rad) * 18000000ULL + 314159ULL / 2) / 314159ULL)
|
||||
|
||||
/**
|
||||
* IIO_G_TO_M_S_2() - Convert g to meter / second**2
|
||||
* @g: A value in g
|
||||
@@ -576,4 +585,12 @@ int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer,
|
||||
*/
|
||||
#define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL)
|
||||
|
||||
/**
|
||||
* IIO_M_S_2_TO_G() - Convert meter / second**2 to g
|
||||
* @ms2: A value in meter / second**2
|
||||
*
|
||||
* Returns the given value converted from meter / second**2 to g
|
||||
*/
|
||||
#define IIO_M_S_2_TO_G(ms2) (((ms2) * 100000ULL + 980665ULL / 2) / 980665ULL)
|
||||
|
||||
#endif /* _INDUSTRIAL_IO_H_ */
|
||||
|
||||
Reference in New Issue
Block a user