31 Mar, 2009

38 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    wireless: remove duplicated .ndo_set_mac_address
    netfilter: xtables: fix IPv6 dependency in the cluster match
    tg3: Add GRO support.
    niu: Add GRO support.
    ucc_geth: Fix use-after-of_node_put() in ucc_geth_probe().
    gianfar: Fix use-after-of_node_put() in gfar_of_init().
    kernel: remove HIPQUAD()
    netpoll: store local and remote ip in net-endian
    netfilter: fix endian bug in conntrack printks
    dmascc: fix incomplete conversion to network_device_ops
    gso: Fix support for linear packets
    skbuff.h: fix missing kernel-doc
    ni5010: convert to net_device_ops

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-cpumask:
    oprofile: Thou shalt not call __exit functions from __init functions
    cpumask: remove the now-obsoleted pcibus_to_cpumask(): generic
    cpumask: remove cpumask_t from core
    cpumask: convert rcutorture.c
    cpumask: use new cpumask_ functions in core code.
    cpumask: remove references to struct irqaction's mask field.
    cpumask: use mm_cpumask() wrapper: kernel/fork.c
    cpumask: use set_cpu_active in init/main.c
    cpumask: remove node_to_first_cpu
    cpumask: fix seq_bitmap_*() functions.
    cpumask: remove dangerous CPU_MASK_ALL_PTR, &CPU_MASK_ALL

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-lguest-and-virtio:
    lguest: barrier me harder
    lguest: use bool instead of int
    lguest: use KVM hypercalls
    lguest: wire up pte_update/pte_update_defer
    lguest: fix spurious BUG_ON() on invalid guest stack.
    virtio: more neatening of virtio_ring macros.
    virtio: fix BAD_RING, START_US and END_USE macros

    Linus Torvalds
     
  • * 'hwmon-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6:
    hwmon: (fschmd) Add support for the FSC Hades IC
    hwmon: (fschmd) Add support for the FSC Syleus IC
    i2c-i801: Instantiate FSC hardware montioring chips
    dmi: Let dmi_walk() users pass private data
    hwmon: Define a standard interface for chassis intrusion detection
    Move the pcf8591 driver to hwmon
    hwmon: (w83627ehf) Only expose in6 or temp3 on the W83667HG
    hwmon: (w83627ehf) Add support for W83667HG
    hwmon: (w83627ehf) Invert fan pin variables logic
    hwmon: (hdaps) Fix Thinkpad X41 axis inversion
    hwmon: (hdaps) Allow inversion of separate axis
    hwmon: (ds1621) Clean up documentation
    hwmon: (ds1621) Avoid unneeded register access
    hwmon: (ds1621) Clean up register access
    hwmon: (ds1621) Reorder code statements

    Linus Torvalds
     
  • * 'proc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/adobriyan/proc:
    Revert "proc: revert /proc/uptime to ->read_proc hook"
    proc 2/2: remove struct proc_dir_entry::owner
    proc 1/2: do PDE usecounting even for ->read_proc, ->write_proc
    proc: fix sparse warnings in pagemap_read()
    proc: move fs/proc/inode-alloc.txt comment into a source file

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6:
    PCI PM: Make pci_prepare_to_sleep() disable wake-up if needed
    radeonfb: Use __pci_complete_power_transition()
    PCI PM: Introduce __pci_[start|complete]_power_transition() (rev. 2)
    PCI PM: Restore config spaces of all devices during early resume
    PCI PM: Make pci_set_power_state() handle devices with no PM support
    PCI PM: Put devices into low power states during late suspend (rev. 2)
    PCI PM: Move pci_restore_standard_config to pci-driver.c
    PCI PM: Use pci_set_power_state during early resume
    PCI PM: Consistently use variable name "error" for pm call return values
    kexec: Change kexec jump code ordering
    PM: Change hibernation code ordering
    PM: Change suspend code ordering
    PM: Rework handling of interrupts during suspend-resume
    PM: Introduce functions for suspending and resuming device interrupts

    Linus Torvalds
     
  • Setting ->owner as done currently (pde->owner = THIS_MODULE) is racy
    as correctly noted at bug #12454. Someone can lookup entry with NULL
    ->owner, thus not pinning enything, and release it later resulting
    in module refcount underflow.

    We can keep ->owner and supply it at registration time like ->proc_fops
    and ->data.

    But this leaves ->owner as easy-manipulative field (just one C assignment)
    and somebody will forget to unpin previous/pin current module when
    switching ->owner. ->proc_fops is declared as "const" which should give
    some thoughts.

    ->read_proc/->write_proc were just fixed to not require ->owner for
    protection.

    rmmod'ed directories will be empty and return "." and ".." -- no harm.
    And directories with tricky enough readdir and lookup shouldn't be modular.
    We definitely don't want such modular code.

    Removing ->owner will also make PDE smaller.

    So, let's nuke it.

    Kudos to Jeff Layton for reminding about this, let's say, oversight.

    http://bugzilla.kernel.org/show_bug.cgi?id=12454

    Signed-off-by: Alexey Dobriyan

    Alexey Dobriyan
     
  • * 'drm-next' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (53 commits)
    drm: detect hdmi monitor by hdmi identifier (v3)
    drm: drm_fops.c unlock missing on error path
    drm: reorder struct drm_ioctl_desc to save space on 64 bit builds
    radeon: add some new pci ids
    drm: read EDID extensions from monitor
    drm: Use a little stash on the stack to avoid kmalloc in most DRM ioctls.
    drm/radeon: add regs required for occlusion queries support
    drm/i915: check the return value from the copy from user
    drm/radeon: fix logic in r600_page_table_init() to match ati_gart
    drm/radeon: r600 ptes are 64-bit, cleanup cleanup function.
    drm/radeon: don't call irq changes on r600 suspend/resume
    drm/radeon: fix r600 writeback across suspend/resume
    drm/radeon: fix r600 writeback setup.
    drm: fix warnings about new mappings in info code.
    drm/radeon: NULL noise: drivers/gpu/drm/radeon/radeon_*.c
    drm/radeon: fix r600 pci mapping calls.
    drm/radeon: r6xx/r7xx: fix possible oops in r600_page_table_cleanup()
    radeon: call the correct idle function, logic got inverted.
    drm/radeon: RS600: fix interrupt handling
    drm/r600: fix rptr address along lines of previous fixes to radeon.
    ...

    Linus Torvalds
     
  • * 'iommu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (60 commits)
    dma-debug: make memory range checks more consistent
    dma-debug: warn of unmapping an invalid dma address
    dma-debug: fix dma_debug_add_bus() definition for !CONFIG_DMA_API_DEBUG
    dma-debug/x86: register pci bus for dma-debug leak detection
    dma-debug: add a check dma memory leaks
    dma-debug: add checks for kernel text and rodata
    dma-debug: print stacktrace of mapping path on unmap error
    dma-debug: Documentation update
    dma-debug: x86 architecture bindings
    dma-debug: add function to dump dma mappings
    dma-debug: add checks for sync_single_sg_*
    dma-debug: add checks for sync_single_range_*
    dma-debug: add checks for sync_single_*
    dma-debug: add checking for [alloc|free]_coherent
    dma-debug: add add checking for map/unmap_sg
    dma-debug: add checking for map/unmap_page/single
    dma-debug: add core checking functions
    dma-debug: add debugfs interface
    dma-debug: add kernel command line parameters
    dma-debug: add initialization code
    ...

    Fix trivial conflicts due to whitespace changes in arch/x86/kernel/pci-nommu.c

    Linus Torvalds
     
  • If the device is not supposed to wake up the system, ie. when
    device_may_wakeup(&dev->dev) returns 'false', pci_prepare_to_sleep()
    should pass 'false' to pci_enable_wake() so that it calls the
    platform to disable the wake-up capability of the device.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • Use __pci_complete_power_transition() to finalize the transition into
    D2 after programming the PMCSR of the device directly.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • The radeonfb driver needs to program the device's PMCSR directly due
    to some quirky hardware it has to handle (see
    http://bugzilla.kernel.org/show_bug.cgi?id=12846 for details) and
    after doing that it needs to call the platform (usually ACPI) to
    finish the power transition of the device. Currently it uses
    pci_set_power_state() for this purpose, however making a specific
    assumption about the internal behavior of this function, which has
    changed recently so that this assumption is no longer satisfied.
    For this reason, introduce __pci_complete_power_transition() that may
    be called by the radeonfb driver to complete the power transition of
    the device. For symmetry, introduce __pci_start_power_transition().

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • At present the configuration spaces of PCI devices that have no
    drivers or no PM support in the drivers (either legacy or through a
    pm object) are not saved during suspend and, consequently, they are
    not restored during resume. This generally may lead to the state of
    the system being slightly inconsistent after the resume, so it's
    better to save and restore the configuration spaces of these devices
    as well.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • There is a problem with PCI devices without any PM support (either
    native or through the platform) that pci_set_power_state() always
    returns error code for them, even if they are being put into D0.
    However, such devices are always in D0, so pci_set_power_state()
    should return success when attempting to put such a device into D0.
    It also should update the current_state field for these devices as
    appropriate. This modification is necessary so that the standard
    configuration registers of these devices are successfully restored by
    pci_restore_standard_config() during the "early" phase of resume.

    In addition, pci_set_power_state() should check the value of
    current_state before calling the platform to change the power state
    of the device to avoid doing that unnecessarily.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • Once we have allowed timer interrupts to be enabled during the late
    phase of suspending devices, we are now able to use the generic
    pci_set_power_state() to put PCI devices into low power states at
    that time. We can also use some related platform callbacks, like the
    ones preparing devices for wake-up, during the late suspend.

    Doing this will allow us to avoid the race condition where a device
    using shared interrupts is put into a low power state with interrupts
    enabled and then an interrupt (for another device) comes in and
    confuses its driver. At the same time, devices that don't support
    the native PCI PM or that require some additional, platform-specific
    operations to be carried out to put them into low power states will
    be handled as appropriate.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • Move pci_restore_standard_config() from pci.c to pci-driver.c and
    make it static.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • Once we have allowed timer interrupts to be enabled during the early
    phase of resuming devices, we are now able to use the generic
    pci_set_power_state() to put PCI devices into D0 at that time. Then,
    the platform-specific PM code will have a chance to handle devices
    that don't implement the native PCI PM or that require some
    additional, platform-specific operations to be carried out to power
    them up. Also, by doing this we can simplify the code quite a bit.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar
    Acked-by: Jesse Barnes

    Rafael J. Wysocki
     
  • I noticed two functions use a variable "i" to store the return value of PM
    function calls while the rest of the file uses "error". As "i" normally
    indicates a counter of some sort it seems better to keep this consistent.

    Signed-off-by: Frans Pop
    Signed-off-by: Jesse Barnes
    Signed-off-by: Rafael J. Wysocki

    Frans Pop
     
  • Use the functions introduced in by the previous patch,
    suspend_device_irqs(), resume_device_irqs() and check_wakeup_irqs(),
    to rework the handling of interrupts during suspend (hibernation) and
    resume. Namely, interrupts will only be disabled on the CPU right
    before suspending sysdevs, while device drivers will be prevented
    from receiving interrupts, with the help of the new helper function,
    before their "late" suspend callbacks run (and analogously during
    resume).

    In addition, since the device interrups are now disabled before the
    CPU has turned all interrupts off and the CPU will ACK the interrupts
    setting the IRQ_PENDING bit for them, check in sysdev_suspend() if
    any wake-up interrupts are pending and abort suspend if that's the
    case.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar

    Rafael J. Wysocki
     
  • Add support for the Hades to the FSC hwmon driver.

    Signed-off-by: Hans de Goede
    Signed-off-by: Jean Delvare

    Hans de Goede
     
  • Many thanks to Fujitsu Siemens Computers for providing docs and a
    machine to test the driver on.

    Signed-off-by: Hans de Goede
    Signed-off-by: Jean Delvare

    Hans de Goede
     
  • Detect various FSC hwmon IC's based on DMI tables and then let
    the i2c-i801 driver instantiate the i2c client devices. Note that
    some of the info in the added table is indentical for all rows, still
    this is kept in the table to keep the code general and thus (hopefully)
    easily extensible in the future.

    Signed-off-by: Hans de Goede
    Signed-off-by: Jean Delvare

    Hans de Goede
     
  • At the moment, dmi_walk() lacks flexibility, users can't pass data to
    the callback function. Add a pointer for private data to make this
    function more flexible.

    Signed-off-by: Jean Delvare
    Cc: Hans de Goede
    Cc: Matthew Garrett
    Cc: Roland Dreier

    Jean Delvare
     
  • Directory drivers/i2c/chips is going away, so drivers there must find
    new homes. For the pcf8591 driver, the best choice seems to be the
    hwmon subsystem. While the Philips PCF8591 device isn't a typical
    hardware monitoring chip, its DAC interface is compatible with the
    hwmon one, so it fits somewhat.

    If a better subsystem is ever created for ADC/DAC chips, the driver
    could be moved there.

    Signed-off-by: Jean Delvare
    Cc: Aurelien Jarno

    Jean Delvare
     
  • The pin for in6 and temp3 is shared on the W83667HG, so only one of
    these features can be supported on any given system. Let the driver
    select which one depending on the temp3 disabled bit.

    Signed-off-by: Gong Jun
    Signed-off-by: Jean Delvare

    Gong Jun
     
  • Add initial support for the Nuvoton W83667HG chip to the w83627ehf
    driver. It has been tested on ASUS P5QL PRO by Gong Jun.

    At the moment there is still a usability issue which is that only in6
    or temp3 can be present on the W83667HG, so the driver shouldn't
    expose both. This will be addressed later.

    Signed-off-by: Gong Jun
    Acked-by: David Hubbard
    Signed-off-by: Jean Delvare

    Gong Jun
     
  • Use positive logic for fan pin variables (variable is set if pin is
    used for fan), instead of negative logic which is error prone.

    Signed-off-by: Jean Delvare
    Cc: Gong Jun

    Jean Delvare
     
  • Fix for kernel.org bug #7154: hdaps inversion of actual Thinkpad
    X41's Y-axis.

    Signed-off-by: Frank Seidel
    Signed-off-by: Jean Delvare

    Frank Seidel
     
  • Fix for kernel.org bug #7154: hdaps inversion of each axis. This
    version is based on the work from Michael Ruoss .

    Signed-off-by: Frank Seidel
    Signed-off-by: Jean Delvare

    Frank Seidel
     
  • Register access over SMBus isn't cheap, so avoid register access where
    possible:
    * Only write back the configuration register if it changed.
    * Don't refresh the register cache when we don't have to.

    Signed-off-by: Jean Delvare
    Cc: Aurelien Jarno

    Jean Delvare
     
  • Fix a few oddities in how the ds1621 driver accesses the registers:
    * We don't need a wrapper to access the configuration register.
    * Check for error before calling swab16. Error checking isn't
    complete yet, but that's a start.
    * Device-specific read functions should never be called during
    detection, as by definition we don't know what device we are talking
    to at that point.
    * Likewise, don't assume that register reads succeed during detection.

    Signed-off-by: Jean Delvare
    Cc: Aurelien Jarno

    Jean Delvare
     
  • Reorder the ds1621 driver code so that we can get rid of forward
    function declarations.

    Signed-off-by: Jean Delvare
    Cc: Aurelien Jarno

    Jean Delvare
     
  • …l/git/tip/linux-2.6-tip

    * 'x86-stage-3-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (190 commits)
    Revert "cpuacct: reduce one NULL check in fast-path"
    Revert "x86: don't compile vsmp_64 for 32bit"
    x86: Correct behaviour of irq affinity
    x86: early_ioremap_init(), use __fix_to_virt(), because we are sure it's safe
    x86: use default_cpu_mask_to_apicid for 64bit
    x86: fix set_extra_move_desc calling
    x86, PAT, PCI: Change vma prot in pci_mmap to reflect inherited prot
    x86/dmi: fix dmi_alloc() section mismatches
    x86: e820 fix various signedness issues in setup.c and e820.c
    x86: apic/io_apic.c define msi_ir_chip and ir_ioapic_chip all the time
    x86: irq.c keep CONFIG_X86_LOCAL_APIC interrupts together
    x86: irq.c use same path for show_interrupts
    x86: cpu/cpu.h cleanup
    x86: Fix a couple of sparse warnings in arch/x86/kernel/apic/io_apic.c
    Revert "x86: create a non-zero sized bm_pte only when needed"
    x86: pci-nommu.c cleanup
    x86: io_delay.c cleanup
    x86: rtc.c cleanup
    x86: i8253 cleanup
    x86: kdebugfs.c cleanup
    ...

    Linus Torvalds
     
  • * 'bkl-removal' of git://git.lwn.net/linux-2.6:
    Fix a lockdep warning in fasync_helper()
    Add a missing unlock_kernel() in raw_open()

    Linus Torvalds
     
  • * 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (21 commits)
    MIPS: Alchemy: PB1200: use SMC91X platform data.
    MIPS: Alchemy: MIPS hazard workarounds are not required.
    MIPS: Alchemy: provide cpu feature overrides.
    MIPS: Alchemy: unify CPU model constants.
    MIPS: Make a needlessly global symbol static in arch/mips/kernel/smp.c
    MIPS: Fix global namespace pollution in arch/mips/kernel/smp-up.c
    MIPS: Malta: make a needlessly global integer variable static
    MIPS: Use BUG_ON() where possible.
    MIPS: Convert obsolete irq_desc_t to struct irq_desc
    MIPS: Enable GENERIC_HARDIRQS_NO__DO_IRQ for all platforms
    MIPS: EMMA2RH: Set UART mapbase
    MIPS: EMMA2RH: Use set_irq_chip_and_handler_name
    MIPS: EMMA2RH: Use handle_edge_irq() handler for GPIO interrupts
    MIPS: Mark Eins: Fix cascading interrupt dispatcher
    MIPS: Au1000: convert to using gpiolib
    MIPS: Stop using .
    MIPS: Cavium: Add -Werror
    MIPS: Makefile: Add simple make install target.
    MIPS: Compat: Zero upper 32-bit of offset_high and offset_low.
    MIPS: __raw_spin_lock() may spin forever on ticket wrap.
    ...

    Linus Torvalds
     
  • * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (180 commits)
    powerpc: clean up ssi.txt, add definition for fsl,ssi-asynchronous
    powerpc/85xx: Add support for the "socrates" board (MPC8544).
    powerpc: Fix bugs introduced by sysfs changes
    powerpc: Sanitize stack pointer in signal handling code
    powerpc: Add write barrier before enabling DTL flags
    powerpc/83xx: Update ranges in gianfar node to match other dts
    powerpc/86xx: Move gianfar mdio nodes under the ethernet nodes
    powerpc/85xx: Move gianfar mdio nodes under the ethernet nodes
    powerpc/83xx: Move gianfar mdio nodes under the ethernet nodes
    powerpc/83xx: Add power management support for MPC837x boards
    powerpc/mm: Introduce early_init_mmu() on 64-bit
    powerpc/mm: Add option for non-atomic PTE updates to ppc64
    powerpc/mm: Fix printk type warning in mmu_context_nohash
    powerpc/mm: Rename arch/powerpc/kernel/mmap.c to mmap_64.c
    powerpc/mm: Merge various PTE bits and accessors definitions
    powerpc/mm: Tweak PTE bit combination definitions
    powerpc/cell: Fix iommu exception reporting
    powerpc/mm: e300c2/c3/c4 TLB errata workaround
    powerpc/mm: Used free register to save a few cycles in SW TLB miss handling
    powerpc/mm: Remove unused register usage in SW TLB miss handling
    ...

    Linus Torvalds
     
  • * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (707 commits)
    V4L/DVB (11316): saa7191: tuner ops wasn't set.
    V4L/DVB (11315): cx25840: fix 'unused variable' warning.
    V4L/DVB (11314): au8522: remove unused I2C_DRIVERID
    V4L/DVB (11313): v4l2-subdev: add enum_framesizes and enum_frameintervals.
    V4L/DVB (11312): tuner: remove V4L1 code from this driver.
    V4L/DVB (11311): v4l: replace 'ioctl' references in v4l i2c drivers
    V4L/DVB (11310): cx18: remove intermediate 'ioctl' step
    V4L/DVB (11309): cx25840: cleanup: remove intermediate 'ioctl' step
    V4L/DVB (11308): msp3400: use the V4L2 header since no V4L1 code is there
    V4L/DVB (11305): cx88: prevent probing rtc and ir devices
    V4L/DVB (11304): v4l2: remove v4l2_subdev_command calls where they are no longer needed.
    V4L/DVB (11303): tda7432: remove legacy code for old-style i2c API
    V4L/DVB (11302): tda9875: remove legacy code for old-style i2c API
    V4L/DVB (11301): wm8775: remove legacy code for old-style i2c API
    V4L/DVB (11300): cx88: convert to v4l2_subdev.
    V4L/DVB (11298): cx25840: remove legacy code for old-style i2c API
    V4L/DVB (11297): cx23885: convert to v4l2_subdev.
    V4L/DVB (11296): cx23885: bugfix error message if firmware is not found
    V4L/DVB (11295): cx23885: convert to v4l2_device.
    V4L/DVB (11293): uvcvideo: Add zero fill for VIDIOC_ENUM_FMT
    ...

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (70 commits)
    ide: keep track of number of bytes instead of sectors in struct ide_cmd
    ide: remove ide_execute_pkt_cmd() (v2)
    ide: add ->dma_timer_expiry method and remove ->dma_exec_cmd one (v2)
    ide: set hwif->expiry prior to calling [__]ide_set_handler()
    ide: use do_rw_taskfile() for ATA_CMD_PACKET commands
    ide: pass command to ide_map_sg()
    ide: remove ide_end_request()
    ide: use ide_end_rq() in ide_complete_rq()
    ide: pass number of bytes to complete to ide_complete_rq()
    ide: remove BUG() from ide_complete_rq()
    ide: move rq->errors quirk out from ide_end_request()
    ide: pass error value to ide_complete_rq()
    ide: sanitize ide_end_rq()
    ide: add ide_end_rq() (v2)
    ide: make ide_special_rq() BUG() on unknown requests
    ide: sanitize ide_finish_cmd()
    ide: use ide_complete_cmd() for REQ_UNPARK_HEADS
    ide: use ide_complete_cmd() for head unload commands
    ide: task_error() -> task_error_cmd()
    ide: unify exit paths in task_pio_intr()
    ...

    Linus Torvalds
     

30 Mar, 2009

2 commits