aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2010-03-31drm/radeon/kms: disable MSI on IGP chipsAlex Deucher1-5/+3
Doesn't seem to work reliably and the pci quirks don't always work. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: display watermark updates (v2)Alex Deucher9-21/+155
- Add module option to force the display priority 0 = auto, 1 = normal, 2 = high - Default to high on r3xx/r4xx/rv515 chips Fixes flickering problems during heavy acceleration due to underflow to the display controllers - Fill in minimal support for RS600 v2 - update display priority when bandwidth is updated so the user can change the parameter at runtime and it will take affect on the next modeset. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms/dp: disable training pattern on the sink at the end of link ↵Alex Deucher1-0/+3
training Seems to have gotten lost in the evergreen merge. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: minor fixes for eDP with LCD* device tags (v2)Alex Deucher2-5/+10
Some systems have LCD* rather than DFP* device tags in the bios for eDP connectors; notably the new apple iMac. This fixes things up so eDP connectors with either tag will work. v2: fix typo Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms/dp: remove extraneous training complete callAlex Deucher1-3/+0
Looks like a copy/paste typo from when evergreen support was added. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms/atom: minor fixes to transmitter setupAlex Deucher1-33/+21
- 8 lane links are not valid for DP - remove unused num var Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: Only restrict BO to visible VRAM size when pinning to VRAM.Michel Dänzer1-2/+4
This prevented radeon.test=1 from testing transfers from/to GTT beyond the visible VRAM size. Signed-off-by: Michel Dänzer <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm: fix build error when SYSRQ is disabledRandy Dunlap1-0/+2
Fix build error when CONFIG_MAGIC_SYSRQ is not enabled: drivers/gpu/drm/drm_fb_helper.c:915: error: 'sysrq_drm_fb_helper_restore_op' undeclared (first use in this function) drivers/gpu/drm/drm_fb_helper.c:929: error: 'sysrq_drm_fb_helper_restore_op' undeclared (first use in this function) Signed-off-by: Randy Dunlap <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: fix macbookpro connector quirkAlex Deucher1-0/+2
Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/r6xx/r7xx: further safe reg clean upAlex Deucher1-19/+0
- remove a few more drm only regs - remove sampler, alu, bool, loop constant regs. They are set via separate packet3's already Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon: bump the UMS driver version for r6xx/r7xx const buffer supportAlex Deucher1-1/+2
Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: bump the version for r6xx/r7xx const buffer supportAlex Deucher1-1/+2
Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/r6xx/r7xx: CS parser fixesAlex Deucher3-60/+112
- Drop some more safe regs taht userspace shouldn't hit - Constant base regs need relocs. This allows us to use constant buffers rather than the constant register file. Also we don't want userspace to be able to set arbitrary mc base values for the const caches. - Track SQ_CONFIG so we know whether userspace is using the cfile or constant buffers. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: fix some typos in r6xx/r7xx hpd setupAlex Deucher1-7/+7
Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/r600: remove some regs are not safe regs for command buffersAlex Deucher1-3/+0
Only the drm should be touching them. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm: Return ENODEV if the inode mapping changesChris Wilson1-7/+9
Replace a BUG_ON with an error code in the event that the inode mapping changes between calls to drm_open. This may happen for instance if udev is loaded subsequent to the original opening of the device: [ 644.291870] kernel BUG at drivers/gpu/drm/drm_fops.c:146! [ 644.291876] invalid opcode: 0000 [#1] SMP [ 644.291882] last sysfs file: /sys/kernel/uevent_seqnum [ 644.291888] [ 644.291895] Pid: 7276, comm: lt-cairo-test-s Not tainted 2.6.34-rc1 #2 N150/N210/N220 /N150/N210/N220 [ 644.291903] EIP: 0060:[<c11c70e3>] EFLAGS: 00210283 CPU: 0 [ 644.291912] EIP is at drm_open+0x4b1/0x4e2 [ 644.291918] EAX: f72d8d18 EBX: f790a400 ECX: f73176b8 EDX: 00000000 [ 644.291923] ESI: f790a414 EDI: f790a414 EBP: f647ae20 ESP: f647adfc [ 644.291929] DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 [ 644.291937] Process lt-cairo-test-s (pid: 7276, ti=f647a000 task=f73f5c80 task.ti=f647a000) [ 644.291941] Stack: [ 644.291945] 00000000 f7bb7400 00000080 f6451100 f73176b8 f6479214 f6451100 f73176b8 [ 644.291957] <0> c1297ce0 f647ae34 c11c6c04 f73176b8 f7949800 00000000 f647ae54 c1080ac5 [ 644.291969] <0> f7949800 f6451100 00000000 f6451100 f73176b8 f6452780 f647ae70 c107d1e6 [ 644.291982] Call Trace: [ 644.291991] [<c11c6c04>] ? drm_stub_open+0x8a/0xb8 [ 644.292000] [<c1080ac5>] ? chrdev_open+0xef/0x106 [ 644.292008] [<c107d1e6>] ? __dentry_open+0xd4/0x1a6 [ 644.292015] [<c107d35b>] ? nameidata_to_filp+0x31/0x45 [ 644.292022] [<c10809d6>] ? chrdev_open+0x0/0x106 [ 644.292030] [<c10864e2>] ? do_last+0x346/0x423 [ 644.292037] [<c108789f>] ? do_filp_open+0x190/0x415 [ 644.292046] [<c1071eb5>] ? handle_mm_fault+0x214/0x710 [ 644.292053] [<c107d008>] ? do_sys_open+0x4d/0xe9 [ 644.292061] [<c1016462>] ? do_page_fault+0x211/0x23f [ 644.292068] [<c107d0f0>] ? sys_open+0x23/0x2b [ 644.292075] [<c1002650>] ? sysenter_do_call+0x12/0x26 [ 644.292079] Code: 89 f0 89 55 dc e8 8d 96 0a 00 8b 45 e0 8b 55 dc 83 78 04 01 75 28 8b 83 18 02 00 00 85 c0 74 0f 8b 4d ec 3b 81 ac 00 00 00 74 13 <0f> 0b eb fe 8b 4d ec 8b 81 ac 00 00 00 89 83 18 02 00 00 89 f0 [ 644.292143] EIP: [<c11c70e3>] drm_open+0x4b1/0x4e2 SS:ESP 0068:f647adfc [ 644.292175] ---[ end trace 2ddd476af89a60fa ]--- Signed-off-by: Chris Wilson <[email protected]> Cc: [email protected] Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: Fix NULL pointer dereference if memory allocation failed.Pauli Nieminen1-3/+5
When there is allocation failure in radeon_cs_parser_relocs parser->nrelocs is not cleaned. This causes NULL pointer defeference in radeon_cs_parser_fini when clean up code is trying to loop over the relocation array and free the objects. Fix adds a check for a possible NULL pointer in clean up code. Signed-off-by: Pauli Nieminen <[email protected]> Cc: [email protected] Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: avoid possible oops (call gart_fini before gart_disable)Jerome Glisse6-6/+6
radeon_gart_fini might call GART unbind callback function which might try to access GART table but if gart_disable is call first the GART table will be unmapped so any access to it will oops. Signed-off-by: Jerome Glisse <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: don't print error on -ERESTARTSYS.Dave Airlie1-1/+2
We can get this if the user moves the mouse when we are waiting to move some stuff around in the validate. Don't fail. Cc: [email protected] Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms/atom: make sure tables are valid (v2)Alex Deucher7-242/+272
Check that atom cmd and data tables are valid before using them. (v2) - fix some whitespace errors noticed by Rafał Miłecki - check a few more cases Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: remove lvds quirksAlex Deucher2-33/+0
- no longer needed with the latest new pll algo fixes. - also don't use lcd pll limits. They don't seem to work well for all systems. If we have a case where they are useful, we can set the flag for that case. fixes fdo bug 27083 Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: fix display bandwidth setup on rs4xxAlex Deucher1-0/+1
I missed rs4xx in 7f1e613daf0fdd0884316ab25a749db3c671329e Fixes fdo bug 27219. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: never treat rs4xx as AGPAlex Deucher1-0/+8
RS4xx+ IGP chips use an internal gart, however, some of them have the agp cap bits set in their pci configs. Make sure to clear the AGP flag as AGP will not work with them. Should fix fdo bug 27225 Signed-off-by: Alex Deucher <[email protected]> cc: [email protected] Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: display watermark fixesAlex Deucher12-51/+87
- rs780/880 were using the wrong bandwidth functions - convert r1xx-r4xx to use the same pm sclk/mclk structs as r5xx+ - move bandwidth setup to a common function Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31module: add stub for is_module_percpu_addressRandy Dunlap1-0/+5
Fix build for CONFIG_MODULES not enabled by providing a stub for is_module_percpu_address(). kernel/lockdep.c:605: error: implicit declaration of function 'is_module_percpu_address' Signed-off-by: Randy Dunlap <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
2010-03-30Btrfs: fix chunk allocate size calculationJosef Bacik1-1/+3
If the amount of free space left in a device is less than what we think should be the minimum size, just ignore the minimum size and use the amount we have. I ran into this running tests on a 600mb volume, the chunk allocator wouldn't let me allocate the last 52mb of the disk for data because we want to have at least 64mb chunks for data. This patch fixes that problem. Thanks, Signed-off-by: Josef Bacik <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: kill max_extent mount optionJosef Bacik6-81/+13
As Yan pointed out, theres not much reason for all this complicated math to account for file extents being split up into max_extent chunks, since they are likely to all end up in the same leaf anyway. Since there isn't much reason to use max_extent, just remove the option altogether so we have one less thing we need to test. Signed-off-by: Josef Bacik <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: fail to mount if we have problems reading the block groupsJosef Bacik2-4/+12
We don't actually check the return value of btrfs_read_block_groups, so we can possibly succeed to mount, but then fail to say read the superblock xattr for selinux which will cause the vfs code to deactivate the super. This is a problem because in find_free_extent we just assume that we will find the right space_info for the allocation we want. But if we failed to read the block groups, we won't have setup any space_info's, and we'll hit a NULL pointer deref in find_free_extent. This patch fixes that problem by checking the return value of btrfs_read_block_groups, and failing out properly. I've also added a check in find_free_extent so if for some reason we don't find an appropriate space_info, we just return -ENOSPC. Signed-off-by: Josef Bacik <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: check btrfs_get_extent return for IS_ERR()Dan Carpenter1-1/+1
btrfs_get_extent() never returns NULL, only a valid pointer or ERR_PTR() Signed-off-by: Dan Carpenter <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: handle kmalloc() failure in inode lookup ioctlDan Carpenter1-0/+3
Return -ENOMEM if kmalloc() fails. Signed-off-by: Dan Carpenter <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: dereferencing freed memoryDan Carpenter1-0/+1
The original code dereferenced range on the next line. Signed-off-by: Dan Carpenter <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: Simplify num_stripes's calculation logical for __btrfs_alloc_chunk()Zhao Lei1-2/+2
We can use this simple method to make source more readable. Signed-off-by: Zhao Lei <[email protected]> Signed-off-by: Miao Xie <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: Add error handle for btrfs_search_slot() in btrfs_read_chunk_tree()Zhao Lei1-0/+2
We need to check return value of btrfs_search_slot() in btrfs_read_chunk_tree() and do corresponding error handing. Signed-off-by: Zhao Lei <[email protected]> Signed-off-by: Miao Xie <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: Remove unnecessary finish_wait() in wait_current_trans()Zhao Lei1-10/+5
We only need to call finish_wait() after wait loop. By the way, this patch makes code of waiting loop similar to example in wait.h(no functional change) Signed-off-by: Zhao Lei <[email protected]> Signed-off-by: Miao Xie <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: add NULL check for do_walk_down()Miao Xie1-1/+4
btrfs_find_create_tree_block() may return NULL, so we must check the returned value, or we will access a NULL pointer. Signed-off-by: Miao Xie <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-30Btrfs: remove duplicate include in ioctl.cAndrea Gelmini1-1/+0
fs/btrfs/ioctl.c: ctree.h is included more than once. Signed-off-by: Andrea Gelmini <[email protected]> Signed-off-by: Chris Mason <[email protected]>
2010-03-31drm/radeon/kms: init rdev->num_crtc at asic initAlex Deucher3-17/+16
Replace hardcoded numbers with rdev->num_crtc. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms/pm: fix typo in power table parsingAlex Deucher1-1/+1
Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms: gfx init fixes for r6xx/r7xxAlex Deucher3-0/+7
This fixes some issues with the last gfx init patch. Signed-off-by: Alex Deucher <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2010-03-31drm/radeon/kms/pm: fix segfault in clock codeAlex Deucher1-1/+2
Make sure we have a crtc assigned to the encoder before dereferencing it. Signed-off-by: Alex Deucher <[email protected]>
2010-03-31drm/radeon/kms: expose thermal/fan i2c busesAlex Deucher13-0/+69
Look up i2c bus in the power table and expose it. You'll need to load a hwmon driver for any chips on the bus, this patch just exposes the bus. Signed-off-by: Alex Deucher <[email protected]>
2010-03-30net: Fix oops from tcp_collapse() when using splice()Steven J. Magnani1-0/+1
tcp_read_sock() can have a eat skbs without immediately advancing copied_seq. This can cause a panic in tcp_collapse() if it is called as a result of the recv_actor dropping the socket lock. A userspace program that splices data from a socket to either another socket or to a file can trigger this bug. Signed-off-by: Steven J. Magnani <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2010-03-30reiserfs: Fix locking BUG during mount failureJeff Mahoney1-6/+4
Commit 8ebc423238341b52912c7295b045a32477b33f09 (reiserfs: kill-the-BKL) introduced a bug in the mount failure case. The error label releases the lock before calling journal_release_error, but it requires that the lock be held. do_journal_release unlocks and retakes it. When it releases it without it held, we trigger a BUG(). The error_alloc label skips the unlock since the lock isn't held yet but none of the other conditions that are clean up exist yet either. This patch returns immediately after the kzalloc failure and moves the reiserfs_write_unlock after the journal_release_error call. This was reported in https://bugzilla.novell.com/show_bug.cgi?id=591807 Reported-by: Thomas Siedentopf <[email protected]> Signed-off-by: Jeff Mahoney <[email protected]> Cc: Thomas Siedentopf <[email protected]> Cc: Andrew Morton <[email protected]> Cc: 2.6.33.x <[email protected]> Signed-off-by: Frederic Weisbecker <[email protected]>
2010-03-30net/wireless/libertas: do not call wiphy_unregister() w/o wiphy_register()Daniel Mack2-2/+7
The libertas driver calls wiphy_unregister() without a prior wiphy_register() when a devices fails initialization. Fix this by introducing a private flag. [ 9.310000] Unable to handle kernel NULL pointer dereference at virtual address 00000000 [...] [ 9.330000] [<c0311310>] (wiphy_unregister+0xfc/0x19c) from [<bf00c9ec>] (lbs_cfg_free+0x70/0x9c [libertas]) [ 9.330000] [<bf00c9ec>] (lbs_cfg_free+0x70/0x9c [libertas]) from [<bf014fdc>] (lbs_remove_card+0x180/0x210 [libertas]) [ 9.330000] [<bf014fdc>] (lbs_remove_card+0x180/0x210 [libertas]) from [<bf035394>] (if_sdio_probe+0xdc4/0xef4 [libertas_sdio]) [ 9.330000] [<bf035394>] (if_sdio_probe+0xdc4/0xef4 [libertas_sdio]) from [<c0230d14>] (sdio_bus_probe+0xd4/0xf0) [ 9.330000] [<c0230d14>] (sdio_bus_probe+0xd4/0xf0) from [<c01a6034>] (driver_probe_device+0xa4/0x174) [ 9.330000] [<c01a6034>] (driver_probe_device+0xa4/0x174) from [<c01a6164>] (__driver_attach+0x60/0x84) [ 9.330000] [<c01a6164>] (__driver_attach+0x60/0x84) from [<c01a5854>] (bus_for_each_dev+0x4c/0x8c) [ 9.330000] [<c01a5854>] (bus_for_each_dev+0x4c/0x8c) from [<c01a50e4>] (bus_add_driver+0xa0/0x228) [ 9.330000] [<c01a50e4>] (bus_add_driver+0xa0/0x228) from [<c01a6470>] (driver_register+0xc0/0x150) [ 9.330000] [<c01a6470>] (driver_register+0xc0/0x150) from [<bf03a06c>] (if_sdio_init_module+0x6c/0x108 [libertas_sdio]) [ 9.330000] [<bf03a06c>] (if_sdio_init_module+0x6c/0x108 [libertas_sdio]) from [<c00263ac>] (do_one_initcall+0x5c/0x1bc) [ 9.330000] [<c00263ac>] (do_one_initcall+0x5c/0x1bc) from [<c0069f80>] (sys_init_module+0xc0/0x1f0) [ 9.330000] [<c0069f80>] (sys_init_module+0xc0/0x1f0) from [<c0026f00>] (ret_fast_syscall+0x0/0x30) Signed-off-by: Daniel Mack <[email protected]> Cc: Dan Williams <[email protected]> Cc: John W. Linville <[email protected]> Cc: Holger Schurig <[email protected]> Cc: Bing Zhao <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Signed-off-by: John W. Linville <[email protected]>
2010-03-30iwlwifi: range checking issueDan Carpenter1-1/+1
IWL_RATE_COUNT is 13 and IWL_RATE_COUNT_LEGACY is 12. IWL_RATE_COUNT_LEGACY is the right one here because iwl3945_rates doesn't support 60M and also that's how "rates" is defined in iwlcore_init_geos() from drivers/net/wireless/iwlwifi/iwl-core.c. rates = kzalloc((sizeof(struct ieee80211_rate) * IWL_RATE_COUNT_LEGACY), GFP_KERNEL); Signed-off-by: Dan Carpenter <[email protected]> Cc: [email protected] Acked-by: Zhu Yi <[email protected]> Signed-off-by: John W. Linville <[email protected]>
2010-03-30setup correct int pipe type in ar9170_usb_exec_cmdValentin Longchamp1-1/+1
An int urb is constructed but we fill it in with a bulk pipe type. Commit f661c6f8c67bd55e93348f160d590ff9edf08904 implemented a pipe type check when CONFIG_USB_DEBUG is enabled. The check failed for all the ar9170 usb transfers and the driver could not configure the wifi dongle. This went unnoticed until now because most people don't have CONFIG_USB_DEBUG enabled. Signed-off-by: Valentin Longchamp <[email protected]> Cc: Stable <[email protected]> Acked-by: Christian Lamparter <[email protected]> Signed-off-by: John W. Linville <[email protected]>
2010-03-30rt2x00: Disable powersaving by default in rt2500usb.Gertjan van Wingerde1-0/+5
Recent bug reports have shown that rt2500usb also suffers from the powersave problems that the PCI rt2x00 drivers suffer from. So disable powersaving by default for rt2500usb as well. Signed-off-by: Gertjan van Wingerde <[email protected]> Acked-by: Ivo van Doorn <[email protected]> Signed-off-by: John W. Linville <[email protected]>
2010-03-30rt2x00: Fix typo in RF register programming of rt2800.Gertjan van Wingerde1-2/+2
Signed-off-by: Gertjan van Wingerde <[email protected]> Acked-by: Ivo van Doorn <[email protected]> Signed-off-by: John W. Linville <[email protected]>
2010-03-30iwlwifi: clear unattended interrupts in taskletShanyu Zhao1-1/+9
Previously in interrupt handling tasklet, iwlwifi driver only clear/ack those interrupts that are enabled by the driver through inta_mask. If the hardware generates unattended interrupts, driver will not ack them, defeating the interrupt coalescing feature. This results in high number of interrupts per second and high CPU utilization. This patch addresses this issue by acking those unattended interrupts in the tasklet. Local test showed an order of magnitude improvement in terms of the number of interrupts without sacrificing networking throughput. This is a workaround for hardware issue. Signed-off-by: Shanyu Zhao <[email protected]> Signed-off-by: Zhu Yi <[email protected]> Signed-off-by: Reinette Chatre <[email protected]>
2010-03-30iwlwifi: counting number of tfds can be free for 4965Wey-Yi Guy1-4/+2
Forget one hunk in 4965 during "iwlwifi: error checking for number of tfds in queue" patch. Reported-by: Shanyu Zhao <[email protected]> Signed-off-by: Wey-Yi Guy <[email protected]> Signed-off-by: Reinette Chatre <[email protected]> CC: [email protected]